Validate Vendor Credit Import
POST/api/vendor-credits/import/validate
Validate and preview mapped import rows BEFORE importing. No database writes occur — safe to call repeatedly.
accounting:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Authentication: Requires Bearer token.
Resolves supplier / purchase order / store / currency / warehouse / SKU / nominal code / tax rate names to IDs, groups flat rows into credits (by id, then vendor_credit_number, then purchase_order_number), and computes an upsert action per credit:
- create: no existing credit matched
- update: matched an existing DRAFT credit
- blocked: matched a credit that cannot be updated (archived, voided, closed, refunded, allocated, or already authorized/open). The block_reason is returned for display.
Each row accepts all template columns: id, vendor_credit_number, credit_date, purchase_order_number, supplier_name, supplier_email, supplier_id, warehouse_name, currency_code, store_name, supplier_reference, vendor_credit_note, sku, purchase_order_line_id, description, quantity, amount, unit_cost, nominal_code, tax_rate, is_product, restock_inventory.
Max 50000 rows per call.
cost_impact (optional, per line) — what the line does to stock and its cost: return_goods, write_off_goods, reduce_cost or financial_only. Leave blank to infer it from is_product / restock_inventory as before; an unrecognised value fails that row. reduce_cost requires a purchase order line.
Lines can only be imported onto a draft credit — an authorized credit must be unauthorized first, so a behaviour change never bypasses the cost reversal.
Requires permission: purchase_orders.update
Request
Responses
- 200
- 401
- 403
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden
Response Headers
Validation failed — the body is a field → messages map (Laravel shape) or the platform envelope with a stable machine-readable code. Fix the payload and resubmit.
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.