Update an existing API-submitted offer
const url = 'https://api-omni.linra.net/api/v1/vendor/offers/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0';const options = { method: 'PATCH', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"vendorSku":"example","vendorExternalId":"example","cost":1,"costIsVatInclusive":false,"declaredStockQuantity":1,"declaredInStock":true,"rawBrandName":"example","rawProductName":"example","rawConcentration":"example","rawSizeMl":1,"rawDescription":"example"}'};
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 \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "vendorSku": "example", "vendorExternalId": "example", "cost": 1, "costIsVatInclusive": false, "declaredStockQuantity": 1, "declaredInStock": true, "rawBrandName": "example", "rawProductName": "example", "rawConcentration": "example", "rawSizeMl": 1, "rawDescription": "example" }'Declared stock applies instantly regardless of status; a cost change on an Approved offer
becomes a pending change awaiting reviewer approval; an identity-fact change on an Approved
offer resets it to PendingReview. Never changes the matched variantId — re-matching is a
reviewer-only action. Reaches ONLY an offer THIS vendor submitted through THIS door
(source: Api) — one belonging to another vendor, or one a catalog admin entered manually
on this vendor’s behalf, is reported as 404. Requires the Offers capability — prefer
PATCH /offers/{id}/cost for a cost-only push from a credential holding only the Cost
capability.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Request Bodyrequired
Section titled “Request Bodyrequired”Deliberately carries NO variantId — matching/re-matching to a catalog variant is a reviewer-only action.
object
Responses
Section titled “Responses”The updated offer.
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.