Forms

API docs

Swagger-compatible OpenAPI contract for the standalone EPP form builder. The API exposes forms, publishing, submissions, and EPP connector acknowledgements. Use this with each form's Integration Kit for copy-paste embed snippets, field IDs, mapped payloads, and connector proof.

OpenAPI JSON

Validate at the server

Required fields, published snapshot availability, duplicate attendee policy, capacity caps, and field validation are enforced by the EPP API.

Use public tokens and idempotency

Secure public links carry X-EPP-Public-Token when a form requires token access. Send X-Idempotency-Key for retries so duplicate requests do not create duplicate submissions.

Consume connector packets

Approval, PDF, calendar, email, backend, schedule, and report work is queued as connector packets and can be acknowledged after the customer system processes it.

Base contract

Base URL: /api/epp. The document is Swagger-compatible OpenAPI 3.1.

POST /api/epp/forms/{formId}/submissions
Content-Type: application/json
X-EPP-Public-Token: <token-from-secure-embed-url>
X-Idempotency-Key: <unique-request-id>

{
  "values": {
    "attendee_email": "jane@example.com"
  }
}
POST /api/epp/connectors/{packetId}/ack
Content-Type: application/json
Authorization: Bearer <EPP_ADMIN_TOKEN>

{
  "status": "acked"
}

Secure public-link access

Forms with policies.access.publicTokenRequired stay inactive unless the public request carries the form-scoped token from the secure embed URL. The same token is used for public submission and upload-session initiation; connector readback remains admin-only.

GET /embed/{formId}?token=<form-scoped-public-token>

POST /api/epp/forms/{formId}/uploads/initiate
Content-Type: application/json
X-EPP-Public-Token: <form-scoped-public-token>

Connector packet contract

Public submission responses expose only connectorPacketCount. Customer engineers read the full JSON connector envelope through the admin readback endpoint, optionally filtered to the submission just created by the proof runner.

GET /api/epp/forms/{formId}/connector-packets
Authorization: Bearer <EPP_ADMIN_TOKEN>

GET /api/epp/forms/{formId}/connector-packets?submissionId={submissionId}
FieldMeaning
idConnector packet UUID used for acknowledgement.
formIdForm UUID that owns the packet.
submissionIdSubmission UUID that produced the packet.
kindOne of approval, pdf, calendar, email, backend, schedule, or report.
deliveryPull, webhook, or manual delivery mode.
statusQueued, acked, or failed processing state.
payloadJSON-native mapped connector envelope for the customer adapter.
createdAtPacket creation timestamp.
ackedAtAcknowledgement timestamp when processed.
get/api/epp/forms
Forms

List forms

post/api/epp/forms
Forms

Create a form from an EPP template

get/api/epp/forms/{formId}
Forms

Get a form

patch/api/epp/forms/{formId}
Forms

Update a form

delete/api/epp/forms/{formId}
Forms

Delete a form and its submissions, versions, packets, and idempotency keys

post/api/epp/forms/{formId}/clone
Forms

Duplicate a form as a JSON-native draft or event import

post/api/epp/forms/{formId}/publish
Forms

Publish a form

get/api/epp/forms/{formId}/versions
Forms

List immutable published versions for a form

get/api/epp/forms/{formId}/submissions
Submissions

List submissions for a form

post/api/epp/forms/{formId}/submissions
Submissions

Submit a public response

get/api/epp/forms/{formId}/connector-packets
Connectors

List connector packets for a form

post/api/epp/forms/{formId}/uploads/initiate
Uploads

Create a public upload session for a published file field

put/api/epp/forms/{formId}/uploads/{uploadSessionId}/content
Uploads

Upload file content through the FormBuilderStudio app proxy

get/api/epp/forms/{formId}/submissions/{submissionId}/files/{fileId}/download
Uploads

Download an uploaded submission file

post/api/epp/connectors/{packetId}/ack
Connectors

Acknowledge or fail a connector packet

get/api/epp/events
Events

List event workspaces

get/api/epp/events/{eventId}/data
Events

Get event master data and mapped records

patch/api/epp/events/{eventId}/data
Events

Update one event-data record

post/api/epp/events/{eventId}/data
Events

Create one event-data record

delete/api/epp/events/{eventId}/data
Events

Delete one event-data record