URL conventions
How to tell a platform-wide endpoint from a product-specific one, just by looking at its path.
The vendor API follows one structural rule:
A product-specific endpoint lives under its own product segment,
/api/v1/{product}/**(today:/api/v1/scent/**). Everything else is a platform/global endpoint, hosted directly in Identity, that works the same way regardless of which product(s) you supply through.
This is why the API Reference sidebar is split into a Platform group and a Scent group — the grouping mirrors this URL rule exactly.
Platform (global) endpoints
Section titled “Platform (global) endpoints”| Resource | Base path | Why it’s platform-level |
|---|---|---|
| Authentication | /api/v1/auth/token |
Credential exchange for a capability-scoped vendor token, identical whichever product(s) you supply. |
| Profile | /api/v1/profile |
Your vendor identity/VAT facts — one record, not one per product. |
| Credentials | /api/v1/credentials/** |
Your API credentials govern access to your account as a whole. |
Scent (product-specific) endpoints
Section titled “Scent (product-specific) endpoints”Everything under /api/v1/scent/** — offers, cost, stock, orders, returns, and Scent’s own
webhook subscription door, /api/v1/scent/webhooks/**. See Scent for the full
list and this product’s own state catalogue.
Webhook subscription management is per-product on purpose
Section titled “Webhook subscription management is per-product on purpose”You might expect webhook subscriptions to live at a neutral, platform-level path. Linra
deliberately made this per-product instead: each product gets its own webhook registration
door and its own event vocabulary (today: vendor.scent.order.assigned,
vendor.scent.offer.review-decision) — a future product would get its own
/api/v1/{product}/webhooks and its own event names. The delivery MECHANISM — HMAC signing,
retries, the envelope shape — is identical regardless of which product’s door you subscribed
through, and is covered once, generally, in
Webhooks & HMAC verification.

