event_example
{
"id": "event_example",
"type": "{EVENT_TYPE}",
"created_at": "2030-01-01T10:24:31Z",
"data": {
"resource_type": "{RESOURCE_KIND}",
"resource_id": "{RESOURCE_ID}",
"state": "completed"
}
}
Developers / Integration model
Follow the target integration from a workspace-scoped server credential to authoritative transfer state and lifecycle Events delivered through signed webhooks.
Illustrative integration model. Exact routes, credentials, request and response schemas, Event types, delivery headers, and signing rules will be synchronized with the standalone API contract before launch.
POST {USER_COLLECTION_ROUTE}
{WORKSPACE_CREDENTIAL_HEADER}: {WORKSPACE_KEY}
{IDEMPOTENCY_HEADER}: {ONE_INTENT_KEY}
{
"external_id": "customer_1842"
}
user + default account
{
"user": {
"id": "user_example",
"external_id": "customer_1842"
},
"default_account": {
"id": "account_example",
"status": "provisioning"
}
}
01 / Target integration
Your users stay in your product. The processing model creates the user and default account together, provisions that account asynchronously, then creates the asset wallet and permanent destination only after the account is ready.
Keep the revocable credential on your server. It resolves every request to exactly one workspace.
credential → workspace
Supply your immutable identifier; the product creates the user and one default account as one durable outcome.
user + default account
The account is provisioned asynchronously. Reuse the same account through retries until it becomes ready.
provisioning → ready
For a ready account, create one wallet for an economic asset and permanent destinations on supported networks.
wallet → permanent destination
Illustrative integration model. Exact routes, schemas, Event types, delivery headers, and signing rules will be defined in the standalone external contract and synchronized before launch.
02 / Idempotent commands
Attach one stable idempotency identity to each mutating command. If the outcome is unknown, repeat the same intent and payload, then read the original resource instead of creating a second financial effect.
Never expose a workspace credential in a browser or mobile client.
Reuse it only for the same command and payload; a different intent needs a different identity.
intent: withdrawal_example
submit withdrawal intent
client outcome unknown
same intent identity + payload
01
01
03 / Events and Webhook Delivery
A durable Event exists independently of its Webhook Deliveries. Delivery is at least once: each retry carries the same Event identity, so verify origin and freshness, deduplicate the Event, and keep the product read model authoritative.
event_example
{
"id": "event_example",
"type": "{EVENT_TYPE}",
"created_at": "2030-01-01T10:24:31Z",
"data": {
"resource_type": "{RESOURCE_KIND}",
"resource_id": "{RESOURCE_ID}",
"state": "completed"
}
}
verify → dedupe → persist → acknowledge
Managed evaluation