Skip to content

Send a message from the website contact form to the Site Qwality inbox.

POST
/contact
curl --request POST \
--url https://api.siteqwality.com/contact \
--header 'Content-Type: application/json' \
--data '{ "name": "example", "email": "example", "topic": "sales", "message": "example", "turnstile_response": "example", "website": "example", "elapsed_ms": 4200 }'

Public and unauthenticated. Any refusal (bot checks, validation, rate limit, Turnstile) returns the same 400 with the same message, so the cause is not revealed.

Media type application/json
object
name
required

1 to 100 characters.

string
email
required

A valid address, 254 characters at most.

string
topic
required
string
Allowed values: sales support security other
message
required

1 to 5000 characters, at most two links.

string
turnstile_response

Cloudflare Turnstile token. Required wherever Turnstile is configured.

string | null
website

Honeypot. Real visitors never see the field, so it must be empty.

string
elapsed_ms
required

Milliseconds between rendering the form and submitting it. At least 3000.

Read as a float so a fractional performance.now() delta is not a silent failure, but it is an integer on the wire contract.

integer format: int64
>= 3000
Example
4200

Message sent

Message refused. The body is the same generic message for every cause.

Internal server error