Submit Waiver/Form Response
Submit a response to a waiver or form on behalf of a customer.
For customer feedback surveys with NPS tracking, see the dedicated Surveys API.
Endpointβ
POST /v1/waivers/{id}/responses
Path Parametersβ
| Parameter | Type | Description |
|---|---|---|
id | integer | Waiver/form ID |
Request Bodyβ
| Field | Type | Required | Description |
|---|---|---|---|
booking_id | integer | No | Link response to a booking |
customer_id | integer | No | Link response to a customer |
staff_id | integer | No | Staff member who collected the response |
responses | array | Yes | Array of field responses |
responses[].field_id | integer | Yes | The waiver form field ID |
responses[].value | mixed | Yes | The response value |
send_confirmation_email | boolean | No | Send confirmation emails (default: true) |
signed_on_behalf | boolean | No | Set true when an authorized adult signs for the participant (the form must allow signing on behalf) |
signer_name | string | Required when signed_on_behalf is true | The signer's full name |
signer_email | string | Required when signed_on_behalf is true | The signer's email address |
signer_relationship | string | Required when signed_on_behalf is true | parent, guardian, carer, partner, or other |
signer_names | object | No | The 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 Type | Value Format | Example |
|---|---|---|
text, shortText, longText | string | "John" |
email | string | "john@example.com" |
phone | string | "+1 555-123-4567" |
date | string (ISO 8601 or locale format) | "2026-01-15" |
singleChoice | string | "Option A" |
multipleChoice | array of strings | ["Option A", "Option C"] |
signature | string (base64 data URL) | "data:image/png;base64,..." |
starRating | integer (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_namesigner_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
publishedstatus 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β
| Parameter | Type | Description |
|---|---|---|
booking_id | integer | Filter by booking |
customer_id | integer | Filter by customer |
date_from | string | Filter from date (YYYY-MM-DD) |
date_to | string | Filter to date (YYYY-MM-DD) |
page | integer | Page number (default: 1) |
per_page | integer | Items per page (default: 20, max: 100) |
sort | string | Sort field: id, submission_date, created_at |
order | string | Sort 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.