Skip to main content
Sometimes OCR misreads an ID, a utility bill, or a registry entry. Didit exposes three PATCH endpoints you can call to correct the extracted data without having to rerun the whole verification. All three accept your client API key or a user authorization header, and all three emit a data.updated webhook on success so your system and downstream analytics stay in sync.

Shared requirements

  • Authorization — client API key (standard x-api-key / Authorization bearer) or user-auth token.
  • Privilege
    • KYC and POA: write:sessions
    • KYB company: write:businesses
  • Session status (KYC / POA only) — must be one of APPROVED, DECLINED, IN_REVIEW, or KYC_EXPIRED. Sessions that haven’t reached a reviewable state cannot be patched. KYB company updates have no status gate.
  • Feature record must exist — you can only patch KYC fields if the session captured a KYC, POA fields if it captured a POA, and KYB company fields if the session has a registry check.
  • Partial updates — only fields you include are changed. Omit a field to leave it as-is. Send null to clear an extra_fields key.
  • Webhooks — a successful update fires data.updated with session_kind: "user" or "business", and the session’s audit trail records which specific fields changed and who changed them.

Update KYC identity data

PATCH /v3/session/{sessionId}/update-data/ Patch any field extracted from the ID document. Supports graph-based multi-instance workflows via an optional node_id query parameter or body field — target a specific KYC record when a single session has multiple KYC steps.

Mutable fields

parsed_address only accepts these nested keys: address_type, city, region, street_1, street_2, postal_code, country (ISO 3166-1 alpha-2).

Example

For a multi-instance graph workflow, add ?node_id=feature_ocr_2 to the URL (or pass "node_id": "feature_ocr_2" in the body) to target a specific KYC record.

Update Proof of Address (POA) data

PATCH /v3/session/{sessionId}/update-poa-data/ Patch fields extracted from a proof-of-address document. Same status gates and privilege as KYC updates. Also supports node_id for multi-instance workflows.

Mutable fields

Example

Update KYB company data

PATCH /v3/session/{sessionId}/kyb/{companyUuid}/update-data/ Correct registry-extracted fields on a KYB company. The endpoint edits both the canonical company columns and the raw registry_data snapshot, so the “Extracted from Registry” view in the console reflects your corrections. user_provided_data — what the end user confirmed in the hosted flow — is not modified. last_console_edit_at is stamped, and a data.updated webhook fires with trigger: "console_registry_edit".

Requirements

  • Privilegewrite:businesses (different from the KYC / POA privilege).
  • The companyUuid in the URL must belong to the given sessionId, otherwise you get a 404.
  • No session status gate — KYB company data can be corrected at any time.

Mutable fields

Any field you omit is left untouched. Any field you send is written to the canonical column (when one exists) and merged into the raw registry_data JSON. Dates are serialized as ISO 8601 strings when merged into registry_data.

Example

Response: the full KYB company object — same shape as registry_checks[].company in the session decision.

What happens after an update

  • Webhookdata.updated fires on the session, with the session’s session_kind in the payload ("user" or "business"). Subscribe once at the destination level and route on session_kind.
  • Audit trail — the session records exactly which fields changed, the previous and new values, and (for user-auth calls) the actor email. Visible in the console’s Events tab.
  • Address re-geocoding — for KYC and POA updates that change address / poa_address, Didit re-runs geocoding in the background. Failures are swallowed so the update never fails because of a geocoding issue.
  • AML re-evaluation — KYC updates that change name / DOB / nationality can re-trigger AML screening if AML hadn’t finished on the session. Results surface on the session decision.

When not to use these endpoints

  • Rerunning the whole verification — if the customer has to re-take their ID photo or re-upload a document, use update-status to move the session to Resubmitted instead.
  • Changing profile fields on the User or Business entity — use PATCH /v3/users/{vendor_data}/ or PATCH /v3/businesses/{vendor_data}/ — those endpoints update entity-level data, not session-level data.
  • Updating Key People — there’s no public API to patch key-people records; that data is submitted through the hosted flow.

Errors

Next steps

Retrieve session

Fetch the full decision to see the updated fields.

Update status

Approve, decline, or re-open a session after a data correction.

Webhooks

Subscribe to data.updated events.