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

# Get Credentials API: client_id & API-Schlüssel abrufen

> Didit: client_id und api_key per GET abrufen. api_key als x-api-key-Header nutzen. Abrechnung nach Nutzung, ohne Verträge.



Prompt zum Abrufen der Anwendungsanmeldedaten
        Prompt in die Zwischenablage kopieren



      
      

\<pre>

\`Read one application's full record — including its client_id and api_key (client_secret). Use this to RECOVER an api_key you've misplaced.

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

Authentication:
Authorization: Bearer <access_token>
Get a token via POST /programmatic/login/.

Path parameters:
\- org_id (UUID, required) — Organization that owns the application. Get via GET /organizations/me/.
\- app_id (UUID, required) — Application UUID. Returned by POST /programmatic/verify-email/ (in the application.uuid field), by POST /organizations/me/{org_id}/applications/, or visible in the Didit console.

curl example:
curl "https://apx.didit.me/auth/v2/organizations/me/<ORG_ID>/applications/<APP_ID>/" \
-H "Authorization: Bearer <ACCESS_TOKEN>"

Response (200 OK):
\{
"uuid": "b2c3d4e5-6789-...",
"name": "My App",
"client_id": "S9LIYGSoWNuGMLHsvEt9dQ",
"api_key": "sk_live_example_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"website_url": "https://example.com",
"redirect_uris": ["https://example.com/callback"],
"terms_url": "https://example.com/terms",
"privacy_url": "https://example.com/privacy",
"description": "Production application",
"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": {} }
]
}

How to use the response:
\- api_key → set as the x-api-key header on EVERY call to https://verification.didit.me/v3/... (sessions, workflows, questionnaires, AML monitoring, billing, etc.).
\- client_id → shown alongside api_key for OAuth-style introspection scenarios. Routine verification calls only need api_key.
\- data_location → where the application's verification data is stored and processed: "eu" (European Union, Ireland). Chosen when the application is created; "au" (Australia, Sydney) and "mx" (Mexico) are coming soon.
\- products → read-only. Always all three products in this order: identity, transactions, authentication. Each has a status (enabled, early_access or disabled) and its module switches (true or false). identity modules: user_verification, business_verification, case_management. transactions modules: travel_rule, case_management. authentication has none ({}).

Failure modes:
\- 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.

When to call:
\- After programmatic login from a new machine — you have an access_token but not the api_key, and you need x-api-key to start calling verification.didit.me.
\- Auditing your applications — list all apps with GET /organizations/me/{org_id}/applications/, then read each.

Note:
This endpoint does not rotate the credential. It returns the application's current api_key on every GET, so there is no "show api_key once" model.

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

\</pre>



      
      

Einfügen in



## OpenAPI

````yaml de/openapi-auth.json GET /organizations/me/{org_id}/applications/{app_id}/
openapi: 3.0.0
info:
  version: 1.0.0
  title: Didit Auth API
  description: >-
    API für programmatische Registrierung und Authentifizierung für Entwickler
    und KI-Agenten. Registrierung in 2 API-Aufrufen – kein Browser erforderlich.
    Die agentenfreundlichste Plattform für Identitätsverifizierung.


    ## Basis-URL


    Alle Endpoints in dieser Spezifikation werden unter
    `https://apx.didit.me/auth/v2` gehostet. Dies ist ein anderer Host als die
    Verifizierungs-API (`https://verification.didit.me/v3`). Zur Unterscheidung:
    Dieser Auth-Host stellt Ihre **JWT-Access-Tokens** aus und ermöglicht Ihnen
    das Auflisten und Verwalten Ihrer **Organisationen** und **Anwendungen**.
    Auf dem Verifizierungs-Host rufen Sie Sitzungen, Workflows, AML usw. auf und
    authentifizieren sich mit dem von dieser API zurückgegebenen **`api_key`**.


    ## So funktioniert der Auth-Flow


    1. `POST /programmatic/register/` — E-Mail + Passwort übermitteln.

    2. Erhalten Sie einen 6-stelligen alphanumerischen Code per E-Mail.

    3. `POST /programmatic/verify-email/` — Code übermitteln. Sie erhalten ein
    JWT-`access_token`, ein `refresh_token`, eine Organisation und eine
    Standardanwendung mit `client_id` + `api_key` zurück.

    4. Speichern Sie den `api_key`. Verwenden Sie ihn als `x-api-key` für jeden
    Aufruf von `https://verification.didit.me/v3/...`.

    5. Auf jedem zukünftigen Rechner tauscht `POST /programmatic/login/` Ihre
    E-Mail + Ihr Passwort gegen ein neues JWT aus; rufen Sie anschließend `GET
    /organizations/me/` und die Anwendungs-Endpoints auf, um Anmeldedaten
    wiederherzustellen oder zu rotieren.


    Das JWT wird nur für die **Kontoverwaltungs**-Endpoints in dieser
    Spezifikation benötigt; der Traffic der Verifizierungs-API verwendet den
    langlebigen `api_key`, nicht das JWT.


    ## Konventionen


    - Alle Request- und Response-Bodys sind JSON (`Content-Type:
    application/json`).

    - **Verwenden Sie beim Testen von `POST /programmatic/register/` eine echte,
    zustellbare E-Mail-Adresse.** Der Endpoint sendet den Verifizierungscode
    synchron. Daher werden Adressen auf reservierten Test-Domains
    (`@example.com`, `@example.org`, `@*.test`, `@*.example`, `@*.invalid`) bei
    der E-Mail-Zustellung abgewiesen und die Anfrage gibt einen `500` zurück.
    Ersetzen Sie den Platzhalter `you@yourdomain.com` in den Beispielen durch
    ein Postfach, auf das Sie tatsächlich zugreifen können.

    - Validierungsfehler geben HTTP `400` mit einem von zwei Envelopes zurück:
    `{"field": ["message", ...]}` für Probleme auf Feldebene oder `{"detail":
    "message"}` für Geschäftsregelfehler. Einige wenige Validatoren
    (Passwortstärke bei der Registrierung, Code-Ablauf bei verify-email)
    antworten derzeit mit einem einfachen Array `["message"]` anstelle der
    feldbezogenen Form – dies ist eine bekannte serverseitige Inkonsistenz,
    daher sollte Client-Code beide Formen akzeptieren.

    - Authentifizierungsfehler werden als `{"detail": "..."}` mit HTTP `401`
    (ungültiges Bearer-Token) oder `403` (fehlendes Bearer-Token / unzureichende
    Berechtigungen) zurückgegeben.

    - Rate-Limit-Antworten enthalten ein `wait`-Feld mit der Abklingzeit in
    Sekunden.
