Submit a formMenu

Submit a form

POST/v1/forms/{id}/submissions

Requires an API key with the contacts:write scope. About keys and scopes

Works with integration and partner keys, not agent keys.

A repeat without a key does it again; send Idempotency-Key and a retry within 24 hours replays the first response. About idempotency

Submits a double opt-in form for a person your own system signs up: the answers go through the form's fields as a visitor's would, the contact is recorded without consent, and Kirora emails them the form's confirmation link; consent, lists and topics follow when they confirm. Only a published, unarchived double opt-in form with a list takes it: any other answers 409 CONFLICT saying which. An address gets at most one confirmation per form per day. Answers are checked as the form checks them (400). Each call is a new sign-up that counts toward the form's limit, so send an Idempotency-Key to retry safely. A plain server sign-up with consent goes through POST /v1/contacts/identify with a consent statement. Agent keys are refused with 403.

Path parameters

idstringrequired

The form's id.

uuid

Header parameters

Kirora-Workspacestringoptional

Partner keys only: the child workspace to act in, by the external id the partner gave it. Without it, a partner key acts in its own workspace. Any other key that sends it is refused with 403, and an unknown workspace is 404.

pattern ^[A-Za-z0-9._:-]{1,128}$

Idempotency-Keystringoptional

Makes a retry safe: a repeat with the same key and body within 24 hours gets the first response again, with Idempotency-Replay: true. The same key with another request is 409 IDEMPOTENCY_KEY_REUSED; while the first is still running, 409 IDEMPOTENCY_KEY_IN_USE; after an unsafe first request failed or never returned, 409 IDEMPOTENCY_KEY_OUTCOME_UNKNOWN. Use a new key, such as a UUID, for each new request.

8–255 characters

Request body

fieldsmap<string, string>required

Answers by field key. A checkbox field's ticks go in choices; a plain HTML form may send one tick here.

values: up to 1,000 characters

choicesmap<string, string[]>optional

Each checkbox field's ticked option values, by field key.

values: at most 50 items · default {}

Returns

Returns 202 Accepted. It can also return 409 Conflict, 413 Payload Too Large or 415 Unsupported Media Type; see the statuses below. Otherwise returns an error; Errors lists every code and which to retry.

  • 202 AcceptedRecorded; the confirmation email is on its way.
  • 409 ConflictThe request conflicts with current state — a duplicate unique value, or a resource whose status does not allow this operation.
  • 413 Payload Too LargeThe body is larger than this operation accepts (PAYLOAD_TOO_LARGE).
  • 415 Unsupported Media TypeThe body is not JSON, or not the upload the operation takes (UNSUPPORTED_MEDIA_TYPE).

Headers on 202 Accepted

Idempotency-Replaystringoptional

true when this is the stored response to an earlier request with the same key.

one of true