A submitter is an individual signer within a submission. Each submitter is assigned to a role defined in the template, has their own secure signing link, and progresses through an independent status lifecycle. You can track when they opened, signed, or declined the document, pre-fill their fields, and resend invitations.Documentation Index
Fetch the complete documentation index at: https://docs.spitshake.io/llms.txt
Use this file to discover all available pages before exploring further.
Submitter object
The standard submitter object returned by list endpoints:| Field | Type | Description |
|---|---|---|
id | integer | Unique submitter identifier. |
uuid | string | UUID for this submitter instance. Unique per submission (not the same as the template submitter UUID). |
slug | string | URL-safe identifier used in the signing link (/s/{slug}). |
email | string | Submitter’s email address (encrypted at rest). |
name | string or null | Submitter’s full name (encrypted at rest). |
role | string | The template submitter role this person is assigned to (e.g., “Client”, “Witness”). |
status | string | Current status. See Status lifecycle. |
submission_id | integer | ID of the parent submission. |
opened_at | string or null | ISO 8601 timestamp when the submitter first opened the signing link. |
sent_at | string or null | ISO 8601 timestamp when the invitation email was sent. |
completed_at | string or null | ISO 8601 timestamp when the submitter completed and submitted their form. |
Full submitter object
When retrieving a single submitter by ID, the response includes additional detail:Additional fields in the detail response
| Field | Type | Description |
|---|---|---|
phone | string or null | Submitter’s phone number in E.164 format (encrypted at rest). |
external_id | string or null | Your custom identifier for mapping this submitter to an external system (e.g., CRM contact ID). |
declined_at | string or null | ISO 8601 timestamp when the submitter declined to sign, or null. |
values | object | Key-value map of the submitter’s field entries. Keys match the field key from the template schema. Includes both pre-filled and signer-entered values. |
metadata | object | Custom key-value pairs attached to this submitter (encrypted at rest). |
preferences | object | Submitter-level preferences including send_email and sign_mode. |
documents | array | Documents associated with this submitter’s completed form. |
submission_events | array | Audit trail of events specific to this submitter. Each event includes event, timestamp, actor, and ip_address. |
template | object | Summary of the template this submission was created from. |
submission | object | Summary of the parent submission. |
Status lifecycle
Each submitter progresses through a series of statuses independently from other submitters in the same submission.| Status | Code | Description |
|---|---|---|
waiting | 0 | The submitter’s turn has not arrived yet (in sequential signing) or the invitation has not been sent. |
sent | 1 | The invitation email has been sent. The submitter has not yet opened the signing link. |
opened | 2 | The submitter has opened the signing link at least once. |
completed | 3 | The submitter has filled all required fields and submitted the form. |
declined | 4 | The submitter explicitly declined to sign the document. |
expired | 5 | The submission’s expire_at timestamp passed before this submitter completed. |
In sequential signing order, submitters start in
waiting status and move to sent only when the previous submitter completes. In parallel signing, all submitters are sent invitations immediately and skip the waiting state.Status transitions
The status only moves forward — a submitter cannot go back to a previous status. The possible transitions are:| From | To | Trigger |
|---|---|---|
waiting | sent | Previous submitter completed (sequential) or submission created (parallel). |
sent | opened | Submitter clicks the signing link for the first time. |
opened | completed | Submitter fills all required fields and submits the form. |
opened | declined | Submitter clicks the decline button and confirms. |
waiting | expired | Submission expire_at reached. |
sent | expired | Submission expire_at reached. |
opened | expired | Submission expire_at reached. |
Listing submitters
Retrieve all submitters across your account, optionally filtered by submission, status, or external ID.Filter parameters
| Parameter | Type | Description |
|---|---|---|
submission_id | integer | Filter by parent submission. |
status | string | Filter by status: waiting, sent, opened, completed, declined, expired. |
external_id | string | Filter by your custom external ID. |
email | string | Filter by submitter email address. |
after | integer | Cursor for pagination (return items after this ID). |
before | integer | Cursor for pagination (return items before this ID). |
limit | integer | Items per page (1-100, default 10). |
Filter by submission
Retrieve all submitters for a specific submission:Filter by external ID
Find a submitter by your custom identifier:Retrieving a submitter
Get the full detail for a single submitter:Updating a submitter
Update a submitter’s details before they have completed their form. You can change their name, email, phone, external ID, metadata, and pre-filled values.Updatable fields
| Field | Type | Notes |
|---|---|---|
name | string | Update the submitter’s display name. |
email | string | Change the email address. If the invitation has been sent, use resend to send to the new address. |
phone | string | Phone number in E.164 format. |
external_id | string | Your custom identifier. |
metadata | object | Replaces the entire metadata object. Merge existing values client-side if you want to preserve them. |
values | object | Merges with existing values. Only the keys you provide are updated; other pre-filled values are preserved. |
Resending invitations
If a submitter has not received or has lost their invitation email, resend it:Resending updates the
sent_at timestamp. You can only resend to submitters in sent or opened status. Submitters in waiting status have not yet reached their turn in sequential signing.External ID mapping
Theexternal_id field lets you associate a submitter with a record in your own system — a CRM contact, a user account, an order ID, or any other identifier.
Setting external IDs at creation
Looking up by external ID
Common patterns
| Use case | External ID format | Example |
|---|---|---|
| CRM integration | CRM contact ID | crm_contact_12345 |
| User account mapping | Your app’s user ID | user_98765 |
| Order processing | Order or invoice number | order_2026-0042 |
| HR onboarding | Employee ID | emp_HR-2026-001 |
| Multi-system tracking | Composite key | salesforce:0015000000ABC123 |
Signing links
Each submitter has a unique signing link constructed from theirslug:
r7t2q9v4 signs at https://spitshake.io/s/r7t2q9v4.
When to use direct links
- Embedded flows: Generate the signing URL server-side and redirect the user, or embed it in an iframe.
- Custom emails: If you handle email delivery yourself (with
send_email: false), include this link in your email templates. - In-app signing: Open the signing link in a modal or new tab within your application.