Bulk vendor ingest
const url = 'https://api.vendorica.com/v1/vendors/imports';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"label":"example","matchKey":{"key":"name","mode":"create-only"},"enrich":true,"vendors":[{"additionalProperty":"example"}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.vendorica.com/v1/vendors/imports \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "label": "example", "matchKey": { "key": "name", "mode": "create-only" }, "enrich": true, "vendors": [ { "additionalProperty": "example" } ] }'Programmatic bulk import: rows keyed by importable vendor field names (plus custom: for assigned custom fields), string cell values. Runs the same reference-aware validate → dedupe → commit pipeline as the import wizard, mints an IMP-{n} history entry, and respects the plan’s per-import row quota. matchKey.mode upsert updates existing matches (blank cells never overwrite); enrich=true fills empty countryOfRegistration from GLEIF on checksum-valid LEIs (bounded, best-effort). Requires the vendors.bulk_import and vendors.import_integrations plan features (402 otherwise). Synchronous: the outcome (imported/updated/skipped/failed + per-row errors) is in the response.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”Vendor rows + options
object
object
object
Responses
Section titled “Responses”Success
object
object
object
object
Example
{ "success": true, "data": { "job": { "id": "f00e1550-382b-4016-8193-d10f06b21451", "displayId": "string", "status": "string", "rowsTotal": 1, "rowsImported": 1, "rowsUpdated": 1, "rowsSkipped": 1, "rowsFailed": 1 }, "summary": { "imported": 1, "updated": 1, "skipped": 1, "failed": 1 } }, "timestamp": "2026-08-19T09:41:12.004Z", "requestId": "req_01J5X8ZC3K4T7Q9M2W6B0N1V4H", "message": "string"}Validation error
object
Example
{ "success": false, "error": "Bad request", "code": "BAD_REQUEST", "timestamp": "2026-08-19T09:41:12.004Z", "requestId": "req_01J5X8ZC3K4T7Q9M2W6B0N1V4H"}Unauthorized
object
Example
{ "success": false, "error": "Unauthorized", "code": "UNAUTHORIZED", "timestamp": "2026-08-19T09:41:12.004Z", "requestId": "req_01J5X8ZC3K4T7Q9M2W6B0N1V4H"}Forbidden — missing scope
object
Example
{ "success": false, "error": "Forbidden", "code": "FORBIDDEN", "timestamp": "2026-08-19T09:41:12.004Z", "requestId": "req_01J5X8ZC3K4T7Q9M2W6B0N1V4H"}Not found
object
Example
{ "success": false, "error": "Resource not found", "code": "NOT_FOUND", "timestamp": "2026-08-19T09:41:12.004Z", "requestId": "req_01J5X8ZC3K4T7Q9M2W6B0N1V4H"}Rate limit exceeded
object
Example
{ "success": false, "error": "Too many requests", "code": "TOO_MANY_REQUESTS", "timestamp": "2026-08-19T09:41:12.004Z", "requestId": "req_01J5X8ZC3K4T7Q9M2W6B0N1V4H"}