Skip to main content
The returned URL is an interface hosted by Iron. Once the customer has completed the flow, Iron reviews the submission, performs verification, and decides on approval. Iron is fully responsible for all compliance obligations, including final verification and ongoing monitoring.
Present and sign the terms and conditions before creating the identification. Ask your customer for their country, fetch the terms via GET /api/terms-and-conditions?country={ISO3}, and record acceptance via POST /api/customers/{id}/signings. The terms contain the data sharing agreement, so they must be signed before Iron collects KYC data. See Terms and Conditions.
POST /api/customers/{id}/identifications/v2 Full request and response schemas live in the API reference. The request body must include "type": "Link" to select the hosted flow. This is the discriminator that tells the API which identification method to use.
with_edd works for Individual customers only. Setting it to true on a Business customer returns 400 with the message "with_edd is not supported for business customers".
POST /api/customers/{id}/identifications/v2 requires an Idempotency-Key header. Requests without one return 400. Retrying with the same key returns the original response. Iron caches successful responses only, so a retry after an error executes the request again. Reusing a key with a different request body returns 409 Conflict.
This endpoint is not an upsert. In the default flow, every call with a new idempotency key creates a new identification record, and the newest record drives the customer’s status. If you create a new identification while another is in flight, the customer resets to IdentificationRequired and the older identification stops counting, even if it is approved later. One exception: if the customer’s latest identification is Sumsub-based (every hosted-flow identification is), calling again with with_edd: true upgrades that record for EDD instead of creating a new one.Create one identification, then wait for it to reach a terminal status (Approved, Declined, Expired, or Archived) before creating another. To track progress, subscribe to the identification_status webhook or poll GET /api/customers/{id}/identifications. Never re-call this endpoint to refresh status.
Example response (201 Created):
Pass the url to your customer. They complete the verification flow in the hosted interface, and Iron handles the rest. Example errors: Most client errors (400, 401, 403, 404, 429) return a plain JSON string:
404 Not Found
A 409 means the request matches an existing identification. The body includes the existing record’s ids so you can reconcile the duplicate:
409 Conflict
Server errors (500) return { "message": "...", "trace_id": "..." }. Reference the trace_id when reporting issues.
In Sandbox, you can approve or reject the identification via POST /api/sandbox/identification/{id} instead of waiting for a manual review. See Sandbox.