Push a cost change for one of your own offers
const url = 'https://api-omni-vendors.linra.net/api/v1/scent/offers/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/cost';const options = { method: 'PATCH', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"cost":1,"costIsVatInclusive":true}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url https://api-omni-vendors.linra.net/api/v1/scent/offers/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/cost \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "cost": 1, "costIsVatInclusive": true }'ALWAYS routes through the existing approval pipeline — no new money governance. On an
Approved offer this sets a pending cost; the live cost stays untouched until an internal
reviewer applies or discards it. On an offer never yet approved, cost is set directly
(nothing is live yet regardless — approval is what publishes an offer, not this field).
Every OTHER field is left exactly as it was — this endpoint can only ever change cost.
Idempotent: re-pushing the identical cost overwrites the same pending value, never creates
a duplicate pending artifact. Requires the Cost capability — grantable independently of
Offers.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Request Bodyrequired
Section titled “Request Bodyrequired”object
Wholesale cost Linra pays you, in SAR.
REQUIRED — there is no default. See CreateVendorOfferRequest.costIsVatInclusive. This body has only two fields, so an omitted entry mode is especially easy to miss: state it explicitly on every push.
Examplegenerated
{ "cost": 1, "costIsVatInclusive": true}Responses
Section titled “Responses”The offer with its cost/pending-cost updated.
object
object
object
Always the NET (ex-VAT) figure.
A cost change awaiting reviewer approval, if one is in flight. Null otherwise.
Always false. Pair Cost with this value (false) on a write to safely resubmit it unchanged — this is the one entry mode that can never re-interpret an already-net figure as a fresh gross one. See costEnteredVatInclusive for how you actually entered it.
Display-only — the vendor’s actual original entry-mode preference (how Cost was declared: exclusive/net or inclusive/gross). NEVER accepted on a write; use costIsVatInclusive (always false) for that.
Your own input VAT on the current cost, back-derived when costEnteredVatInclusive is true.
Optimistic-concurrency token (informational on this API — no vendor endpoint requires you to send it back).
Example
{ "state": "SUCCESS", "payload": { "status": "Draft", "source": "Manual" }}Request validation failed.
object
object
Example
{ "state": "NOT_FOUND_VENDOR_OFFER"}Your token doesn’t carry the capability this endpoint requires.
object
object
Examples
{ "state": "FORBIDDEN_CAPABILITY_NOT_GRANTED", "payload": null, "details": { "requiredCapability": "Orders" }}Unknown offer id, or one belonging to another vendor.
object
object
Examples
{ "state": "NOT_FOUND_VENDOR_OFFER", "payload": null, "details": {}}Too many requests. Retry after the Retry-After header (seconds).
object
object
Example
{ "state": "NOT_FOUND_VENDOR_OFFER"}Headers
Section titled “Headers”Seconds to wait before retrying.

