public

GET /v1/public/quotes/form

What the free-quote form needs to render itself.

All public endpoints

All developer docs

Authentication

This endpoint is public. It takes no credential and no organisation — it is what our own marketing site and AI answer engines read.

This endpoint takes no organisation id. Your key already identifies the organisation it belongs to, and the response is scoped to it.

Try it

Replace anything in angle brackets with your own values, and the key placeholder with a key from your dashboard.

curl -X GET https://api.zinndigital.com/v1/public/quotes/form

Signed in? The API console in your dashboard fills in your real organisation id and your own key, and runs the request against the live API so you can see the actual response. Open this endpoint in the API console

Details

Anonymous — no credential, no tenant. Reports the Cloudflare Turnstile site key (public by construction; it ships in the page's HTML) and the enum choices the form's dropdowns are built from. ⛔ The choices come from here rather than being hand-copied into the client for the reason a hand-maintained copy of anything always goes wrong: it goes stale silently and then submits a value the engine refuses, which the visitor sees as an error on a field they filled in correctly. ⛔ turnstile_site_key is null — never "" — when no challenge is configured. The client branches on it, and "not configured" and "configured as an empty string" must be distinguishable on the wire.

Response

NameTypeRequiredWhat it is
turnstile_site_keystringYesThe Cloudflare Turnstile site key, or null when no challenge is configured. ⛔ Public by construction — it ships in the page's HTML — which is why it is served rather than kept…
max_attachmentsintegerYesHow many files one submission may carry.
max_attachment_bytesintegerYesThe ceiling across the WHOLE request, not per file. Five files each inside the per-file cap is far more than an anonymous caller should be able to store.
accepted_typesstring[]YesThe media types an attachment may be. An allow-list, never a block-list — a block-list is a claim that somebody thought of every dangerous format.
project_typesQuoteChoice[]Yes
budget_bandsQuoteChoice[]Yes
timelinesQuoteChoice[]Yes

Errors this endpoint can return

429