Plans

Arrange the storefront order

curl -X POST https://api.subscriby.net/v1/projects/7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13/plans/order \
  -H "Authorization: Bearer sbt_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"plan_ids": ["c4e82f16-93a7-4d5b-b81c-6e0f27a94d3b", "b1a7c3d5-2e48-4f60-9a1b-7c5d3e820f94"]}'

Pins the order plans appear in on the public portal and in the bot; plan_ids is every plan you want pinned, first to last. Plans left out keep the built-in order (passes, then seasons, then subscriptions, cheapest first) after the pinned ones. Send an empty plan_ids to clear every pin. Answers 200 with the project's active plans in their new order, each in the same shape as a read, with position set on the pinned ones. The same list produces the same order and one plan.order_changed event per call.

post/v1/projects/{project}/plans/order

Request

  • Base URL: https://api.subscriby.net
  • URL: https://api.subscriby.net/v1/projects/{project}/plans/order
  • Auth: HTTP bearer

Path parameters

projectstring uuid required

The project, resolved by the route binder.

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

plan_idsstring[] required

Plan ids in storefront order, at most 200, each a plan of this project and none repeated. An empty list clears every pin.

Response

Array of PlanResource

Example response

{
  "data": [
    {
      "id": "c4e82f16-93a7-4d5b-b81c-6e0f27a94d3b",
      "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
      "kind": "subscription",
      "name": "Premium Monthly",
      "description": "Unlimited access to the research channel.",
      "price": "29.00",
      "currency": {
        "id": "8f27a0d4-63be-4915-8c07-1a5d9e34b628",
        "iso": "USD",
        "symbol": "$"
      },
      "active": true,
      "sales_cap": 10,
      "sales_cap_sold": 3,
      "cadence": "Per Month",
      "resources": [
        {
          "id": "b73c5f21-9d80-4a6e-8215-4f70ce13a9d6",
          "name": "Research channel",
          "kind": "telegram:supergroup",
          "connector": "telegram"
        }
      ],
      "billing": {
        "billing_cycle": "month",
        "billing_cycle_count": 1,
        "recurring": true,
        "trial_days": 7,
        "trial_type": "plan"
      },
      "pass": {
        "timezone": "America/New_York",
        "schedule_mode": "repeating",
        "recurrence": "weekly",
        "sales_cutoff_minutes": 60,
        "sales_cutoff_anchor": "before_start",
        "slots": [
          {
            "start_time": "09:00",
            "duration_minutes": 840
          }
        ],
        "upcoming_windows": [
          {
            "id": "3d5a8c72-b016-4e94-8fa7-61c209d4e738",
            "starts_at": "2026-09-20T13:00:00Z",
            "ends_at": "2026-09-21T03:00:00Z",
            "status": "scheduled"
          }
        ]
      },
      "pass_series": {
        "timezone": "America/New_York",
        "prevent_overlaps": true,
        "sales_cutoff_anchor": "before_start",
        "seat_cap": 50,
        "seats_taken": 37,
        "seats_remaining": 13,
        "starts_at": "2026-09-20T13:00:00Z",
        "ends_at": "2026-11-29T22:00:00Z",
        "window_count": 10,
        "presale_hours": 48,
        "windows": [
          {
            "id": "3d5a8c72-b016-4e94-8fa7-61c209d4e738",
            "plan_id": "0b8e6a2f-4c1d-4e3a-9f52-7d6c1b2a3e45",
            "plan_name": "Match Day Pass",
            "starts_at": "2026-09-20T13:00:00Z",
            "ends_at": "2026-09-20T16:00:00Z",
            "status": "scheduled"
          }
        ],
        "rules": [
          {
            "source_plan_id": "0b8e6a2f-4c1d-4e3a-9f52-7d6c1b2a3e45",
            "kind": "date_range",
            "from_at": "2026-09-01T00:00:00Z",
            "to_at": "2026-12-01T00:00:00Z"
          }
        ]
      },
      "created_at": "2026-05-18T10:05:00Z",
      "updated_at": "2026-05-18T10:05:00Z"
    }
  ]
}

Changes

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