Core API
Identities, Aliases & Endpoints
The registry is the write side of Settla. An identity is permanent; aliases are how humans address it; endpoints are where value can land. Privacy is set per alias and per endpoint, independently.
These three records map directly to the three principles: identity is permanent, endpoints are replaceable, routes are dynamic. You own and mutate identities/aliases/endpoints through the control plane; the resolver only reads them.
Identities
/v1/identitiesAn identity is a permanent record (idn_…) with a type and a status. Its UUID is never freed. Scope: identities:write.
| Field | Type | Description |
|---|---|---|
typerequired | string | user, merchant, business, organization, or machine. |
display_nameoptional | string | Human-readable label shown in dashboards and trust. |
default_privacy_leveloptional | string | Default for new aliases/endpoints. Defaults to unlisted. |
curl https://api.settla.network/v1/identities \
-H "Authorization: Bearer sk_test_..." \
-H "Content-Type: application/json" \
-d '{
"type": "user",
"display_name": "John Rivera",
"default_privacy_level": "unlisted"
}'
# => { "id": "idn_2x9...", "type": "user", "status": "active", ... }Other identity operations:
/v1/identities/:id/v1/identities/v1/identities/:idPATCH updates status, display_name, or default_privacy_level; GET /v1/identities is cursor-paginated.
Aliases
/v1/aliasesAn alias (als_…) is a human-friendly identifier pointing to an identity. On create, Settla normalizes the value (lowercasing, stripping the @, E.164 for phones, confusable-folding), rejects reserved words, and returns 409 conflict_error on a duplicate. Scope: aliases:write.
curl https://api.settla.network/v1/aliases \
-H "Authorization: Bearer sk_test_..." \
-H "Content-Type: application/json" \
-d '{
"identity": "idn_2x9...",
"type": "username",
"value": "@John",
"privacy_level": "unlisted",
"is_primary": true
}'
# value is normalized: "@John" -> username "john"Supported alias types:
Manage aliases:
/v1/identities/:id/aliases/v1/aliases/:id/v1/aliases/:idPATCH changes privacy_level or is_primary; DELETE releases the alias and sets a cooldown before it can be re-registered (squatting defense).
Endpoints
/v1/endpointsAn endpoint (end_…) is a typed destination owned by an identity, carrying capabilities (asset/network/rail) and a privacy level. Sensitive address values are encrypted at rest (AES-256-GCM, bound to the endpoint), so the raw number is never stored in plaintext or logged. Scope: endpoints:write.
| Field | Type | Description |
|---|---|---|
identityrequired | string | The owning identity (idn_…). |
typerequired | string | One of the endpoint types below. |
addressrequired | string | Raw destination (wallet address, account number, …). Encrypted at rest; disclosed per type. |
privacy_leveloptional | string | public · unlisted · private · consent_required. Defaults to the identity default. |
priorityoptional | number | Higher wins ties when routing; default ordering hint. |
capabilitiesoptional | object[] | Each: asset, network, rail, supports_instant, optional min_amount/max_amount (routing context only — never a charge). |
curl https://api.settla.network/v1/endpoints \
-H "Authorization: Bearer sk_test_..." \
-H "Content-Type: application/json" \
-d '{
"identity": "idn_2x9...",
"type": "crypto_wallet",
"address": "0x1234abcd...5678",
"privacy_level": "public",
"priority": 100,
"capabilities": [
{ "asset": "USDC", "network": "polygon", "rail": "onchain", "supports_instant": true }
]
}'Endpoint types and how they are disclosed:
Manage endpoints:
/v1/identities/:id/endpoints/v1/endpoints/:id/v1/endpoints/:idPrivacy levels
Both aliases and endpoints carry a privacy level, set independently. The effective disclosure is the intersection: an unlisted alias can still expose only its public or consented endpoints. An unknown/null level is treated as private (fail-closed).
Tip