Skip to main content

Submit Waiver/Form Response

Submit a response to a waiver or form on behalf of a customer.

Looking for Surveys?

For customer feedback surveys with NPS tracking, see the dedicated Surveys API.

Endpoint​

POST /v1/waivers/{id}/responses

Path Parameters​

ParameterTypeDescription
idintegerWaiver/form ID

Request Body​

FieldTypeRequiredDescription
booking_idintegerNoLink response to a booking
customer_idintegerNoLink response to a customer
staff_idintegerNoStaff member who collected the response
responsesarrayYesArray of field responses
responses[].field_idintegerYesThe waiver form field ID
responses[].valuemixedYesThe response value
send_confirmation_emailbooleanNoSend confirmation emails (default: true)
signed_on_behalfbooleanNoSet true when an authorized adult signs for the participant (the form must allow signing on behalf)
signer_namestringRequired when signed_on_behalf is trueThe signer's full name
signer_emailstringRequired when signed_on_behalf is trueThe signer's email address
signer_relationshipstringRequired when signed_on_behalf is trueparent, guardian, carer, partner, or other
signer_namesobjectNoThe name typed beside each signature, keyed by field ID β€” see Signature name and date

Signing Below the Required Age​

Read guardian_signing_under_age from the waiver. For a participant below that age, send the participant’s date of birth in the waiver’s date-of-birth field and set signed_on_behalf to true, with the adult’s name, email and relationship. A missing or invalid birthday, a future birthday or a minor’s self-signature returns HTTP 422 before a response is saved. Participants at the threshold age or older may sign for themselves.

Field Value Types​

Different field types expect different value formats:

Field TypeValue FormatExample
text, shortText, longTextstring"John"
emailstring"john@example.com"
phonestring"+1 555-123-4567"
datestring (ISO 8601 or locale format)"2026-01-15"
singleChoicestring"Option A"
multipleChoicearray of strings["Option A", "Option C"]
signaturestring (base64 data URL)"data:image/png;base64,..."
starRatinginteger (1-5)4

Signature Name and Date​

A signature field can be set up (in the form builder) to record when it was signed and to ask the person signing to type their name beside it.

  • Date signed is stamped by EquipDash in the supplier's timezone. You do not send it, and it cannot be set by the caller.
  • Name is optional and comes from you, in signer_names: an object keyed by the signature field's ID.
"signer_names": {
"12": "Jane Doe",
"15": "Sam Patel"
}

A name is stored only when the field it targets is a signature (or initials) box on this form that is set to ask for a name, and only when that box was actually signed. Names for any other field are ignored rather than rejected, so a client can send the same map to every form without special-casing.

signer_names is not signer_name

signer_name (singular, above) records the one authorized adult who signed on the participant's behalf for the whole response. signer_names (plural) records who signed each individual signature box, so a form with two signatures names both.

Both values come back on the matching entry in responses[], and only there. Signature URLs expire after 15 minutes; request the response again for a fresh URL:

{
"field_id": 12,
"field_label": "Signature",
"field_type": "signature",
"value": "https://app.equipdash.com/waivers-forms/responses/fields/123/signature?expires=1706785200&signature=abc123",
"signed_at": "2026-02-01T10:00:00+00:00",
"signer_name": "Jane Doe"
}

Example Request​

curl -X POST "https://app.equipdash.com/api/v1/waivers/1/responses" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"booking_id": 123,
"customer_id": 456,
"responses": [
{
"field_id": 10,
"value": "John Doe"
},
{
"field_id": 11,
"value": "john@example.com"
},
{
"field_id": 12,
"value": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
},
{
"field_id": 13,
"value": true
}
],
"signer_names": {
"12": "Jane Doe"
},
"send_confirmation_email": true
}'

Response​

{
"data": {
"id": 1,
"waiver_form_id": 1,
"booking_id": 123,
"customer_id": 456,
"staff_id": null,
"submission_date": "2026-02-01T10:00:00+00:00",
"waiver": {
"id": 1,
"name": "Rental Waiver",
"type": "waiver"
},
"customer": {
"id": 456,
"first_name": "John",
"last_name": "Doe",
"email": "john@example.com"
},
"booking": {
"id": 123,
"status": "confirmed"
},
"responses": [
{
"field_id": 10,
"field_label": "Full Name",
"field_type": "fullName",
"value": "John Doe"
},
{
"field_id": 11,
"field_label": "Email",
"field_type": "email",
"value": "john@example.com"
},
{
"field_id": 12,
"field_label": "Signature",
"field_type": "signature",
"value": "https://app.equipdash.com/waivers-forms/responses/fields/123/signature?expires=1706785200&signature=abc123",
"signed_at": "2026-02-01T10:00:00+00:00",
"signer_name": "Jane Doe"
},
{
"field_id": 13,
"field_label": "I agree to the terms",
"field_type": "singleChoice",
"value": "true"
}
],
"created_at": "2026-02-01T10:00:00+00:00"
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-02-01T10:00:00+00:00"
}
}

Error Responses​

Waiver Not Published​

{
"error": {
"code": "validation_error",
"message": "The given data was invalid.",
"details": [
{
"field": "waiver",
"message": "This waiver/form is not accepting responses."
}
]
}
}

Missing Required Fields​

{
"error": {
"code": "validation_error",
"message": "The given data was invalid.",
"details": [
{
"field": "responses",
"message": "Missing required fields: Full Name, Email, Signature"
}
]
}
}

Notes​

  • The waiver/form must be in published status to accept responses
  • Signatures can be submitted as base64-encoded data URLs
  • Multiple choice fields accept an array of selected options
  • Confirmation emails are sent to admins and customers by default
  • For customer feedback surveys with NPS tracking, see Surveys

List Responses

Get all responses for a waiver/form.

Endpoint​

GET /v1/waivers/{id}/responses

Query Parameters​

ParameterTypeDescription
booking_idintegerFilter by booking
customer_idintegerFilter by customer
date_fromstringFilter from date (YYYY-MM-DD)
date_tostringFilter to date (YYYY-MM-DD)
pageintegerPage number (default: 1)
per_pageintegerItems per page (default: 20, max: 100)
sortstringSort field: id, submission_date, created_at
orderstringSort direction: asc or desc

Example Request​

curl -X GET "https://app.equipdash.com/api/v1/waivers/1/responses?date_from=2026-01-01&per_page=10" \
-H "Authorization: Bearer YOUR_API_KEY"

Response​

{
"data": [
{
"id": 1,
"waiver_form_id": 1,
"booking_id": 123,
"customer_id": 456,
"submission_date": "2026-02-01T10:00:00+00:00",
"customer": {
"id": 456,
"first_name": "John",
"last_name": "Doe",
"email": "john@example.com"
},
"responses": [...],
"created_at": "2026-02-01T10:00:00+00:00"
}
],
"meta": {
"current_page": 1,
"per_page": 10,
"total": 25,
"total_pages": 3
}
}

Get Response

Get a single form response by ID.

Endpoint​

GET /v1/waivers/{id}/responses/{responseId}

Example Request​

curl -X GET "https://app.equipdash.com/api/v1/waivers/1/responses/1" \
-H "Authorization: Bearer YOUR_API_KEY"

Response​

Returns the full response object as shown in the Submit Response section.