Create TOS Link
curl --request POST \
--url https://api.spherepay.co/v2/customer/{id}/tos-link \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.spherepay.co/v2/customer/{id}/tos-link"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.spherepay.co/v2/customer/{id}/tos-link', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.spherepay.co/v2/customer/{id}/tos-link",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.spherepay.co/v2/customer/{id}/tos-link"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.spherepay.co/v2/customer/{id}/tos-link")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.spherepay.co/v2/customer/{id}/tos-link")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"expiresAt": "2026-03-09T20:46:31.305Z",
"link": "https://spherepay.co/tos?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjdXN0b21lcl9lMDE2MzNjNWY1OTY0MThiOGU5ZTQzNDEyMzQ2OTk0YyIsImFwcGxpY2F0aW9uSWQiOiJhcHBsaWNhdGlvbl84NWM5ZmE2ZTFjMjk0YzJmOTA2NDcwNWFlYTE3Y2ZkMyIsImN1c3RvbWVyVHlwZSI6ImluZGl2aWR1YWwiLCJtc2FTdGF0dXMiOiJpbmNvbXBsZXRlIiwibXNhUmVxdWlyZWQiOmZhbHNlLCJpYXQiOjE3NjQwMzQwMDUsImV4cCI6MTc2NjQ1MzIwNX0.6z3976YqDxDr5LkMJxoZhw526cu1PGE3nFZtAE8vIfY"
}{
"code": "address/invalid",
"correlationId": "28c61e885c6e5eaa78c1a2183a9b883c",
"detail": "Invalid request parameters",
"status": 400
}{
"code": "resource/not-found",
"correlationId": "28c61e885c6e5eaa78c1a2183a9b883c",
"detail": "Resource not found",
"status": 404
}{
"code": "validation/failed",
"correlationId": "28c61e885c6e5eaa78c1a2183a9b883c",
"detail": "Validation failed",
"errors": [
{
"detail": "Invalid email format",
"pointer": "/email"
},
{
"detail": "Name is required",
"pointer": "/name"
}
],
"status": 422
}Documents & Verification
Record Customer Terms of Service Acceptance
Create a TOS link for a customer.
Create TOS Link
curl --request POST \
--url https://api.spherepay.co/v2/customer/{id}/tos-link \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.spherepay.co/v2/customer/{id}/tos-link"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.spherepay.co/v2/customer/{id}/tos-link', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.spherepay.co/v2/customer/{id}/tos-link",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.spherepay.co/v2/customer/{id}/tos-link"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.spherepay.co/v2/customer/{id}/tos-link")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.spherepay.co/v2/customer/{id}/tos-link")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"expiresAt": "2026-03-09T20:46:31.305Z",
"link": "https://spherepay.co/tos?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjdXN0b21lcl9lMDE2MzNjNWY1OTY0MThiOGU5ZTQzNDEyMzQ2OTk0YyIsImFwcGxpY2F0aW9uSWQiOiJhcHBsaWNhdGlvbl84NWM5ZmE2ZTFjMjk0YzJmOTA2NDcwNWFlYTE3Y2ZkMyIsImN1c3RvbWVyVHlwZSI6ImluZGl2aWR1YWwiLCJtc2FTdGF0dXMiOiJpbmNvbXBsZXRlIiwibXNhUmVxdWlyZWQiOmZhbHNlLCJpYXQiOjE3NjQwMzQwMDUsImV4cCI6MTc2NjQ1MzIwNX0.6z3976YqDxDr5LkMJxoZhw526cu1PGE3nFZtAE8vIfY"
}{
"code": "address/invalid",
"correlationId": "28c61e885c6e5eaa78c1a2183a9b883c",
"detail": "Invalid request parameters",
"status": 400
}{
"code": "resource/not-found",
"correlationId": "28c61e885c6e5eaa78c1a2183a9b883c",
"detail": "Resource not found",
"status": 404
}{
"code": "validation/failed",
"correlationId": "28c61e885c6e5eaa78c1a2183a9b883c",
"detail": "Validation failed",
"errors": [
{
"detail": "Invalid email format",
"pointer": "/email"
},
{
"detail": "Name is required",
"pointer": "/name"
}
],
"status": 422
}Generate a hosted Terms of Service acceptance link for a customer. This endpoint is required only in the Sphere-Managed onboarding model — in the Platform-Managed model, TOS acceptance is handled upstream by your own platform before the customer is passed to SpherePay. Redirect the customer to the returned
link so they can review and accept SpherePay’s Terms of Service. The link expires at the time indicated by expiresAt.
TOS acceptance is a required step in the Sphere-Managed KYC flow. The customer cannot be approved for transfers until they have accepted the Terms of Service. If you are using the Platform-Managed model, skip this endpoint.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Customer ID
Example:
"customer_f31121c389624d3697cbf3ea8830b7a4"
Response
ISO 8601 formatted date and time of the TOS link expiration
Example:
"2026-03-09T20:46:31.305Z"
Terms of Service link URL
Example:
"https://spherepay.co/tos?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJjdXN0b21lcl9lMDE2MzNjNWY1OTY0MThiOGU5ZTQzNDEyMzQ2OTk0YyIsImFwcGxpY2F0aW9uSWQiOiJhcHBsaWNhdGlvbl84NWM5ZmE2ZTFjMjk0YzJmOTA2NDcwNWFlYTE3Y2ZkMyIsImN1c3RvbWVyVHlwZSI6ImluZGl2aWR1YWwiLCJtc2FTdGF0dXMiOiJpbmNvbXBsZXRlIiwibXNhUmVxdWlyZWQiOmZhbHNlLCJpYXQiOjE3NjQwMzQwMDUsImV4cCI6MTc2NjQ1MzIwNX0.6z3976YqDxDr5LkMJxoZhw526cu1PGE3nFZtAE8vIfY"
Last modified on June 18, 2026