Push a cost change for one of the calling vendor's offers
const url = 'https://api-omni.linra.net/api/v1/vendor/offers/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/cost';const options = { method: 'PATCH', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"cost":1,"costIsVatInclusive":false}'};
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.linra.net/api/v1/vendor/offers/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/cost \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "cost": 1, "costIsVatInclusive": false }'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.
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.