When you create, update, or refund an event, the API responds immediately with the event payload but performs follow-up work asynchronously — recurrence fan-out, ticket structure setup, and (for Shopify-installed companies) Shopify product mirroring.
Each async operation returns an X-Event-Sync-Job-ID response header. If your integration needs to wait for the work to finish before proceeding (e.g., a bulk import script that creates an event then immediately imports tickets), poll the sync job until status is completed or failed.
Get sync job
GET /events/{event_id}/sync_jobs/{id}
curl -X GET \
https://app.guestmanager.com/api/public/v2/events/71390/sync_jobs/4291 \
-H 'Authorization: Token abcdefg' \
-H 'Content-Type: application/json'
Sample response
{
"data": {
"id": 4291,
"kind": "save",
"status": "pending",
"message": null,
"description": {
"title": "Event is now syncing to Shopify...",
"content": "Please wait while the event syncs and product(s) are created in your store."
},
"progress": {
"completed": 14,
"total": 22,
"percent": 64
}
}
}
Response fields
| Field | Type | Description |
|---|---|---|
id |
integer |
Sync job ID. Matches the X-Event-Sync-Job-ID header from the originating request. |
kind |
string |
save (create or update) or refund. |
status |
string |
pending, completed, or failed. Poll until non-pending. |
message |
string |
Optional human-readable message — populated for some failure modes. |
description |
object |
{ title, content } strings suitable for display in a UI. The default copy mentions Shopify; non-Shopify customers can ignore the wording. |
progress |
object |
{ completed, total, percent } — overall progress across the underlying job batch. |
Polling guidance
- Start polling with a delay — the sync job typically takes 1–5 seconds for simple
dateevents, longer for recurring events with many occurrences. - Use exponential backoff: 1s → 2s → 4s → 8s, capped at 15s. Most jobs complete in the first two polls.
- Stop polling when
statusiscompletedorfailed. - A
404 Not Foundresponse means the job ID doesn’t exist or doesn’t belong to the event in the URL — verify theevent_idandidfrom the original request headers. - The underlying Sidekiq batch is queryable for the lifetime of the sync job record. Long after completion (weeks+), you can still fetch the final status.
What happens for non-Shopify customers
The sync job runs the same pipeline regardless of merchant type — recurrence generation, ticket structure setup, etc. For Shopify-installed companies, an additional product-mirroring step runs after the structure is built. For non-Shopify companies, that step is skipped silently and the job completes normally.
The description.title text mentions Shopify specifically; if you need non-Shopify-friendly copy in your own UI, render your own message based on status rather than using description.title verbatim.