# API structure

> The StrideHQ API's base addresses, how resources are organised, and the conventions every request and response follows.

A StrideHQ API address has three parts:

```text
https://{base_address}/{api_version}/{endpoint}
```

For example:

```text
https://api.stridehq.ai/v1/creators
```

## Base URL

The base URL is the start of every API address. Endpoint addresses are always relative to it.

The base URL is made up of your environment's address and the API version. There are two environments:

| Environment | Base URL                             | Keys start with |
| ----------- | ------------------------------------ | --------------- |
| Sandbox     | `https://api.sandbox.stridehq.ai/v1` | `shq_test_`     |
| Production  | `https://api.stridehq.ai/v1`         | `shq_live_`     |

Use the base URL that matches your key. A sandbox key only works with the sandbox base URL, and a production key only works with the production one. Send a key to the wrong one and you get a `401` saying which address to use. See [Environments and sandbox](https://developers.stridehq.ai/api-documentation/environments-and-sandbox.md).

Every request must use HTTPS. Requests over plain HTTP are refused.

## API version

The version of the API. The StrideHQ API is on version 1, shown as `v1` in the address.

We add new fields and event types without changing the version, so make sure your code ignores fields it doesn't recognise. Anything that would break existing code comes in a new version, announced in the [changelog](https://developers.stridehq.ai/changelog.md) well in advance.

## Endpoint

Each endpoint is a resource you can work with, such as `/creators`, `/invoices` or `/payment_runs`. Some take an ID, such as `/creators/{id}`, and some take required or optional parameters. Every endpoint is described in the [API reference](https://developers.stridehq.ai/api-documentation/api-reference.md).

Endpoint addresses are lower case, with words joined by underscores. Use them exactly as the API reference shows them: `/v1/Payment_Runs` or `/v1/payment-runs` instead of `/v1/payment_runs` won't work.

## Requests and responses

- Requests and responses are JSON. Field names use snake_case.
- Amounts are whole numbers in the smallest currency unit, so £187.50 is `18750`, with a separate `currency` field.
- Dates and times are ISO 8601 in UTC, for example `2026-11-03T09:12:44Z`.
- IDs start with a prefix that shows their type: `cre_` for creators, `inv_` for invoices, `po_` for POs, `run_` for payment runs, `pay_` for payments and `evt_` for events. For example, `cre_8f3a2c1d9b7e4f60a1b2c3d4e5f60718`.
- Bank details are never returned in full. You'll only see the last four digits, as `bank_account_last4`.
