> ## 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.

# Enviar transacció des d'un SDK: KYT del costat del client

> Envia transaccions monitoritzades des del dispositiu amb un token d'SDK de Didit, amb anàlisi del dispositiu automàtica i action_required.



Prompt de l'API per enviar una transacció (token de l'SDK)
        Copia el prompt al porta-retalls



      
      

\<pre>

\`Submit a monitored transaction from an end-user device using a scoped SDK token instead of an API key. This is the wire endpoint behind the Didit SDKs' submitTransaction methods - call it directly only when not using an SDK.

Endpoint:
POST https://verification.didit.me/v1/transactions/

Authentication:
X-Transaction-Token header carrying an sdk_token minted by your backend via POST /v3/transactions/sdk-token/. No API key on the device, ever.

Payload (camelCase wire shape - each field maps onto its POST /v3/transactions/ equivalent):
\{
"txnId": "wd-2026-07-07-0042",              // -> transaction_id (required)
"type": "travelRule",                        // -> transaction_category (required)
"info": {                                    // -> transaction_details (required)
"direction": "out", "amount": "0.25", "currency": "ETH",
"currencyType": "crypto", "cryptoParams": {"crypto_chain": "ETH"}   // -> currency_kind, crypto_params
},
"subject": { "fullName": "Jane Doe" },       // externalUserId is IGNORED - identity comes from the token
"counterparty": {
"fullName": "Ana Diaz",
"paymentMethod": {"type": "unhosted_wallet", "accountId": "0x8ba1f109551bD432803012645Ac136ddd64DBA72"}  // type -> method_type; declares a self-hosted wallet
},
"travelRule": {                              // -> travel_rule_details
"status": "AWAITING_COUNTERPARTY",         // required (400 if missing); ignored when Travel Rule is enabled
"beneficiaryData": {"wallet_address": "0x8ba1f109551bD432803012645Ac136ddd64DBA72", "name": "Ana Diaz"}
},
"props": { "channel": "mobile_app" },        // -> custom_properties
"includeCryptoScreening": true
}

Three things are always decided by the token, never the payload:
\- the application the transaction is created under
\- the subject identity (token's vendor_data)
\- server-derived device context (IP, user agent) - it wins on conflict.

What to read from the response (same snake_case detail as /v3/, plus):
\- status - APPROVED | IN_REVIEW | DECLINED | AWAITING_USER.
\- travel_rule.status - the Travel Rule exchange state, when applicable.
\- action_required - when the end user must act: type "wallet_ownership" (open the url in a real browser, never a webview) or "verification_session" (launch with your Didit verification integration). null when nothing is pending.

Failure modes:
\- 401 - token missing, unknown, revoked, over max_uses, or expired ("expired" appears in the detail for expired tokens).
\- 400 - validation errors, with per-field details keyed by the canonical field names (a missing info.currency is reported as {"transaction_details": {"currency": [...]}}), including a txnId that already exists.
\- 409 - a concurrent request with the same txnId was created first.

Afterwards:
\- Re-read with GET /v1/transactions/{transaction_id}/ (same token) after the user completes an action.
\- Your backend also receives transaction.created / transaction.status.updated webhooks with the same action_required block.

Full guide: /transaction-monitoring/sdk-transaction-submission.`

\</pre>



      
      

Enganxa a



## OpenAPI

