curl --request PATCH \
--url https://api-sandbox.endl.io/api/v0/accounts/cus_9FpQ2LmZ8sW4TxKn1BvD/acct_7Kq2XbN4mR8vLp1DcYtZ/activate \
--header 'API-KEY: <api-key>' \
--header 'Api-Version: 2026-09.1'
{
"id": "acct_7Kq2XbN4mR8vLp1DcYtZ",
"status": "DEACTIVATED",
"requested": "ACTIVE",
"acceptedAt": "2026-09-30T06:21:44Z"
}
{
"code": 400,
"message": "User id is required",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRACC_1000",
"message": "User id is required",
"field": "userId"
}
]
}
{
"code": 401,
"message": "Partner API key required",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRCORE_1004",
"message": "Partner API key required",
"field": null
}
]
}
{
"code": 403,
"message": "Insufficient permissions",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRCORE_1005",
"message": "Insufficient permissions",
"field": null
}
]
}
{
"code": 404,
"message": "User with ID 'cus_…' not found",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRREF_1001",
"message": "User with ID 'cus_…' not found",
"field": "userId"
}
]
}
{
"code": 405,
"message": "HTTP … is not supported for this endpoint",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRCORE_1001",
"message": "HTTP … is not supported for this endpoint",
"field": null
}
]
}
{
"code": 409,
"message": "Activation is not supported for this account's provider",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRACC_1003",
"message": "Activation is not supported for this account's provider",
"field": null
}
]
}
{
"code": 429,
"message": "Rate limit exceeded, please retry later",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRCORE_1006",
"message": "Rate limit exceeded, please retry later",
"field": null
}
]
}
{
"code": 500,
"message": "An error occurred while processing your request",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRCORE_1000",
"message": "An error occurred while processing your request",
"field": null
}
]
}
{
"code": 502,
"message": "The status change could not be accepted. Please try again in a moment",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRACC_1004",
"message": "The status change could not be accepted. Please try again in a moment",
"field": null
}
]
}
Activate account
Queues a reactivation of a deactivated account.
Send no request body. The change is queued, not applied inline — acceptedAt tells you the request was taken, not that it has landed. Poll Get Account until status reaches ACTIVE. Not supported for AED accounts.
Requires the accounts permission.
curl --request PATCH \
--url https://api-sandbox.endl.io/api/v0/accounts/cus_9FpQ2LmZ8sW4TxKn1BvD/acct_7Kq2XbN4mR8vLp1DcYtZ/activate \
--header 'API-KEY: <api-key>' \
--header 'Api-Version: 2026-09.1'
{
"id": "acct_7Kq2XbN4mR8vLp1DcYtZ",
"status": "DEACTIVATED",
"requested": "ACTIVE",
"acceptedAt": "2026-09-30T06:21:44Z"
}
{
"code": 400,
"message": "User id is required",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRACC_1000",
"message": "User id is required",
"field": "userId"
}
]
}
{
"code": 401,
"message": "Partner API key required",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRCORE_1004",
"message": "Partner API key required",
"field": null
}
]
}
{
"code": 403,
"message": "Insufficient permissions",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRCORE_1005",
"message": "Insufficient permissions",
"field": null
}
]
}
{
"code": 404,
"message": "User with ID 'cus_…' not found",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRREF_1001",
"message": "User with ID 'cus_…' not found",
"field": "userId"
}
]
}
{
"code": 405,
"message": "HTTP … is not supported for this endpoint",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRCORE_1001",
"message": "HTTP … is not supported for this endpoint",
"field": null
}
]
}
{
"code": 409,
"message": "Activation is not supported for this account's provider",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRACC_1003",
"message": "Activation is not supported for this account's provider",
"field": null
}
]
}
{
"code": 429,
"message": "Rate limit exceeded, please retry later",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRCORE_1006",
"message": "Rate limit exceeded, please retry later",
"field": null
}
]
}
{
"code": 500,
"message": "An error occurred while processing your request",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRCORE_1000",
"message": "An error occurred while processing your request",
"field": null
}
]
}
{
"code": 502,
"message": "The status change could not be accepted. Please try again in a moment",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRACC_1004",
"message": "The status change could not be accepted. Please try again in a moment",
"field": null
}
]
}
Errors
| Status | Code | When |
|---|---|---|
400 | ERRACC_1000 | The {userId} path segment is blank or whitespace. field: userId |
400 | ERRREF_1000 | {accountId} is blank, malformed, or not an acct_… reference. field: accountId |
400 | ERRCORE_1001 | The version header is missing, malformed, or names a version the server does not support. field: Api-Version |
400 | ERRCORE_1001 | The raw path contains a doubled slash, an encoded slash, a backslash or a control character. |
401 | ERRCORE_1004 | The Api-Key header is missing, does not match an active credential, or its partner is inactive. |
403 | ERRCORE_1005 | The key is valid but lacks the accounts permission. |
403 | ERRCORE_1005 | The calling IP is outside the allow-list configured on the key. |
404 | ERRREF_1001 | {userId} resolves to nothing, belongs to another partner, or the customer is soft-deleted. field: userId |
404 | ERRREF_1001 | A well-formed account reference that resolves to no row. field: accountId |
404 | ERRACC_1001 | The account reference resolved, but no such account belongs to this customer. field: accountId |
404 | ERRCORE_1002 | Relayed from the core service when the resolved user is missing there — a data race, rarely seen. |
405 | ERRCORE_1001 | Wrong verb on a real path, e.g. PUT on Get Account. |
409 | ERRACC_1003 | The account is AED, or sits with a provider that has no lifecycle integration. AED accounts cannot be activated or deactivated. |
429 | ERRCORE_1006 | The per-API-key limit was exhausted. Carries X-RateLimit-Limit and X-RateLimit-Remaining. |
500 | ERRCORE_1000 | An unexpected server error. Quote the X-Request-ID when reporting it. |
502 | ERRACC_1004 | The change could not be queued. Nothing was applied — it is safe to retry. |
curl --request PATCH \
--url https://api-sandbox.endl.io/api/v0/accounts/cus_9FpQ2LmZ8sW4TxKn1BvD/acct_7Kq2XbN4mR8vLp1DcYtZ/activate \
--header 'API-KEY: <api-key>' \
--header 'Api-Version: 2026-09.1'
{
"id": "acct_7Kq2XbN4mR8vLp1DcYtZ",
"status": "DEACTIVATED",
"requested": "ACTIVE",
"acceptedAt": "2026-09-30T06:21:44Z"
}
{
"code": 400,
"message": "User id is required",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRACC_1000",
"message": "User id is required",
"field": "userId"
}
]
}
{
"code": 401,
"message": "Partner API key required",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRCORE_1004",
"message": "Partner API key required",
"field": null
}
]
}
{
"code": 403,
"message": "Insufficient permissions",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRCORE_1005",
"message": "Insufficient permissions",
"field": null
}
]
}
{
"code": 404,
"message": "User with ID 'cus_…' not found",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRREF_1001",
"message": "User with ID 'cus_…' not found",
"field": "userId"
}
]
}
{
"code": 405,
"message": "HTTP … is not supported for this endpoint",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRCORE_1001",
"message": "HTTP … is not supported for this endpoint",
"field": null
}
]
}
{
"code": 409,
"message": "Activation is not supported for this account's provider",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRACC_1003",
"message": "Activation is not supported for this account's provider",
"field": null
}
]
}
{
"code": 429,
"message": "Rate limit exceeded, please retry later",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRCORE_1006",
"message": "Rate limit exceeded, please retry later",
"field": null
}
]
}
{
"code": 500,
"message": "An error occurred while processing your request",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRCORE_1000",
"message": "An error occurred while processing your request",
"field": null
}
]
}
{
"code": 502,
"message": "The status change could not be accepted. Please try again in a moment",
"status": "ERROR",
"data": null,
"errors": [
{
"code": "ERRACC_1004",
"message": "The status change could not be accepted. Please try again in a moment",
"field": null
}
]
}
Authorizations
Your partner API key.
Headers
The API version this request targets. Required on every /api/v0/* call. Format YYYY-MM.<release>; 2026-09.1 is the latest. The version that served the request is echoed back on the response. Missing, malformed or unsupported values are rejected with 400.
^\d{4}-\d{2}\.\d+$Path Parameters
The customer the account belongs to. Must be a cus_… reference id, and must belong to your partner account. Blank → 400 ERRACC_1000; malformed, unknown, soft-deleted or another partner's → 404 ERRREF_1001.
"cus_9HqA2mT7xK4vRb1NdLpZ"
The account to act on. Must be an acct_… reference id. Malformed → 400 ERRREF_1000; well-formed but unknown → 404 ERRREF_1001.
"acct_8f2a1c4e9b7d43a6"
Response
Queues a reactivation of a deactivated account.
The change is applied asynchronously, so status and requested will differ until it lands. Poll Get Account until status reaches requested.
The account's reference id, echoed as sent.
The transition you asked for — ACTIVE or DEACTIVATED.
ACTIVE, DEACTIVATED When the request was accepted. A statement about the request, not a claim that the change has landed.
The account's state right now, re-read after the change was queued.
ACTIVE, PENDING, DEACTIVATED, CLOSED, FROZEN, UNDER_REVIEW, DORMANT