{"openapi":"3.1.0","info":{"title":"Verifi public API","version":"1.0.0","description":"Push shipments and documents from your ERP, run Verifi's pre- and post-shipment checks, and receive results by webhook. Keys are created by an owner or admin in Settings → Developers. Test keys (vk_test_) act on a sandbox with sample data. The API cannot sign, publish or file anything; reviewer sign-off stays in Verifi.","contact":{"url":"https://verifi.possitiv.com/developers"}},"externalDocs":{"description":"Developer guide","url":"https://verifi.possitiv.com/developers"},"x-error-catalog":[{"code":"API_KEY_MISSING","type":"authentication_error","status":401,"meaning":"No API key was sent.","fix":"Send the key as `Authorization: Bearer vk_live_…` (or vk_test_… for the sandbox)."},{"code":"API_KEY_INVALID","type":"authentication_error","status":401,"meaning":"The key is not a Verifi key, was revoked, or never existed.","fix":"Copy the key again from Settings → Developers, or create a new one."},{"code":"API_KEY_OWNER_REMOVED","type":"authentication_error","status":401,"meaning":"The person who created the key no longer administers the organisation.","fix":"An owner or admin creates a new key; revoke the old one."},{"code":"ORG_INACTIVE","type":"permission_error","status":403,"meaning":"The organisation is suspended or closed.","fix":"Contact Verifi support."},{"code":"API_KEY_READ_ONLY","type":"permission_error","status":403,"meaning":"The key can read but not write.","fix":"Use a read-and-write key for creates and updates."},{"code":"PARTNER_NOT_ALLOWED","type":"permission_error","status":403,"meaning":"This action is not open to the key's organisation role.","fix":"Ask the organisation's owner."},{"code":"VALIDATION_FAILED","type":"invalid_request_error","status":422,"meaning":"A field is missing or not in the expected form.","fix":"Read `param` and `message`, correct the field and send again."},{"code":"INVALID_JSON","type":"invalid_request_error","status":400,"meaning":"The body is not valid JSON.","fix":"Send `Content-Type: application/json` with a JSON object."},{"code":"INVALID_REFERENCE","type":"invalid_request_error","status":422,"meaning":"The shipment reference is empty.","fix":"Send your invoice or PO number as `reference`."},{"code":"LANE_NOT_ACTIVE","type":"invalid_request_error","status":422,"meaning":"The destination is not one of the enabled lanes.","fix":"Use one of the 13 destination codes listed in the docs."},{"code":"DATE_IN_FUTURE","type":"invalid_request_error","status":422,"meaning":"A shipping bill or LEO date is after today.","fix":"Send the date customs issued, not a planned date."},{"code":"SHIP_CONFIRMATION_REQUIRED","type":"conflict_error","status":409,"meaning":"Recording an LEO or B/L while the pre-shipment check is not run or not clear needs a person's confirmation.","fix":"Run the pre-shipment check and clear its problems, or ask a person to confirm the shipment in Verifi."},{"code":"SHIP_CONFIRMATION_NOT_ALLOWED","type":"invalid_request_error","status":422,"meaning":"Confirming that goods left with problems open is a person's decision, not an API call.","fix":"Leave out ship_confirmation; a person confirms in Verifi."},{"code":"SANDBOX_LIMIT","type":"permission_error","status":403,"meaning":"The sandbox's shipment or daily check limit is reached.","fix":"Use a live key for real shipments, or wait a day for more sandbox checks."},{"code":"SHIPMENT_NOT_FOUND","type":"not_found_error","status":404,"meaning":"No shipment with this id in the key's organisation.","fix":"Check the id, and that a test key is not reading a live shipment (or the reverse)."},{"code":"SHIPMENT_CLOSED","type":"conflict_error","status":409,"meaning":"The shipment is closed and cannot change.","fix":"Reopen it in Verifi first."},{"code":"DOCUMENT_NOT_FOUND","type":"not_found_error","status":404,"meaning":"No document with this id in the key's organisation.","fix":"List the shipment's documents to find the id."},{"code":"MULTIPART_REQUIRED","type":"invalid_request_error","status":415,"meaning":"Documents are uploaded as multipart/form-data.","fix":"Send the file in a `file` part and `doc_type` as a field."},{"code":"FILE_REQUIRED","type":"invalid_request_error","status":422,"meaning":"No file part was sent.","fix":"Add the `file` part."},{"code":"FILE_TOO_LARGE","type":"invalid_request_error","status":413,"meaning":"The file is 10 MB or more.","fix":"Send a smaller scan."},{"code":"UNSUPPORTED_FILE_TYPE","type":"invalid_request_error","status":415,"meaning":"Only PDF, JPEG and PNG are accepted.","fix":"Convert the document to PDF."},{"code":"CONTENT_MISMATCH","type":"invalid_request_error","status":415,"meaning":"The file's bytes are not the type its content type says.","fix":"Send the original file with its true content type."},{"code":"EMPTY_FILE","type":"invalid_request_error","status":422,"meaning":"The file is empty.","fix":"Send the original file."},{"code":"DUPLICATE_DOCUMENT","type":"conflict_error","status":409,"meaning":"The same file is already on the shipment as this document type.","fix":"Nothing to do: the earlier upload stands."},{"code":"FILE_INFECTED","type":"invalid_request_error","status":422,"meaning":"The file failed the malware scan and was not stored.","fix":"Scan the file on your side and send a clean copy."},{"code":"FILE_UNREADABLE","type":"invalid_request_error","status":422,"meaning":"The malware scan could not read the file.","fix":"Send an unencrypted PDF, JPEG or PNG."},{"code":"SCANNER_UNAVAILABLE","type":"api_error","status":503,"meaning":"The malware scanner is unavailable.","fix":"Retry with backoff, reusing the same Idempotency-Key."},{"code":"STORAGE_UNAVAILABLE","type":"api_error","status":503,"meaning":"The file store is unavailable.","fix":"Retry with backoff."},{"code":"QUOTA_EXHAUSTED","type":"permission_error","status":402,"meaning":"The organisation has used its included shipment checks.","fix":"Buy a report or check order in Verifi; the response's `upgrade_url` goes there."},{"code":"ORG_REQUIRED","type":"permission_error","status":403,"meaning":"The organisation profile is not complete.","fix":"Finish the company profile in Verifi."},{"code":"IDEMPOTENCY_KEY_INVALID","type":"idempotency_error","status":400,"meaning":"The Idempotency-Key header is empty or longer than 255 characters.","fix":"Send a UUID per logical create."},{"code":"IDEMPOTENCY_KEY_REUSED","type":"idempotency_error","status":422,"meaning":"The Idempotency-Key was already used with a different request.","fix":"Use a new key for a different request."},{"code":"IDEMPOTENCY_IN_PROGRESS","type":"idempotency_error","status":409,"meaning":"A request with this Idempotency-Key is still running.","fix":"Wait a second and retry with the same key."},{"code":"RATE_LIMITED","type":"rate_limit_error","status":429,"meaning":"More than the allowed requests per minute for this key.","fix":"Wait `Retry-After` seconds; spread bulk loads or use the spreadsheet import."},{"code":"WEBHOOK_URL_INVALID","type":"invalid_request_error","status":422,"meaning":"The webhook URL is not a public HTTPS address.","fix":"Use an https:// URL on a public host."},{"code":"WEBHOOKS_PAUSED","type":"api_error","status":503,"meaning":"Verifi has paused all webhook sending.","fix":"Read GET /events meanwhile; sending resumes on its own."},{"code":"DELIVERY_IN_FLIGHT","type":"conflict_error","status":409,"meaning":"The delivery is being sent right now.","fix":"Look at the delivery again in a minute."},{"code":"WEBHOOK_EVENT_UNKNOWN","type":"invalid_request_error","status":422,"meaning":"An event type is not one Verifi sends.","fix":"Choose from the event types listed in the docs."},{"code":"NOT_FOUND","type":"not_found_error","status":404,"meaning":"No such endpoint in the public API.","fix":"Check the path against the OpenAPI document."},{"code":"INTERNAL_ERROR","type":"api_error","status":500,"meaning":"Something failed on Verifi's side.","fix":"Retry with backoff. If it persists, send the request_id to support."}],"x-rate-limit":{"requests_per_minute_per_key":100},"servers":[{"url":"/api/public/v1","description":"Relative to the Verifi API host"}],"security":[{"apiKey":[]}],"tags":[{"name":"Shipments"},{"name":"Documents"},{"name":"Checks"},{"name":"Events"},{"name":"Account"}],"paths":{"/me":{"get":{"tags":["Account"],"operationId":"getMe","summary":"The key and the organisation it acts on","responses":{"200":{"description":"The key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyInfo"}}}},"401":{"description":"API_KEY_MISSING, API_KEY_INVALID, API_KEY_OWNER_REMOVED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"ORG_INACTIVE","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"RATE_LIMITED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/shipments":{"get":{"tags":["Shipments"],"operationId":"listShipments","summary":"List shipments, newest first","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"starting_after","in":"query","schema":{"type":"string","format":"uuid"},"description":"The last id of the previous page."},{"name":"reference","in":"query","schema":{"type":"string"},"description":"Find a shipment by your own reference (invoice or PO number)."}],"responses":{"200":{"description":"A page","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/ShipmentSummary"}},"has_more":{"type":"boolean"}}}}}},"401":{"description":"API_KEY_MISSING, API_KEY_INVALID, API_KEY_OWNER_REMOVED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"ORG_INACTIVE","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"VALIDATION_FAILED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"RATE_LIMITED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Shipments"],"operationId":"createShipment","summary":"Create a shipment","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A unique value (a UUID) per logical create. A retry with the same key and body returns the first result with `Idempotent-Replayed: true`. Kept 24 hours.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShipmentCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shipment"}}}},"400":{"description":"INVALID_JSON, IDEMPOTENCY_KEY_INVALID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"API_KEY_MISSING, API_KEY_INVALID, API_KEY_OWNER_REMOVED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"ORG_INACTIVE, API_KEY_READ_ONLY, SANDBOX_LIMIT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS, SHIP_CONFIRMATION_REQUIRED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"VALIDATION_FAILED, IDEMPOTENCY_KEY_REUSED, INVALID_REFERENCE, LANE_NOT_ACTIVE, DATE_IN_FUTURE, SHIP_CONFIRMATION_NOT_ALLOWED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"RATE_LIMITED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/shipments/{id}":{"get":{"tags":["Shipments"],"operationId":"getShipment","summary":"A shipment with its check results, documents and next step","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The shipment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shipment"}}}},"401":{"description":"API_KEY_MISSING, API_KEY_INVALID, API_KEY_OWNER_REMOVED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"ORG_INACTIVE","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"SHIPMENT_NOT_FOUND","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"RATE_LIMITED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Shipments"],"operationId":"updateShipment","summary":"Update shipment fields (send only what changed; null clears)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShipmentFields"}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shipment"}}}},"400":{"description":"INVALID_JSON, IDEMPOTENCY_KEY_INVALID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"API_KEY_MISSING, API_KEY_INVALID, API_KEY_OWNER_REMOVED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"ORG_INACTIVE, API_KEY_READ_ONLY","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"SHIPMENT_NOT_FOUND","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS, SHIPMENT_CLOSED, SHIP_CONFIRMATION_REQUIRED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"VALIDATION_FAILED, IDEMPOTENCY_KEY_REUSED, LANE_NOT_ACTIVE, DATE_IN_FUTURE, SHIP_CONFIRMATION_NOT_ALLOWED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"RATE_LIMITED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/shipments/{id}/documents":{"get":{"tags":["Documents"],"operationId":"listDocuments","summary":"Documents on a shipment","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The documents","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Document"}},"has_more":{"type":"boolean"}}}}}},"401":{"description":"API_KEY_MISSING, API_KEY_INVALID, API_KEY_OWNER_REMOVED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"ORG_INACTIVE","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"SHIPMENT_NOT_FOUND","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"RATE_LIMITED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Documents"],"operationId":"uploadDocument","summary":"Upload a document (PDF, JPEG or PNG, under 10 MB); it is malware-scanned before it is stored","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A unique value (a UUID) per logical create. A retry with the same key and body returns the first result with `Idempotent-Replayed: true`. Kept 24 hours.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file","doc_type"],"properties":{"file":{"type":"string","format":"binary"},"doc_type":{"type":"string","enum":["PURCHASE_ORDER","PROFORMA_INVOICE","COMMERCIAL_INVOICE","GST_INVOICE","PACKING_LIST","LETTER_OF_CREDIT","INSURANCE","LAB_REPORT","PHYTOSANITARY","CERTIFICATE_OF_ORIGIN","SHIPPING_BILL","BILL_OF_LADING","AIRWAY_BILL","IRM_FIRC","EBRC","OTHER"]},"reference_no":{"type":"string","maxLength":80},"document_date":{"type":"string","format":"date"}}}}}},"responses":{"201":{"description":"Stored","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Document"}}}},"400":{"description":"INVALID_JSON, IDEMPOTENCY_KEY_INVALID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"API_KEY_MISSING, API_KEY_INVALID, API_KEY_OWNER_REMOVED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"ORG_INACTIVE, API_KEY_READ_ONLY","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"SHIPMENT_NOT_FOUND","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS, SHIPMENT_CLOSED, DUPLICATE_DOCUMENT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"FILE_TOO_LARGE","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"MULTIPART_REQUIRED, UNSUPPORTED_FILE_TYPE, CONTENT_MISMATCH","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"VALIDATION_FAILED, IDEMPOTENCY_KEY_REUSED, FILE_REQUIRED, FILE_INFECTED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"RATE_LIMITED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"SCANNER_UNAVAILABLE","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/shipments/{id}/checks":{"get":{"tags":["Checks"],"operationId":"getChecks","summary":"The latest pre- and post-shipment check results","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckResults"}}}},"401":{"description":"API_KEY_MISSING, API_KEY_INVALID, API_KEY_OWNER_REMOVED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"ORG_INACTIVE","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"SHIPMENT_NOT_FOUND","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"RATE_LIMITED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Checks"],"operationId":"runCheck","summary":"Run the pre- or post-shipment check (deterministic; replayable by ruleset version and result hash)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A unique value (a UUID) per logical create. A retry with the same key and body returns the first result with `Idempotent-Replayed: true`. Kept 24 hours.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["stage"],"additionalProperties":false,"properties":{"stage":{"type":"string","enum":["PRE","POST"]}}}}}},"responses":{"201":{"description":"The check","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Check"}}}},"400":{"description":"INVALID_JSON, IDEMPOTENCY_KEY_INVALID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"API_KEY_MISSING, API_KEY_INVALID, API_KEY_OWNER_REMOVED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"QUOTA_EXHAUSTED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"ORG_INACTIVE, API_KEY_READ_ONLY, SANDBOX_LIMIT","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"SHIPMENT_NOT_FOUND","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS, SHIPMENT_CLOSED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"VALIDATION_FAILED, IDEMPOTENCY_KEY_REUSED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"RATE_LIMITED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/events":{"get":{"tags":["Events"],"operationId":"listEvents","summary":"The organisation's events, newest first: the same events webhooks send, for catching up after downtime","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"starting_after","in":"query","schema":{"type":"string","format":"uuid"}},{"name":"type","in":"query","schema":{"type":"string","enum":["shipment.created","shipment.updated","shipment.document_added","shipment.check_completed"]}}],"responses":{"200":{"description":"A page","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}},"has_more":{"type":"boolean"}}}}}},"401":{"description":"API_KEY_MISSING, API_KEY_INVALID, API_KEY_OWNER_REMOVED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"ORG_INACTIVE","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"VALIDATION_FAILED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"RATE_LIMITED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/openapi.json":{"get":{"tags":["Account"],"operationId":"getOpenApi","summary":"This document","security":[],"responses":{"200":{"description":"OpenAPI 3.1"}}}}},"webhooks":{"shipment.created":{"post":{"summary":"shipment.created (signed: Verifi-Signature: t=…,v1=HMAC-SHA256(secret, \"t.body\"))","parameters":[{"name":"Verifi-Signature","in":"header","required":true,"schema":{"type":"string"}},{"name":"Verifi-Event-Id","in":"header","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Verifi-Event-Type","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"responses":{"2XX":{"description":"Received. Anything else is retried: 1 min, 5 min, 30 min, 2 h, 5 h, 10 h, 24 h."}}}},"shipment.updated":{"post":{"summary":"shipment.updated (signed: Verifi-Signature: t=…,v1=HMAC-SHA256(secret, \"t.body\"))","parameters":[{"name":"Verifi-Signature","in":"header","required":true,"schema":{"type":"string"}},{"name":"Verifi-Event-Id","in":"header","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Verifi-Event-Type","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"responses":{"2XX":{"description":"Received. Anything else is retried: 1 min, 5 min, 30 min, 2 h, 5 h, 10 h, 24 h."}}}},"shipment.document_added":{"post":{"summary":"shipment.document_added (signed: Verifi-Signature: t=…,v1=HMAC-SHA256(secret, \"t.body\"))","parameters":[{"name":"Verifi-Signature","in":"header","required":true,"schema":{"type":"string"}},{"name":"Verifi-Event-Id","in":"header","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Verifi-Event-Type","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"responses":{"2XX":{"description":"Received. Anything else is retried: 1 min, 5 min, 30 min, 2 h, 5 h, 10 h, 24 h."}}}},"shipment.check_completed":{"post":{"summary":"shipment.check_completed (signed: Verifi-Signature: t=…,v1=HMAC-SHA256(secret, \"t.body\"))","parameters":[{"name":"Verifi-Signature","in":"header","required":true,"schema":{"type":"string"}},{"name":"Verifi-Event-Id","in":"header","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Verifi-Event-Type","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"responses":{"2XX":{"description":"Received. Anything else is retried: 1 min, 5 min, 30 min, 2 h, 5 h, 10 h, 24 h."}}}}},"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"vk_live_… or vk_test_… from Settings → Developers."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","doc_url","request_id"],"properties":{"type":{"type":"string","enum":["authentication_error","permission_error","invalid_request_error","conflict_error","not_found_error","api_error","idempotency_error","rate_limit_error"]},"code":{"type":"string","enum":["API_KEY_MISSING","API_KEY_INVALID","API_KEY_OWNER_REMOVED","ORG_INACTIVE","API_KEY_READ_ONLY","PARTNER_NOT_ALLOWED","VALIDATION_FAILED","INVALID_JSON","INVALID_REFERENCE","LANE_NOT_ACTIVE","DATE_IN_FUTURE","SHIP_CONFIRMATION_REQUIRED","SHIP_CONFIRMATION_NOT_ALLOWED","SANDBOX_LIMIT","SHIPMENT_NOT_FOUND","SHIPMENT_CLOSED","DOCUMENT_NOT_FOUND","MULTIPART_REQUIRED","FILE_REQUIRED","FILE_TOO_LARGE","UNSUPPORTED_FILE_TYPE","CONTENT_MISMATCH","EMPTY_FILE","DUPLICATE_DOCUMENT","FILE_INFECTED","FILE_UNREADABLE","SCANNER_UNAVAILABLE","STORAGE_UNAVAILABLE","QUOTA_EXHAUSTED","ORG_REQUIRED","IDEMPOTENCY_KEY_INVALID","IDEMPOTENCY_KEY_REUSED","IDEMPOTENCY_IN_PROGRESS","RATE_LIMITED","WEBHOOK_URL_INVALID","WEBHOOKS_PAUSED","DELIVERY_IN_FLIGHT","WEBHOOK_EVENT_UNKNOWN","NOT_FOUND","INTERNAL_ERROR"],"description":"Stable. Register codes (shipment rules) may be added."},"message":{"type":"string"},"param":{"type":"string","description":"The field at fault, when there is one."},"doc_url":{"type":"string","format":"uri"},"request_id":{"type":"string","description":"Also the x-request-id response header. Quote it to support."}}}}},"ApiKeyInfo":{"type":"object","properties":{"object":{"const":"api_key"},"id":{"type":"string"},"name":{"type":"string"},"prefix":{"type":"string"},"mode":{"type":"string","enum":["live","test"]},"scope":{"type":"string","enum":["read","read_write"]},"livemode":{"type":"boolean"},"organisation":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":["string","null"]},"sandbox":{"type":"boolean"}}}}},"ShipmentFields":{"type":"object","additionalProperties":false,"properties":{"hs_code":{"type":["string","null"],"description":"HS code, 4 to 10 digits.","pattern":"^\\d{4,10}$","examples":["09041130"]},"product_description":{"type":["string","null"]},"destination":{"type":["string","null"],"description":"ISO 3166 alpha-2 destination; one of the 13 enabled lanes.","pattern":"^[A-Z]{2}$","examples":["AE"]},"buyer_name":{"type":["string","null"]},"po_number":{"type":["string","null"]},"po_date":{"type":["string","null"],"description":"YYYY-MM-DD.","format":"date"},"incoterm":{"type":["string","null"],"description":"Incoterms® rule.","enum":["EXW","FCA","FAS","FOB","CFR","CIF","CPT","CIP","DAP","DPU","DDP",null]},"payment_terms":{"type":["string","null"],"enum":["ADVANCE","LC_SIGHT","LC_USANCE","DP","DA","OPEN_ACCOUNT",null]},"credit_days":{"type":["integer","null"],"minimum":0,"maximum":1095},"currency":{"type":["string","null"],"description":"ISO 4217 code.","pattern":"^[A-Z]{3}$"},"invoice_value":{"type":["number","null"],"minimum":0},"planned_ship_date":{"type":["string","null"],"description":"YYYY-MM-DD.","format":"date"},"commercial_invoice_no":{"type":["string","null"]},"commercial_invoice_date":{"type":["string","null"],"description":"YYYY-MM-DD.","format":"date"},"gst_invoice_no":{"type":["string","null"]},"gst_invoice_date":{"type":["string","null"],"description":"YYYY-MM-DD.","format":"date"},"gstin":{"type":["string","null"],"description":"15-character GSTIN on the invoice.","pattern":"^[0-9A-Z]{15}$"},"igst_mode":{"type":["string","null"],"enum":["LUT","IGST_PAID",null]},"port_of_loading":{"type":["string","null"],"description":"Indian port code, e.g. INNSA1.","pattern":"^[A-Z0-9]{6}$"},"port_of_discharge":{"type":["string","null"],"description":"UN/LOCODE, e.g. AEJEA.","pattern":"^[A-Z0-9]{5,6}$"},"sb_number":{"type":["string","null"]},"sb_date":{"type":["string","null"],"description":"YYYY-MM-DD.","format":"date"},"leo_date":{"type":["string","null"],"description":"YYYY-MM-DD.","format":"date"},"egm_number":{"type":["string","null"]},"egm_date":{"type":["string","null"],"description":"YYYY-MM-DD.","format":"date"},"bl_number":{"type":["string","null"]},"bl_date":{"type":["string","null"],"description":"YYYY-MM-DD.","format":"date"},"realised_amount":{"type":["number","null"],"minimum":0},"realisation_date":{"type":["string","null"],"description":"YYYY-MM-DD.","format":"date"},"irm_number":{"type":["string","null"]},"ebrc_number":{"type":["string","null"]},"ebrc_date":{"type":["string","null"],"description":"YYYY-MM-DD.","format":"date"},"igst_refund_code":{"type":["string","null"],"description":"ICEGATE IGST refund response code.","pattern":"^SB00[0-6]$"},"rodtep_claimed":{"type":["boolean","null"]},"drawback_claimed":{"type":["boolean","null"]},"rodtep_not_claimed_reason":{"type":["string","null"]},"drawback_not_claimed_reason":{"type":["string","null"]},"invoice_value_inr":{"type":["number","null"],"minimum":0},"igst_rate_pct":{"type":["number","null"],"minimum":0,"maximum":100},"fob_value_inr":{"type":["number","null"],"minimum":0},"quantity":{"type":["number","null"],"minimum":0},"quantity_unit":{"type":["string","null"]},"scomet_status":{"type":["string","null"],"enum":["NOT_SCOMET","LICENCE_HELD",null]},"scomet_licence_no":{"type":["string","null"]},"unit_type":{"type":["string","null"]},"gstin_id":{"type":["string","null"],"description":"Id of one of the organisation's GST registrations.","format":"uuid"},"costing":{"type":["object","null"],"additionalProperties":{"type":"number","minimum":0}}}},"ShipmentCreate":{"allOf":[{"type":"object","required":["reference"],"properties":{"reference":{"type":"string","maxLength":200,"description":"Your invoice or PO number."}}},{"$ref":"#/components/schemas/ShipmentFields"}]},"NextStep":{"type":["object","null"],"properties":{"code":{"type":"string"},"title":{"type":"string"},"owner":{"type":"string"},"status":{"type":"string"},"phase":{"type":"string"}}},"Attention":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"severity":{"type":"string","enum":["high","medium"]},"text":{"type":"string"},"due":{"type":["string","null"],"format":"date"}}}},"ShipmentSummary":{"type":"object","properties":{"object":{"const":"shipment_summary"},"id":{"type":"string","format":"uuid"},"livemode":{"type":"boolean"},"reference":{"type":"string"},"status":{"type":"string"},"stage":{"type":"string","enum":["PRE_SHIPMENT","POST_SHIPMENT","COMPLETE","CLOSED"]},"hs_code":{"type":["string","null"]},"destination":{"type":["string","null"]},"currency":{"type":["string","null"]},"invoice_value":{"type":["number","null"]},"planned_ship_date":{"type":["string","null"]},"next_step":{"$ref":"#/components/schemas/NextStep"},"attention":{"$ref":"#/components/schemas/Attention"},"created_at":{"type":"string","format":"date-time"}}},"Shipment":{"type":"object","properties":{"object":{"const":"shipment"},"id":{"type":"string","format":"uuid"},"livemode":{"type":"boolean"},"reference":{"type":"string"},"status":{"type":"string"},"stage":{"type":"string","enum":["PRE_SHIPMENT","POST_SHIPMENT","COMPLETE","CLOSED"]},"lane":{"type":["object","null"]},"fields":{"$ref":"#/components/schemas/ShipmentFields"},"next_step":{"$ref":"#/components/schemas/NextStep"},"attention":{"$ref":"#/components/schemas/Attention"},"checks":{"type":"object","properties":{"pre":{"oneOf":[{"$ref":"#/components/schemas/Check"},{"type":"null"}]},"post":{"oneOf":[{"$ref":"#/components/schemas/Check"},{"type":"null"}]}}},"realisation":{"type":["object","null"]},"documents":{"type":"array","items":{"$ref":"#/components/schemas/Document"}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"Finding":{"type":"object","properties":{"rule_id":{"type":"string"},"severity":{"type":"string","enum":["BLOCKER","WARNING","INFO","PASS"]},"title":{"type":"string"},"detail":{"type":"string"},"fix":{"type":["string","null"]},"owner":{"type":"string","enum":["EXPORTER","CHA","CARRIER","BANK","CUSTOMS","DGFT","GST","VERIFI","LAB","CHAMBER"],"description":"Who acts next on this finding."},"fields":{"type":"array","items":{"type":"string"}},"source":{"type":["string","null"]}}},"Check":{"type":"object","properties":{"object":{"const":"check"},"id":{"type":"string"},"livemode":{"type":"boolean"},"stage":{"type":"string","enum":["PRE","POST"]},"result":{"type":"string","enum":["no_problems_found","warnings_only","blockers_open"]},"blockers":{"type":"integer"},"warnings":{"type":"integer"},"ruleset_version":{"type":"string"},"result_hash":{"type":"string"},"run_at":{"type":"string","format":"date-time"},"findings":{"type":"array","items":{"$ref":"#/components/schemas/Finding"}}}},"CheckResults":{"type":"object","properties":{"object":{"const":"check_results"},"shipment_id":{"type":"string"},"pre":{"oneOf":[{"$ref":"#/components/schemas/Check"},{"type":"null"}]},"post":{"oneOf":[{"$ref":"#/components/schemas/Check"},{"type":"null"}]},"attention":{"$ref":"#/components/schemas/Attention"}}},"Document":{"type":"object","properties":{"object":{"const":"document"},"id":{"type":"string"},"doc_type":{"type":"string","enum":["PURCHASE_ORDER","PROFORMA_INVOICE","COMMERCIAL_INVOICE","GST_INVOICE","PACKING_LIST","LETTER_OF_CREDIT","INSURANCE","LAB_REPORT","PHYTOSANITARY","CERTIFICATE_OF_ORIGIN","SHIPPING_BILL","BILL_OF_LADING","AIRWAY_BILL","IRM_FIRC","EBRC","OTHER"]},"stage":{"type":"string"},"filename":{"type":"string"},"mime_type":{"type":"string"},"size_bytes":{"type":"integer"},"sha256":{"type":"string"},"reference_no":{"type":["string","null"]},"document_date":{"type":["string","null"]},"uploaded_at":{"type":"string","format":"date-time"}}},"Event":{"type":"object","required":["id","object","type","created_at","livemode","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Stable: de-duplicate on it."},"object":{"const":"event"},"type":{"type":"string","enum":["shipment.created","shipment.updated","shipment.document_added","shipment.check_completed"]},"created_at":{"type":"string","format":"date-time"},"livemode":{"type":"boolean"},"data":{"type":"object","properties":{"shipment_id":{"type":"string","format":"uuid"},"reference":{"type":"string"},"activity_kind":{"type":"string"},"check":{"type":"object","properties":{"id":{"type":"string"},"stage":{"type":"string","enum":["PRE","POST"]},"blockers":{"type":"integer"},"warnings":{"type":"integer"},"result_hash":{"type":"string"}}}}}}}}}}