Support messages API
More
Messages to support: from the dashboard with a session, or from the public contact form with none. Staff answer by email.
Every operation of the API reference is generated from the contract the API serves, version 0.1.0. Replace YOUR_API_KEY in the samples with your key.
Contact us
POST/v1/contact-messages
Sends a message to support from the public site: stored, and emailed to our support inbox. Staff answer by email, at the address given. It needs no key or session. A browser's request must send no Sec-Fetch-Site but same-origin or none (csrf_rejected). Messages have a budget per client address.
Authentication: None: anyone may call it, within a budget per client address where the description says so.
Request body
JSON: NewContactMessage.
| Field | Type | Description |
|---|---|---|
email required | string (email) | Where staff answer you. |
message required | string | The message: 1 to 5,000 characters. |
subject | string | What it is about, in a line: up to 200 characters. Left out, it is "Message from the contact form". |
Responses
| Status | Meaning | Body |
|---|---|---|
| 202 Accepted | Received: staff will answer by email. | SupportReceipt (application/json) |
| 403 Forbidden | A browser's request from another site ( | Problem (application/problem+json) |
| 422 Unprocessable Content | Not an email address, no message, one over 5,000 characters, or a subject over 200 ( | Problem (application/problem+json) |
| 429 Too Many Requests | Too many messages from this address ( | Problem (application/problem+json) |
| 503 Service Unavailable | The message cannot be stored now ( | Problem (application/problem+json) |
| Any other status | An error, as RFC 9457 problem details. | Problem (application/problem+json) |
Error codes
csrf_rejected, validation_failed, rate_limited, service_unavailable. The errors reference says what each means, whether a retry helps and what it costs.
Sample
curl -X POST https://api.zerocaptcha.io/v1/contact-messages \ -H "Content-Type: application/json" \ -d '{ "email": "you@example.com", "message": "message"}'const response = await fetch("https://api.zerocaptcha.io/v1/contact-messages", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ "email": "you@example.com", "message": "message" }),});console.log(response.status, await response.text());import requests
response = requests.post( "https://api.zerocaptcha.io/v1/contact-messages", json={ "email": "you@example.com", "message": "message", }, timeout=30,)print(response.status_code, response.text)Write to support
POST/v1/support-messages
Sends a message to support from the dashboard: stored, and emailed to our support inbox. Staff answer by email, at the signed-in person's address. A suspended account may write too, and appeals its suspension with topic: appeal, which reaches staff marked as an appeal. With the session's CSRF token. Messages have a budget per user.
Authentication: None: anyone may call it, within a budget per client address where the description says so.
Request body
JSON: NewSupportMessage.
| Field | Type | Description |
|---|---|---|
message required | string | The message: 1 to 5,000 characters. Task IDs help. |
subject | string | What it is about, in a line: up to 200 characters. Left out, it is "Question from the dashboard". |
topic | SupportTopic |
One of: |
Responses
| Status | Meaning | Body |
|---|---|---|
| 202 Accepted | Received: staff will answer by email. | SupportReceipt (application/json) |
| 409 Conflict | An appeal from an account that is not suspended ( | Problem (application/problem+json) |
| 422 Unprocessable Content | No message, one over 5,000 characters, or a subject over 200 ( | Problem (application/problem+json) |
| 429 Too Many Requests | Too many messages from this person ( | Problem (application/problem+json) |
| 503 Service Unavailable | The message cannot be stored now ( | Problem (application/problem+json) |
| Any other status | An error, as RFC 9457 problem details. | Problem (application/problem+json) |
Error codes
state_conflict, validation_failed, rate_limited, service_unavailable. The errors reference says what each means, whether a retry helps and what it costs.
Sample
curl -X POST https://api.zerocaptcha.io/v1/support-messages \ -H "Content-Type: application/json" \ -d '{ "message": "message", "subject": "A charge I don'\''t recognise"}'const response = await fetch("https://api.zerocaptcha.io/v1/support-messages", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ "message": "message", "subject": "A charge I don't recognise" }),});console.log(response.status, await response.text());import requests
response = requests.post( "https://api.zerocaptcha.io/v1/support-messages", json={ "message": "message", "subject": "A charge I don't recognise", }, timeout=30,)print(response.status_code, response.text)