Webhooks

Webhooks provide a real-time notification mechanism so that you can keep track of your projects without polling our API.

When a subscribed event occurs, Taskrabbit will send an HTTP POST request with a JSON payload to your configured endpoint.

Webhooks are delivered via Svix. Your endpoint URL and event subscriptions are configured in the Svix Partner Dashboard provided to you during onboarding. Svix handles retry logic, delivery logs, and endpoint management.

Payload Structure

All webhook payloads share the following common fields:

FieldTypeRequiredDescription
eventstring✅ YesThe event type name (e.g. project.completed).
project_uuidstring (UUID)✅ YesThe unique identifier for the project this event relates to.
timestampstring (ISO 8601)✅ YesThe datetime the event was processed.
agreement_external_referencestringNoYour own reference ID for the project, if one was provided at project creation.

Additional fields specific to each event type are described in the sections below.

─────────────────────────────────────────────────────

Events

The following events are available for subscription in the Svix Partner Dashboard:

Event NameDescription
project.completedA project's work has been completed by the Tasker.
project.canceledA project has been canceled.
project.rescheduledA project has been rescheduled to a new start time.

─────────────────────────────────────────────────────

project.completed

Fired when a project's work has been marked as completed.

Payload

FieldTypeRequiredDescription
eventstring✅ YesAlways "project.completed".
project_uuidstring (UUID)✅ YesThe unique identifier for the completed project.
timestampstring (ISO 8601)✅ YesThe datetime the completion event was processed.
agreement_external_referencestringNoYour reference ID for this project, if provided.

Example

{ "event": "project.completed", "project_uuid": "550e8400-e29b-41d4-a716-446655440000", "timestamp": "2025-01-22T10:00:00Z", "agreement_external_reference": "REF-12345" }

───────────────────────────────────────────────

project.canceled

Fired when a project has been canceled. Includes a reason code indicating why the cancellation occurred.

Payload

FieldTypeRequiredDescription
eventstring✅ YesAlways "project.canceled".
project_uuidstring (UUID)✅ YesThe unique identifier for the canceled project.
cancellation_reasonstring (enum)✅ YesThe reason the project was canceled. See Cancellation Reasons below.
timestampstring (ISO 8601)✅ YesThe datetime the cancellation occurred.
agreement_external_referencestringNoYour reference ID for this project, if provided.

Cancellation Reasons

ReasonDescription
order_canceledThe order was canceled by the partner or client.
delivery_delayedThe project was canceled due to a delivery delay.
changed_mindThe client changed their mind and canceled.
canceled_by_csThe project was canceled by Taskrabbit Customer Support.

Example

{ "event": "project.canceled", "project_uuid": "550e8400-e29b-41d4-a716-446655440000", "cancellation_reason": "order_canceled", "timestamp": "2025-01-22T10:00:00Z", "agreement_external_reference": "REF-12345" }

───────────────────────────────────────────────

project.rescheduled

Fired when a task within a project has been rescheduled to a new start time. Both the new and previous scheduled times are included so you can reconcile the change in your own system.

Payload

FieldTypeRequiredDescription
eventstring✅ YesAlways "project.rescheduled".
project_uuidstring (UUID)✅ YesThe unique identifier for the project whose task was rescheduled.
new_start_timestring (ISO 8601)✅ YesThe newly scheduled start time for the task.
previous_start_timestring (ISO 8601)✅ YesThe start time the task was previously scheduled for.
timestampstring (ISO 8601)✅ YesSet to the value of new_start_time.
agreement_external_referencestringNoYour reference ID for this project, if provided.

Example

{ "event": "project.rescheduled", "project_uuid": "550e8400-e29b-41d4-a716-446655440000", "new_start_time": "2025-06-15T09:15:00Z", "previous_start_time": "2025-06-15T07:00:00Z", "timestamp": "2025-06-15T09:15:00Z", "agreement_external_reference": "REF-12345" }

─────────────────────────────────────────────────────

Security & Verification

Svix signs every webhook payload with a secret key unique to your endpoint. You should always verify the signature before processing the payload. Verification libraries are available for most languages in the Svix documentation.

Unverified webhooks should be discarded.

Retries

If your endpoint returns a non-2xx HTTP status code or does not respond within the timeout window, Svix will automatically retry delivery with exponential backoff. You can view delivery attempts and manually replay events from your Svix Partner Dashboard.

To avoid duplicate processing, we recommend making your webhook handler idempotent — i.e., processing the same event more than once should produce the same result.