Account
The account that owns the API key, with its status, limits and usage.
Get the account
Section titled “Get the account”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).
Responses
Section titled “Responses”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"}