Skip to content

Free tier: one active pipeline

On the Free tier, each webhook URL (Bearer token) can have one active job_id at a time. That keeps server resources predictable and matches a single Live Activity slot for many setups.

What “one active pipeline” means

  • The first successful start for a new job_id acquires the lock for that URL.
  • Further start requests that use a different job_id return 403 FREE_TIER_JOB_LOCKED until the current job ends or the lock expires.
  • A second start for the same job_id while it is already running returns 409 ACTIVITY_ALREADY_RUNNING. Use updates instead.
  • Updates to the same job_id always work (update / implicit update).

Switch to a different job_id

  1. End the current job (same job_id as the running activity):
Terminal window
curl -X POST 'https://YOUR_HOST/notify' \
-H 'Authorization: Bearer YOUR_UNIQUE_ID' \
-H 'Content-Type: application/json' \
-d '{"job_id":"my-old-job","action":"end","message":"Finished","status":"success"}'
  1. Then start your new pipeline with a new job_id:
Terminal window
curl -X POST 'https://YOUR_HOST/notify' \
-H 'Authorization: Bearer YOUR_UNIQUE_ID' \
-H 'Content-Type: application/json' \
-d '{"job_id":"my-new-job","title":"New run","message":"Starting","status":"running"}'

If end fails because there is no Live Activity update token (for example the activity was dismissed long ago), use the expiresAt time from a previous FREE_TIER_JOB_LOCKED response, or open the app and use Resync server registration in Settings → Webhook (same URL and token; reconnects device state).

Pro tier

Pro removes the single active job_id restriction so multiple concurrent jobs are allowed (subject to iOS system limits for Live Activities).