List Waivers & Forms
Retrieve a paginated list of waivers and forms.
Endpointโ
GET /v1/waivers
Authenticationโ
Requires an API key with the waivers:read scope.
Query Parametersโ
| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | 1 | Page number |
per_page | integer | 15 | Items per page (max 100) |
type | string | - | Filter by type: waiver, form |
status | string | - | Filter by status: active, inactive |
Responseโ
Success (200 OK)โ
{
"data": [
{
"id": 1,
"name": "Liability Waiver",
"type": "waiver",
"status": "active",
"unique_code": "LW-001",
"total_pages": 2,
"apply_to_all_products": true,
"apply_to_all_experiences": true,
"fields": [
{
"id": 1,
"field_type": "signature",
"label": "Participant Signature",
"placeholder": null,
"is_required": true,
"page_number": 1,
"position": 1
},
{
"id": 2,
"field_type": "checkbox",
"label": "I agree to the terms and conditions",
"placeholder": null,
"is_required": true,
"page_number": 1,
"position": 2
}
],
"responses_count": 156,
"created_at": "2025-01-01T00:00:00+00:00",
"updated_at": "2025-06-15T10:30:00+00:00"
},
{
"id": 2,
"name": "Emergency Contact Form",
"type": "form",
"status": "active",
"unique_code": "ECF-001",
"total_pages": 1,
"apply_to_all_products": false,
"apply_to_all_experiences": true,
"fields": [
{
"id": 10,
"field_type": "text",
"label": "Emergency contact name",
"placeholder": null,
"is_required": true,
"page_number": 1,
"position": 1
}
],
"responses_count": 89,
"created_at": "2025-03-01T00:00:00+00:00",
"updated_at": "2025-06-15T10:30:00+00:00"
}
],
"meta": {
"current_page": 1,
"per_page": 15,
"total": 5,
"total_pages": 1,
"request_id": "req_abc123",
"timestamp": "2026-01-15T12:00:00+00:00"
}
}
Response Fieldsโ
Waiver/Formโ
| Field | Type | Description |
|---|---|---|
id | integer | Unique identifier |
name | string | Waiver/form name |
type | string | waiver or form |
status | string | active or inactive |
unique_code | string | Unique identifier code |
total_pages | integer | Number of pages |
apply_to_all_products | boolean | Auto-applied to all products |
apply_to_all_experiences | boolean | Auto-applied to all experiences |
fields | array | Form field definitions |
responses_count | integer | Total number of responses |
created_at | string | ISO 8601 datetime |
updated_at | string | ISO 8601 datetime |
Field Typesโ
| Type | Description |
|---|---|
text | Single line text input |
textarea | Multi-line text input |
email | Email input |
phone | Phone number input |
number | Numeric input |
date | Date picker |
checkbox | Single checkbox |
select | Dropdown selection |
radio | Radio button group |
signature | Signature capture |
rating | Star rating |
file | File upload |
Field Objectโ
Each entry in fields includes:
| Field | Type | Description |
|---|---|---|
id | integer | Field identifier (referenced by conditions.rules[].field_id) |
field_type | string | The field type (see above) |
label | string | Question/label shown to the customer |
placeholder | string|null | Hint text |
is_required | boolean | Whether the field must be answered (ignored when the field is hidden by conditional logic) |
page_number | integer | Page the field appears on |
position | integer | Order within the page |
options | array|null | Choice labels keyed by index, for singleChoice / multipleChoice. Conditional-logic rule values reference these indexes (e.g. "0" = the first option) |
conditions | object|null | Conditional logic. null = always shown. When present, the field's visibility depends on its rules matching earlier answers |
Conditions Objectโ
When a field is conditional, conditions has this shape:
{
"effect": "hide",
"match": "all",
"rules": [
{ "field_id": 1, "operator": "is", "value": "0" }
],
"rule_id": "r_ab12cd34"
}
| Field | Type | Description |
|---|---|---|
effect | string|absent | show (or absent) = the field appears only when the rules match; hide = the field is hidden when the rules match and shown otherwise |
match | string | all (every rule must match) or any (at least one) |
rules | array | One or more rules |
rules[].field_id | integer | The field whose answer is tested. For a one-off (per-field) condition this is always an earlier field; a multi-field rule may also reference a later field |
rules[].operator | string | is, is_not, includes, gte, lte, answered, not_answered |
rules[].value | string | Value to compare against (omitted for answered / not_answered). For choice sources this is the option index from options |
rule_id | string|absent | Present when the field belongs to a multi-field show/hide rule authored in the form builder's Logic panel. Every field carrying the same rule_id is driven by the same condition โ group by it to reconstruct the rule. Absent for one-off per-field conditions |
A consumer rendering the form should evaluate conditions against the answers given so far: with effect: "show" (or absent) show the field only when the rules match; with effect: "hide" hide it when they match. This is identical to how EquipDash's own form renderer and widget checkout behave.
Errorsโ
| Status | Code | Description |
|---|---|---|
| 401 | authentication_required | No API key provided |
| 401 | invalid_api_key | Invalid API key |
| 403 | insufficient_scope | API key lacks waivers:read scope |
Example Requestโ
curl -X GET "https://app.equipdash.com/api/v1/waivers?type=waiver&status=active" \
-H "Authorization: Bearer eqd_live_abc123xyz789..."