Pass Windows

Place a pass window by hand

Places a window by hand on a kind: pass plan. This is how schedule_mode: fixed gets its dates, and how a repeating plan gets the one-off that does not fit its pattern.

curl -X POST https://api.subscriby.net/v1/projects/$PROJECT_ID/plans/$PLAN_ID/pass-windows \
  -H "Authorization: Bearer $SUBSCRIBY_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "starts_at": "2026-09-20 09:00",
    "duration_minutes": 180
  }'

Answers 201 with the new window: status: scheduled, source: manual, holders: 0. The request above and "starts_at": "2026-09-20T09:00:00-04:00" describe the same instant for a plan in America/New_York, and both come back as "2026-09-20T13:00:00+00:00". Raises pass.window_scheduled with source: manual.

A manual window is never touched by regeneration: editing pass.slots on the plan rebuilds the generated windows and leaves this one where you put it. Every pass series with a rule is asked to look at the new date afterwards, so a matching series absorbs it as described on the Plans page.

Each refusal below is a 422 VALIDATION_FAILED naming the field, the same wording the dashboard's panel shows.

post/v1/projects/{project}/plans/{plan}/pass-windows

Request

  • Base URL: https://api.subscriby.net
  • URL: https://api.subscriby.net/v1/projects/{project}/plans/{plan}/pass-windows
  • Auth: HTTP bearer

Path parameters

projectstring uuid required

The project, resolved by the route binder.

planstring uuid required

The plan, resolved within the project.

Headers

Idempotency-Keystring uuid required

A key unique to this operation, such as a fresh UUID. The same key replays the original 2xx response for 24 hours (with Idempotent-Replay: true), so a retry after a timeout never repeats the write; the same key with a different body is refused with 409.

Request body

starts_atstring date-time required

When access opens, ISO 8601. A value with no offset is read as wall-clock time in the plan's timezone, exactly as the dashboard authors it; a value with an offset or Z is the instant it names. Must be in the future, judged in the plan's own zone.

duration_minutesinteger required

How long the window lasts, a whole number of minutes, at least 1. The plan's configured floor and ceiling apply: 5 minutes and 30 days by default.

Response

The window.

Example response

{
  "data": {
    "id": "3d5a8c72-b016-4e94-8fa7-61c209d4e738",
    "plan_id": "c4e82f16-93a7-4d5b-b81c-6e0f27a94d3b",
    "plan_name": "Match Day Pass",
    "starts_at": "2026-09-20T13:00:00+00:00",
    "ends_at": "2026-09-20T16:00:00+00:00",
    "timezone": "America/New_York",
    "local_range": "Sun 20 Sep 2026, 09:00 – 12:00 EDT",
    "duration_minutes": 180,
    "status": "scheduled",
    "source": "generated",
    "sellable": true,
    "holders": 38
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.