> ## Documentation Index
> Fetch the complete documentation index at: https://docs.way.co/llms.txt
> Use this file to discover all available pages before exploring further.

# API Overview

> Conventions, base URLs, pagination, and versioning for the Way Partner API

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

| Environment | Base URL                          |
| ----------- | --------------------------------- |
| Production  | `https://api.letsway.com`         |
| Staging     | `https://api.staging.letsway.com` |

See [Environments](/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:

```
Authorization: Bearer way_sk_live_bMQ8BHPjMQX_97rJKxAVjkg
```

Each endpoint page lists the key types it accepts, and the **Try it** playground prompts for the key. See [Authentication](/authentication) for details. Older keys sent as `Way-Brand-Id` + `Way-Secret-Key` headers keep working - see [Legacy authentication](/legacy-authentication).

<Note>
  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.
</Note>

## Pagination

List endpoints return items alongside `meta` and `links` objects:

```json theme={null}
{
  "items": [ ... ],
  "meta": {
    "itemCount": 10,
    "itemsPerPage": 10,
    "currentPage": 1,
    "totalItems": 42,
    "totalPages": 5
  },
  "links": {
    "first": "...?page=1",
    "previous": "...?page=1",
    "next": "...?page=3",
    "last": "...?page=5"
  }
}
```

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 `amount`s from [Get bookings](/api-reference/bookings/get-bookings), and refunds.

<Warning>
  **One exception:** the `amount` in the [Create a booking](/api-reference/carts-and-checkout/create-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.
</Warning>

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](/api-reference/listings/get-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](/environments#rate-limits).
