Services
The two kinds of service, what each one opens, and how to see which ones your key has.
Every service belongs to one of two categories. The category says who moves the money, how a payment is matched and which routes the service opens.
| On/Off Ramp (third party) | P2P (self-served) | |
|---|---|---|
| Who runs it | A regulated payments provider, automatically | TuCOP, with its own bank account and multisig |
| Asset | USDC on Celo | COPm on Celo |
| The user | A party with identity verification by the payments provider (party session) | An identity document registered with TuCOP. Off-ramp: wallet signature. On-ramp: the integrator opens the order |
| How a payment is matched | Automatically, to a key or address of the party's own | An operator confirms it |
| Follow-up | Webhooks and GET /events | A p2p_order.updated webhook to TuCOP's own apps, or polling the order |
| Services | pay, withdraw, deposit | p2p_onramp, p2p_offramp |
| Who can have it | Integrators: pay and deposit are requested in the console, withdraw is turned on by TuCOP | TuCOP's own apps only, for now |
A service of one category never opens the routes of the other. In particular deposit (On/Off
Ramp) does not open P2P on-ramp orders: those need p2p_onramp.
What each service opens
| Service | Category | Routes |
|---|---|---|
pay | On/Off Ramp | Destinations for third-party keys, /quotes, Payments, /limits |
withdraw | On/Off Ramp | Destinations for the party's own key, Withdrawals, withdraw quotes |
deposit | On/Off Ramp | POST /deposits (Deposits) |
p2p_onramp | P2P | /p2p/onramp/* (TuCOP's own apps only) |
p2p_offramp | P2P | /p2p/offramp/* (TuCOP's own apps only) |
| any On/Off Ramp service | On/Off Ramp | /sessions/* and /parties/* (Parties and sessions) |
| either P2P service | P2P | /p2p/orders/* and /p2p/users/* (TuCOP's own apps only) |
GET /rates answers with any of pay, withdraw or deposit; an estimate with an amount
needs pay.
These work with any key, because they move no money: GET /consumer, GET /events,
GET /document-types and your webhook endpoints.
Which services your key has
GET /consumer lists them in products, and the same list grouped by category in services:
{
"consumer": {
"id": "con_01j9z3k8q2m4n6p8r0s2t4v6w8",
"name": "acme-wallet",
"products": ["pay", "deposit"],
"services": {
"on_off_ramp": ["pay", "deposit"],
"p2p": []
},
"scopes": ["wallet.read", "wallet.write"]
},
"api_key": null
}
A route your key's services do not open answers 403 product_not_enabled. required lists the
services that would open it (any one is enough) and category says which kind they are:
{
"type": "https://errors.tucopramp.xyz/product-not-enabled",
"title": "Product not enabled",
"status": 403,
"code": "product_not_enabled",
"detail": "The p2p_onramp product is not enabled for this consumer.",
"request_id": "3b0f6c2e-1d4a-4f7e-9c8b-2a1e0d9f8c7b",
"category": "p2p",
"required": ["p2p_onramp"]
}
Do not retry it and do not work around it: ask TuCOP for the service, or use the routes of the service you have.
Changes
- 2026-10-25. The P2P pages (orders, wallet signatures) and the
p2p_order.updatedwebhook left these docs: P2P is available only to TuCOP's own apps for now, and will come back here when integrators can request it. Nothing changed for the On/Off Ramp services. - 2026-10-24.
/wallet/onramp-ordersis gone (ADR-011). P2P on-ramp isPOST /p2p/onramp/orderswith the integrator key, no wallet signature. - 2026-10-23.
/p2p/orders/*and/p2p/users/*need a P2P service./sessions/*and/parties/*need an On/Off Ramp service.403 product_not_enabledcarriescategoryandrequired, andGET /consumercarriesservices.