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

# API per actualitzar aplicacions de clients

> Actualitza amb PATCH les metadades de les aplicacions de clients revenedors, marques, entorns o casos d'ús separats a Didit.



Prompt d'actualització d'aplicació
        Copia el prompt al porta-retalls



      
      

\<pre>

\`Partially update one Didit application's metadata (name, public URLs, redirect URIs, description). Credentials (client_id, api_key, uuid) are NEVER changed by this call.

Endpoint:
PATCH https://apx.didit.me/auth/v2/organizations/me/{org_id}/applications/{app_id}/

Authentication:
Authorization: Bearer <access_token>
The access token must belong to an OWNER or ADMIN of the organization.

Path parameters:
\- org_id (UUID, required) — Organization that owns the application.
\- app_id (UUID, required) — Application UUID to update.

Request body — PATCH semantics. Send ONLY the fields you want to change. Omitted fields are preserved.
\- name (string, optional) — Display name.
\- website_url (string, URL, optional) — Public homepage.
\- redirect_uris (array of strings, optional) — Allowlisted OAuth-style redirect URIs. The array REPLACES the previous value entirely.
\- terms_url (string, URL, optional) — Terms-of-service link.
\- privacy_url (string, URL, optional) — Privacy policy link.
\- description (string, optional) — Internal note (not shown to end users).
\- products is read-only: a products key in the body is ignored.
\- data_location (string, optional) — The application's data location, chosen when it was created. Naming the location it already has is accepted; any other location answers 400. One exception: the live application created with your organization (at sign-up or by POST /programmatic/verify-email/) has its location chosen by the first update that names data_location, once, while none of its API keys has been used and it has no verification session. Only "eu" (European Union, Ireland) is available today.

What does NOT change:
\- uuid, client_id, api_key — credentials stay the same. Existing integrations keep working; no key rotation happens here.
\- data_location — set when the application is created (see above for the one exception).

curl example — rename and move to a new domain:
curl -X PATCH "https://apx.didit.me/auth/v2/organizations/me/<ORG_ID>/applications/<APP_ID>/" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Production App",
"website_url": "https://app.acme.example"
}'

curl example — add a second redirect URI (full replacement of the array):
curl -X PATCH "https://apx.didit.me/auth/v2/organizations/me/<ORG_ID>/applications/<APP_ID>/" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"redirect_uris": [
  "https://acme.example/callback",
  "https://staging.acme.example/callback"
]
}'

Response (200 OK):
The full application record after the change, including products (same shape as GET /organizations/me/{org_id}/applications/{app_id}/). uuid, client_id, and api_key are unchanged.

When to call:
\- Reseller customer rebrands → rename their application.
\- Domain migration → update website_url, terms_url, privacy_url.
\- Add or remove a staging redirect URI.
\- Refresh terms / privacy URLs shown in the verification flow.

Failure modes:
\- 400 — { "<field>": ["Enter a valid URL."] } for malformed website_url / redirect_uris / terms_url / privacy_url.
\- 400 — { "data_location": ["An application's data location can't be changed after it is created."] } for a location other than the application's own, and { "data_location": ["This data location is not available yet."] } for "au" or "mx". Nothing is changed.
\- 503 — { "detail": "We couldn't confirm that this application is unused. Try again in a moment.", "code": "data_location_check_unavailable" } only while choosing the first application's location. Nothing is changed; retry.
\- 401: { "detail": "Invalid access token" } or { "detail": "Expired access token" } when the token is malformed or expired.
\- 403: { "detail": "Only organization owners and admins can manage applications." } when you are a member of the organization but not an owner or admin.
\- 403: { "detail": "Your access to this organization is suspended." } when your membership in the organization is suspended.
\- 403: { "detail": "You do not have permission to perform this action." } when the request has no Authorization header.
\- 404: { "detail": "Organization not found." } when the organization does not exist or you are not a member of it, or { "detail": "Application not found." } when the application is not in that organization.

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

\</pre>



      
      

Enganxa a

Utilitza aquest endpoint per mantenir cada aplicació alineada amb el client, la marca, l'entorn o el cas d'ús intern que representa.Per als revenedors, això et permet canviar el nom o actualitzar cada aplicació de client sense compartir credencials entre clients. Per als clients directes, ajuda a separar productes, regions o entorns i alhora mantenir-ho tot dins d'una mateixa organització.> [!NOTE]
>
> Aquest endpoint actualitza les metadades de l'aplicació. La `api_key` es manté igual, tret que rotis les credencials per separat.## Ubicació de les dadesLa ubicació de les dades de l'aplicació (`data_location`) es tria quan es crea l'aplicació i no es pot canviar després: una actualització que indica la ubicació que l'aplicació ja té s'accepta, i qualsevol altra ubicació retorna 400.L'excepció és l'aplicació de producció creada juntament amb la teva organització, en el moment del registre o mitjançant [Verificació de correu electrònic](https://docs.didit.me/ca/auth-api/verify-email.md). La primera actualització que indica un `data_location` en tria la ubicació, una sola vegada, sempre que cap de les claus d'API de l'aplicació s'hagi fet servir i l'aplicació no tingui cap sessió de verificació.El pas **Posa nom a la teva primera aplicació** de la consola fa servir això per emmagatzemar la ubicació que hi triïs. Avui l'única ubicació disponible és `eu`, la Unió Europea (Irlanda).


## OpenAPI

````yaml ca/openapi-auth.json PATCH /organizations/me/{org_id}/applications/{app_id}/
openapi: 3.0.0
info:
  version: 1.0.0
  title: Didit Auth API
  description: >-
    API de registre i autenticació programàtica per a desenvolupadors i agents
    d'IA. Registra't en 2 crides d'API -- sense necessitat de navegador. La
    plataforma de verificació d'identitat més adaptada a agents.


    ## Base URL


    Tots els endpoints d'aquesta especificació estan allotjats a
    `https://apx.didit.me/auth/v2`. És un amfitrió diferent del de l'API de
    verificació (`https://verification.didit.me/v3`). Tingues-ho en compte:
    aquest amfitrió d'autenticació emet els teus **tokens d'accés JWT** i et
    permet llistar i gestionar les teves **organitzacions** i **aplicacions**.
    L'amfitrió de verificació és on crides sessions, fluxos de treball, AML,
    etc., i t'hi autentiques amb la **`api_key`** que retorna aquesta API.


    ## Com funciona el flux d'autenticació


    1. `POST /programmatic/register/` — envia correu electrònic + contrasenya.

    2. Rep un codi alfanumèric de 6 caràcters per correu electrònic.

    3. `POST /programmatic/verify-email/` — envia el codi. Reps com a resposta
    un `access_token` JWT, un `refresh_token`, una organització i una aplicació
    predeterminada amb `client_id` + `api_key`.

    4. Guarda la `api_key`. Fes-la servir com a `x-api-key` per a cada crida a
    `https://verification.didit.me/v3/...`.

    5. Des de qualsevol màquina en el futur, `POST /programmatic/login/`
    bescanvia el teu correu electrònic + contrasenya per un JWT nou; després
    crida `GET /organizations/me/` i els endpoints d'aplicació per recuperar o
    rotar credencials.


    El JWT només és necessari per als endpoints de **Gestió de comptes**
    d'aquesta especificació; el trànsit de l'API de verificació utilitza la
    `api_key` de llarga durada, no el JWT.


    ## Convencions


    - Tots els cossos de sol·licitud i resposta són JSON (`Content-Type:
    application/json`).

    - **Utilitza una adreça de correu electrònic real i que pugui rebre
    missatges quan provis `POST /programmatic/register/`.** L'endpoint envia el
    codi de verificació de manera síncrona, de manera que les adreces en dominis
    de prova reservats (`@example.com`, `@example.org`, `@*.test`, `@*.example`,
    `@*.invalid`) són rebutjades pel lliurament de correu i la sol·licitud
    retorna un `500`. Substitueix el marcador de posició `you@yourdomain.com`
    dels exemples per una bústia d'entrada que puguis llegir realment.

    - Els errors de validació retornen HTTP `400` amb un d'aquests dos formats:
    `{"field": ["message", ...]}` per a problemes a nivell de camp, o
    `{"detail": "message"}` per a errors de regles de negoci. Alguns validadors
    (robustesa de la contrasenya en registrar-se, caducitat del codi en
    verificar el correu) responen actualment amb una matriu simple `["message"]`
    en lloc del format amb clau de camp -- es tracta d'una inconsistència
    coneguda del servidor, de manera que el codi del client hauria d'acceptar
    ambdós formats.

    - Els errors d'autenticació es retornen com a `{"detail": "..."}` amb HTTP
    `401` (token de portador no vàlid) o `403` (manca el token de portador /
    privilegis insuficients).

    - Les respostes de límit de freqüència inclouen un camp `wait` amb el temps
    d'espera en segons.
