Signup
Base URL
https://api.example.com
GET
/api/v1/signup/resolve
Resolve a signup-link token into claim context (unauthenticated)
Verify a signup rid token and return the claim context.
200— valid token:{name, country_code, brand_id, identifier_masked, maps_byok_key_or_null}.401— token expired, signature invalid, or malformed (detail masked).410— token minted before B.1 (nobrand_id); ask for a fresh link.
Parameters
token
string
query
required
Responses
200Successful Response422Validation Error
curl -X GET 'https://api.example.com/api/v1/signup/resolve' \
-H 'Authorization: Bearer '
import httpx
resp = httpx.get(
"https://api.example.com/api/v1/signup/resolve",
headers={"Authorization": "Bearer "},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.example.com/api/v1/signup/resolve", {
method: "GET",
headers: { "Authorization": "Bearer " }
});
const data = await resp.json();
console.log(data);
package main
import (
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.example.com/api/v1/signup/resolve", nil)
req.Header.Set("Authorization", "Bearer ")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}
GET
/api/v1/signup/check-name
Check whether a VayaPin name is available (unauthenticated, token-authz)
Verify a signup rid token and report whether name is available.
200—{is_available, suggestions}: free name → empty suggestions; taken name → up to 10 alternatives the cs-api proposed.401— token expired, signature invalid, or malformed (detail masked).410— token minted before B.1 (nocountry_code); ask for a fresh link.429— per-token rate limit exceeded (5/s or 60/min).502— cs-api returned an uninterpretable availability body (our bug).500— cs-api credential misconfigured (our bug).503— cs-api temporarily unavailable.
Parameters
token
string
query
required
name
string
query
required
Responses
200Successful Response422Validation Error
curl -X GET 'https://api.example.com/api/v1/signup/check-name' \
-H 'Authorization: Bearer '
import httpx
resp = httpx.get(
"https://api.example.com/api/v1/signup/check-name",
headers={"Authorization": "Bearer "},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.example.com/api/v1/signup/check-name", {
method: "GET",
headers: { "Authorization": "Bearer " }
});
const data = await resp.json();
console.log(data);
package main
import (
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.example.com/api/v1/signup/check-name", nil)
req.Header.Set("Authorization", "Bearer ")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}
POST
/api/v1/signup/complete
Finalise a consumer claim — write the pin and notify the agent
Write the claimed pin to cs-api and fire pin_created.
Anonymous by design (2026-06-22 rescope): the consumer reaches this with no better-auth session, so session is None on the V1 path. The signup token — not a login — is the claim authorization.
202— accepted:{vayapin_id, state}(done|creating).401— token expired / invalid (the signup token, not a session).404— no reservation for this token (confirm-pin never persisted it).409— body name/country does not match the reserved claim.502— cs-api reported a terminal failure writing the pin.503— write path disabled, or cs-api transiently unavailable.
Responses
202Successful Response422Validation Error
curl -X POST 'https://api.example.com/api/v1/signup/complete' \
-H 'Authorization: Bearer ' \
-H 'Content-Type: application/json' \
-d '{
"token": "string",
"name": "string",
"country_code": "string",
"lat": 0.0,
"lng": 0.0,
"structured_address": {
"address_road": "string",
"address_house": "string",
"address_house_number": "string",
"address_addition": "string",
"address_settlement": "string",
"address_settlement_part": "string",
"address_postcode": "string",
"address_region": "string",
"address_region_part": "string",
"address_contact_name": "string"
},
"account_oauth_uid": "string",
"verified_identifier": "string"
}'
import httpx
resp = httpx.post(
"https://api.example.com/api/v1/signup/complete",
headers={"Authorization": "Bearer ", "Content-Type": "application/json"},
json={"token": "string", "name": "string", "country_code": "string", "lat": 0.0, "lng": 0.0, "structured_address": {"address_road": "string", "address_house": "string", "address_house_number": "string", "address_addition": "string", "address_settlement": "string", "address_settlement_part": "string", "address_postcode": "string", "address_region": "string", "address_region_part": "string", "address_contact_name": "string"}, "account_oauth_uid": "string", "verified_identifier": "string"},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.example.com/api/v1/signup/complete", {
method: "POST",
headers: { "Authorization": "Bearer ", "Content-Type": "application/json" },
body: JSON.stringify({"token": "string", "name": "string", "country_code": "string", "lat": 0.0, "lng": 0.0, "structured_address": {"address_road": "string", "address_house": "string", "address_house_number": "string", "address_addition": "string", "address_settlement": "string", "address_settlement_part": "string", "address_postcode": "string", "address_region": "string", "address_region_part": "string", "address_contact_name": "string"}, "account_oauth_uid": "string", "verified_identifier": "string"})
});
const data = await resp.json();
console.log(data);
package main
import (
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{"token": "string", "name": "string", "country_code": "string", "lat": 0.0, "lng": 0.0, "structured_address": {"address_road": "string", "address_house": "string", "address_house_number": "string", "address_addition": "string", "address_settlement": "string", "address_settlement_part": "string", "address_postcode": "string", "address_region": "string", "address_region_part": "string", "address_contact_name": "string"}, "account_oauth_uid": "string", "verified_identifier": "string"}`)
req, _ := http.NewRequest("POST", "https://api.example.com/api/v1/signup/complete", body)
req.Header.Set("Authorization", "Bearer ")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}
Request body
{"lat":0,"lng":0,"name":"string","token":"string","country_code":"string","account_oauth_uid":"string","structured_address":{"address_road":"string","address_house":"string","address_region":"string","address_addition":"string","address_postcode":"string","address_settlement":"string","address_region_part":"string","address_contact_name":"string","address_house_number":"string","address_settlement_part":"string"},"verified_identifier":"string"}
Ask AI