Docs

Start here

File a support request

POST/v1/support/requestson https://api.auray.ai/v1

The one unauthenticated write path on this surface.

The one unauthenticated write path on this surface. Answers 202 identically whether the address is known, unknown or blocked — a different answer for an address we recognise would be an enumeration oracle anybody could query, and telling a sender they are blocked hands them a free signal. Every request is answered by email: the address receives a confirmation link, and the request becomes a ticket, with its reference, only when that link is opened — including for an address that has confirmed before, because nothing in this request proves the caller holds that mailbox today.

#Authentication

No key needed — this document is public.

#Request

#Body

application/json, required.

FieldTypeRequiredDefaultDescription
emailstringyes—Checked for shape only. The mail round trip is what proves an address. 0 to 320 characters.
subjectstringyes—1 to 300 characters.
messagestringyes—Secrets are removed from this before it is stored — an API key, a session token, a JWT or a bearer header is redacted deterministically, before the round trip, so no copy is ever made. 1 to 20000 characters.
topicstringno—One of the id values from GET /v1/support/topics. Optional.
metaobjectno—Whatever your client can say about what the person actually saw: a request id, an error code, an app version. Read whole, by a person.
challengestringyes—From POST /v1/support/challenge, unchanged.
noncestringyes—0 to 64 characters.

#Example request

curl -X POST https://api.auray.ai/v1/support/requests \
  -H "content-type: application/json" \
  -d '{
  "email": "…",
  "subject": "…",
  "message": "…",
  "challenge": "…",
  "nonce": "…"
}'

#Responses

#202 Accepted

Received. The same answer for every address.

FieldTypeRequiredDefaultDescription
statusstringno—One of "received".

Headers:

HeaderDescription
RateLimit-LimitBurst capacity for the bucket that answered.
RateLimit-Remaining
RateLimit-ResetSeconds until refill.
X-Request-Id

#400 Bad Request

support_email_invalid, support_subject_invalid, support_message_invalid, support_topic_unknown, challenge_required, challenge_invalid, challenge_expired, challenge_unsolved, invalid_body or invalid_json.

The error body: error, message, docs (the entry that explains it) and request_id.

#409 Conflict

challenge_spent — that challenge has already been used.

The error body: error, message, docs (the entry that explains it) and request_id.

#413 Payload Too Large

body_too_large — the body must be at most 65536 bytes.

The error body: error, message, docs (the entry that explains it) and request_id.

#429 Too Many Requests

support_rate_limited — one of four buckets refused: this address, its network, this email address, or its domain. Checked most specific first, so the one that answers is the narrowest one you exhausted.

The error body: error, message, docs (the entry that explains it) and request_id.

#503 Service Unavailable

support_disabled, support_not_configured, support_closed or support_unavailable.

The error body: error, message, docs (the entry that explains it) and request_id.

#Status codes

StatusMeaning
202Received. The same answer for every address.
400support_email_invalid, support_subject_invalid, support_message_invalid, support_topic_unknown, challenge_required, challenge_invalid, challenge_expired, challenge_unsolved, invalid_body or invalid…
409challenge_spent — that challenge has already been used.
413body_too_large — the body must be at most 65536 bytes.
429support_rate_limited — one of four buckets refused: this address, its network, this email address, or its domain.
503support_disabled, support_not_configured, support_closed or support_unavailable.

Every refusal names its code, and every code is explained at Errors.

Start typing to search every page of the documentation.

Up arrow Down arrow to moveEnter to openEscape to close