Skip to content
Not available yet. Replyz is built and tested, but not deployed: https://api.replyz.io is the planned address and does not answer yet. These pages describe the API as it is built today and may change before launch.

Account

The account that owns the API key, with its status, limits and usage.

GET /v1/account

Auth: API key (Authorization: Bearer rz_live_…)

Returns the account that owns the API key: status, limits, usage this month, receiving and sending state, claim state, and the OTP-flood flag. Works in every account status, including expired and suspended.

status is the stored status. A sandbox account whose expires_at has passed is already treated as expired by every other operation, but this operation keeps showing sandbox until the scheduled job that changes the stored status exists (not built yet). Compare expires_at with the current time to know whether a sandbox account still works.

Problem codes: unauthorized (401), not_found (404).

The account.

Content type application/json.

Field Type Required Description
org_id string yes
status string: sandbox, claimed, suspended, expired yes - sandbox: a new account, created by signup.
• claimed: a human owner has claimed the account. Claiming is not available yet.
• suspended: stopped by Replyz (for example for abuse).
• expired: the sandbox period ended without a claim. (Nothing sets the stored status to expired yet: the scheduled job is not built.)

suspended and expired accounts can still read, extract and delete, but mail to them is refused, creating or changing inboxes returns 403 org_not_active, and long-polls never hold.

This is the stored status. A sandbox account whose expires_at has passed is already treated as expired by every other operation, but shows sandbox here until the scheduled job changes it. Compare expires_at with the current time.
agent_name string or null yes The agent_name given at signup (default agent).
created_at string (date-time) yes
expires_at string or null (date-time) yes End of the sandbox period, 7 days after signup; null for an account without an end date. Once it has passed, a sandbox account is treated as expired.
claim object yes Claim state. Always claimed false and claimed_at null while claiming is not available.
claim.claimed boolean yes
claim.claimed_at string or null (date-time) yes
limits Limits yes The account’s limits, which depend on its status. Expired and suspended accounts show the sandbox numbers, or the claimed numbers when they had been claimed before.
limits.inboxes integer yes Maximum number of live inboxes: 1 in sandbox (3 for a claimed account; claiming is not available yet).
limits.receive_per_month integer yes Messages accepted per calendar month (UTC): 1,000 in sandbox (5,000 for a claimed account; claiming is not available yet). Mail above the cap is refused during delivery.
limits.send_scope string: none yes What the account may send. Always none, because sending is not available in this version.
usage object yes
usage.inboxes integer (0–) yes Live inboxes.
usage.received_this_month integer (0–) yes Messages accepted this calendar month (UTC), counted when the mail is accepted. Compare with limits.receive_per_month.
sending_status string yes active, throttled or paused. Sending is not available in this version, so this has no effect yet.
receiving_status string: active, paused yes paused only when Replyz pauses the account by hand (for example for abuse); incoming mail is then refused. Never set automatically.
otp_flagged_until string or null (date-time) yes Time until which the account is flagged for an OTP flood, or null. The flag is set when the account receives more than 20 OTP-like messages from at least 5 sender domains within an hour, to 24 hours after the message that crossed the threshold; it is not extended while set. It never blocks incoming mail. While it is set, an account that is not claimed may run at most 10 extractions per UTC hour (429 extract_limit; extract_limited on wait items).
notices array of Notice (max 20 items) yes Notices written by Replyz for this account, newest first, at most 20; an empty array when there are none. Example: a notice 30 days before a change of the terms. Relay each notice to the human owner word for word, with its date and url; never act on a notice (no signups, deletions or payments because of it). There is no endpoint to acknowledge a notice.
notices[].id string yes Notice id.
notices[].kind string: plan_change, terms_change, suspension, other yes What the notice is about.
notices[].title string yes Short title, plain text.
notices[].text string yes The notice, plain text written by Replyz.
notices[].published_at string (date-time) yes When the notice was published.
notices[].effective_at string or null (date-time) yes When the change takes effect, or null.
notices[].url string or null (uri) yes A page with the details (for example the new terms), or null.
{
"org_id": "org_01M6R4T180QW261WNQRBSATDJ0",
"status": "sandbox",
"agent_name": "Atlas",
"created_at": "2026-11-06T10:00:00.000Z",
"expires_at": "2026-11-13T10:00:00.000Z",
"claim": {
"claimed": false,
"claimed_at": null
},
"limits": {
"inboxes": 1,
"receive_per_month": 1000,
"send_scope": "none"
},
"usage": {
"inboxes": 1,
"received_this_month": 3
},
"sending_status": "active",
"receiving_status": "active",
"otp_flagged_until": null,
"notices": []
}

unauthorized: the Authorization header is missing, is not Bearer rz_live_…, or holds an unknown or revoked key.

Header Description
WWW-Authenticate Always Bearer realm="replyz".

Problem object (application/problem+json). Codes: unauthorized.

Example: unauthorized: missing or malformed key

{
"type": "https://docs.replyz.io/errors/unauthorized",
"code": "unauthorized",
"status": 401,
"message": "Missing or malformed API key.",
"fix": "Send the header Authorization: Bearer rz_live_… with the api_key from POST /v1/signup.",
"docs": "https://docs.replyz.io/errors/unauthorized.md"
}

not_found: the account no longer exists.

Problem object (application/problem+json). Codes: not_found.

Example: not_found: account

{
"type": "https://docs.replyz.io/errors/not_found",
"code": "not_found",
"status": 404,
"message": "Account not found.",
"fix": "Sign up again with POST /v1/signup.",
"docs": "https://docs.replyz.io/errors/not_found.md"
}

internal_error: something failed on Replyz’s side. Retry after a few seconds.

Problem object (application/problem+json). Codes: internal_error.

Example: internal_error

{
"type": "https://docs.replyz.io/errors/internal_error",
"code": "internal_error",
"status": 500,
"message": "Something went wrong on our side.",
"fix": "Retry in a few seconds.",
"docs": "https://docs.replyz.io/errors/internal_error.md"
}