Skip to content

Read offering variant

GET
/offerings/{offering_id}/variants/{variant_id}
curl --request GET \
--url https://quikstik-core.fly.dev/offerings/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/variants/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \
--header 'Authorization: Bearer <token>' \
--header 'x-tenant-id: 2489E9AD-2EE2-8E00-8EC9-32D5F69181C0'

Reads a single offering variant scoped to its parent offering, resolved from the governed catalog. Returns the variant’s structured shape: scheduled duration (duration_minutes), meeting_point, per-departure capacity, participant policy text, and the variant’s add_ons. Price and start-times live on the variant’s pricing schedule and availability surfaces respectively, not on this read. The variant must belong to the {offering_id} in the path; a mismatched or unknown id is 404.

offering_id
required
string format: uuid
variant_id
required
string format: uuid
x-tenant-id
required
string format: uuid

Tenant identifier (UUID).

Authn/authz semantics are intentionally TBD for this contract slice; this header exists to keep the contract explicitly multi-tenant from day 0.

Offering variant

Media typeapplication/json
object
variant_id
required
string format: uuid
offering_id
required
string format: uuid
display_name
required
string
units

Unit-of-sale label (e.g. per rider, per day); a free-text catalog label.

string
nullable
duration_minutes

Scheduled duration in minutes. Null where the catalog lock did not state a convertible value.

integer format: int32
nullable >= 1
meeting_point

Structured meeting point. Null where the catalog lock left it unspecified.

object
name
required

Display name of the meeting point.

string
address

Optional postal / street address.

string
nullable
capacity

Per-departure participant capacity. Null where the catalog lock left it TBD.

integer format: int32
nullable
participant_rules_text

Free-text participant policy (e.g. age/height rules), carried verbatim from the catalog lock.

string
nullable
add_ons
required

Add-ons / upgrades available on this variant (possibly empty).

Array<object>
object
add_on_id
required
string format: uuid
display_name
required
string
unit_price

Structured unit price in integer minor units. Null where the catalog lock left the add-on price TBD.

object
amount_minor
required

Amount in minor units (e.g. cents).

integer format: int64
currency
required
string
Allowed values: USD
notes
string
nullable
counts_as_participant_for_capacity

Whether selecting this add-on consumes a participant seat for capacity (e.g. the Island Time v1 Model T child carrier).

boolean
nullable
tbd_fields
required

Catalog fields the v1 lock left unresolved for this add-on (possibly empty).

Array<string>
Allowed values: Description Duration Capacity DeliveryFee AddOnPrice

Example

{
"add_ons": [
{
"unit_price": {
"currency": "USD"
},
"tbd_fields": [
"Description"
]
}
]
}

Malformed offering or variant id (not a UUID)

Media typeapplication/json
object
reason
required

Stable, machine-readable reason code (e.g. “sold_out”, “processor_not_configured”, “rail_refused”).

string

Example

{
"reason": "sold_out"
}

Missing or invalid session bearer token

Media typeapplication/json
object
reason
required

Stable, machine-readable reason code (e.g. “sold_out”, “processor_not_configured”, “rail_refused”).

string

Example

{
"reason": "sold_out"
}

The session’s effect authority does not cover this operation

Media typeapplication/json
object
reason
required

Stable, machine-readable reason code (e.g. “sold_out”, “processor_not_configured”, “rail_refused”).

string

Example

{
"reason": "sold_out"
}

No such variant under this offering for the caller’s tenant

Media typeapplication/json
object
reason
required

Stable, machine-readable reason code (e.g. “sold_out”, “processor_not_configured”, “rail_refused”).

string

Example

{
"reason": "sold_out"
}