Skip to content

Getting started

API credentials are issued and managed entirely through the Linra Omni Portal dashboard — the partner API itself never creates, lists, or rotates credentials (see Credentials for why). Ask your Linra account contact for dashboard access, or — if you already have it — open API Credentials in your partner account area and generate a credential for the environment you want to integrate against (staging first, always).

Generating a credential shows you the secret exactly once:

Client ID: live_9f8c2a1b4e6d4a7c9b0e3f2d1c8a5b6e
Client Secret: •••••••••••••••••••••••••••••••••••••••••••••• (shown once — copy it now)
Environment: Staging

Store both values in your own secret manager immediately. If you lose the secret, generate a new credential and deactivate the old one — there is no “reveal secret” endpoint, by design.

2. Exchange the credential for an access token

Section titled “2. Exchange the credential for an access token”
Terminal window
curl -X POST https://api-omni-stg.linra.net/api/v1/auth/token \
-H "Content-Type: application/json" \
-d '{
"clientId": "live_9f8c2a1b4e6d4a7c9b0e3f2d1c8a5b6e",
"clientSecret": "your-secret-here"
}'
{
"state": "SUCCESS",
"payload": {
"accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"tokenType": "Bearer",
"expiresIn": 300
}
}

The token is valid for 5 minutes (see Authentication & tokens for why, and for the caching pattern you should build around this from day one). The token’s signed env claim is bound to the credential’s own environment — a staging credential can never mint a token that works against production, and vice versa (see Environments).

Every other /api/v1 request carries the token as a bearer credential:

Terminal window
curl https://api-omni-stg.linra.net/api/v1/scent/catalog/scents?pageSize=5 \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
{
"state": "SUCCESS",
"payload": {
"items": [
{ "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "name": "Example Scent", "isActive": true, "...": "..." }
],
"pagination": { "page": 1, "pageSize": 5, "totalCount": 1, "totalPages": 1 }
}
}