{"openapi":"3.1.0","info":{"title":"NRTHMAIL API","version":"1.0.0","summary":"Disposable inboxes. Free and public: no key, no sign-up, no rate limits.","description":"Create an inbox with one POST, then wait for mail and read the code. The bearer token returned at creation is the only credential and controls exactly one inbox. Inboxes erase 24 hours after their last use; messages are kept at most 7 days and each inbox holds the 100 newest messages. Errors use RFC 9457 application/problem+json.","license":{"name":"Free to use"}},"servers":[{"url":"https://nrthmail.com/api/v1"}],"tags":[{"name":"Inboxes"},{"name":"Messages"},{"name":"Live","description":"Long-poll, Server-Sent Events, tickets."},{"name":"Sharing","description":"Hand an inbox to another device without putting the token in a URL."},{"name":"Files","description":"Signed URLs for raw messages, attachments and the sandboxed HTML view."},{"name":"Meta"}],"paths":{"/domains":{"get":{"summary":"List domains","tags":["Meta"],"security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["domains"],"properties":{"domains":{"type":"array","items":{"$ref":"#/components/schemas/Domain"}}}}}}},"500":{"$ref":"#/components/responses/Internal"}}}},"/inboxes":{"post":{"summary":"Create an inbox","description":"Without `name` a random address such as `quiet.fjord47@…` is created. The token is returned once.","tags":["Inboxes"],"security":[],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInboxRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxWithToken"}}},"headers":{"Location":{"schema":{"type":"string","const":"/api/v1/inbox"}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"409":{"$ref":"#/components/responses/AddressUnavailable"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/ValidationFailed"},"500":{"$ref":"#/components/responses/Internal"}}}},"/inboxes/recover":{"post":{"summary":"Recover an expired inbox","description":"Reactivates an expired inbox (empty, fresh TTL) while its address is still tombstoned. Burned inboxes return 410.","tags":["Inboxes"],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["token"],"properties":{"token":{"$ref":"#/components/schemas/Token"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxEnvelope"}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/AddressUnavailable"},"410":{"$ref":"#/components/responses/Gone"},"422":{"$ref":"#/components/responses/ValidationFailed"},"500":{"$ref":"#/components/responses/Internal"}}}},"/inbox":{"get":{"summary":"Get the inbox","tags":["Inboxes"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxEnvelope"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"410":{"$ref":"#/components/responses/Gone"},"500":{"$ref":"#/components/responses/Internal"}}},"delete":{"summary":"Burn the inbox","description":"Deletes every message now and locks the address for the tombstone period.","tags":["Inboxes"],"security":[{"bearerAuth":[]}],"responses":{"204":{"description":"Burned"},"401":{"$ref":"#/components/responses/Unauthorized"},"410":{"$ref":"#/components/responses/Gone"},"500":{"$ref":"#/components/responses/Internal"}}}},"/inbox/extend":{"post":{"summary":"Extend the TTL","tags":["Inboxes"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxEnvelope"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"410":{"$ref":"#/components/responses/Gone"},"500":{"$ref":"#/components/responses/Internal"}}}},"/inbox/messages":{"get":{"summary":"List messages (newest first)","description":"Supports `ETag` / `If-None-Match` (304) for cheap polling.","tags":["Messages"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"next_cursor from the previous page."},{"name":"since","in":"query","schema":{"type":"string"},"description":"RFC 3339 timestamp or a message id (msg_…). Only newer messages are returned."},{"name":"unseen","in":"query","schema":{"type":"boolean"}},{"name":"If-None-Match","in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessagePage"}}},"headers":{"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Not modified"},"401":{"$ref":"#/components/responses/Unauthorized"},"410":{"$ref":"#/components/responses/Gone"},"422":{"$ref":"#/components/responses/ValidationFailed"},"500":{"$ref":"#/components/responses/Internal"}}},"delete":{"summary":"Delete all messages","tags":["Messages"],"security":[{"bearerAuth":[]}],"responses":{"204":{"description":"Purged"},"401":{"$ref":"#/components/responses/Unauthorized"},"410":{"$ref":"#/components/responses/Gone"},"500":{"$ref":"#/components/responses/Internal"}}}},"/inbox/messages/{id}":{"get":{"summary":"Get a message","tags":["Messages"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^msg_[0-9A-HJKMNP-TV-Z]{26}$"}},{"name":"images","in":"query","schema":{"type":"boolean"},"description":"true: `html` and `html_url` keep remote images."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["message"],"properties":{"message":{"$ref":"#/components/schemas/Message"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"410":{"$ref":"#/components/responses/Gone"},"422":{"$ref":"#/components/responses/ValidationFailed"},"500":{"$ref":"#/components/responses/Internal"}}},"patch":{"summary":"Mark seen / unseen","tags":["Messages"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^msg_[0-9A-HJKMNP-TV-Z]{26}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessagePatch"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/MessagePatch"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["message"],"properties":{"message":{"$ref":"#/components/schemas/MessageSummary"}}}}}},"400":{"$ref":"#/components/responses/InvalidRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"410":{"$ref":"#/components/responses/Gone"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/ValidationFailed"},"500":{"$ref":"#/components/responses/Internal"}}},"delete":{"summary":"Delete a message","tags":["Messages"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^msg_[0-9A-HJKMNP-TV-Z]{26}$"}}],"responses":{"204":{"description":"Deleted"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"410":{"$ref":"#/components/responses/Gone"},"500":{"$ref":"#/components/responses/Internal"}}}},"/inbox/messages/{id}/raw":{"get":{"summary":"Download the raw message","tags":["Messages"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^msg_[0-9A-HJKMNP-TV-Z]{26}$"}}],"responses":{"200":{"description":"The original RFC 5322 message","content":{"message/rfc822":{"schema":{"type":"string","contentEncoding":"binary"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"410":{"$ref":"#/components/responses/Gone"},"500":{"$ref":"#/components/responses/Internal"}}}},"/inbox/messages/{id}/attachments/{att_id}":{"get":{"summary":"Download an attachment","tags":["Messages"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^msg_[0-9A-HJKMNP-TV-Z]{26}$"}},{"name":"att_id","in":"path","required":true,"schema":{"type":"string","pattern":"^att_[0-9A-HJKMNP-TV-Z]{26}$"}}],"responses":{"200":{"description":"Attachment bytes (Content-Disposition: attachment)","content":{"application/octet-stream":{"schema":{"type":"string","contentEncoding":"binary"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"410":{"$ref":"#/components/responses/Gone"},"500":{"$ref":"#/components/responses/Internal"}}}},"/inbox/wait":{"get":{"summary":"Wait for mail (long-poll)","description":"Returns immediately when matching messages newer than `since` exist, otherwise waits up to `timeout` seconds.","tags":["Live"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"timeout","in":"query","schema":{"type":"integer","minimum":1,"maximum":60,"default":30}},{"name":"since","in":"query","schema":{"type":"string"},"description":"RFC 3339 timestamp or a message id (msg_…). Only newer messages are returned. Default: none (every message already in the inbox counts), so a fresh inbox returns its first message even if it arrived before the wait started."},{"name":"from","in":"query","schema":{"type":"string","maxLength":200},"description":"Case-insensitive substring of the sender."},{"name":"subject","in":"query","schema":{"type":"string","maxLength":200},"description":"Case-insensitive substring of the subject."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WaitResult"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"410":{"$ref":"#/components/responses/Gone"},"422":{"$ref":"#/components/responses/ValidationFailed"},"500":{"$ref":"#/components/responses/Internal"}}}},"/inbox/events":{"get":{"summary":"Live events (Server-Sent Events)","description":"Events: `message` (data: MessageSummary, id: message id), `message_deleted` ({\"id\"}), `inbox` (Inbox), `expired` ({} and the stream closes). A `: ping` comment is sent every 20 s and keeps the inbox alive. Send `Last-Event-ID` to replay newer messages. Native EventSource can authenticate with `?ticket=`.","tags":["Live"],"security":[{"bearerAuth":[]},{"ticket":[]}],"parameters":[{"name":"ticket","in":"query","schema":{"type":"string","pattern":"^tk_[0-9A-Za-z]{32}$"},"description":"Single-use ticket from POST /inbox/tickets."},{"name":"Last-Event-ID","in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"Event stream","content":{"text/event-stream":{"schema":{"type":"string"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"410":{"$ref":"#/components/responses/Gone"},"500":{"$ref":"#/components/responses/Internal"}}}},"/inbox/tickets":{"post":{"summary":"Create an event-stream ticket","description":"Single use, valid 60 s. For native EventSource, which cannot send headers.","tags":["Live"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ticket"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"410":{"$ref":"#/components/responses/Gone"},"500":{"$ref":"#/components/responses/Internal"}}}},"/inbox/share":{"post":{"summary":"Create a share code","description":"Single use, valid 120 s. The URL carries the code, never the token.","tags":["Sharing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Share"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"410":{"$ref":"#/components/responses/Gone"},"500":{"$ref":"#/components/responses/Internal"}}}},"/share/{code}":{"post":{"summary":"Redeem a share code","tags":["Sharing"],"security":[],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-HJ-NP-TV-Z2-9]{12}$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxWithToken"}}}},"404":{"$ref":"#/components/responses/NotFound"},"410":{"$ref":"#/components/responses/Gone"},"500":{"$ref":"#/components/responses/Internal"}}}},"/inbox/qr.svg":{"get":{"summary":"QR code for a share link","description":"Creates a new share code on every call. Dark modules are `fill=\"#000\"` paths on a transparent background.","tags":["Sharing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"SVG image","headers":{"X-Share-Expires":{"schema":{"type":"string","format":"date-time","examples":["2026-10-03T19:44:19.123Z"]}}},"content":{"image/svg+xml":{"schema":{"type":"string"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"410":{"$ref":"#/components/responses/Gone"},"500":{"$ref":"#/components/responses/Internal"}}}},"/stats":{"get":{"summary":"Public counters","tags":["Meta"],"security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Stats"}}}},"500":{"$ref":"#/components/responses/Internal"}}}},"/openapi.json":{"get":{"summary":"This document","tags":["Meta"],"security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"$ref":"#/components/responses/Internal"}}}},"/files/raw/{id}":{"get":{"summary":"Raw message via signed URL","tags":["Files"],"security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^msg_[0-9A-HJKMNP-TV-Z]{26}$"}},{"name":"exp","in":"query","required":true,"schema":{"type":"integer"},"description":"Expiry, unix seconds."},{"name":"sig","in":"query","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{64}$"},"description":"HMAC-SHA256 signature."}],"responses":{"200":{"description":"message/rfc822 download","content":{"message/rfc822":{"schema":{"type":"string","contentEncoding":"binary"}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/Internal"}}}},"/files/att/{id}":{"get":{"summary":"Attachment via signed URL","tags":["Files"],"security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^att_[0-9A-HJKMNP-TV-Z]{26}$"}},{"name":"exp","in":"query","required":true,"schema":{"type":"integer"},"description":"Expiry, unix seconds."},{"name":"sig","in":"query","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{64}$"},"description":"HMAC-SHA256 signature."},{"name":"inline","in":"query","schema":{"type":"string","enum":["1"]},"description":"Serve raster images inline (used for cid: images)."}],"responses":{"200":{"description":"Attachment bytes","content":{"application/octet-stream":{"schema":{"type":"string","contentEncoding":"binary"}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/Internal"}}}},"/files/html/{id}":{"get":{"summary":"Sandboxed HTML view via signed URL","description":"A complete HTML document with a sandboxing Content-Security-Policy, for use as an iframe src.","tags":["Files"],"security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^msg_[0-9A-HJKMNP-TV-Z]{26}$"}},{"name":"exp","in":"query","required":true,"schema":{"type":"integer"},"description":"Expiry, unix seconds."},{"name":"sig","in":"query","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{64}$"},"description":"HMAC-SHA256 signature."},{"name":"images","in":"query","schema":{"type":"string","enum":["1"]},"description":"Part of the signature: allow remote images."}],"responses":{"200":{"description":"HTML document","content":{"text/html":{"schema":{"type":"string"}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/Internal"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"nrth_ + 43 base62 characters","description":"The inbox token returned by POST /inboxes."},"ticket":{"type":"apiKey","in":"query","name":"ticket","description":"Single-use ticket for GET /inbox/events."}},"schemas":{"Token":{"type":"string","pattern":"^nrth_[0-9A-Za-z]{43}$"},"Domain":{"type":"object","required":["domain","default"],"properties":{"domain":{"type":"string","examples":["nrthmail.com"]},"default":{"type":"boolean"}}},"CreateInboxRequest":{"type":"object","properties":{"name":{"type":"string","minLength":3,"maxLength":40,"pattern":"^[a-z0-9](?:[a-z0-9._-]{1,38})[a-z0-9]$","description":"Lowercased before checking; no \"..\"."},"domain":{"type":"string","description":"One of GET /domains. Default: the default domain."}}},"Inbox":{"type":"object","required":["id","address","local_part","domain","custom","status","created_at","expires_at","ttl_seconds","message_count","unseen_count"],"properties":{"id":{"type":"string","pattern":"^ibx_[0-9A-HJKMNP-TV-Z]{26}$"},"address":{"type":"string","format":"email","examples":["quiet.fjord47@nrthmail.com"]},"local_part":{"type":"string"},"domain":{"type":"string"},"custom":{"type":"boolean"},"status":{"type":"string","enum":["active","expired","burned"]},"created_at":{"type":"string","format":"date-time","examples":["2026-10-03T19:44:19.123Z"]},"expires_at":{"type":"string","format":"date-time","examples":["2026-10-03T19:44:19.123Z"],"description":"Moves forward on every authenticated request and while an event stream is open."},"ttl_seconds":{"type":"integer","description":"Length of the rolling TTL window."},"message_count":{"type":"integer"},"unseen_count":{"type":"integer"}}},"InboxEnvelope":{"type":"object","required":["inbox"],"properties":{"inbox":{"$ref":"#/components/schemas/Inbox"}}},"InboxWithToken":{"type":"object","required":["token","inbox"],"properties":{"token":{"$ref":"#/components/schemas/Token"},"inbox":{"$ref":"#/components/schemas/Inbox"}}},"Address":{"type":"object","required":["name","address"],"properties":{"name":{"type":["string","null"]},"address":{"type":["string","null"]}}},"MessageSummary":{"type":"object","required":["id","seq","received_at","from","to","tag","subject","preview","seen","size","has_attachments","attachment_count","codes"],"properties":{"id":{"type":"string","pattern":"^msg_[0-9A-HJKMNP-TV-Z]{26}$"},"seq":{"type":"integer","minimum":1},"received_at":{"type":"string","format":"date-time","examples":["2026-10-03T19:44:19.123Z"]},"from":{"$ref":"#/components/schemas/Address"},"to":{"type":"string","description":"Envelope recipient, including any +tag."},"tag":{"type":["string","null"],"maxLength":64},"subject":{"type":["string","null"]},"preview":{"type":"string","maxLength":160},"seen":{"type":"boolean"},"size":{"type":"integer","description":"Raw size in bytes."},"has_attachments":{"type":"boolean"},"attachment_count":{"type":"integer","description":"Attachments that are not inline (cid:) images."},"codes":{"type":"array","maxItems":3,"items":{"type":"string"},"description":"One-time codes found in the message, best first."}}},"Message":{"allOf":[{"$ref":"#/components/schemas/MessageSummary"},{"type":"object","required":["cc","reply_to","text","html","html_url","remote_images","auth","headers","links","attachments","raw_url"],"properties":{"cc":{"type":"array","items":{"$ref":"#/components/schemas/Address"}},"reply_to":{"type":["string","null"]},"text":{"type":["string","null"]},"html":{"type":["string","null"],"description":"Sanitized HTML. Null when there is no HTML part or it was too complex to render in time (use text). Remote images are blocked unless images=true."},"html_url":{"type":["string","null"],"format":"uri","description":"Signed URL of the sandboxed HTML document (valid 1 h)."},"remote_images":{"$ref":"#/components/schemas/RemoteImages"},"auth":{"$ref":"#/components/schemas/AuthResults"},"headers":{"type":"array","maxItems":60,"items":{"$ref":"#/components/schemas/Header"}},"links":{"type":"array","maxItems":6,"items":{"$ref":"#/components/schemas/Link"}},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}},"raw_url":{"type":"string","format":"uri","description":"Signed URL of the raw .eml (valid 1 h)."}}}]},"MessagePatch":{"type":"object","required":["seen"],"properties":{"seen":{"type":"boolean"}}},"MessagePage":{"type":"object","required":["data","next_cursor","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MessageSummary"}},"next_cursor":{"type":["string","null"]},"has_more":{"type":"boolean"}}},"RemoteImages":{"type":"object","required":["blocked","count"],"properties":{"blocked":{"type":"boolean"},"count":{"type":"integer","description":"Remote images (and remote CSS backgrounds) in the HTML."},"trackers":{"type":"integer","description":"How many of them look like tracking pixels."}}},"AuthResults":{"type":"object","required":["spf","dkim","dmarc"],"properties":{"spf":{"type":"string","enum":["pass","fail","softfail","neutral","none","unknown"]},"dkim":{"type":"string","enum":["pass","fail","softfail","neutral","none","unknown"]},"dmarc":{"type":"string","enum":["pass","fail","softfail","neutral","none","unknown"]}}},"Header":{"type":"object","required":["name","value"],"properties":{"name":{"type":"string"},"value":{"type":"string","maxLength":1000}}},"Link":{"type":"object","required":["url","text","kind"],"properties":{"url":{"type":"string","format":"uri"},"text":{"type":"string"},"kind":{"type":"string","enum":["verify","other"]}}},"Attachment":{"type":"object","required":["id","filename","content_type","size","inline","content_id","url"],"properties":{"id":{"type":"string","pattern":"^att_[0-9A-HJKMNP-TV-Z]{26}$"},"filename":{"type":["string","null"]},"content_type":{"type":"string"},"size":{"type":"integer"},"inline":{"type":"boolean"},"content_id":{"type":["string","null"]},"url":{"type":"string","format":"uri","description":"Signed download URL (valid 1 h)."}}},"WaitResult":{"type":"object","required":["messages","timed_out","waited_ms"],"properties":{"messages":{"type":"array","items":{"$ref":"#/components/schemas/Message"},"description":"Oldest first."},"timed_out":{"type":"boolean"},"waited_ms":{"type":"integer"}}},"Ticket":{"type":"object","required":["ticket","expires_at"],"properties":{"ticket":{"type":"string","pattern":"^tk_[0-9A-Za-z]{32}$"},"expires_at":{"type":"string","format":"date-time","examples":["2026-10-03T19:44:19.123Z"]}}},"Share":{"type":"object","required":["code","url","expires_at"],"properties":{"code":{"type":"string","pattern":"^[A-HJ-NP-TV-Z2-9]{12}$"},"url":{"type":"string","format":"uri","examples":["https://nrthmail.com/#share=ABCDEFGHJKMN"]},"expires_at":{"type":"string","format":"date-time","examples":["2026-10-03T19:44:19.123Z"]}}},"Stats":{"type":"object","required":["messages_24h","inboxes_24h","inboxes_active"],"properties":{"messages_24h":{"type":"integer"},"inboxes_24h":{"type":"integer"},"inboxes_active":{"type":"integer"}}},"Problem":{"type":"object","required":["type","title","status","code"],"properties":{"type":{"type":"string","format":"uri","examples":["https://nrthmail.com/docs#error-not_found"]},"title":{"type":"string"},"status":{"type":"integer"},"code":{"type":"string","enum":["invalid_request","validation_failed","unauthorized","forbidden","not_found","gone","address_unavailable","name_reserved","payload_too_large","unsupported_media_type","insufficient_storage","internal"]},"detail":{"type":"string"}}},"ValidationProblem":{"allOf":[{"$ref":"#/components/schemas/Problem"},{"type":"object","properties":{"errors":{"type":"array","items":{"type":"object","required":["field","code","message"],"properties":{"field":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"}}}}}}]}},"responses":{"InvalidRequest":{"description":"Malformed request (for example invalid JSON).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"Unauthorized":{"description":"Missing or unknown token.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string","const":"Bearer"}}}},"Forbidden":{"description":"Signed URL is invalid or expired.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"NotFound":{"description":"Not found.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"Gone":{"description":"The inbox expired or was burned.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"AddressUnavailable":{"description":"The address is taken or still locked by a tombstone.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"UnsupportedMediaType":{"description":"Use application/json.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"ValidationFailed":{"description":"`validation_failed` (with `errors`) or `name_reserved`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblem"}}}},"Internal":{"description":"Unexpected server error.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}