Skip to content

Create a scent order from the caller's own open cart

POST
/api/v1/orders/scent
curl --request POST \
--url https://api-omni.linra.net/api/v1/orders/scent \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "partnerId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "externalReference": "example", "geoScopeId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "sagaId": "example", "shippingAddress": { "recipient": "example", "line1": "example", "line2": "example", "city": "example", "region": "example", "postalCode": "example", "country": "example", "phone": "example" }, "customerRef": "example", "partnerTaxRegistrationNumber": "example", "partnerIsVatRegistered": false, "lockId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" }'

Order LINES are never part of this request — they are taken from the partner’s (optionally customerRef-scoped) open cart. Use GET /api/v1/scent/cart/checkout-preview first to validate pricing/availability, and optionally lock the priced lines with ?lock=true before calling this endpoint with the returned lockId — see the Cart preview & price locks guide.

Media typeapplication/json
object
partnerId
required
string format: uuid
externalReference
required

Your own idempotency key.

string
geoScopeId
required
string format: uuid
sagaId
required
string
shippingAddress
required
object
recipient
required
string
line1
required
string
line2
string
nullable
city
required
string
region
string
nullable
postalCode
string
nullable
country
required

ISO 3166-1 alpha-2 country code.

string
phone
required
string
customerRef

Must match the customerRef used when building the cart being checked out.

string
nullable
partnerTaxRegistrationNumber
string
nullable
partnerIsVatRegistered
boolean
lockId

Optional — a price lock obtained from checkout-preview?lock=true. See the price-locks guide.

string format: uuid
nullable

Order accepted.

Media typeapplication/json
object
state
required
string
payload
required
details
object
payload
required
object
orderId
string format: uuid
orderGlobalId
string
status
string
Example
{
"state": "SUCCESS"
}

Validation failure, INCLUDING an invalid, expired, or stale lockId (VALIDATION_PRICE_LOCK_INVALID / VALIDATION_PRICE_LOCK_EXPIRED — see the price-locks guide) as well as ordinary field validation.

Media typeapplication/json

The envelope every /api/v1 ERROR response uses. state carries the machine-readable error code (see the Errors guide).

object
state
required
string
payload
required

Always null on an error response.

object
details
object
Example
{
"state": "NOT_FOUND_ORDER",
"payload": null
}

Duplicate/in-progress/intervention-required prior attempt, or a checkout race on the same cart.

Media typeapplication/json

The envelope every /api/v1 ERROR response uses. state carries the machine-readable error code (see the Errors guide).

object
state
required
string
payload
required

Always null on an error response.

object
details
object
Examples
{
"state": "CONFLICT_CART_HAS_PENDING_ORDER",
"payload": null,
"details": {}
}

A business-rule rejection — most commonly the margin floor (BUSINESS_MARGIN_BELOW_FLOOR / BUSINESS_PRICE_BELOW_COST) firing because live prices/costs moved since the cart was priced (or since a lock was taken).

Media typeapplication/json

The envelope every /api/v1 ERROR response uses. state carries the machine-readable error code (see the Errors guide).

object
state
required
string
payload
required

Always null on an error response.

object
details
object
Example
{
"state": "NOT_FOUND_ORDER",
"payload": null
}

Too many requests — see the Rate limits guide. Retry after the Retry-After header (seconds).

Media typeapplication/json

The envelope every /api/v1 ERROR response uses. state carries the machine-readable error code (see the Errors guide).

object
state
required
string
payload
required

Always null on an error response.

object
details
object
Example
{
"state": "NOT_FOUND_ORDER",
"payload": null
}
Retry-After
integer

Seconds to wait before retrying.