````yaml ca/openapi-25.json POST /v1/transactions/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de verificació d'identitat. Autentica't amb la capçalera x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v1/transactions/:
    post:
      tags:
        - Transactions
      summary: Envia una transacció des d'un SDK
      description: >-
        Endpoint orientat a dispositius que els SDK de Didit criden per enviar
        una transacció directament des del dispositiu de l'usuari final.
        L'autenticació és un token amb abast obtingut de `POST
        /v3/transactions/sdk-token/` enviat a la capçalera `X-Transaction-Token`
        en lloc d'una clau d'API, i l'endpoint té CORS habilitat perquè els
        navegadors puguin cridar-lo entre orígens diferents. El payload utilitza
        els àlies en camelCase que es mostren a continuació (els mètodes
        `submitTransaction` de l'SDK el construeixen per tu). Tres garanties del
        costat del servidor: l'aplicació sempre s'obté del token; la identitat
        del subjecte (`externalUserId`) sempre s'aplica des del `vendor_data`
        del token, de manera que els valors suplantats del payload s'ignoren; i
        la intel·ligència del dispositiu (la petjada digital del dispositiu de
        l'SDK més la IP i el user agent derivats pel servidor) s'associa
        automàticament al subjecte.
      operationId: submitTransactionFromSdk
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                txnId:
                  type: string
                  description: >-
                    El teu identificador únic per a aquesta transacció
                    (correspon a `transaction_id`, màxim 128 caràcters).
                  example: wd-2026-07-07-0042
                txnDate:
                  type: string
                  format: date-time
                  description: >-
                    Quan va tenir lloc la transacció (s'assigna a
                    `transaction_at`). Per defecte pren l'hora actual si s'omet.
                zoneId:
                  type: string
                  description: >-
                    Identificador de zona horària IANA (es correlaciona amb
                    `time_zone`), p. ex. `Europe/Madrid`.
                type:
                  type: string
                  description: >-
                    Categoria de la transacció (s'assigna a
                    `transaction_category`), p. ex., `finance`, `kyc`,
                    `travelRule`, `userPlatformEvent`, `gamblingBet`.
                  example: travelRule
                info:
                  type: object
                  description: >-
                    Detalls financers principals de la transacció (correspon a
                    `transaction_details`).
                  required:
                    - direction
                    - amount
                    - currency
                  properties:
                    direction:
                      type: string
                      description: >-
                        Direcció relativa al subjecte. Insensible a majúscules i
                        minúscules; s'accepten `in`/`out` com a àlies. Es
                        retorna en majúscules (`INBOUND`/`OUTBOUND`).
                      example: out
                    amount:
                      type: number
                      description: >-
                        Import de la transacció (fins a 18 decimals). També
                        s'accepta una cadena decimal i és l'única manera de
                        conservar més d'uns 15 dígits significatius: un número
                        JSON s'analitza primer com a float binari, de manera que
                        `0.123456789012345678` s'emmagatzema com a
                        `0.12345678901234568`.
                      example: 0.25
                    currency:
                      type: string
                      description: >-
                        Codi de moneda. S'accepta qualsevol codi alfabètic ISO
                        4217 (p. ex. `EUR`, `USD`, `NGN`), així com un símbol
                        d'actiu cripto (p. ex. `BTC`). És preferible utilitzar
                        un codi actualment en circulació. No tots els codis
                        acceptats tenen tipus de canvi: quan no n'hi ha cap de
                        disponible per al codi (per exemple, la unitat de compte
                        ISO `XSU`, o un símbol cripto que Didit no cotitza), la
                        conversió automàtica falla i `preferred_currency_amount`
                        es retorna null tret que la sol·licitud hagi
                        proporcionat un `amountInDefaultCurrency` preconvertit.
                      example: ETH
                    currencyType:
                      type: string
                      description: >-
                        Indica si la moneda és `fiat` o `crypto` (correspon a
                        `currency_kind`).
                    amountInDefaultCurrency:
                      type: number
                      nullable: true
                      description: >-
                        Import preconvertit en la moneda per defecte (es mapeja
                        a `amount_in_default_currency`). Si s'omet, s'intenta la
                        conversió automàtica de divises.
                    defaultCurrencyCode:
                      type: string
                      description: >-
                        El codi de moneda per defecte per a l'import convertit
                        (correspon a `default_currency`). Qualsevol codi ISO
                        4217 actualment en circulació.
                    paymentDetails:
                      type: string
                      nullable: true
                      description: >-
                        Referència de pagament o concepte de text lliure
                        (s'assigna a `payment_details`).
                    paymentTxnId:
                      type: string
                      nullable: true
                      description: >-
                        Referència de pagament externa (es vincula amb
                        `payment_reference_id`); el hash de la transacció
                        on-chain per a transaccions cripto.
                    type:
                      type: string
                      nullable: true
                      description: >-
                        Subtipus de la transacció (s'assigna a `action_type`),
                        p. ex. `deposit`, `withdrawal`, `transfer`.
                    cryptoParams:
                      type: object
                      description: >-
                        Paràmetres específics de cripto, p. ex.
                        `{"crypto_chain": "ETH"}`.
                subject:
                  type: object
                  description: >-
                    El subjecte (sol·licitant) de la transacció.
                    `externalUserId` s'ignora aquí: la identitat del subjecte es
                    determina sempre a partir de `vendor_data` del token.
                  required:
                    - fullName
                  properties:
                    type:
                      type: string
                      description: >-
                        Tipus d'entitat (s'assigna a `entity_type`):
                        `individual` (per defecte) o `company`.
                    externalUserId:
                      type: string
                      description: >-
                        S'ignora al subjecte: s'aplica al servidor a partir del
                        camp `vendor_data` del token.
                    fullName:
                      type: string
                      example: Jane Doe
                    firstName:
                      type: string
                    lastName:
                      type: string
                    dob:
                      type: string
                      format: date
                      description: >-
                        Data de naixement (YYYY-MM-DD; s'assigna a
                        `date_of_birth`).
                    address:
                      type: object
                      description: >-
                        Objecte d'adreça amb `country` (ISO 3166-1 alfa-3),
                        `town`, `state`, `street`, `post_code`.
                    institutionInfo:
                      type: object
                      description: >-
                        Detalls de la institució per a participants
                        institucionals (s'associa a `institution_details`).
                    device:
                      type: object
                      description: >-
                        Context de dispositiu explícit opcional. Es fusiona amb
                        la intel·ligència de dispositiu capturada
                        automàticament; en cas de conflicte, prevalen els camps
                        derivats pel servidor.
                    paymentMethod:
                      type: object
                      description: >-
                        Mètode de pagament utilitzat pel subjecte (s'assigna a
                        `payment_method`).
                      properties:
                        type:
                          type: string
                          description: >-
                            Tipus de mètode de pagament (s'assigna a
                            `method_type`), p. ex. `bank_card`, `bank_account`,
                            `crypto_wallet`, `ewallet`, `unhosted_wallet`,
                            `other`.
                        accountId:
                          type: string
                          description: >-
                            Identificador de compte (s'assigna a `account_id`):
                            IBAN, empremta de targeta o adreça de cartera.
                        issuingCountry:
                          type: string
                          description: >-
                            Codi de país ISO 3166-1 alpha-3 de l'emissor
                            (correspon a `issuing_country`).
                counterparty:
                  type: object
                  description: >-
                    La contrapart de la transacció (opcional). Té la mateixa
                    estructura que `subject`; `externalUserId` és rellevant
                    aquí.
                  properties:
                    type:
                      type: string
                      description: >-
                        Tipus d'entitat (s'assigna a `entity_type`):
                        `individual` o `company`.
                    externalUserId:
                      type: string
                      description: >-
                        El teu identificador intern per a la contrapart
                        (correspon a `vendor_data`).
                    fullName:
                      type: string
                    firstName:
                      type: string
                    lastName:
                      type: string
                    dob:
                      type: string
                      format: date
                    address:
                      type: object
                    institutionInfo:
                      type: object
                    device:
                      type: object
                    paymentMethod:
                      type: object
                      description: >-
                        Mètode de pagament utilitzat per la contrapart
                        (s'assigna a `payment_method`). A les transaccions de
                        Travel Rule, `type: "unhosted_wallet"` declara la
                        cartera de la contrapart com a autoallotjada: la
                        transferència omet l'encaminament cap al VASP de la
                        contrapart, es crea directament a
                        `UNCONFIRMED_OWNERSHIP` i (quan
                        `auto_wallet_verification` està activat) es genera
                        automàticament una sessió de widget de titularitat de la
                        cartera i es retorna a `action_required` perquè l'SDK la
                        pugui iniciar.
                      properties:
                        type:
                          type: string
                          description: >-
                            Tipus de mètode de pagament (s'assigna a
                            `method_type`), p. ex. `bank_card`, `bank_account`,
                            `crypto_wallet`, `ewallet`, `unhosted_wallet`,
                            `other`. Utilitza `unhosted_wallet` per declarar una
                            cartera autoallotjada per a la Travel Rule.
                        accountId:
                          type: string
                          description: >-
                            Identificador de compte (s'assigna a `account_id`):
                            IBAN, empremta de targeta o adreça de cartera.
                        issuingCountry:
                          type: string
                props:
                  type: object
                  additionalProperties: true
                  description: >-
                    Parells clau-valor personalitzats (s'assignen a
                    `custom_properties`). Cada clau es pot referenciar a les
                    condicions de les regles com a `custom_values.<key>`.
                travelRule:
                  type: object
                  description: >-
                    Detalls de Travel Rule (es correlaciona amb
                    `travel_rule_details`). Quan Travel Rule està activat per a
                    l'aplicació, Didit ignora qualsevol `status` que enviïs i
                    gestiona l'intercanvi directament.
                  required:
                    - status
                  properties:
                    status:
                      type: string
                    protocol:
                      type: string
                    required:
                      type: boolean
                    obligationsCount:
                      type: integer
                    originatorData:
                      type: object
                    beneficiaryData:
                      type: object
                    metadata:
                      type: object
                includeCryptoScreening:
                  type: boolean
                  nullable: true
                  description: >-
                    Sobreescriptura per transacció per al cribratge d'analítica
                    blockchain de criptomonedes (s'assigna a
                    `include_crypto_screening`).
                fingerprint_v2:
                  type: object
                  description: >-
                    El payload d'empremta digital del dispositiu `didit-fp-v2`.
                    Injectat automàticament pels SDK; només és rellevant quan es
                    crida directament a la wire API.
              required:
                - txnId
                - type
                - info
                - subject
            example:
              txnId: wd-2026-07-07-0042
              type: travelRule
              info:
                direction: out
                amount: '0.25'
                currency: ETH
                currencyType: crypto
                cryptoParams:
                  crypto_chain: ETH
              subject:
                fullName: Jane Doe
              counterparty:
                fullName: Ana Diaz
                paymentMethod:
                  type: unhosted_wallet
                  accountId: 0xBeneficiaryWallet01
              travelRule:
                status: AWAITING_COUNTERPARTY
                beneficiaryData:
                  wallet_address: 0xBeneficiaryWallet01
                  name: Ana Diaz
              includeCryptoScreening: true
      responses:
        '201':
          description: >-
            Transacció enviada i monitorada. Mateixa estructura de detall que
            `GET /v3/transactions/{transaction_id}/`, incloent-hi el bloc
            `action_required` quan l'usuari final ha de completar una acció de
            seguiment (els SDK la inicien automàticament per defecte).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionDetail'
              examples:
                Wallet ownership required:
                  value:
                    uuid: 22222222-3333-4444-5555-666666666666
                    txn_id: wd-2026-07-07-0042
                    transaction_type: travelRule
                    direction: OUTBOUND
                    status: APPROVED
                    amount: '0.25'
                    currency: ETH
                    travel_rule:
                      uuid: 33333333-4444-5555-6666-777777777777
                      status: UNCONFIRMED_OWNERSHIP
                      required: true
                    action_required:
                      type: wallet_ownership
                      url: https://verify.didit.me/wallet-ownership/3s9x...urlsafe
                      widget_session_id: 77777777-8888-9999-aaaa-bbbbbbbbbbbb
                      expires_at: '2026-07-07T13:00:00Z'
        '400':
          description: >-
            La validació ha fallat (falten camps obligatoris, `txnId` duplicat,
            categoria desconeguda).
          content:
            application/json:
              examples:
                Missing fields:
                  value:
                    transaction_details:
                      currency:
                        - This field is required.
                Duplicate txnId:
                  value:
                    transaction_id:
                      - A transaction with this transaction_id already exists.
        '401':
          description: >-
            El token de la transacció s'ha rebutjat: falta, és desconegut, s'ha
            revocat, ha superat el seu `max_uses` o ha caducat. Les respostes de
            token caducat sempre contenen la paraula `expired` al detall, que és
            com els SDK distingeixen els errors `expired_token` dels errors
            `invalid_token`.
          content:
            application/json:
              examples:
                Invalid token:
                  value:
                    detail: Invalid transaction token.
                Expired token:
                  value:
                    detail: Transaction token expired.
        '409':
          description: >-
            Una altra sol·licitud amb el mateix `txnId` ha creat la transacció
            mentre es processava aquesta, de manera que només un dels dos
            enviaments simultanis té èxit. Llegeix la transacció existent en
            lloc de tornar-la a enviar.
          content:
            application/json:
              examples:
                Concurrent duplicate:
                  value:
                    detail: A transaction with this transaction_id already exists.
      security:
        - TransactionTokenAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST https://verification.didit.me/v1/transactions/ \
              -H 'X-Transaction-Token: SDK_TOKEN' -H 'Content-Type: application/json' \
              -d '{"txnId": "wd-2026-07-07-0042", "type": "travelRule", "info": {"direction": "out", "amount": "0.25", "currency": "ETH", "currencyType": "crypto"}, "subject": {"fullName": "Jane Doe"}, "counterparty": {"fullName": "Ana Diaz", "paymentMethod": {"type": "unhosted_wallet", "accountId": "0xBeneficiaryWallet01"}}, "travelRule": {"status": "AWAITING_COUNTERPARTY", "beneficiaryData": {"wallet_address": "0xBeneficiaryWallet01", "name": "Ana Diaz"}}, "includeCryptoScreening": true}'
        - lang: javascript
          label: Web SDK
          source: |-
            import { DiditSdk } from '@didit-protocol/sdk-web';

            const result = await DiditSdk.shared.submitTransaction({
              transactionToken: sdkToken,
              transaction: {
                txnId: 'wd-2026-07-07-0042',
                category: 'travelRule',
                details: { direction: 'out', amount: '0.25', currency: 'ETH', currencyType: 'crypto' },
                subject: { fullName: 'Jane Doe' },
                counterparty: { fullName: 'Ana Diaz', paymentMethod: { type: 'unhosted_wallet', accountId: '0xBeneficiaryWallet01' } },
                travelRule: { status: 'AWAITING_COUNTERPARTY', beneficiaryData: { wallet_address: '0xBeneficiaryWallet01', name: 'Ana Diaz' } },
                includeCryptoScreening: true
              },
              onActionCompleted: (refreshed) => console.log(refreshed.status)
            });
components:
  schemas:
    TransactionDetail:
      type: object
      description: >-
        Registre complet de monitoratge per a una transacció, tal com el
        retornen `GET /v3/transactions/{transaction_id}/` i `POST
        /v3/transactions/`.
      properties:
        uuid:
          type: string
          format: uuid
          description: >-
            Identificador de transacció estable de Didit. Fes-lo servir com a
            `{transaction_id}` per a les crides de seguiment.
        environment:
          type: string
          enum:
            - live
            - sandbox
          description: >-
            Entorn de l'aplicació propietària de la transacció. Una transacció
            `sandbox` s'emmagatzema però mai s'avalua, se sotmet a cribratge, es
            notifica ni es factura, de manera que el seu `rule_runs` buit
            significa "no avaluada".
        transaction_number:
          type: integer
          description: >-
            Número seqüencial de transacció en l'àmbit de l'aplicació que es
            mostra a la consola (p. ex. `4123`).
        txn_id:
          type: string
          description: >-
            El `transaction_id` que has proporcionat en el moment de la creació
            (màx. 128 caràcters). Únic per aplicació.
        txn_date:
          type: string
          format: date-time
          description: >-
            Quan va tenir lloc la transacció (a partir de `transaction_at`; per
            defecte pren l'hora d'enviament).
        zone_id:
          type: string
          nullable: true
          description: >-
            Identificador de zona horària IANA proporcionat en el moment de la
            creació.
        transaction_type:
          type: string
          description: >-
            Categoria de primer nivell tal com s'emmagatzema: `finance`, `kyc`,
            `travelRule`, `userPlatformEvent`, `gamblingBet`,
            `gamblingLimitChange`, `gamblingBonusChange`, `auditTrailEvent`.
            Tingues en compte que els valors de diverses paraules es retornen en
            camelCase fins i tot quan s'envien en snake_case.
        action_type:
          type: string
          description: >-
            Subtipus dins de la categoria (p. ex. `deposit`, `withdrawal`,
            `transfer`). Per defecte pren la categoria quan no s'especifica.
        direction:
          type: string
          enum:
            - INBOUND
            - OUTBOUND
          description: >-
            Direcció relativa al subjecte. S'emmagatzema en majúscules
            independentment de les majúscules o minúscules enviades (s'accepten
            `in`/`out`/`inbound`/`outbound` a l'entrada).
        status:
          type: string
          enum:
            - APPROVED
            - IN_REVIEW
            - DECLINED
            - AWAITING_USER
          description: >-
            Veredicte de monitoratge actual. Les transaccions es creen com a
            `APPROVED`; les regles poden canviar-les a `IN_REVIEW`/`DECLINED` de
            manera sincrònica.
        source:
          type: string
          enum:
            - LIVE
            - IMPORTED
          description: >-
            Com s'ha originat el registre: `LIVE` per a transaccions enviades a
            través de l'API o l'SDK, `IMPORTED` per a transaccions carregades
            mitjançant la importació des de la consola.
        amount:
          type: string
          description: >-
            Import de la transacció com a cadena decimal sense els zeros finals
            (p. ex., `"1500"`, `"0.5"`, `"0.123456789012345678"`). Fins a 18
            decimals.
        currency:
          type: string
          description: >-
            Codi de moneda de `amount`. S'accepta qualsevol codi alfabètic ISO
            4217 (p. ex. `EUR`, `USD`, `NGN`), així com un símbol d'actiu cripto
            (p. ex. `BTC`). És preferible utilitzar un codi actualment en
            circulació. No tots els codis acceptats tenen tipus de canvi: quan
            no n'hi ha cap de disponible per al codi (per exemple, la unitat de
            compte ISO `XSU`, o un símbol cripto que Didit no cotitza), la
            conversió automàtica falla i `preferred_currency_amount` es retorna
            null tret que la sol·licitud hagi proporcionat un
            `amount_in_default_currency` preconvertit.
        currency_type:
          type: string
          nullable: true
          description: '`fiat` o `crypto`, tal com s''ha indicat a `currency_kind`.'
        amount_in_default_currency:
          type: string
          nullable: true
          description: >-
            Import preconvertit que has proporcionat, com a cadena decimal sense
            zeros finals.
        default_currency_code:
          type: string
          nullable: true
        preferred_currency_amount:
          type: string
          nullable: true
          description: >-
            `amount` convertit a la moneda preferida de l'aplicació, quan
            estigui disponible.
        preferred_currency_code:
          type: string
          nullable: true
        payment_details:
          type: string
          nullable: true
          description: Referència de pagament o concepte de text lliure de l'enviament.
        payment_txn_id:
          type: string
          nullable: true
          description: >-
            Referència del sistema de pagament extern (p. ex. hash de la
            transacció a la blockchain) de `payment_reference_id`.
        score:
          type: integer
          description: >-
            Puntuació de risc acumulada per les regles (normalment 0–100). Com
            més alta, més risc.
        severity:
          type: string
          nullable: true
          enum:
            - UNKNOWN
            - LOW
            - MEDIUM
            - HIGH
            - CRITICAL
          description: >-
            Gravetat de risc categòrica establerta per regles/proveïdors
            (`UNKNOWN`, `LOW`, `MEDIUM`, `HIGH`, `CRITICAL`). `null` fins que
            algun element l'estableixi.
        decision_reason_code:
          type: string
          nullable: true
          description: Motiu llegible per màquina per a l'`status` actual.
        decision_reason_label:
          type: string
          nullable: true
          description: Etiqueta fàcil de llegir per a `decision_reason_code`.
        vendor_data:
          type: string
          nullable: true
          description: Còpia de conveniència del `vendor_data` del sol·licitant.
        metadata:
          type: object
          description: >-
            Instantània dels payloads de `subject` i `counterparty` tal com es
            van enviar en el moment de la creació.
        props:
          type: object
          description: >-
            Les `custom_properties` que has proporcionat en crear. Cada clau es
            pot referenciar en les condicions de les regles com a
            `custom_values.<key>`.
        tags:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              name:
                type: string
              color:
                type: string
              description:
                type: string
                nullable: true
              source:
                type: string
                enum:
                  - didit
                  - custom
                description: >-
                  Si l'etiqueta és un valor predefinit de Didit o una etiqueta
                  personalitzada.
          description: Etiquetes adjuntades a la transacció (manualment o per regles).
        parties:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              role:
                type: string
                enum:
                  - APPLICANT
                  - REMITTER
                  - BENEFICIARY
                  - COUNTERPARTY
                description: >-
                  Rol de la part. L'endpoint de creació assigna `APPLICANT` (el
                  subjecte) i `COUNTERPARTY`.
              entity_type:
                type: string
                enum:
                  - individual
                  - company
                  - external
                  - unhostedWallet
              kind:
                type: string
                enum:
                  - USER
                  - BUSINESS
                  - EXTERNAL
                description: >-
                  Les parts `USER`/`BUSINESS` s'enllacen amb una entitat
                  propietat de Didit mitjançant `vendor_data`. Les parts
                  `EXTERNAL` no tenen cap entitat de Didit al darrere.
              vendor_data:
                type: string
                nullable: true
                description: El teu identificador intern d'usuari/empresa.
              full_name:
                type: string
                nullable: true
              first_name:
                type: string
                nullable: true
              last_name:
                type: string
                nullable: true
              country_code:
                type: string
                nullable: true
                description: >-
                  Codi de país de l'`address.country` enviat (normalment ISO
                  3166-1 alpha-3).
              dob:
                type: string
                format: date
                nullable: true
                description: Data de naixement a partir de la `date_of_birth` enviada.
              address:
                type: object
                description: Objecte d'adreça tal com s'ha enviat. `{}` quan s'omet.
              institution_info:
                type: object
                description: >-
                  Detalls de la institució tal com s'han enviat. `{}` si
                  s'ometen.
              device:
                type: object
                description: >-
                  Context del dispositiu normalitzat, inclòs l'enriquiment d'IP
                  del costat del servidor sota network_context (geolocalització,
                  indicadors de VPN/centre de dades) quan s'ha proporcionat una
                  IP.
                properties:
                  fingerprint:
                    type: string
                    description: Petjada digital única del dispositiu.
                  persistent_device_id:
                    type: string
                    description: >-
                      Identificador de dispositiu estable entre sessions
                      (esquema d'empremta digital v2).
                  user_agent:
                    type: string
                    description: Cadena de l'agent d'usuari del navegador o de l'aplicació.
                  browser_family:
                    type: string
                    description: Família del navegador (p. ex., Chrome, Firefox, Safari).
                  browser_version:
                    type: string
                    description: Cadena de la versió del navegador.
                  platform:
                    type: string
                    description: >-
                      Identificador de plataforma (web, ios, android, macos,
                      windows, linux).
                  os_family:
                    type: string
                    description: >-
                      Família del sistema operatiu (p. ex., iOS, Android,
                      Windows).
                  os_version:
                    type: string
                    description: Cadena de la versió del sistema operatiu.
                  accept_language:
                    type: string
                    description: Valor de la capçalera Accept-Language.
                  session_id:
                    type: string
                    description: Identificador de sessió (emmagatzemat a les metadades).
                  session_age_ms:
                    type: number
                    description: Antiguitat de la sessió en mil·lisegons.
                  network_context:
                    type: object
                    description: Context de xarxa amb adreça IP i geolocalització.
                    properties:
                      ip_address:
                        type: string
                        description: Adreça IP del client.
                      ip_country_code:
                        type: string
                        description: País geolocalitzat de la IP (ISO 3166-1 alfa-3).
                      latitude:
                        type: number
                        description: Latitud geogràfica de la IP.
                      longitude:
                        type: number
                        description: Longitud geogràfica de la IP.
              external_party_snapshot:
                type: object
                nullable: true
                description: >-
                  Còpia congelada de les dades de les parts de tipus `EXTERNAL`.
                  `null` mentre la part estigui vinculada a un usuari o una
                  empresa de Didit.
          description: Parts de la transacció (sol·licitant, contrapart).
        payment_methods:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              payment_method_type:
                type: string
                enum:
                  - bank_card
                  - bank_account
                  - e_wallet
                  - crypto_wallet
                  - unhosted_wallet
                  - other
              label:
                type: string
                nullable: true
              fingerprint:
                type: string
                nullable: true
                description: >-
                  SHA-256 sobre `type:account_id:issuing_country`: identificador
                  estable per correlacionar la reutilització del mateix
                  instrument.
              account_id:
                type: string
                nullable: true
                description: >-
                  Identificador de compte (IBAN, adreça de cartera, token de
                  targeta, …).
              issuing_country:
                type: string
                nullable: true
              owner_kind:
                type: string
                enum:
                  - USER
                  - BUSINESS
                  - EXTERNAL
              vendor_data:
                type: string
                nullable: true
                description: El teu identificador per a l'usuari o l'empresa propietaris.
              owner_name:
                type: string
                nullable: true
              institution_info:
                type: object
              details:
                type: object
                description: Objecte `payment_method` en brut tal com s'ha enviat.
              external_owner_snapshot:
                type: object
                nullable: true
              role:
                type: string
                enum:
                  - SOURCE
                  - DESTINATION
                  - FUNDING
                  - BENEFICIARY
                description: >-
                  Com es va utilitzar aquest mètode a la transacció. L'endpoint
                  de creació assigna `SOURCE`/`DESTINATION` a partir de la
                  direcció (sortint: subject = SOURCE; entrant: subject =
                  DESTINATION).
          description: Mètodes de pagament vinculats a la transacció.
        documents:
          type: array
          description: >-
            Fitxers adjunts a la transacció des de la consola. `[]` quan no n'hi
            ha cap.
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              label:
                type: string
                nullable: true
              note:
                type: string
                nullable: true
              uploaded_by:
                type: string
                nullable: true
              created_at:
                type: string
                format: date-time
              files:
                type: array
                items:
                  type: object
                  properties:
                    uuid:
                      type: string
                      format: uuid
                    file_url:
                      type: string
                      format: uri
                      nullable: true
                      description: >-
                        URL de descàrrega signada de curta durada; obtén-la quan
                        sigui necessari en lloc d'emmagatzemar-la.
                    original_filename:
                      type: string
                      nullable: true
                    file_size:
                      type: integer
                      nullable: true
        activities:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              activity_type:
                type: string
                description: >-
                  P. ex. `TRANSACTION_CREATED`, `TRANSACTION_NOTE_ADDED`,
                  `TRANSACTION_STATUS_CHANGED`.
              source:
                type: string
              status:
                type: string
                nullable: true
              title:
                type: string
                nullable: true
              description:
                type: string
                nullable: true
              metadata:
                type: object
              occurred_at:
                type: string
                format: date-time
          description: >-
            Entrades del registre d'activitat (creació, notes, revisions
            manuals, canvis d'estat).
        alerts:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              title:
                type: string
              description:
                type: string
                nullable: true
              severity:
                type: string
                enum:
                  - UNKNOWN
                  - LOW
                  - MEDIUM
                  - HIGH
                  - CRITICAL
              status:
                type: string
                enum:
                  - OPEN
                  - INVESTIGATING
                  - AWAITING_USER
                  - PENDING_SAR
                  - SAR_FILED
                  - RESOLVED
                  - DISMISSED
              source:
                type: string
                enum:
                  - RULE
                  - PROVIDER
                  - MANUAL
              metadata:
                type: object
              created_at:
                type: string
                format: date-time
              due_at:
                type: string
                format: date-time
                nullable: true
          description: >-
            Sempre buit actualment. Una alerta oberta és una transacció amb
            estat `IN_REVIEW` o `AWAITING_USER`.
        rule_runs:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              rule:
                type: string
                format: uuid
                description: UUID de la regla que s'ha executat.
              rule_title:
                type: string
              rule_description:
                type: string
                nullable: true
              rule_category:
                type: string
              matched:
                type: boolean
                description: >-
                  Si les condicions de la regla han coincidit amb aquesta
                  transacció. Només s'enregistra una execució per a les regles
                  coincidents, de manera que les avaluacions en producció sempre
                  porten `true`.
              is_test:
                type: boolean
                description: >-
                  Cert quan la regla s'ha executat en mode TEST (sense cap
                  efecte en l'estat o la puntuació).
              mode:
                type: string
                enum:
                  - ACTIVE
                  - DISABLED
                  - TEST
              severity:
                type: string
                nullable: true
              score_delta:
                type: integer
                description: Puntuació afegida per les accions `add_score` d'aquesta regla.
              status_target:
                type: string
                nullable: true
                description: Estat establert per una acció `change_status`, si n'hi ha.
              action_summary:
                type: string
                nullable: true
                description: >-
                  Resum de les accions que ha executat la regla, unides amb `; `
                  (p. ex., `score +30; change_status:IN_REVIEW;
                  add_tag:high_risk_country`). Parts: `score +N`,
                  `change_status:<STATUS>`, `add_tag:<name>`, `add_note`,
                  `add_to_list`, `open_case`. `null` quan la regla no ha
                  executat cap acció.
              metadata:
                type: object
                description: >-
                  Detall de l'avaluació: `scope_match`, `conditions[]` i
                  `aggregations[]`. Cada entrada de condició conté `field`,
                  `operator`, `expected_value`, el `current_value` llegit de la
                  transacció, `matched`, `group_index` i `group_logic`. Cada
                  entrada d'agregació (velocitat / recompte / suma) conté
                  `metric`, `field`, `operator`, `expected_value`, el
                  `computed_value` resultant de l'avaluació de l'agregat,
                  `window`, `filters`, `matched` i `sample_references`; les
                  agregacions asíncrones ajornades tenen `computed_value: null`
                  i `deferred: true`. Un grup de condicions niat és una entrada
                  de `conditions[]` amb l'`operator` `any_of` o `all_of`,
                  `field` null, i els resultats dels seus membres sota el seu
                  propi `conditions`.
              created_at:
                type: string
                format: date-time
          description: >-
            Resultats d'execució per regla: quina regla s'ha activat, amb quin
            impacte en la puntuació.
        provider_results:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              provider:
                type: string
              result_type:
                type: string
                enum:
                  - FIAT_MONITORING
                  - WALLET_SCREENING
                  - TRANSACTION_SCREENING
                  - TRAVEL_RULE
                  - NETWORK_GRAPH
                  - CUSTOM
              status:
                type: string
              severity:
                type: string
                nullable: true
              score:
                type: integer
              summary:
                type: string
                nullable: true
              payload:
                type: object
                description: Payload de resposta del proveïdor en brut.
              created_at:
                type: string
                format: date-time
          description: >-
            Payloads en brut dels proveïdors (Cribratge AML, anàlisi de
            blockchain, etc.).
        travel_rule:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/TransactionTravelRule'
          description: >-
            Transferència o comprovació de Travel Rule. S'emplena quan s'ha
            enviat `travel_rule_details`, i també quan Travel Rule està activat
            i la transacció s'ha creat amb `transaction_category: travelRule`
            (Didit inicia l'intercanvi directament, fins i tot sense
            `travel_rule_details`). `null` quan no existeix cap transferència o
            comprovació. En una transferència entrant, els camps
            `originator_data` i `beneficiary_data` de la contrapart romanen
            emmascarats (`data_masked: true`) fins que es confirma la
            titularitat de la cartera.
        network_snapshot:
          type: object
          nullable: true
          description: >-
            Instantània del graf de transaccions/parts relacionades utilitzada
            pel motor de regles. O bé el `network_snapshot` enviat amb la
            transacció o bé el graf que Didit construeix a partir d'un cribratge
            AML de carteres satisfactori (que substitueix el que s'hagi enviat).
            `null` quan cap dels dos existeix.
          properties:
            uuid:
              type: string
              format: uuid
            nodes:
              type: array
              items:
                type: object
            edges:
              type: array
              items:
                type: object
            metrics:
              type: object
        remediation:
          type: object
          nullable: true
          description: >-
            Sessió de correcció oferta a l'usuari quan es requereix una
            reverificació. Substituïda per `action_required`, que és el bloc
            canònic; es manté per compatibilitat amb versions anteriors.
          properties:
            session_id:
              type: string
            session_token:
              type: string
            url:
              type: string
              format: uri
            status:
              type: string
        action_required:
          type: object
          nullable: true
          description: >-
            Acció pendent de l'usuari final necessària per completar aquesta
            transacció, o null si no n'hi ha cap. Els SDK de Didit inicien
            automàticament l'acció per defecte i actualitzen la transacció quan
            finalitza. Dues variants, discriminades per `type`:
            `verification_session` (una sessió de verificació allotjada creada
            per una acció de regla) i `wallet_ownership` (una sessió de widget
            de titularitat de la cartera generada automàticament per a una
            transferència de Travel Rule que necessita un comprovant de control
            de la cartera, regulada per la configuració de Travel Rule
            `auto_wallet_verification`). Quan totes dues es podrien aplicar,
            `wallet_ownership` té prioritat perquè bloqueja l'intercanvi de
            Travel Rule.
          oneOf:
            - $ref: '#/components/schemas/TransactionVerificationSessionAction'
            - $ref: '#/components/schemas/TransactionWalletOwnershipAction'
          discriminator:
            propertyName: type
            mapping:
              verification_session: '#/components/schemas/TransactionVerificationSessionAction'
              wallet_ownership: '#/components/schemas/TransactionWalletOwnershipAction'
        cost_breakdown:
          type: object
          nullable: true
          description: >-
            Cost d'aquesta transacció: `total_price` i `items`, un per càrrec,
            cadascun amb `usage_type`, `price`, `details` i `created_at`. Un nou
            cribratge de la mateixa transacció és un element nou.
    TransactionTravelRule:
      type: object
      description: >-
        Una transferència Travel Rule d'una transacció, tal com la retornen `GET
        /v3/transactions/{transaction_id}/`, el `201` de `POST
        /v3/transactions/` i cada fila de `GET /v3/transactions/`. `direction`,
        `rail`, `counterparty_vasp`, `delivery`, `discovery`, `reason` i
        `next_actions` tenen la mateixa estructura que a `PATCH
        /v3/transactions/{transaction_id}/travel-rule/`, de manera que una
        lectura d'una transacció indica per què la seva transferència està
        bloquejada i què cal per fer-la avançar.
      properties:
        uuid:
          type: string
          format: uuid
        status:
          type: string
        protocol:
          type: string
          nullable: true
        required:
          type: boolean
        obligations_count:
          type: integer
        originator_data:
          type: object
          description: >-
            Part ordenant. Per a una transferència entrant, els valors de la
            contrapart s'emmascaren fins que se'n confirmi la titularitat.
        beneficiary_data:
          type: object
          description: >-
            Part beneficiària. Per a una transferència entrant, els valors de la
            contrapart s'emmascaren fins que es confirmi la titularitat.
        name_match:
          type: object
          nullable: true
          description: >-
            La comparació de noms que ha decidit la transferència (puntuació i
            estrictesa). Null fins que se n'hagi executat una. Els noms
            comparats s'emmascaren juntament amb les parts.
        data_match:
          $ref: '#/components/schemas/TravelRuleDataMatch'
        mismatched_fields:
          type: array
          items:
            type: string
          description: >-
            Drecera per a `data_match.mismatched_fields`. Buit quan no hi ha cap
            diferència.
        data_unmasked:
          $ref: '#/components/schemas/TravelRuleDataUnmasked'
        data_masked:
          type: boolean
          description: >-
            Cert mentre les dades personals de la contrapart estiguin
            emmascarades en aquesta resposta.
        metadata:
          type: object
        direction:
          type: string
          enum:
            - INBOUND
            - OUTBOUND
          description: A quin costat de l'intercanvi pertany aquesta transferència.
        rail:
          type: string
          nullable: true
          description: >-
            El rail pel qual s'ha enviat la transferència: `INTERNAL`, `TRP`,
            `GTR`, `TRUST`, `VERIFYVASP`, `SYGNA` o `EMAIL` (`TEST_VASP` en una
            aplicació de sandbox, quan el Didit Test VASP ha respost), o `null`
            fins que es triï un rail.
        counterparty_vasp:
          type: object
          nullable: true
          properties:
            name:
              type: string
            lei:
              type: string
            dd_score:
              type: integer
              description: >-
                Puntuació de diligència deguda de 0 a 100, on un valor més alt
                és millor. La mateixa escala que al directori de VASP.
            dd_score_breakdown:
              type: object
              description: >-
                Contribucions per component a dd_score, un objecte per component
                tal com apareix al directori de VASP (jurisdiction,
                verification, protocol, lei, history, essentials,
                responsiveness), cadascun amb {points, max, reason, detail}. {}
                fins que s'hagi avaluat la contrapart.
              additionalProperties:
                type: object
                properties:
                  points:
                    type: number
                    description: Punts atorgats per a aquest component.
                  max:
                    type: integer
                    description: Nombre màxim de punts que pot atorgar aquest component.
                  reason:
                    type: string
                    description: Codi llegible per màquina del veredicte del component.
                  detail:
                    type: string
                    description: Motiu dels punts atorgats, llegible per a humans.
            dd_assessed_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                Quan es va executar per darrera vegada l'avaluació de diligència
                deguda. Null fins que s'hagi avaluat la contrapart.
          description: >-
            L'entrada del directori de la contrapart, o `null` si la
            transferència no n'enllaça cap.
        delivery:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/TravelRuleDelivery'
          description: >-
            El missatge més recent que la transferència deu a una altra part.
            `null` quan no n'ha degut cap, per exemple per sota de
            `threshold_amount` o per a una cartera autoallotjada declarada.
        discovery:
          type: array
          description: >-
            Com Didit ha cercat la contrapart, una entrada per cada pas que s'ha
            executat. Buit quan no s'ha executat cap descobriment, per exemple
            en una transferència entrant.
          items:
            $ref: '#/components/schemas/TravelRuleDiscoveryStep'
        reason:
          type: string
          description: >-
            Per què una transferència `COUNTERPARTY_VASP_NOT_FOUND` o
            `COUNTERPARTY_VASP_NOT_REACHABLE` està encallada; `""` per a
            qualsevol altre estat. Un lliurament fallit ho determina primer,
            només a `COUNTERPARTY_VASP_NOT_REACHABLE`: `email_undeliverable` (el
            proveïdor de correu ha refusat el correu electrònic de compliment i
            no queda cap adreça per provar: quan s'ha enviat, en un recordatori
            o com un rebot permanent notificat més tard) o `delivery_failed` (el
            canal que l'estava lliurant ha fallat definitivament: un canal de
            xarxa ha refusat el missatge o s'ha quedat sense reintents, un host
            d'identitat `TRP` no ha respost o l'host `TRP` de la contrapart no
            ha acceptat la consulta). En cas contrari, el rastreig de
            `discovery` ho determina: `awaiting_end_user` (cap pas ha indicat
            una contrapart a la qual Didit pugui arribar),
            `directory_match_no_route` (un pas ha indicat un VASP del directori
            que no té ruta), `picked_member_without_proven_wallet` (l'usuari
            final ha triat un client de Didit que no ha demostrat el control de
            la cartera) o `no_directory_match` quan el rastreig no dóna cap
            altre motiu. Un reenviament fa avançar la transferència, de manera
            que el motiu s'esborra. Consulta [Per què una transferència està
            encallada](/ca/transaction-monitoring/travel-rule#per-què-una-transferència-està-bloquejada).
        next_actions:
          type: array
          description: >-
            Què fa avançar la transferència; `[]` per a qualsevol estat excepte
            `COUNTERPARTY_VASP_NOT_FOUND` o `COUNTERPARTY_VASP_NOT_REACHABLE`.
            `email_undeliverable` ofereix `update_compliance_email` i després
            `resend`. `delivery_failed` ofereix `resend`. Un motiu de
            descobriment ofereix `select_counterparty_vasp`,
            `declare_self_hosted`, `add_vasp_hint` i `resend`.
          items:
            $ref: '#/components/schemas/TravelRuleNextAction'
        chain_details:
          $ref: '#/components/schemas/TravelRuleChainDetails'
    TransactionVerificationSessionAction:
      title: Verification session
      type: object
      properties:
        type:
          type: string
          enum:
            - verification_session
        url:
          type: string
          format: uri
          description: URL de verificació allotjada per obrir per a l'usuari final.
        session_id:
          type: string
          format: uuid
          description: ID de la sessió de verificació.
        session_token:
          type: string
          description: >-
            Token de sessió, utilitzat pels SDK mòbils per iniciar el flux de
            manera nativa.
        status:
          type: string
          description: Estat de la sessió de verificació.
      required:
        - type
        - url
    TransactionWalletOwnershipAction:
      title: Wallet ownership
      type: object
      properties:
        type:
          type: string
          enum:
            - wallet_ownership
        url:
          type: string
          format: uri
          description: >-
            URL del giny allotjat de titularitat de la cartera. Obre'l en un
            navegador real; al mòbil fes servir SFSafariViewController o una
            pestanya personalitzada de Chrome, mai una webview incrustada.
        widget_session_id:
          type: string
          format: uuid
          description: ID de sessió del widget de titularitat de la cartera.
        expires_at:
          type: string
          format: date-time
          description: Quan caduca la sessió del widget.
      required:
        - type
        - url
    TravelRuleDataMatch:
      type: object
      nullable: true
      description: >-
        Comparació camp per camp de les dades de les parts de la transferència
        amb el que l'altra part sap sobre el titular de la cartera. Nomena camps
        i resultats, mai valors, de manera que continua sent llegible mentre les
        dades de la contrapart estan emmascarades. Null fins que s'executi una
        comparació.
      properties:
        matched:
          type: boolean
          description: Cert quan cap camp comparat difereix.
        mismatched_fields:
          type: array
          items:
            type: string
            enum:
              - name
              - date_of_birth
              - address
              - account
          description: Els camps que difereixen.
        fields:
          type: object
          description: >-
            Una entrada per camp comparat per al tipus d'entitat de la part
            (`name`, `date_of_birth`, `address`, `account`; una empresa no té
            `date_of_birth`).
          additionalProperties:
            type: object
            properties:
              result:
                type: string
                enum:
                  - matched
                  - mismatched
                  - not_compared
                description: >-
                  `not_compared` quan la regla és `NONE` o una de les dues parts
                  no té cap valor per al camp.
              strictness:
                type: string
                enum:
                  - NONE
                  - STRICT
                  - CONTAINS
                  - DEFAULT
                  - FUZZY
    TravelRuleDataUnmasked:
      type: object
      nullable: true
      description: >-
        Registre d'auditoria del moment en què es van desenmascarar les dades de
        la contrapart. És null mentre les dades continuïn emmascarades, així com
        per a transferències sortints.
      properties:
        at:
          type: string
          format: date-time
        reason:
          type: string
          enum:
            - ownership_confirmed
            - wallet_proof
            - address_book_match
            - own_verified_wallet
            - inquiry_approved
            - known_payment_method
            - travel_address
          description: >-
            Què va confirmar la titularitat: ownership_confirmed (la teva
            confirmació mitjançant la consola o l'API), wallet_proof (una prova
            de cartera al widget, o una transferència entrant INTERNAL,
            establerta quan es crea), address_book_match (una cartera de la
            llibreta d'adreces verificada), own_verified_wallet (la pròpia
            cartera verificada del teu usuari), inquiry_approved (la teva
            aprovació d'una consulta TRP entrant o un missatge GTR o Sygna),
            known_payment_method (una cartera amb la qual el teu usuari ja ha
            pagat) o travel_address (la Travel Address per cartera que va donar
            nom a la cartera).
        actor:
          type: string
          description: >-
            Qui ho ha confirmat: el correu electrònic de l'usuari de la consola
            o l'etiqueta de la clau d'API. En blanc per a una decisió
            automàtica.
    TravelRuleDelivery:
      type: object
      description: >-
        Estat en què es troba l'últim missatge que la transferència deu a
        l'altra part. Didit contacta amb la contrapart un cop retornada la
        sol·licitud que ha creat o modificat la transferència, de manera que
        aquest objecte indica si el missatge s'ha lliurat: en cua, enviant-se,
        esperant per reintentar després d'un error, lliurat o fallit. Una
        fallada de la qual la xarxa encara es pot recuperar (sense resposta a
        temps, connexió fallida, HTTP `408`, `429` o `5xx`) es reintenta al cap
        de 30 segons, 2 minuts, 10 minuts, 30 minuts i 1 hora. Quan un primer
        missatge (`kind: SEND`) falla definitivament, perquè la xarxa l'ha
        rebutjat o perquè el sisè intent també ha fallat, la transferència passa
        a `COUNTERPARTY_VASP_NOT_REACHABLE` amb `last_error` a la seva
        `timeline`; qualsevol altre missatge que falli definitivament s'anota a
        la `timeline`. L'`status` de la transferència continua sent la font de
        referència de l'intercanvi en si.
      required:
        - kind
        - status
        - rail
        - attempts
        - last_error
        - next_attempt_at
        - delivered_at
      properties:
        kind:
          type: string
          enum:
            - SEND
            - ANSWER
            - TXID
            - CANCEL
            - POLL
          description: >-
            Què transmet el missatge. `SEND`: el primer missatge de la
            transferència a la contrapart (sortint; el canal es tria quan
            s'envia). `ANSWER`: la teva acceptació o rebuig, que es deu a la
            xarxa que ho ha sol·licitat (entrant). `TXID`: el hash de la
            transacció on-chain, un cop finalitzis la transferència. `CANCEL`:
            la cancel·lació, un cop la cancel·lis. `POLL`: una consulta d'estat
            a una xarxa que n'ofereixi una, repetida cada 5 minuts mentre la
            transferència espera la contrapart.
        status:
          type: string
          enum:
            - QUEUED
            - SENDING
            - RETRYING
            - DELIVERED
            - FAILED
          description: >-
            `QUEUED`: esperant per enviar-se. `SENDING`: hi ha un intent en
            curs. `RETRYING`: un intent ha fallat i el següent s'executarà a
            `next_attempt_at`. `DELIVERED`: l'altra part ha rebut el missatge.
            `FAILED`: l'altra part l'ha rebutjat o el darrer intent ha fallat.
        rail:
          type: string
          enum:
            - INTERNAL
            - TRP
            - GTR
            - TRUST
            - VERIFYVASP
            - SYGNA
            - EMAIL
            - ''
          description: >-
            El rail que transporta el missatge. Buit fins que Didit n'hagi triat
            un per a un primer missatge.
        attempts:
          type: integer
          minimum: 0
          description: >-
            Intents realitzats fins ara per a aquest missatge. Un missatge que
            no sigui un sondeig d'estat s'intenta com a màxim 6 vegades.
        last_error:
          type: string
          description: >-
            El tipus d'error que ha afectat l'últim intent, `""` quan no n'hi ha
            hagut cap: per exemple `email undeliverable`, `trp identity endpoint
            unreachable` o `trp transfer inquiry delivery failed`. Mai no conté
            la resposta de la contrapart mateixa, que roman al `timeline` de la
            transferència.

            Quan GTR respon amb un error, s'hi inclouen el seu propi codi
            d'estat i missatge. Els cossos de resposta no s'inclouen mai.
          example: email undeliverable
        next_attempt_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Quan s'executa el següent intent mentre el missatge està en estat
            `QUEUED` o `RETRYING`.
        delivered_at:
          type: string
          format: date-time
          nullable: true
          description: Quan l'altra part va rebre el missatge.
    TravelRuleDiscoveryStep:
      type: object
      description: >-
        Un pas de la detecció de la contrapart que Didit ha executat per a una
        transferència sortint, en l'ordre en què els ha executat. El primer pas
        que anomena un VASP amb una ruta finalitza la cadena.
      properties:
        step:
          type: string
          enum:
            - internal_address_book
            - wallet_attribution
            - network_lookup
            - customer_hint
            - end_user
          description: >-
            `internal_address_book`: un altre client de Didit que ha demostrat
            el control de la cartera de destinació. `wallet_attribution`:
            l'atribució d'analítica blockchain de la cartera. `network_lookup`:
            una xarxa que pot indicar quin VASP té l'adreça. `customer_hint`: el
            nom del VASP, LEI o jurisdicció que has enviat a `beneficiary_data`.
            `end_user`: la contrapart que l'usuari final (o tu) ha triat, o la
            sol·licitud per triar-ne una.
        outcome:
          type: string
          enum:
            - match
            - miss
            - skipped
          description: >-
            `match`: el pas ha indicat una contrapart. `miss`: s'ha executat i
            no n'ha trobat cap. `skipped`: no s'ha pogut executar, i `reason`
            n'explica el motiu.
        reason:
          type: string
          description: >-
            Motiu llegible per màquina, `""` en cas de coincidència:
            `no_proven_internal_wallet`, `attribution_disabled`,
            `already_attributed`, `no_attributed_entity`,
            `directory_match_no_route`, `gtr_address_lookup_runs_on_dispatch`,
            `no_membership`, `network_switched_off`,
            `no_network_address_lookup`, `no_directory_match`,
            `awaiting_end_user` o `picked_member_without_proven_wallet`.
        vasp:
          type: string
          format: uuid
          nullable: true
          description: El VASP del directori que ha indicat el pas, si n'ha indicat algun.
        rail:
          type: string
          nullable: true
          description: El rail que arriba a aquesta contrapart, quan el pas n'ha trobat un.
        at:
          type: string
          format: date-time
    TravelRuleNextAction:
      type: object
      description: >-
        Un element que fa avançar una transferència
        `COUNTERPARTY_VASP_NOT_FOUND` o `COUNTERPARTY_VASP_NOT_REACHABLE`.
        Consulta [Per què una transferència està
        bloquejada](/ca/transaction-monitoring/travel-rule#per-què-una-transferència-està-bloquejada).
      properties:
        action:
          type: string
          enum:
            - select_counterparty_vasp
            - declare_self_hosted
            - add_vasp_hint
            - update_compliance_email
            - resend
          description: >-
            `select_counterparty_vasp`: l'usuari final tria el VASP de
            destinació al widget de titularitat de la cartera, o fas un PATCH
            amb `action=beneficiary_vasp`. `declare_self_hosted`: l'usuari final
            declara que la cartera és autoallotjada al widget. `add_vasp_hint`:
            indica a Didit qui és la contrapart, amb un nom de VASP, LEI o
            Travel Address (per exemple, un `travel_address` a l'entrada de la
            llibreta d'adreces de la cartera de destinació), i després torna a
            enviar. `update_compliance_email` i `resend` són valors d'`action`
            de `PATCH /v3/transactions/{transaction_id}/travel-rule/`: torna a
            proporcionar el correu electrònic de compliment de la contrapart i
            torna a executar l'encaminament.
        url:
          type: string
          format: uri
          description: >-
            L'enllaç del widget de titularitat de la cartera, a
            `select_counterparty_vasp` i `declare_self_hosted` mentre la
            transferència té una sessió de widget oberta.
      required:
        - action
    TravelRuleChainDetails:
      type: object
      description: >-
        Com anomena la cadena de la transferència les seves dues carteres, quan
        es tracta de més d'una adreça pagant-ne una altra. Buit (`{}`) per a una
        transferència de cadena basada en comptes (EVM, Solana, Tron), on les
        dues adreces són les carteres. La coincidència, l'encaminament i la
        llibreta d'adreces llegeixen primer les carteres d'aquí.
      properties:
        chain:
          type: string
          description: >-
            Cadena canònica, p. ex. `BTC`, `XRP` o `LIGHTNING` per a una
            transferència Lightning.
        shape:
          type: string
          enum:
            - utxo
            - memo
            - lightning
        originator:
          $ref: '#/components/schemas/TravelRuleChainSide'
        beneficiary:
          $ref: '#/components/schemas/TravelRuleChainSide'
        utxo:
          type: object
          description: >-
            En una transferència UTXO: les entrades i sortides tal com s'han
            emmagatzemat (imports com a cadenes decimals) i què ha llegit Didit
            en cada sortida.
          properties:
            inputs:
              type: array
              items:
                $ref: '#/components/schemas/TravelRuleUtxoEntry'
            outputs:
              type: array
              items:
                $ref: '#/components/schemas/TravelRuleUtxoEntry'
            change_output_indexes:
              type: array
              items:
                type: integer
              description: Sortides que retornen el pagament a una adreça d'entrada.
            beneficiary_output_index:
              type: integer
              nullable: true
              description: >-
                La sortida que paga al beneficiari; null quan no se'n pot
                distingir cap.
        lightning:
          type: object
          description: >-
            En una transferència de Lightning: el que diu la sol·licitud de
            pagament. Sempre `kind` (`bolt11`, `bolt12_offer`, `bolt12_invoice`,
            `bolt12_invoice_request`, `lnurl`, `lightning_address`, `node_id` o
            `unknown`); una factura BOLT11 afegeix `network`, `payee_node_id`,
            `payment_hash`, `amount_msat`, `created_at` i `expires_at`; una
            cadena BOLT12 afegeix `blinded_paths` i `payee_node_id`; un LNURL o
            una Lightning Address inclou el seu `domain`. No es resol res a
            través de la xarxa: la sol·licitud només es descodifica.
          additionalProperties: true
        warnings:
          type: array
          items:
            type: string
            enum:
              - declared_originator_not_an_input
              - declared_beneficiary_not_an_output
              - beneficiary_output_ambiguous
              - beneficiary_output_amount_differs
          description: >-
            Inconsistències d'UTXO que val la pena revisar: l'ordenant declarat
            no és una entrada, el beneficiari declarat no és una sortida, no
            s'ha pogut distingir cap sortida de beneficiari única o la sortida
            del beneficiari paga un import diferent del que indica la
            transacció.
        not_applicable_reason:
          type: string
          enum:
            - LIGHTNING_NO_PAYEE_IDENTIFIER
            - LIGHTNING_BOLT12_BLINDED_PAYEE
            - LIGHTNING_LNURL_NAMES_NO_PAYEE
          description: >-
            En una transferència sortint de Lightning la sol·licitud de pagament
            de la qual no especifica cap beneficiari: per què la transferència
            és `NOT_APPLICABLE`. `LIGHTNING_NO_PAYEE_IDENTIFIER` (la sol·licitud
            no especifica cap node beneficiari, o no s'ha pogut descodificar),
            `LIGHTNING_BOLT12_BLINDED_PAYEE` (l'oferta amaga el seu beneficiari
            darrere de rutes cegues), `LIGHTNING_LNURL_NAMES_NO_PAYEE` (un LNURL
            especifica un servei, no un beneficiari). El mateix codi obre
            l'última entrada de la `timeline` de la transferència.
    TravelRuleChainSide:
      type: object
      description: >-
        La cartera d'una de les parts tal com Didit l'ha resolt a partir de les
        dades de la cadena.
      properties:
        address:
          type: string
          description: >-
            La cartera. En una xarxa amb memo, l'adreça clàssica (una adreça X
            d'XRP es divideix en la seva adreça clàssica i la seva etiqueta); a
            Lightning, l'ID del node del beneficiari o l'adreça Lightning.
        memo:
          type: string
          description: >-
            L'etiqueta de destinació o nota que forma part de la cartera; `""`
            quan no n'hi ha cap.
        source:
          type: string
          enum:
            - declared
            - x_address
            - largest_input
            - only_non_change_output
            - amount_match
            - invoice_payee
            - updated
          description: >-
            D'on prové la cartera: `declared` (la teva sol·licitud), `x_address`
            (desglossada d'una adreça X d'XRP), `largest_input` (l'adreça
            d'entrada UTXO que ha aportat més), `only_non_change_output`
            (l'única sortida UTXO que no és canvi), `amount_match` (l'única
            sortida UTXO que paga l'import de la transferència), `invoice_payee`
            (el beneficiari que indica una sol·licitud de pagament de
            Lightning), `updated` (establert més tard amb `action:
            update_originator_wallet`).
    TravelRuleUtxoEntry:
      type: object
      description: >-
        Una entrada o sortida d'una transacció UTXO, tal com la va registrar la
        cadena.
      required:
        - address
      properties:
        address:
          type: string
          maxLength: 128
        amount:
          type: string
          nullable: true
          description: >-
            Cadena decimal en la unitat pròpia de la moneda (BTC, no satoshis).
            Opcional.
          example: '0.0125'
        txid:
          type: string
          maxLength: 128
          description: Opcional. La transacció que gasta un input.
        vout:
          type: integer
          nullable: true
          minimum: 0
          description: Opcional. L'índex de la sortida que consumeix una entrada.
  securitySchemes:
    TransactionTokenAuth:
      type: apiKey
      in: header
      name: X-Transaction-Token
      description: >-
        Token d'abast limitat de curta durada generat pel teu backend mitjançant
        POST /v3/transactions/sdk-token/. Utilitzat pels SDK de Didit als
        endpoints /v1/transactions/ orientats al dispositiu.

````

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