Getting started
The Montavire API is a versioned REST API for inbound supply chain and procurement:
suppliers, factories, products, purchase orders, shipments, deliveries, packing
and labels, warehouses, and more. Use it to wire Montavire into your ERP, ingest ASN
feeds from freight forwarders, or build your own tooling on top of your tenant.
This guide takes you from zero to your first authenticated request.
Base URL
All endpoints live under /v1 on your environment's API host:
| Environment | Base URL |
|---|---|
| Production | https://api.montavire.com/v1 |
| UAT | https://api-uat.montavire.com/v1 |
For example GET https://api.montavire.com/v1/suppliers. The reference lists
each path in its full form (/api/v1/suppliers); the API host accepts both, so
use whichever your tooling produces. The API host serves only the API and the
AI assistant endpoint: anything else there answers 404.
1. Get an API key
- Sign in to Montavire as an admin.
- Go to Developer → API keys.
- Create a key, choose the scopes it should carry (see Authentication), and copy it.
Choose Test key to start: test keys (mv_test_…) work on a separate set of
sample data, so nothing you try touches your real data. When you are ready,
create a Live key (mv_live_…) with the same scopes and swap it in. Treat a
key like a password: it carries the access of the scopes you granted it, for
your account only.
The key is shown once at creation. Store it in your secret manager. If you lose
it, revoke it and mint a new one.
2. Make your first request
Authenticate every request with the X-API-Key header. Here is a paginated read
of your suppliers:
curl https://api.montavire.com/v1/suppliers \
-H "X-API-Key: mv_live_xxxxxxxxxxxxxxxxxxxxxxxx"A successful response is a cursor page:
{
"data": [
{
"id": "8f1d2c3a-…",
"company_name": "Acme Corp",
"contact_email": "[email protected]",
"enabled": true
}
],
"next_cursor": "eyJpZCI6…",
"has_more": true
}JSON is snake_case on the way in and out. Pagination is cursor-based: keep
passing next_cursor back as ?cursor= until it comes back null. See
Conventions for the full rules.
3. Create something (idempotently)
Writes are POST / PATCH. Send an Idempotency-Key so a retry after a network
blip never creates a duplicate:
curl -X POST https://api.montavire.com/v1/suppliers \
-H "X-API-Key: mv_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"company_name": "Acme Corp",
"contact_email": "[email protected]"
}'Replaying the same request with the same Idempotency-Key and body returns the
original 201 response without creating a second supplier. Reusing the key with a
different body returns 409 Conflict.
4. Explore the reference
The full endpoint reference (request and response schemas for all 18 resource
groups) is in the API Reference section of these docs, generated directly from
the OpenAPI contract.
Next steps
- Authentication: keys, scopes, environments.
- Conventions: pagination, idempotency, field casing, versioning.
- Errors and rate limits: problem documents and throttling.
- Webhooks: get pushed events instead of polling.
- MCP: let AI agents read your supply chain.
Updated about 1 hour ago

