REST API

Sync jobs

Poll the status of asynchronous event create, update, and refund operations.

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 date events, 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 status is completed or failed.
  • A 404 Not Found response means the job ID doesn’t exist or doesn’t belong to the event in the URL — verify the event_id and id from 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.