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.
Request
- Base URL: https://api.subscriby.net
- URL: https://api.subscriby.net/v1/projects/{project}/plans/order
- Auth: HTTP bearer
Path parameters
The project, resolved by the route binder.
Headers
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
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.