# Stream API


The Stream API lets your own system do what your team does in the client portal: price a shipment with each carrier, book it, get the carrier's waybill, book the collection and follow the shipment to delivery. We can also tell your system when a shipment changes, through webhooks.

Every example on the reference pages is one the API really sent, recorded by the API's own tests, so what you read is what you get back. The guides' examples are shortened and use made-up prices.

Reference pages show each call in the language you pick on the site.



## Environments

| Environment | Base URL | Use it for |
|---|---|---|
| Sandbox | `https://sandbox-api.vatit-stream.com/client_api/v2` | Building and testing. The carriers are stand-ins, so nothing is really shipped or charged. |
| Production | `https://orders-production.vatit-stream.com/client_api/v2` | Real shipments. |

The two environments have separate logins and separate data. Build against the sandbox first, then switch the base URL and your login when you go live.

## Making requests

- Every request goes over **HTTPS**, and sends and receives **JSON**. Send `Content-Type: application/json` with a body.
- [Sign in](/authentication) once for a token, then send it on every other call as `Authorization: Bearer <token>`.
- Ids are numbers. Take the ids a call needs, such as a country or a purpose of shipment, from the [reference data](/reference/reference-data) calls.

## Your first shipment

1. [Sign in](/reference/sign-in) for a token.
2. [Create a quote](/reference/create-a-quote): describe the shipment, and we price it with each carrier that can take it.
3. [Create an order](/reference/create-an-order) from the estimate you choose.
4. [Create a waybill](/reference/create-a-waybill) once the order's documents are in.
5. [List pickup slots](/reference/list-pickup-slots), then [book a pickup](/reference/book-a-pickup).
6. Follow the shipment with [Get an order](/reference/get-an-order) and [List tracking events](/reference/list-tracking-events), or have us call you with a [webhook](/reference/create-a-webhook).

## Conventions

**Errors.** Every error has the same shape, `{ "success": false, "error": "...", "errors": [...] }`. See [Errors](/errors).

**Dates and times.** All times are UTC. Most dates come as `YYYY/MM/DD HH:MM:SS UTC`, for example `2026/10/23 07:14:46 UTC`. The exceptions:

| Field | Format |
|---|---|
| A pickup's `scheduled_date` | `YYYY/MM/DD HH:MM:SS UTC`, but the time is always midnight, so read only the date |
| A pickup's `time_from` and `time_to` | `HH:MM:SS` |
| An order's `pickup_date` | `YYYY-MM-DD` |
| Webhook payloads | ISO 8601, for example `2026-10-23T07:14:46Z` |

**Pages.** [List orders](/reference/list-orders) answers ten orders at a time, newest first. Ask for another page with `?page=2`, or for more per page with `?items_per_page=50`. The answer's `meta` gives `page_count` and `record_count`.

**Rate limits.** [Create a quote](/reference/create-a-quote), [Create an order](/reference/create-an-order) and the [Companies](/reference/companies) calls take 20 requests a minute. Past that they answer `429` until the minute is up.

**Retries.** Don't retry [Create a waybill](/reference/create-a-waybill) after a timeout: the first request may still be booking with the carrier. Read the order first, and call again only if it has no waybill.

## For AI tools

Every page has a Markdown version: add `.md` to its address, or use **Copy for LLM** at the top of the page. [`/llms.txt`](/llms.txt) lists every page, and [`/llms-full.txt`](/llms-full.txt) has all of them in one file. The [OpenAPI file](/openapi/client-api.yaml) describes every call.