servers:
  - url: https://apx.didit.me/auth/v2
    description: Servidor d'autenticació de producció
security: []
tags:
  - name: Programmatic Auth
    description: >-
      Cicle de vida del compte amb correu electrònic i contrasenya: registre,
      verificació, inici de sessió. Retorna el `access_token` JWT que utilitzes
      amb els endpoints de Gestió de comptes, a més (en verificar) del
      `client_id` i la `api_key` de la teva primera aplicació.
  - name: Account Management
    description: >-
      Endpoints autenticats (Bearer JWT) que llisten organitzacions i creen,
      obtenen o actualitzen aplicacions. Utilitza'ls per recuperar o rotar la
      `api_key` amb la qual autentiques les crides a l'API de verificació.
paths:
  /organizations/me/{org_id}/applications/{app_id}/:
    patch:
      tags:
        - Account Management
      summary: Actualitzar aplicació
      description: >-
        Actualitza les metadades de l'aplicació (nom, URL, URI de redirecció).
        `api_key` i `client_id` mai no es roten. `products` és només de lectura:
        s'ignora la clau `products` al cos. `data_location` no es pot canviar un
        cop creada l'aplicació, excepte una vegada a l'aplicació de producció
        creada amb la teva organització, mentre no s'hagi utilitzat (consulta el
        cos de la sol·licitud). Requereix JWT de propietari/administrador.
      operationId: update_organization_application
      parameters:
        - name: org_id
          in: path
          required: true
          description: UUID de l'organització propietària de l'aplicació.
          schema:
            type: string
            format: uuid
            example: a1b2c3d4-5678-90ab-cdef-111111111111
        - name: app_id
          in: path
          required: true
          description: UUID de l'aplicació que cal actualitzar.
          schema:
            type: string
            format: uuid
            example: b2c3d4e5-6789-01bc-defg-222222222222
      requestBody:
        required: true
        description: >-
          Envia només els camps que vulguis canviar. Semàntica de PATCH: es
          conserven els camps que no s'incloguin.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApplicationUpdateRequest'
            examples:
              RenameCustomerApplication:
                summary: Reanomenar i moure a un nou domini
                value:
                  name: Acme Production App
                  website_url: https://app.acme.example
              UpdateRedirectUris:
                summary: Afegeix un segon URI de redirecció
                value:
                  redirect_uris:
                    - https://acme.example/callback
                    - https://staging.acme.example/callback
              UpdatePolicies:
                summary: Actualitza els URL dels termes i de privacitat
                value:
                  terms_url: https://acme.example/v2/terms
                  privacy_url: https://acme.example/v2/privacy
      responses:
        '200':
          description: >-
            Aplicació actualitzada. La resposta és el registre complet de
            l'aplicació després del canvi, inclòs `products`; `uuid`,
            `client_id` i `api_key` no canvien.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
              examples:
                Success:
                  value:
                    uuid: b2c3d4e5-6789-01bc-defg-222222222222
                    name: Acme Production App
                    client_id: S9LIYGSoWNuGMLHsvEt9dQ
                    api_key: sk_live_example_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                    website_url: https://app.acme.example
                    redirect_uris:
                      - https://acme.example/callback
                    terms_url: https://acme.example/terms
                    privacy_url: https://acme.example/privacy
                    description: null
                    created_at: '2025-06-01T10:00:00Z'
                    data_location: eu
                    products:
                      - product: identity
                        status: enabled
                        modules:
                          user_verification: true
                          business_verification: true
                          case_management: true
                      - product: transactions
                        status: disabled
                        modules:
                          travel_rule: true
                          case_management: true
                      - product: authentication
                        status: disabled
                        modules: {}
        '400':
          description: >-
            Error de validació al cos de la sol·licitud: per exemple, un URL mal
            format, un `data_location` que encara no està disponible o un
            `data_location` diferent del de la mateixa aplicació. No es modifica
            res.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
              examples:
                InvalidUrl:
                  value:
                    website_url:
                      - Enter a valid URL.
                DataLocationFixed:
                  summary: >-
                    Una altra ubicació de dades diferent de la pròpia de
                    l'aplicació
                  value:
                    data_location:
                      - >-
                        An application's data location can't be changed after it
                        is created.
                DataLocationNotAvailable:
                  summary: Una ubicació de dades que estarà disponible properament
                  value:
                    data_location:
                      - This data location is not available yet.
        '401':
          description: >-
            El token d'accés està mal format, no és vàlid o ha caducat. Obtén-ne
            un de nou amb `POST /programmatic/login/`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              examples:
                InvalidToken:
                  value:
                    detail: Invalid access token
                ExpiredToken:
                  value:
                    detail: Expired access token
        '403':
          description: >-
            No pots actualitzar aquesta aplicació. Un membre de l'organització
            que no sigui propietari o administrador rep `Only organization
            owners and admins can manage applications.` Un propietari o
            administrador amb l'accés suspès a l'organització rep `Your access
            to this organization is suspended.` Una sol·licitud sense capçalera
            `Authorization` rep `You do not have permission to perform this
            action.`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              examples:
                NotOwnerOrAdmin:
                  summary: Membre que no és ni propietari ni administrador
                  value:
                    detail: >-
                      Only organization owners and admins can manage
                      applications.
                Suspended:
                  summary: Membresia suspesa
                  value:
                    detail: Your access to this organization is suspended.
                MissingToken:
                  summary: Sense capçalera Authorization
                  value:
                    detail: You do not have permission to perform this action.
        '404':
          description: >-
            L'organització no existeix o no en sou membre, o l'aplicació no
            existeix en aquesta organització.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              examples:
                OrganizationNotFound:
                  summary: No s'ha trobat l'organització, o no en ets membre
                  value:
                    detail: Organization not found.
                ApplicationNotFound:
                  summary: No existeix aquesta aplicació en aquesta organització
                  value:
                    detail: Application not found.
        '503':
          description: >-
            Només quan l'actualització tria una altra ubicació de dades per a
            l'aplicació en producció creada amb la teva organització: Didit no
            ha pogut confirmar que l'aplicació encara no tingui cap sessió de
            verificació, així que no s'ha modificat res. Reintenta la
            sol·licitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableError'
              examples:
                DataLocationCheckUnavailable:
                  value:
                    detail: >-
                      We couldn't confirm that this application is unused. Try
                      again in a moment.
                    code: data_location_check_unavailable
      security:
        - BearerAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: >-
            curl -X PATCH
            "https://apx.didit.me/auth/v2/organizations/me/$ORG_ID/applications/$APP_ID/"
            \
              -H "Authorization: Bearer $ACCESS_TOKEN" \
              -H "Content-Type: application/json" \
              -d '{
                "name": "Acme Production App",
                "website_url": "https://app.acme.example"
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Use the access token that account.login returns.
            client = Didit(account_token="YOUR_ACCESS_TOKEN")

            result = client.account.applications.update(
                "a1b2c3d4-5678-90ab-cdef-111111111111",
                "b2c3d4e5-6789-01bc-defg-222222222222",
                name="Acme Production App",
                website_url="https://app.acme.example",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

            // Use the access token that account.login returns.
            const didit = new Didit({ accountToken: "YOUR_ACCESS_TOKEN" });

            const result = await didit.account.applications.update(
              "a1b2c3d4-5678-90ab-cdef-111111111111",
              "b2c3d4e5-6789-01bc-defg-222222222222",
              {
                name: "Acme Production App",
                website_url: "https://app.acme.example",
              },
            );
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Use the access token that account.login returns.\nclient := didit.NewClient(option.WithAccountToken(\"YOUR_ACCESS_TOKEN\"))\n\nresult, err := client.Account.Applications.Update(ctx, \"a1b2c3d4-5678-90ab-cdef-111111111111\", \"b2c3d4e5-6789-01bc-defg-222222222222\", didit.ApplicationUpdateRequest{\n\tName:       didit.String(\"Acme Production App\"),\n\tWebsiteURL: didit.String(\"https://app.acme.example\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;

            import me.didit.types.ApplicationUpdateRequest;


            // Use the access token that account.login returns.

            Didit client =
            Didit.builder().accountToken("YOUR_ACCESS_TOKEN").build();


            var result =
            client.account().applications().update("a1b2c3d4-5678-90ab-cdef-111111111111",
            "b2c3d4e5-6789-01bc-defg-222222222222",
            ApplicationUpdateRequest.builder()
                    .name("Acme Production App")
                    .websiteUrl("https://app.acme.example")
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Use the access token that account.login returns.

            $didit = new DiditClient(accountToken: 'YOUR_ACCESS_TOKEN');


            $result =
            $didit->account->applications->update('a1b2c3d4-5678-90ab-cdef-111111111111',
            'b2c3d4e5-6789-01bc-defg-222222222222', [
                'name' => 'Acme Production App',
                'website_url' => 'https://app.acme.example',
            ]);

            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Use the access token that account.login returns.
            didit = Didit::Client.new(account_token: "YOUR_ACCESS_TOKEN")

            result = didit.account.applications.update(
              "a1b2c3d4-5678-90ab-cdef-111111111111",
              "b2c3d4e5-6789-01bc-defg-222222222222",
              name: "Acme Production App",
              website_url: "https://app.acme.example"
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Use the access token that account.login returns.

            using var client = new DiditClient(new DiditClientOptions {
            AccountToken = "YOUR_ACCESS_TOKEN" });


            var result = await
            client.Account.Applications.UpdateAsync("a1b2c3d4-5678-90ab-cdef-111111111111",
            "b2c3d4e5-6789-01bc-defg-222222222222", new ApplicationUpdateRequest

            {
                Name = "Acme Production App",
                WebsiteUrl = "https://app.acme.example",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    ApplicationUpdateRequest:
      type: object
      description: >-
        Cos del PATCH per a les metadades de l'aplicació. Envia només els camps
        que vulguis modificar; els camps omesos es conserven. `uuid`,
        `client_id` i `api_key` no es poden actualitzar. `products` és només de
        lectura: s'ignora qualsevol clau `products` al cos. `data_location` no
        es pot modificar després de crear l'aplicació: indicar la ubicació que
        ja té és acceptat, i qualsevol altra ubicació respon 400. L'única
        excepció és l'aplicació de producció creada amb la teva organització: la
        primera actualització que indiqui una `data_location` la tria, una sola
        vegada, sempre que no s'hagi utilitzat cap clau d'API de l'aplicació i
        que no tingui cap sessió de verificació.
      properties:
        name:
          type: string
          description: Nom visible de l'aplicació.
          example: Acme Production App
        website_url:
          type: string
          description: URL del lloc web o de l'aplicació associada a aquesta aplicació.
          example: https://app.acme.example
        redirect_uris:
          type: array
          items:
            type: string
          description: >-
            URI de redirecció permeses per a fluxos de redirecció de verificació
            i d'estil OAuth.
          example:
            - https://acme.example/callback
        terms_url:
          type: string
          description: >-
            URL de les condicions del servei que es mostra al flux de
            verificació.
        privacy_url:
          type: string
          description: >-
            URL de la política de privadesa que es mostra al flux de
            verificació.
        description:
          type: string
          description: Descripció interna de l'aplicació.
        data_location:
          $ref: '#/components/schemas/ApplicationDataLocation'
    Application:
      type: object
      description: >-
        Registre complet de l'aplicació. `uuid`, `client_id` i `api_key` no
        canvien mai després de la creació. `data_location` tampoc no canvia,
        excepte un sol cop a l'aplicació de producció creada amb la teva
        organització, abans d'utilitzar-la (consulta la sol·licitud
        d'actualització).
      properties:
        uuid:
          type: string
          format: uuid
          description: >-
            UUID de l'aplicació. Utilitza'l com a `{app_id}` en les crides
            posteriors.
          example: b2c3d4e5-6789-01bc-defg-222222222222
        name:
          type: string
          description: Nom visible de l'aplicació que es mostra a la consola de Didit.
          example: Acme Production App
        client_id:
          type: string
          description: >-
            Identificador públic de client, segur per incrustar en fluxos
            d'estil OAuth.
          example: S9LIYGSoWNuGMLHsvEt9dQ
        api_key:
          type: string
          description: >-
            Secret de llarga durada (també anomenat `client_secret`). Utilitza'l
            com a capçalera `x-api-key` per a cada crida a
            `https://verification.didit.me/v3/...` (sessions, fluxos de treball,
            AML, etc.). Tracta'l com una credencial; no l'exposis mai al costat
            del client. Les claus noves comencen amb `sk_live_` (aplicació de
            producció) o `sk_test_` (aplicació de sandbox), seguits de 43
            caràcters segurs per a URL (lletres, dígits, `-` i `_`). Les claus
            creades abans d'aquest format no tenen prefix i continuen funcionant
            sense canvis. Durant les 72 hores posteriors a la recuperació del
            teu compte, les operacions de llistar, consultar i actualitzar
            retornen una cadena buida aquí en lloc de la clau.
          example: sk_live_example_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        website_url:
          type: string
          nullable: true
          description: URL del lloc web o de l'aplicació associada a aquesta aplicació.
          example: https://acme.example
        redirect_uris:
          type: array
          items:
            type: string
          description: >-
            URI de redirecció permeses per a fluxos de redirecció de verificació
            i d'estil OAuth.
          example:
            - https://acme.example/callback
        terms_url:
          type: string
          nullable: true
          description: >-
            URL de les condicions del servei que es mostra al flux de
            verificació.
          example: https://acme.example/terms
        privacy_url:
          type: string
          nullable: true
          description: >-
            URL de la política de privadesa que es mostra al flux de
            verificació.
          example: https://acme.example/privacy
        description:
          type: string
          nullable: true
          description: Descripció interna de l'aplicació (no es mostra als usuaris finals).
        created_at:
          type: string
          format: date-time
          example: '2025-06-01T10:00:00Z'
        data_location:
          $ref: '#/components/schemas/ApplicationDataLocation'
        products:
          type: array
          readOnly: true
          description: >-
            Els productes de l'aplicació. Sempre tots tres, en aquest ordre:
            `identity`, `transactions`, `authentication`. Una nova aplicació té
            `identity` habilitat amb tots els mòduls activats, i `transactions`
            i `authentication` inhabilitats. Només lectura: s'ignora la clau
            `products` en un cos de creació o actualització.
          items:
            $ref: '#/components/schemas/ApplicationProduct'
          example:
            - product: identity
              status: enabled
              modules:
                user_verification: true
                business_verification: true
                case_management: true
            - product: transactions
              status: disabled
              modules:
                travel_rule: true
                case_management: true
            - product: authentication
              status: disabled
              modules: {}
    ValidationError:
      description: >-
        Cos de l'error de validació. L'embolcall previst és un mapa `{field:
        ["message", ...]}` per a errors a nivell de camp o un embolcall d'una
        sola clau `{detail: "..."}` per a errors de regles de negoci. Uns quants
        validadors (força de la contrasenya durant el registre, validesa del
        codi a verify-email) responen actualment amb una matriu simple
        `["message"]` -- una inconsistència coneguda del costat del servidor.
        L'esquema següent manté aquesta branca de matriu simple perquè el codi
        client generat a partir d'aquesta especificació deserialitzi les
        respostes actuals, però el nou codi client l'hauria de tractar com el
        format amb clau de camp rellevant (`{password: [...]}` o `{code:
        [...]}`) i el contracte del servidor convergirà cap a aquesta forma.
      oneOf:
        - type: object
          additionalProperties:
            type: array
            items:
              type: string
          example:
            email:
              - Enter a valid email address.
        - type: object
          properties:
            detail:
              type: string
          example:
            detail: An account with this email already exists.
        - type: array
          items:
            type: string
          example:
            - Invalid or expired verification code.
    AuthError:
      type: object
      description: Embolcall d'error d'autenticació / autorització / de recurs no trobat.
      properties:
        detail:
          type: string
          example: Invalid access token
    ServiceUnavailableError:
      type: object
      description: >-
        La sol·licitud no s'ha pogut completar ara mateix i no s'ha modificat
        res. Torna-ho a provar d'aquí a un moment.
      properties:
        detail:
          type: string
          example: >-
            We couldn't confirm that this application is unused. Try again in a
            moment.
        code:
          type: string
          example: data_location_check_unavailable
    ApplicationDataLocation:
      type: string
      enum:
        - eu
        - au
        - mx
      description: >-
        On s'emmagatzemen i es processen les dades de verificació de
        l'aplicació, que se selecciona en crear l'aplicació. `eu` és la Unió
        Europea (Irlanda), l'opció per defecte. `au` (Austràlia, Sydney) i `mx`
        (Mèxic) estaran disponibles properament: una sol·licitud que els indiqui
        respon 400 `This data location is not available yet.` L'aplicació de
        sandbox d'una organització sempre és a la Unió Europea.
      example: eu
    ApplicationProduct:
      type: object
      description: >-
        Un producte d'una aplicació i el seu estat. Només de lectura: els
        endpoints de l'aplicació el retornen i l'ignoren al cos de la
        sol·licitud.
      properties:
        product:
          type: string
          enum:
            - identity
            - transactions
            - authentication
          description: >-
            `identity` (Verificació d'identitat), `transactions` (Monitoratge de
            transaccions) o `authentication` (Autenticació).
          example: identity
        status:
          type: string
          enum:
            - enabled
            - early_access
            - disabled
          description: >-
            Si el producte està activat per a aquesta aplicació. `early_access`
            només s'aplica a `authentication`, que Didit activa per tu.
          example: enabled
        modules:
          type: object
          additionalProperties:
            type: boolean
          description: >-
            Interruptors de mòduls del producte, cadascun `true` o `false`.
            `identity` conté `user_verification`, `business_verification` i
            `case_management`. `transactions` conté `travel_rule` i
            `case_management`. `authentication` no en conté cap (`{}`).
            `case_management` és un sol paràmetre de configuració mostrat tant a
            `identity` com a `transactions`, de manera que té el mateix valor a
            tots dos.
          example:
            user_verification: true
            business_verification: true
            case_management: true
      required:
        - product
        - status
        - modules
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        `access_token` JWT signat amb RS256 retornat per `POST
        /programmatic/login/` o `POST /programmatic/verify-email/`. Envia'l com
        a `Authorization: Bearer <access_token>`. La durada per defecte és de
        86400 segons (24 h). Aquest token només és vàlid per als endpoints de
        gestió de comptes a `apx.didit.me/auth/v2`. L'API de verificació
        (`verification.didit.me/v3`) utilitza en el seu lloc la `api_key` de
        llarga durada com a `x-api-key`.

````

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