servers:
  - url: https://apx.didit.me/auth/v2
    description: Produktions-Authentifizierungsserver
security: []
tags:
  - name: Programmatic Auth
    description: >-
      Konto-Lebenszyklus mit E-Mail und Passwort: Registrieren, Verifizieren,
      Anmelden. Gibt das JWT-`access_token` zurück, das Sie für die
      Account-Management-Endpoints verwenden, sowie (bei Verifizierung)
      `client_id` und `api_key` Ihrer ersten Anwendung.
  - name: Account Management
    description: >-
      Authentifizierte Endpoints (JWT Bearer), die Organisationen auflisten und
      Anwendungen erstellen, abrufen oder aktualisieren. Verwenden Sie diese, um
      den `api_key` wiederherzustellen oder zu rotieren, mit dem Sie
      Verifizierungs-API-Aufrufe authentifizieren.
paths:
  /organizations/me/{org_id}/applications/{app_id}/:
    get:
      tags:
        - Account Management
      summary: Anmeldedaten der Anwendung abrufen
      description: >-
        Den vollständigen Datensatz einer Anwendung einschließlich `client_id`
        und `api_key` abrufen. Verwenden Sie dies, um einen verloren gegangenen
        `api_key` wiederherzustellen.
      operationId: get_application_credentials
      parameters:
        - name: org_id
          in: path
          required: true
          description: UUID der Organisation, der die Anwendung gehört.
          schema:
            type: string
            format: uuid
            example: a1b2c3d4-5678-90ab-cdef-111111111111
        - name: app_id
          in: path
          required: true
          description: UUID der Anwendung, deren Anmeldedaten Sie abrufen möchten.
          schema:
            type: string
            format: uuid
            example: b2c3d4e5-6789-01bc-defg-222222222222
      responses:
        '200':
          description: Anwendungsdatensatz einschließlich `client_id` und `api_key`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
              examples:
                Success:
                  value:
                    uuid: b2c3d4e5-6789-01bc-defg-222222222222
                    name: My App
                    client_id: S9LIYGSoWNuGMLHsvEt9dQ
                    api_key: sk_live_example_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                    website_url: https://example.com
                    redirect_uris:
                      - https://example.com/callback
                    terms_url: https://example.com/terms
                    privacy_url: https://example.com/privacy
                    description: Production application
                    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: {}
        '401':
          description: >-
            Access-Token ist fehlerhaft, ungültig oder abgelaufen. Fordern Sie
            mit `POST /programmatic/login/` ein neues Token an.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              examples:
                InvalidToken:
                  value:
                    detail: Invalid access token
                ExpiredToken:
                  value:
                    detail: Expired access token
        '403':
          description: >-
            Sie können diese Anwendung nicht lesen. Ein Mitglied der
            Organisation, das kein Eigentümer oder Administrator ist, erhält
            `Only organization owners and admins can manage applications.` Ein
            Eigentümer oder Administrator, dessen Zugriff auf die Organisation
            ausgesetzt ist, erhält `Your access to this organization is
            suspended.` Eine Anfrage ohne einen `Authorization`-Header erhält
            `You do not have permission to perform this action.`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              examples:
                NotOwnerOrAdmin:
                  summary: Mitglied, das weder Eigentümer noch Administrator ist
                  value:
                    detail: >-
                      Only organization owners and admins can manage
                      applications.
                Suspended:
                  summary: Mitgliedschaft ausgesetzt
                  value:
                    detail: Your access to this organization is suspended.
                MissingToken:
                  summary: Kein Authorization-Header
                  value:
                    detail: You do not have permission to perform this action.
        '404':
          description: >-
            Die Organisation existiert nicht oder Sie sind kein Mitglied von
            ihr, oder die Anwendung existiert in dieser Organisation nicht.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              examples:
                OrganizationNotFound:
                  summary: Organisation nicht gefunden oder Sie sind kein Mitglied
                  value:
                    detail: Organization not found.
                ApplicationNotFound:
                  summary: Keine solche Anwendung in dieser Organisation
                  value:
                    detail: Application not found.
      security:
        - BearerAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: >-
            curl
            "https://apx.didit.me/auth/v2/organizations/me/$ORG_ID/applications/$APP_ID/"
            \
              -H "Authorization: Bearer $ACCESS_TOKEN"
        - 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.retrieve(
                "a1b2c3d4-5678-90ab-cdef-111111111111",
                "b2c3d4e5-6789-01bc-defg-222222222222",
            )
            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.retrieve(
              "a1b2c3d4-5678-90ab-cdef-111111111111",
              "b2c3d4e5-6789-01bc-defg-222222222222",
            );
            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.Retrieve(ctx, \"a1b2c3d4-5678-90ab-cdef-111111111111\", \"b2c3d4e5-6789-01bc-defg-222222222222\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;


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

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


            var result =
            client.account().applications().retrieve("a1b2c3d4-5678-90ab-cdef-111111111111",
            "b2c3d4e5-6789-01bc-defg-222222222222");

            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->retrieve('a1b2c3d4-5678-90ab-cdef-111111111111',
            'b2c3d4e5-6789-01bc-defg-222222222222');

            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.retrieve(
              "a1b2c3d4-5678-90ab-cdef-111111111111",
              "b2c3d4e5-6789-01bc-defg-222222222222"
            )
            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.RetrieveAsync("a1b2c3d4-5678-90ab-cdef-111111111111",
            "b2c3d4e5-6789-01bc-defg-222222222222");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    Application:
      type: object
      description: >-
        Vollständiger Anwendungsdatensatz. `uuid`, `client_id` und `api_key`
        ändern sich nach der Erstellung nie. `data_location` ändert sich
        ebenfalls nicht, außer einmalig bei der mit Ihrer Organisation
        erstellten Live-Anwendung, bevor diese verwendet wird (siehe
        Aktualisierungsanfrage).
      properties:
        uuid:
          type: string
          format: uuid
          description: Anwendungs-UUID. In nachfolgenden Aufrufen als `{app_id}` verwenden.
          example: b2c3d4e5-6789-01bc-defg-222222222222
        name:
          type: string
          description: In der Didit Console angezeigter Anzeigename der Anwendung.
          example: Acme Production App
        client_id:
          type: string
          description: >-
            Öffentlicher Client-Identifikator, der sicher in OAuth-ähnliche
            Abläufe eingebunden werden kann.
          example: S9LIYGSoWNuGMLHsvEt9dQ
        api_key:
          type: string
          description: >-
            Langlebiges Secret (auch `client_secret` genannt). Als
            `x-api-key`-Header für jeden Aufruf an
            `https://verification.didit.me/v3/...` verwenden (Sitzungen,
            Workflows, AML usw.). Wie Zugangsdaten behandeln; niemals
            clientseitig offenlegen. Neue Schlüssel beginnen mit `sk_live_`
            (Live-Anwendung) oder `sk_test_` (Sandbox-Anwendung), gefolgt von 43
            URL-sicheren Zeichen (Buchstaben, Ziffern, `-` und `_`). Schlüssel,
            die vor diesem Format erstellt wurden, haben kein Präfix und
            funktionieren weiterhin unverändert. Für 72 Stunden nach der
            Wiederherstellung Ihres Kontos geben Auflisten, Abrufen und
            Aktualisieren hier eine leere Zeichenkette anstelle des Schlüssels
            zurück.
          example: sk_live_example_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        website_url:
          type: string
          nullable: true
          description: Mit dieser Anwendung verknüpfte Website- oder App-URL.
          example: https://acme.example
        redirect_uris:
          type: array
          items:
            type: string
          description: >-
            Zulässige Weiterleitungs-URIs für Weiterleitungs-Workflows im
            OAuth-Stil und Verifizierungs-Weiterleitungs-Workflows.
          example:
            - https://acme.example/callback
        terms_url:
          type: string
          nullable: true
          description: >-
            URL der Nutzungsbedingungen, die im Verifizierungsablauf angezeigt
            wird.
          example: https://acme.example/terms
        privacy_url:
          type: string
          nullable: true
          description: Im Verifizierungsablauf angezeigte Datenschutzrichtlinien-URL.
          example: https://acme.example/privacy
        description:
          type: string
          nullable: true
          description: >-
            Interne Beschreibung für die Anwendung (wird Endbenutzern nicht
            angezeigt).
        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: >-
            Die Produkte der Anwendung. Immer alle drei, in dieser Reihenfolge:
            `identity`, `transactions`, `authentication`. Eine neue Anwendung
            hat `identity` aktiviert, wobei jedes Modul eingeschaltet ist, und
            `transactions` sowie `authentication` deaktiviert. Schreibgeschützt:
            Ein `products`-Schlüssel im Body einer Erstellung oder
            Aktualisierung wird ignoriert.
          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: {}
    AuthError:
      type: object
      description: >-
        Fehler-Envelope für Authentifizierung / Autorisierung / nicht gefundene
        Ressource.
      properties:
        detail:
          type: string
          example: Invalid access token
    ApplicationDataLocation:
      type: string
      enum:
        - eu
        - au
        - mx
      description: >-
        Wo die Verifizierungsdaten der Anwendung gespeichert und verarbeitet
        werden, ausgewählt bei der Erstellung der Anwendung. `eu` ist die
        Europäische Union (Irland), die Standardeinstellung. `au` (Australien,
        Sydney) und `mx` (Mexiko) folgen in Kürze: Eine Anfrage, die diese
        angibt, führt zu einer 400-Antwort `This data location is not available
        yet.`. Die Sandbox-Anwendung einer Organisation befindet sich immer in
        der Europäischen Union.
      example: eu
    ApplicationProduct:
      type: object
      description: >-
        Ein Produkt einer Anwendung und dessen Status. Schreibgeschützt: Die
        Anwendungs-Endpoints geben es zurück und ignorieren es im Anfrage-Body.
      properties:
        product:
          type: string
          enum:
            - identity
            - transactions
            - authentication
          description: >-
            `identity` (Identitätsverifizierung), `transactions`
            (Transaktionsüberwachung) oder `authentication` (Authentifizierung).
          example: identity
        status:
          type: string
          enum:
            - enabled
            - early_access
            - disabled
          description: >-
            Gibt an, ob das Produkt für diese Anwendung aktiviert ist.
            `early_access` gilt nur für `authentication`, das Didit für Sie
            aktiviert.
          example: enabled
        modules:
          type: object
          additionalProperties:
            type: boolean
          description: >-
            Modulschalter des Produkts, jeweils `true` oder `false`. `identity`
            enthält `user_verification`, `business_verification` und
            `case_management`. `transactions` enthält `travel_rule` und
            `case_management`. `authentication` enthält keine (`{}`).
            `case_management` ist eine Einstellung, die sowohl unter `identity`
            als auch unter `transactions` angezeigt wird und daher in beiden
            denselben Wert hat.
          example:
            user_verification: true
            business_verification: true
            case_management: true
      required:
        - product
        - status
        - modules
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        RS256-signiertes JWT `access_token`, das von `POST /programmatic/login/`
        oder `POST /programmatic/verify-email/` zurückgegeben wird. Als
        `Authorization: Bearer <access_token>` senden. Die Standardlebensdauer
        beträgt 86400 Sekunden (24 Stunden). Dieses Token ist nur für die
        Account-Management-Endpoints auf `apx.didit.me/auth/v2` gültig. Die
        Verifizierungs-API (`verification.didit.me/v3`) verwendet stattdessen
        den langlebigen `api_key` als `x-api-key`.

````

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