Skip to content

Push a cost change for one of the calling vendor's offers

PATCH
/api/v1/vendor/offers/{id}/cost
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.

id
required
string format: uuid
Media typeapplication/json
object
cost
required

Wholesale cost Linra pays you, in SAR.

number format: decimal
costIsVatInclusive
boolean

The offer with its cost/pending-cost updated.

Media typeapplication/json
object
state
required
string
payload
required
details
object
payload
required
object
id
string format: uuid
vendorId
string format: uuid
variantId
string format: uuid
nullable
status
string
Allowed values: Draft PendingMatch PendingReview Approved Rejected Withdrawn Suspended
source
string
Allowed values: Manual Import Api
vendorSku
string
nullable
vendorExternalId
string
nullable
cost

Always the NET (ex-VAT) figure.

number format: decimal
pendingCost

A cost change awaiting reviewer approval, if one is in flight. Null otherwise.

number format: decimal
nullable
costIsVatInclusive

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.

boolean
costEnteredVatInclusive

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.

boolean
inputVatAmount

Your own input VAT on the current cost, back-derived when costEnteredVatInclusive is true.

number format: decimal
pendingInputVatAmount
number format: decimal
nullable
declaredStockQuantity
integer
nullable
declaredInStock
boolean
rawBrandName
string
nullable
rawProductName
string
nullable
rawConcentration
string
nullable
rawSizeMl
integer
nullable
rawDescription
string
nullable
syncPaused
boolean
autoPublishEligible
boolean
reviewedByUserId
string format: uuid
nullable
reviewedAt
string format: date-time
nullable
reviewReason
string
nullable
importBatchId
string format: uuid
nullable
supplyOptionId
string format: uuid
nullable
version

Optimistic-concurrency token (informational on this API — no vendor endpoint requires you to send it back).

integer
createdDate
string format: date-time
nullable
lastModifiedDate
string format: date-time
nullable
Example
{
"state": "SUCCESS",
"payload": {
"status": "Draft",
"source": "Manual"
}
}

Request validation failed.

Media typeapplication/json
object
state
required
string
payload
details
object
Example
{
"state": "NOT_FOUND_VENDOR_OFFER"
}

Your token doesn’t carry the capability this endpoint requires.

Media typeapplication/json
object
state
required
string
payload
details
object
Examples
ExamplemissingCapability
{
"state": "FORBIDDEN_CAPABILITY_NOT_GRANTED",
"payload": null,
"details": {
"requiredCapability": "Orders"
}
}

Unknown offer id, or one belonging to another vendor.

Media typeapplication/json
object
state
required
string
payload
details
object
Examples
ExamplenotFound
{
"state": "NOT_FOUND_VENDOR_OFFER",
"payload": null,
"details": {}
}

Too many requests. Retry after the Retry-After header (seconds).

Media typeapplication/json
object
state
required
string
payload
details
object
Example
{
"state": "NOT_FOUND_VENDOR_OFFER"
}
Retry-After
integer

Seconds to wait before retrying.