Support
A signed-in person's own support requests and the conversation with Swaps Support. Dashboard session only.
Jump to an operation:
List the person's support requests — dark-flag
Status: Dark-flag — live behind a cohort or flag · Callers: dashboard session · Scope:
support.read· Test mode: unavailableThis operation is dark-flag — live behind a cohort or flag. While its resource switch (
api_v1.<resource>) is off, calling it answers503 temporarily_unavailable; with the switch on, a closed product or launch flag, or a cohort the account is outside, answers409 capability_unavailable. Check its product page before relying on it.
The signed-in person's own support requests, newest created first, optionally one status_group. Dashboard session only, never a business key: a request belongs to the person who wrote it, not to an account. Swaps-Account only picks the membership that authenticates the call; the list does not change with it. Test mode: unavailable. For the waiting count read GET /v1/support_cases/summary instead of counting pages.
query Parameters
limitDefault 25. Out of range is never rejected: a value outside 1..100, a fraction, or a non-number is not a 400 — 0, a negative number, a non-integer or anything non-numeric falls back to the default (25); anything above 100 is capped to 100. A documented clamp, not a silent one; minimum/maximum are deliberately absent from this schema so a generated client (the MCP tool included) does not reject a value the API itself accepts.
cursorOpaque cursor from a previous response's next_cursor.
status_groupOne status group. The set is closed: any other value is 400 invalid_request naming this parameter.
Headers
Swaps-VersionPins behaviour within /v1 to a dated version; defaults to the key's version; echoed on every response.
Swaps-AccountA1-2. Selects which of the caller's account memberships this request acts on, by Account.id (acct_…), when the credential can reach more than one; the caller's default account otherwise (D-109, supabase/functions/api-v1/auth.ts). Declared on every operation a dashboard session can call (#3561: the runtime caller class, not the formal security list, which names only businessKey on operations both credential classes reach). A value the session is not a member of answers 404 not_found. A business key already resolves to exactly one account (its own) and ignores this header.
List the person's support requests — dark-flag › Responses
A page of the person's support requests.
has_morenext_cursorA1-2: required (still nullable) — every producer already emits null rather than omitting the field when there is no next page, so this only removes a third, unused wire state (absent) a strict client had to handle for nothing.
Count the person's support requests — dark-flag
Status: Dark-flag — live behind a cohort or flag · Callers: dashboard session · Scope:
support.read· Test mode: unavailableThis operation is dark-flag — live behind a cohort or flag. While its resource switch (
api_v1.<resource>) is off, calling it answers503 temporarily_unavailable; with the switch on, a closed product or launch flag, or a cohort the account is outside, answers409 capability_unavailable. Check its product page before relying on it.
Unbounded counts of the person's support requests per status group, over every request, not just a loaded page. needs_you is the number waiting for the person's answer, the figure the dashboard shows beside Support. Dashboard session only. Test mode: unavailable.
Headers
Swaps-VersionPins behaviour within /v1 to a dated version; defaults to the key's version; echoed on every response.
Swaps-AccountA1-2. Selects which of the caller's account memberships this request acts on, by Account.id (acct_…), when the credential can reach more than one; the caller's default account otherwise (D-109, supabase/functions/api-v1/auth.ts). Declared on every operation a dashboard session can call (#3561: the runtime caller class, not the formal security list, which names only businessKey on operations both credential classes reach). A value the session is not a member of answers 404 not_found. A business key already resolves to exactly one account (its own) and ignores this header.
Count the person's support requests — dark-flag › Responses
Unbounded counts per status group.
Unbounded counts over every support request the person owns, like ActivitySummary: a cursor list never carries a total.
Retrieve a support request — dark-flag
Status: Dark-flag — live behind a cohort or flag · Callers: dashboard session · Scope:
support.read· Test mode: unavailableThis operation is dark-flag — live behind a cohort or flag. While its resource switch (
api_v1.<resource>) is off, calling it answers503 temporarily_unavailable; with the switch on, a closed product or launch flag, or a cohort the account is outside, answers409 capability_unavailable. Check its product page before relying on it.
One of the person's own support requests. Another person's request, an unknown id and a request that was not filed from a signed-in session all answer 404. Dashboard session only. Test mode: unavailable.
path Parameters
id^sc_ · requiredHeaders
Swaps-VersionPins behaviour within /v1 to a dated version; defaults to the key's version; echoed on every response.
Swaps-AccountA1-2. Selects which of the caller's account memberships this request acts on, by Account.id (acct_…), when the credential can reach more than one; the caller's default account otherwise (D-109, supabase/functions/api-v1/auth.ts). Declared on every operation a dashboard session can call (#3561: the runtime caller class, not the formal security list, which names only businessKey on operations both credential classes reach). A value the session is not a member of answers 404 not_found. A business key already resolves to exactly one account (its own) and ignores this header.
Retrieve a support request — dark-flag › Responses
The support request.
id^sc_ · requiredPrefixed, opaque. The prefix is part of the contract; the suffix is never parsed.
objectlivemodecreated_atstatusWhat the person sees. waiting_on_customer is "Waiting for your answer": the case is waiting and the newest visible message is from Swaps Support. with_support is "With our team", every other open request. closed is "Closed". An open enum: treat a value you do not recognise as an opaque string.
status_groupThe bucket of status, and the filter GET /v1/support_cases takes.
topicThe intake registry keys the request was filed under, shown through the support_intake.products.<key> and .intents.<key> strings. null for a request from before intake v2.
subjectThe request's subject: what the person typed in the older form, or the registry label pair of a newer request. Show the topic label when topic is set.
The newest visible message, or the opening request when nothing followed.
closed_atSet while status is closed: the resolution time, else the request's last update (a request closed before the case workflow).
reply_emailWhere Swaps Support's replies are also emailed: the person's own address as stored with the request; null when none is deliverable.
updated_atList a support request's messages — dark-flag
Status: Dark-flag — live behind a cohort or flag · Callers: dashboard session · Scope:
support.read· Test mode: unavailableThis operation is dark-flag — live behind a cohort or flag. While its resource switch (
api_v1.<resource>) is off, calling it answers503 temporarily_unavailable; with the switch on, a closed product or launch flag, or a cohort the account is outside, answers409 capability_unavailable. Check its product page before relying on it.
The conversation, newest first: the opening request, the person's own replies and the messages Swaps Support sent. Notes, drafts, unsent messages and provider correspondence never appear. Dashboard session only. Test mode: unavailable.
path Parameters
id^sc_ · requiredquery Parameters
limitDefault 25. Out of range is never rejected: a value outside 1..100, a fraction, or a non-number is not a 400 — 0, a negative number, a non-integer or anything non-numeric falls back to the default (25); anything above 100 is capped to 100. A documented clamp, not a silent one; minimum/maximum are deliberately absent from this schema so a generated client (the MCP tool included) does not reject a value the API itself accepts.
cursorOpaque cursor from a previous response's next_cursor.
Headers
Swaps-VersionPins behaviour within /v1 to a dated version; defaults to the key's version; echoed on every response.
Swaps-AccountA1-2. Selects which of the caller's account memberships this request acts on, by Account.id (acct_…), when the credential can reach more than one; the caller's default account otherwise (D-109, supabase/functions/api-v1/auth.ts). Declared on every operation a dashboard session can call (#3561: the runtime caller class, not the formal security list, which names only businessKey on operations both credential classes reach). A value the session is not a member of answers 404 not_found. A business key already resolves to exactly one account (its own) and ignores this header.
List a support request's messages — dark-flag › Responses
A page of visible messages, newest first.
has_morenext_cursorA1-2: required (still nullable) — every producer already emits null rather than omitting the field when there is no next page, so this only removes a third, unused wire state (absent) a strict client had to handle for nothing.
Reply to a support request — dark-flag
Status: Dark-flag — live behind a cohort or flag · Callers: dashboard session · Scope:
support.write· Test mode: unavailableThis operation is dark-flag — live behind a cohort or flag. While its resource switch (
api_v1.<resource>) is off, calling it answers503 temporarily_unavailable; with the switch on, a closed product or launch flag, or a cohort the account is outside, answers409 capability_unavailable. Check its product page before relying on it.
Adds the person's reply to their own support request. A reply to a closed request reopens it. Text only, 1 to 10,000 characters (counted as Unicode code points) with at least one that is not a space, and no control character other than tab, line feed and carriage return; there is no attachment field, so any field besides body is 400. Never include passwords, API keys, recovery phrases, documents or bank details. Swaps Support answers in the conversation and by email. A person may send 10 replies in 10 minutes and 60 in a day: past that the answer is 429 with Retry-After up to the end of the refusing window, and the reply was not stored, so after waiting send it again under a new Idempotency-Key (a 4xx completes its key). Dashboard session only. Test mode: unavailable.
path Parameters
id^sc_ · requiredHeaders
Idempotency-Key^[A-Za-z0-9_-]{16,12… · requiredCaller-generated, 16-128 characters of [A-Za-z0-9_-] (a UUID or a base64url token both qualify). The value is part of a primary key, so the shape is enforced, not advisory: outside it the request is 400 invalid_request/idempotency_key_invalid. A replay within 24 hours returns the stored response; a different body under the same key is idempotency_error; a replay of a request that failed after it may have taken effect is 409 idempotency_failed — reconcile, then retry under a NEW key. After 24 hours the key is forgotten and the request is new (D-108).
Swaps-VersionPins behaviour within /v1 to a dated version; defaults to the key's version; echoed on every response.
Swaps-AccountA1-2. Selects which of the caller's account memberships this request acts on, by Account.id (acct_…), when the credential can reach more than one; the caller's default account otherwise (D-109, supabase/functions/api-v1/auth.ts). Declared on every operation a dashboard session can call (#3561: the runtime caller class, not the formal security list, which names only businessKey on operations both credential classes reach). A value the session is not a member of answers 404 not_found. A business key already resolves to exactly one account (its own) and ignores this header.
Reply to a support request — dark-flag › Request Body
bodyPlain text, 1 to 10,000 characters (Unicode code points), at least one that is not a space; no control characters but tab, line feed and carriage return. Never include passwords, API keys, recovery phrases, documents or bank details.
Reply to a support request — dark-flag › Responses
The person's reply, as it now appears in the conversation.
id^scm_ · requiredPrefixed, opaque. The prefix is part of the contract; the suffix is never parsed.
objectlivemodecreated_atsupport_case^sc_ · requiredThe support request the message belongs to.
authorWho wrote a message: customer is the signed-in person, swaps_support is Swaps Support. No operator is ever named. An open enum: treat a value you do not recognise as an opaque string.
bodyPlain text, line breaks kept. Never HTML or Markdown.
updated_at