> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Actualitzar dades de sessió API: corregir camps KYC i KYB

> Corregeix camps KYC, comprovant de domicili o KYB extrets per OCR amb Didit. Tres endpoints PATCH, actualitzacions parcials i webhooks.



Prompt per actualitzar les dades de la sessió
        Copia el prompt al porta-retalls



      
      

\<pre>

\`Correct OCR-extracted fields on a finished Didit verification session — KYC identity, Proof of Address, or KYB company data.

There are THREE separate PATCH endpoints. Pick the one that matches the feature record you need to fix.

1\) Update KYC identity data
PATCH https://verification.didit.me/v3/session/{session_id}/update-data/
\- Auth: x-api-key (client) or user-auth token. Privilege: write:sessions.
\- Session status must be one of Approved, Declined, In Review, Kyc Expired.
\- Session must have a captured KYC feature record.
\- Optional query / body param node_id targets a specific KYC instance in multi-step workflows (e.g. node_id=feature_ocr_2).
\- Mutable fields: document_type ("P", "ID", "DL", "RP"), document_number, personal_number, date_of_birth (ISO date), date_of_issue, expiration_date, issuing_state (ISO 3166-1 alpha-3), first_name, last_name (full_name is auto-recomputed), gender ("M"|"F"|"X"), nationality, marital_status, place_of_birth, address (free-text — triggers re-geocoding), parsed_address (nested: address_type, city, region, street_1, street_2, postal_code, country [ISO 3166-1 alpha-2]), extra_fields (object — send null on a key to remove it).

2\) Update Proof of Address (POA) data
PATCH https://verification.didit.me/v3/session/{session_id}/update-poa-data/
\- Same auth + privilege + status gate as KYC.
\- Session must have a captured POA record. node_id supported.
\- Mutable fields: issuing_state (ISO-3), document_type ("utility_bill" | "bank_statement" | "lease_agreement"), document_language (ISO 639-1), issuer, issue_date (ISO date), poa_address (free-text — triggers re-geocoding), name_on_document, poa_parsed_address (same nested shape as KYC parsed_address), extra_fields (bank_account_number, bank_iban, bank_sort_code, bank_routing_number, bank_swift_bic, bank_branch_name, bank_branch_address, document_phone_number, additional_names).

3\) Update KYB company data
PATCH https://verification.didit.me/v3/session/{session_id}/kyb/{company_uuid}/update-data/
\- Privilege: write:businesses (NOT write:sessions).
\- No status gate — KYB company data can be corrected at any time.
\- company_uuid must belong to that session_id (else 404).
\- Mutable fields: company_name, registration_number, country_code (ISO-3), incorporation_date / registration_date / dissolution_date, tax_number, legal_address (lands on registered_address), company_type, registry_status ("active" | "dissolved" | "struck_off" | "inactive" | ...), verification_status ("verified" | "failed" | "unknown"), alternative_names, nature_of_business, registered_capital, website, email, phone, legal_entity_identifier, location_of_registration, control_scheme.
\- Edits BOTH the canonical column and registry_data. user_provided_data is never touched.

4\) Skip (or re-require) a Key People party
PATCH https://verification.didit.me/v3/session/{session_id}/kyb/parties/{party_uuid}/
\- Privilege: write:businesses.
\- Body: { "is_skipped": true } to exempt the party, { "is_skipped": false } to put it back in scope.
\- party_uuid must belong to that session_id (else 404).
\- Use it when a party can no longer finish its own check - most often because the linked individual KYC session was deleted - and the KYB is stuck in Awaiting User with nothing left that can move it.
\- Independent of the role's allow_skip setting: that flag limits what the applicant may skip in the hosted flow, not what you may override.
\- requires_verification is left untouched, so the override stays visible as requires_verification: true + is_skipped: true.
\- Recomputes the Key People check and the parent session status immediately, and fires data.updated with trigger: "console_key_people_skip".

Common contract for all four:
\- PATCH semantics — only fields you send are updated. Omit a field to leave it as-is. Send null on an extra_fields key to remove it.
\- A successful update fires a data.updated webhook (with session_kind: "user" or "business"). KYB company updates carry trigger: "console_registry_edit".
\- The audit trail records changed fields, previous + new values, and (for user-auth) the actor email.

KYC curl example:
curl -X PATCH "https://verification.didit.me/v3/session/<SESSION_ID>/update-data/" \
-H "x-api-key: <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"first_name": "John",
"last_name": "Doe",
"date_of_birth": "1990-01-01",
"issuing_state": "ESP",
"extra_fields": { "municipality": "Madrid" }
}'

Response: the updated record (KYC / POA / KYB company shape — same fields as in the session decision).

Failure modes:
\- 401 — missing or invalid credentials.
\- 403 — { "detail": "You do not have permission to perform this action." } — caller lacks write:sessions (KYC/POA) or write:businesses (KYB company).
\- 404 — { "detail": "Not found." } — session, node_id, or company_uuid not found; OR the session does not carry the feature record you are patching (no KYC / no POA / no matching company).
\- 400 — validation error: invalid country code, unknown parsed_address key, extra_fields not an object, etc. Returned as { "<field>": ["..."] }.

When NOT to use these endpoints:
\- To ask the user to retake the document → use PATCH /v3/session/{id}/update-status/ with new_status: "Resubmitted" (see /sessions-api/update-status).
\- To change entity-level data → use /v3/users/{vendor_data}/ or /v3/businesses/{vendor_data}/.
\- To edit Key People names / roles / ownership - no public API; that data is submitted through the hosted flow. Only the is_skipped flag is patchable (endpoint 4).

Side effects:
\- Changes to KYC name / DOB / nationality can re-trigger AML if AML was still running.
\- Changes to address / poa_address re-run geocoding asynchronously (failures swallowed — they never fail the update).

For end-to-end Didit integration, paste in the full prompt at /integration/integration-prompt.`

