BillyDocumentation

Retrieve an offer

Retrieves a single offer by its identifier — the same object `GET /catalog/offers` lists, discriminated on `type` the same way. This route accepts no filter, so its `pricing[]` is always complete: it is the view that makes an offer's catalog authoritative, and the one to fall back to after a filtered list. Returns 404 when the offer does not exist or does not belong to your organization.

Preview release

This operation is only available on the preview release target — send Billy-API-Version: preview to reach it. Preview has no stability promise: its routes and payloads can change without notice, so pin a dated release before you depend on one.
GET
/v1/catalog/offers/{offer_id}

Retrieves a single offer by its identifier — the same object GET /catalog/offers lists, discriminated on type the same way. This route accepts no filter, so its pricing[] is always complete: it is the view that makes an offer's catalog authoritative, and the one to fall back to after a filtered list.

Returns 404 when the offer does not exist or does not belong to your organization.

Authorization

HTTPBearer
AuthorizationBearer <token>

API key authentication. Format: Bearer billy:o:<organization_id>:<api_key>

Example: Bearer billy:o:yyyyyyyyyyyyyyyy:xxxxxxxxxxxxxxxxx

In: header

Path Parameters

offer_id*Offer Id

Header Parameters

Billy-API-Version*string

Requested API version. Current context: preview.

Default"preview"

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/catalog/offers/string" \  -H "Billy-API-Version: preview"
{  "offerId": "331704d8-50bf-4e99-8d82-95c4974b1a2b",  "type": "TICKET",  "name": "Pass 2 jours",  "description": "<p>Accès aux deux journées</p>",  "eventId": "168c36ec-2e28-4312-be93-8893f0cc4d5e",  "currency": "EUR",  "images": [],  "tags": [    "pass"  ],  "minQuantityPerOrder": 1,  "maxQuantityPerOrder": 10,  "compareAtPrice": 55,  "createdAt": "2026-08-01T10:00:00+00:00",  "vatRate": 0.2,  "defaultMaximumCapacity": 500,  "attendeeFormId": "5d6e7f80-9a0b-4c1d-8e2f-3a4b5c6d7e8f",  "pricing": [    {      "pricingId": "9f2c1b44-77aa-4f10-9c3e-0d1b2e3f4a5b",      "name": "Tarif plein",      "price": 45,      "bundleOfferId": null,      "resaleEnabled": true    },    {      "pricingId": "b3e7d901-1c22-4a55-8f6d-7e8f9a0b1c2d",      "name": "Tarif étudiant",      "price": 32,      "bundleOfferId": null,      "resaleEnabled": false    },    {      "pricingId": "c4f8ea12-2d33-4b66-9a7e-8f9a0b1c2d3e",      "name": "Pass festival 3 dates",      "price": 36,      "bundleOfferId": "7a1b2c3d-4e5f-4061-8172-93a4b5c6d7e8",      "resaleEnabled": true    }  ],  "inventory": [    {      "inventoryId": "e1f2a3b4-c5d6-4e7f-8091-a2b3c4d5e6f7",      "sessionId": "11223344-5566-4778-899a-bbccddeeff00",      "totalStock": 500,      "availableStock": 412    }  ]}