Skip to content

Getting started

There is no credential-creation endpoint on THIS API (see the Vendor Integration Standard for why). Your FIRST credential is always issued by Linra during onboarding — self-service generation has no baseline to work from yet and is rejected until you hold at least one active credential.

Once you have that first credential, further credential management IS self-service, on a different surface: the Linra Omni Portal dashboard. Go to My Vendor API Credentials and generate additional credentials for the environment (staging or production) you need — a second environment, or a replacement after rotating a compromised secret. Self-service generation can only ever match the capabilities your existing active credentials already hold — it can never grant a NEW capability beyond that union; ask your onboarding contact for that. See the Vendor Integration Standard §11 for the full sequence.

Either way, you’ll end up with:

Client ID: vnd_9f8c2a1b4e6d4a7c9b0e3f2d1c8a5b6e
Client Secret: •••••••••••••••••••••••••••••••••••••••••••••• (shown once — copy it now)
Environment: Staging
Capabilities: Offers, Stock

Store both values in your own secret manager immediately — there is no “reveal secret” endpoint.

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/vendor/auth/token \
-H "Content-Type: application/json" \
-d '{
"clientId": "vnd_9f8c2a1b4e6d4a7c9b0e3f2d1c8a5b6e",
"clientSecret": "your-secret-here"
}'
{
"state": "SUCCESS",
"payload": {
"accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"tokenType": "Bearer",
"expiresIn": 300
}
}

The token is valid for 5 minutes and carries exactly the capabilities your credential was issued with, baked into the token itself — see Authentication & capabilities for the caching pattern you should build around this, and for what happens when you call an endpoint your token doesn’t have the capability for.

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

Terminal window
curl https://api-omni-stg.linra.net/api/v1/vendor/offers?pageSize=5 \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
{
"state": "SUCCESS",
"payload": {
"items": [],
"pagination": { "page": 1, "pageSize": 5, "totalCount": 0, "totalPages": 0 }
}
}

An empty list is expected for a brand-new credential — nothing has been submitted yet.

Terminal window
curl -X POST https://api-omni-stg.linra.net/api/v1/vendor/offers \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-d '{
"rawBrandName": "Example Brand",
"rawProductName": "Example EDP 100ml",
"cost": 145.00,
"costIsVatInclusive": false,
"declaredInStock": true,
"declaredStockQuantity": 25
}'

This submission enters the SAME review queue an internal Linra catalog reviewer already works — nothing you submit goes live until it’s approved. See Offers, cost & stock for the full field-ownership model (what applies instantly vs. what waits for review).