\</pre>



      
      

Enganxa a

De vegades l'OCR llegeix malament un document d'identitat, un rebut de serveis o una entrada del registre. Didit exposa tres endpoints PATCH que pots cridar per corregir les dades extretes sense haver de tornar a executar tota la verificació.| Endpoint | Quan s'utilitza |
| - | - |
| [`PATCH /v3/session/{id}/update-data/`](#actualitzar-les-dades-d’identitat-kyc) | Corregeix els valors extrets d'un document d'identitat en una sessió de **Verificació d'usuaris (KYC)** |
| [`PATCH /v3/session/{id}/update-poa-data/`](#actualitzar-les-dades-del-comprovant-de-domicili-poa) | Corregeix els valors extrets d'un rebut de serveis, extracte bancari o contracte d'arrendament en una sessió de **Verificació d'usuaris (KYC)** |
| [`PATCH /v3/session/{id}/kyb/{company_uuid}/update-data/`](#actualitza-les-dades-de-l’empresa-kyb) | Corregeix els camps extrets del registre en una sessió de **Verificació d'empreses (KYB)** |
| [`PATCH /v3/session/{id}/kyb/parties/{party_uuid}/`](#omet-una-part-de-key-people) | Eximeix una persona clau de la verificació quan ja no pot completar la seva pròpia comprovació |Les quatre accepten la teva **clau d'API del client** o una **capçalera d'autorització d'usuari**, i les quatre emeten un webhook `data.updated` quan l'operació és satisfactòria, perquè el teu sistema i les analítiques posteriors continuïn sincronitzats.## Requisits comuns- **Autorització**: clau d'API del client (`x-api-key` / `Authorization` bearer estàndard) o token d'usuari.
- **Privilegi**:
  * KYC i POA: `write:sessions`
  * Empresa KYB i part del grup de persones clau: `write:businesses`
- **Estat de la sessió** (només KYC / POA): ha de ser un dels següents: `APPROVED`, `DECLINED`, `IN_REVIEW` o `KYC_EXPIRED`. Les sessions que no han arribat a un estat revisable no es poden corregir. Les actualitzacions de l'empresa KYB no tenen cap restricció d'estat.
- **El registre de la funcionalitat ha d'existir**: només pots corregir camps KYC si la sessió ha capturat un KYC, camps POA si ha capturat un POA, i camps de l'empresa KYB si la sessió té una comprovació de registre.
- **Actualitzacions parcials**: només es canvien els camps que inclous. Si n'omets un, es deixa tal com està. Envia `null` per esborrar una clau de `extra_fields`.
- **Webhooks**: una actualització satisfactòria activa `data.updated` amb `session_kind: "user"` o `"business"`, i el registre d'auditoria de la sessió indica quins camps concrets han canviat i qui els ha canviat.## Actualitzar les dades d'identitat KYC**`PATCH /v3/session/{sessionId}/update-data/`**Corregeix qualsevol camp extret del document d'identitat. Admet fluxos de treball multi-instància basats en un graf mitjançant el paràmetre de consulta opcional `node_id` o un camp del cos: indica un registre KYC concret quan una sola sessió té diversos passos KYC.### Camps modificables| Camp | Observacions |
| - | - |
| `document_type` | Codi ISO del document: `P` (passaport), `ID`, `DL`, `RP`. |
| `document_number` | El número imprès al document. |
| `personal_number` | Número personal o identificador fiscal quan figura imprès al document. |
| `date_of_birth` | Data ISO 8601. |
| `date_of_issue` / `expiration_date` | Dates ISO 8601. |
| `issuing_state` | País emissor, ISO 3166-1 alpha-3. |
| `first_name` / `last_name` | `full_name` es recalcula automàticament a partir d'aquests dos. |
| `gender` | `M`, `F` o `X` quan estigui present. |
| `nationality` | Text lliure. |
| `marital_status` | Text lliure. |
| `place_of_birth` | Text lliure. |
| `address` | Adreça en text lliure extreta del document. Activa una nova geocodificació. |
| `parsed_address` | Adreça estructurada: consulta l'estructura imbricada més avall. |
| `extra_fields` | Camps addicionals arbitraris del document d'identitat (p. ex. `blood_group`, `municipality`). Envia `null` per a una clau per eliminar-la. |`parsed_address` només accepta aquestes claus imbricades: `address_type`, `city`, `region`, `street_1`, `street_2`, `postal_code`, `country` (ISO 3166-1 **alpha-2**).### Exemple```bash theme={null}
curl -X PATCH "https://verification.didit.me/v3/session/4c5c7f3a.../update-data/" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "first_name": "John",
    "last_name": "Doe",
    "date_of_birth": "1990-01-01",
    "issuing_state": "ESP",
    "extra_fields": { "municipality": "Madrid" }
  }'
```Per a un flux de treball multi-instància basat en un graf, afegeix `?node_id=feature_ocr_2` a la URL (o passa `"node_id": "feature_ocr_2"` al cos) per indicar un registre KYC concret.## Actualitzar les dades del comprovant de domicili (POA)**`PATCH /v3/session/{sessionId}/update-poa-data/`**Corregeix els camps extrets d'un document de comprovant de domicili. Les mateixes restriccions d'estat i el mateix privilegi que les actualitzacions KYC. També admet `node_id` per a fluxos de treball multi-instància.### Camps modificables| Camp | Observacions |
| - | - |
| `issuing_state` | País que ha emès el document, ISO 3166-1 alpha-3. |
| `document_type` | p. ex. `utility_bill`, `bank_statement`, `lease_agreement`. |
| `document_language` | Idioma del document segons ISO 639-1. |
| `issuer` | Companyia de serveis, banc, propietari, etc. |
| `issue_date` | Data ISO 8601. |
| `poa_address` | Adreça tal com figura impresa al document (text lliure). Activa una nova geocodificació. |
| `name_on_document` | Nom complet imprès al document. |
| `poa_parsed_address` | Adreça estructurada: la mateixa estructura imbricada que `parsed_address` de KYC. |
| `extra_fields` | Camps específics del document: dades bancàries (`bank_account_number`, `bank_iban`, `bank_sort_code`, `bank_routing_number`, `bank_swift_bic`, `bank_branch_name`, `bank_branch_address`), `document_phone_number`, `additional_names` (llista o `null`). |### Exemple```bash theme={null}
curl -X PATCH "https://verification.didit.me/v3/session/4c5c7f3a.../update-poa-data/" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "document_type": "utility_bill",
    "issuer": "Iberdrola",
    "issue_date": "2026-03-15",
    "name_on_document": "Jane Doe",
    "poa_parsed_address": {
      "street_1": "Calle Mayor 10",
      "city": "Madrid",
      "postal_code": "28013",
      "country": "ES"
    }
  }'
```## Actualitza les dades de l’empresa KYB**`PATCH /v3/session/{sessionId}/kyb/{companyUuid}/update-data/`**Corregeix els camps extrets del registre d’una empresa KYB. L’endpoint edita **tant** les columnes canòniques de l’empresa com `registry_data`, de manera que la vista «Extret del registre» de la consola reflecteix les teves correccions. `user_provided_data` (el que l’usuari final va confirmar al flux allotjat) no es modifica. S’hi registra `last_console_edit_at` i s’activa un webhook `data.updated` amb `trigger: "console_registry_edit"`.### Requisits- **Privilegi**: `write:businesses` (diferent del privilegi de KYC / POA).
- El `companyUuid` de la URL ha de pertànyer al `sessionId` indicat; si no, obtindràs un 404.
- No hi ha cap restricció per estat de la sessió: les dades de l’empresa KYB es poden corregir en qualsevol moment.### Camps modificables| Camp | Observacions |
| - | - |
| `company_name` | Nom legal. |
| `registration_number` | Número de registre oficial. |
| `country_code` | País de constitució, ISO 3166-1 alpha-3. |
| `incorporation_date` / `registration_date` / `dissolution_date` | Dates ISO 8601. |
| `tax_number` | Número d’identificació fiscal. |
| `legal_address` | Àlies de `registered_address`: es desa a la columna canònica `registered_address`. |
| `company_type` | Ltd / LLC / PLC / SA / GmbH / SL, etc. |
| `registry_status` | `active`, `dissolved`, `struck_off`, `inactive`, etc. |
| `verification_status` | `verified`, `failed`, `unknown`. |
| `alternative_names` | Noms comercials, noms anteriors, DBA. |
| `nature_of_business` | Descripció breu. |
| `registered_capital` | Capital autoritzat / emès. |
| `website`, `email`, `phone` | Dades de contacte. |
| `legal_entity_identifier` | LEI. |
| `location_of_registration` | Ciutat / subdivisió. |
| `control_scheme` | Esquema de govern quan el registre l’exposa. |Qualsevol camp que ometis es deixa sense canviar. Qualsevol camp que enviïs s’escriu a la columna canònica (quan n’existeix una) i es fusiona amb `registry_data`. Les dates es serialitzen com a cadenes ISO 8601 quan es fusionen amb `registry_data`.### Exemple```bash theme={null}
curl -X PATCH "https://verification.didit.me/v3/session/bs-01HJX1.../kyb/f7a9c1b2-4e6d.../update-data/" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "company_name": "Acme Corporation Limited",
    "registration_number": "12345678",
    "registry_status": "active",
    "legal_address": "1 Main Street, London EC1A 1AA, United Kingdom",
    "alternative_names": "Acme Ltd, Acme Group"
  }'
```Resposta: l’objecte complet de l’empresa KYB, amb la mateixa estructura que `registry_checks[].company` a la [decisió de la sessió](https://docs.didit.me/ca/sessions-api/retrieve-session.md#verificació-d’empreses-kyb).## Omet una part de Key People**`PATCH /v3/session/{sessionId}/kyb/parties/{partyUuid}/`**Eximeix una part de Key People de la verificació: és la via d’escapament per a una part que mai no podrà completar la seva pròpia comprovació. La causa habitual és una sessió filla eliminada. Quan la KYC individual assignada a un UBO o a un administrador s’elimina, el seu estat es congela i mai no es resoldrà, de manera que el KYB no té res que pugui fer-la sortir de `Awaiting User`. En ometre la part, aquesta deixa de comptar a l’agregació de Key People, la comprovació es recalcula a l’instant i la sessió es pot resoldre i aprovar o rebutjar.### Requisits- **Privilegi**: `write:businesses`.
- El `partyUuid` de la URL ha de pertànyer al `sessionId` indicat; si no, obtindràs un 404.
- **No està condicionat per `allow_skip`.** Aquesta configuració del rol limita el que el sol·licitant pot ometre mentre omple la pantalla allotjada de Key People. Aquest endpoint és la sobreescriptura de l’operador, de manera que funciona fins i tot en rols en què el sol·licitant no hauria pogut ometre la part.### Cos| Camp | Tipus | Observacions |
| - | - | - |
| `is_skipped` | boolean | `true` exempta la part; `false` la torna a posar dins de l’abast i la comprovació torna a esperar-la. |`requires_verification` no es modifica intencionadament, de manera que una part a la qual s’ha aplicat l’excepció apareix com a `requires_verification: true` **i** `is_skipped: true`. El registre continua mostrant que les regles demanaven una comprovació.### Exemple```bash theme={null}
curl -X PATCH "https://verification.didit.me/v3/session/bs-01HJX1.../kyb/parties/0a3f1e2c-7c2f.../" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "is_skipped": true }'
```Resposta: la part actualitzada, amb la mateixa estructura que una entrada de `key_people_checks[].submitted.parties[]` a la [decisió de la sessió](https://docs.didit.me/ca/business-verification/response-schema.md#key_people_checks).S’activa un webhook `data.updated` amb `trigger: "console_key_people_skip"`.> [!NOTE]
>
> Una part la sessió filla de la qual s’ha eliminat es marca al payload de la decisió amb
> `kyc_session_deleted: true` (o `kyb_sub_session_deleted: true` per a les parts corporatives),
> i el seu `kyc_session_url` / `kyb_sub_session_url` es retorna com a `null` perquè l’enllaç ja no es resol.
> Eliminar una sessió filla mai no aprova la part per si sola: la comprovació de Key People passa a `In Review`
> perquè una persona prengui la decisió.## Què passa després d’una actualització- **Webhook**: `data.updated` s’activa sobre la sessió, amb el `session_kind` de la sessió al payload (`"user"` o `"business"`). Subscriu-te una sola vegada al nivell de destinació i encamina segons `session_kind`.
- **Registre d’auditoria**: la sessió registra exactament quins camps han canviat, els valors anterior i nou, i (per a les crides amb autenticació d’usuari) el correu electrònic de l’actor. Es pot consultar a la pestanya Events de la consola.
- **Tornar a geocodificar l’adreça**: per a les actualitzacions KYC i POA que canvien `address` / `poa_address`, Didit repeteix la geocodificació en segon pla. Els errors s’ignoren perquè l’actualització mai no falli per un problema de geocodificació.
- **Reavaluació AML**: les actualitzacions KYC que canvien el nom, la data de naixement o la nacionalitat poden tornar a activar el cribratge AML si aquest no havia acabat a la sessió. Els resultats apareixen a la decisió de la sessió.## Quan no cal fer servir aquests endpoints- **Repetir tota la verificació**: si el client ha de tornar a fer la foto del document d’identitat o tornar a pujar un document, fes servir [update-status](https://docs.didit.me/ca/sessions-api/update-status.md) per passar la sessió a `Resubmitted`.
- **Canviar camps de perfil de l’entitat User o Business**: fes servir [`PATCH /v3/users/{vendor_data}/`](https://docs.didit.me/ca/management-api/users/update) o [`PATCH /v3/businesses/{vendor_data}/`](https://docs.didit.me/ca/management-api/businesses/update). Aquests endpoints actualitzen dades a nivell d’entitat, no a nivell de sessió.
- **Editar dades de Key People**: no hi ha cap API pública per modificar el nom, els rols o la titularitat d’una part. Aquestes dades s’envien mitjançant el flux allotjat. L’únic camp modificable és `is_skipped` (vegeu [Omet una part de Key People](#omet-una-part-de-key-people)).## Errors| Estat | Significat |
| - | - |
| `401` | Falten les credencials o no són vàlides. |
| `403` | El client no té el privilegi necessari (`write:sessions` o `write:businesses`). |
| `404` | Sessió no trobada, o la sessió no conté el registre que intentes modificar (sense KYC, sense POA, sense empresa coincident, sense part coincident, o una part que pertany a una altra sessió). |
| `400` | Error de validació: codi de país no vàlid, clau desconeguda de `parsed_address`, `extra_fields` que no és un objecte, etc. |## Passos següents> [card] [Recuperar la sessió](https://docs.didit.me/ca/sessions-api/retrieve-session.md)
>
> Obtén la decisió completa per veure els camps actualitzats.> [card] [Actualitzar l'estat](https://docs.didit.me/ca/sessions-api/update-status.md)
>
> Aprova, rebutja o reobre una sessió després d'una correcció de dades.> [card] [Webhooks](https://docs.didit.me/ca/integration/webhooks.md)
>
> Subscriu-te als esdeveniments `data.updated`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.