Skip to main content
The Way API is designed following REST principles, ensuring a consistent and intuitive experience for developers. Each endpoint features predictable, resource-oriented URLs, and the API reliably returns JSON-encoded responses. We adhere to standard HTTP response codes, authentication mechanisms, and HTTP methods (verbs) for a seamless integration experience.

Base URLs

See Environments for how the two differ and how to get staging credentials.

Authentication

Requests are authenticated with an API key sent as a bearer token:
Each endpoint page lists the key types it accepts, and the Try it playground prompts for the key. See Authentication for details. Older keys sent as Way-Brand-Id + Way-Secret-Key headers keep working - see Legacy authentication.
If you manage multiple brands, one organization key covers all of them: most brand-scoped endpoints accept an organization key as well as a brand key. On those endpoint pages, use the dropdown in the Authorizations section to switch between the two.

Pagination

List endpoints return items alongside meta and links objects:
Use the page and limit query parameters to page through results.

Amounts and currency

Monetary fields are expressed in major units of the brand’s currency: 150 means $150.00 for a USD brand, and decimals are allowed (150.75). This applies to price tiers, advertisedPrice/startingPrice, the payment intent’s totalNetAmount, booking amounts from Get bookings, and refunds.
One exception: the amount in the Create a booking response echoes the Stripe payment intent for card payments, which is in minor units - 15000 there is $150.00. For cash and other non-card bookings the same field is in major units. Don’t use that field for pricing or reconciliation; use the payment intent’s totalNetAmount or the booking’s amount from Get bookings instead.
Amounts in Stripe objects (payment intents, receipts) are always in Stripe’s minor units - don’t compare them 1:1 with Way amounts.

API versions

Endpoints are versioned in the URL path (/v1, /v2, /v3). Higher versions supersede lower ones per endpoint, not across the whole API - most of the surface is /v1 and fully supported. Where a newer version exists, the older endpoint is marked deprecated on its reference page with a link to its replacement (for example, Get all listings replaces the v2 listings endpoints). Deprecated endpoints keep working, but new integrations should use the newest version of each endpoint.

Rate limits

Rate-limited endpoints allow 400 requests per 60 seconds. See Environments.