Skip to main content

Sign Agreement

Record a signature taken on a connected device β€” a counter tablet, a kiosk, your own app. The signature image is stored, the priced snapshot is frozen, and the signed PDF is generated and kept on the booking.

POST /v1/bookings/{id}/agreement/sign

Authentication​

Requires a valid API key with agreements:write scope.

Path Parameters​

ParameterTypeDescription
idintegerBooking ID

Request Body​

FieldTypeRequiredDescription
signed_namestringYesFull name of the person signing, max 190 characters
signaturestringYesThe signature image as a data:image/png;base64,… URI (PNG, JPG, GIF or WEBP; max ~2 MB encoded)

Request Example​

curl -X POST "https://app.equipdash.com/api/v1/bookings/4821/agreement/sign" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"signed_name": "Jane Doe",
"signature": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg…"
}'

Response​

Returns 200 OK with the agreement resource β€” status is signed, and signed_via is api. The requesting IP is recorded as part of the signing log printed on the PDF.

{
"data": {
"booking_id": 4821,
"status": "signed",
"status_label": "Signed",
"signing_url": null,
"signed_at": "2026-08-14T09:20:11+00:00",
"signed_name": "Jane Doe",
"signed_ip": "203.0.113.10",
"signed_via": "api",
"...": "..."
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-08-14T09:20:11+00:00"
}
}

Errors​

StatusCodeWhen
403agreements_disabledThe business has rental agreements switched off
409agreement_not_applicableThe booking has no rental items, so it has no agreement
404resource_not_foundNo booking with that ID belongs to this API key's business
422validation_errorsigned_name or signature missing
422agreement_sign_failedAlready signed, the name was blank, or the signature payload wasn't a usable image
Signing is final

An agreement can only be signed once. Send the request twice and the second call returns 422 β€” the first signature stands.