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

# Unternehmensregister-Suche API (KYB) - Didit

> POST /v3/kyb/search/ findet Unternehmen bei Didit. Erfolgreiche Suchen kosten $0.50 pro Anfrage; Profilabruf wird separat abgerechnet.

Verwenden Sie diesen Endpoint zuerst, um passende Kandidaten im Unternehmensregister zu finden.
Die Suche erstellt keine gespeicherte manuelle Prüfung.

Erfolgreiche eigenständige Suchen mit einer kostenpflichtigen Unternehmensdatenquelle kosten **\$0.50 pro Anfrage**, unabhängig von der Anzahl der Kandidaten. Leere Ergebnisse, fehlgeschlagene Suchen und Ergebnisse, die nur von anderen Quellen geliefert werden, werden nicht berechnet. Ein späterer Abruf des Registerprofils wird separat abgerechnet.

Bei einer Suche, die eine kostenpflichtige Quelle nutzen kann, prüft und reserviert Didit den zutreffenden Suchpreis, bevor das Register kontaktiert wird.
Bei unzureichendem Guthaben weist Didit Anfragen mit `403` und `code: "insufficient_credits"` zurück.
Bei vertraglicher Abrechnung richtet sich die Abrechnung nach Ihrem vereinbarten Suchtarif. Ein nicht konfigurierter Vertragstarif wird vor der Suche abgelehnt.
Sandbox-Suchen sind kostenlos.
Jede wiederholte erfolgreiche Suche ist eine neue abrechnungspflichtige Anfrage. Die Zustellung eines Callbacks erzeugt keine weitere Suchgebühr.

Wenn Sie `webhook_url` senden, kann Didit sofort antworten, während der Anbieter die Suche noch auflöst. Die Kandidaten werden dann an Ihre Callback-URL gesendet, sobald sie bereit sind. Der Callback ist bewusst nicht signiert. Für diese Suchbenachrichtigung müssen Sie also kein Webhook-Secret konfigurieren. Ein Beispiel finden Sie im [Beispiel-Payload des Suchcallbacks](https://docs.didit.me/de/standalone-apis/kyb-registry.md#such-callback).

Nachdem Sie das richtige `kyb_response_id` ausgewählt haben, rufen Sie `POST /v3/kyb/select/` (Lite), `POST /v3/kyb/shareholders/` oder `POST /v3/kyb/ubo/` auf, um das abrechnungspflichtige Registerprofil auf der benötigten Stufe abzurufen.

> [!NOTE]
>
> Der Status `fetch_status` jedes Kandidaten ist zum Zeitpunkt der Suche `pending` und bleibt `pending`, bis Sie diesen Kandidaten auswählen. Die Suche listet nur Kandidaten auf, und erst die Auswahl ruft das vollständige Profil ab. Fragen Sie die Suche nicht wiederholt ab, um auf eine Auflösung zu warten.
>
> `kyb_response_id` ist ein undurchsichtiges, flüchtiges Handle, das auf eine Suchanfrage beschränkt ist. Übergeben Sie es genau so zurück, wie Sie es erhalten haben, parsen Sie es nicht und leiten Sie nichts aus seinem Inhalt ab. Wiederholen Sie dieselbe Suche, ist mit neuen IDs zu rechnen. Wählen Sie den Kandidaten zeitnah nach der Suche aus. Wenn Sie eine stabile Kennung für das Unternehmen selbst benötigen, verwenden Sie `registration_number`.

## Suchstufe

`tier` wählt die Registerstufe, auf deren Anbieterkette die Suche läuft: `basic` (der Standard, die Lite-Kette), `shareholders` oder `ubo`. Die Kandidatenliste stammt aus der Kette dieser Stufe. Diese Kette ist nicht immer dieselbe Quelle, die die Lite-Suche verwendet. Eine leere Lite-Suche beweist deshalb nicht, dass das Register das Unternehmen nicht führt. Suchen Sie in diesem Fall erneut auf der Stufe, die Sie benötigen.

Bietet das Land die angegebene Stufe nicht an, läuft die Suche auf der höchsten Stufe, die das Land bis zu dieser Stufe anbietet. Ein Land ohne jegliche Registerdaten wird für Registerprüfungen nicht angeboten. Fahren Sie in diesem Fall mit der manuellen Eingabe des Unternehmens fort.

Suchen Sie auf der Stufe, die Sie kaufen möchten, und rufen Sie den Kandidaten dann über den Endpoint ab, der ihn verkauft:

| Gesuchte `tier` | Endpoint, der den Kandidaten abruft |
| - | - |
| `basic` (Standard) | `POST /v3/kyb/select/` (Lite) |
| `shareholders` | `POST /v3/kyb/shareholders/` |
| `ubo` | `POST /v3/kyb/ubo/` |

## search\_type

`search_type` akzeptiert nur `contains`, und das ist auch der Standardwert. Die Registerquellen hinter der Suche führen einen Enthaltenheitsabgleich von Firmennamen durch. Deshalb werden `start_with` und `fuzzy` mit `400` (`"start_with" is not a valid choice`) abgelehnt und nicht stillschweigend als `contains` behandelt. Senden Sie `registration_number`, um einen exakten Unternehmensabgleich durchzuführen.

## Gehostete und eigenständige Suche

`POST /v1/kyb/search/` ist die Suche, die ein gehosteter Verifizierungsablauf ausführt. Sie wird über die Verifizierungssitzung authentifiziert, weist Anfragen mit einem API-Schlüssel mit `403` zurück und nimmt keinen `tier` entgegen. Die KYB-Registerkonfiguration des Workflows wählt die Kette aus. Die eigenständige API ruft `POST /v2/kyb/search/` oder `POST /v3/kyb/search/` mit Ihrem `x-api-key` auf. Die Eingabe `tier` und die gestuften Select-Endpoints sind der Weg, über den eine eigenständige Integration dieselben Kandidaten auf der benötigten Stufe erreicht.

## Ausfälle des Registers behandeln

Ist der Registeranbieter vorübergehend nicht verfügbar, gibt der Endpoint `502` mit einem stabilen, maschinenlesbaren Code zurück:

```json theme={null}
{
  "detail": "The company registry provider is temporarily unavailable.",
  "code": "kyb_registry_provider_unavailable"
}
```

Wenn Sie diesen Code erhalten, lassen Sie den Benutzer mit der manuellen Eingabe des Unternehmens fortfahren oder bitten Sie ihn, es später erneut zu versuchen. Halten Sie Validierungsfehler davon getrennt: Ungültige Sucheingaben geben `400` zurück und verwenden diesen Ausfallcode nicht.

## Nicht unterstützte Länder und Suchbeschränkungen behandeln

Zwei weitere stabile Codes zeigen an, dass Sie keine Wiederholungsversuche mehr unternehmen und mit der manuellen Eingabe des Unternehmens fortfahren sollten:

| Status | `code` | Wann |
| - | - | - |
| `400` | `kyb_registry_country_unsupported` | Das Land hat auf keiner Stufe eine Unternehmensregisterquelle. Die Einschränkung ist dauerhaft, daher führt die Wiederholung derselben Suche nie zum Erfolg. |
| `429` | `kyb_registry_search_limit_reached` | Ihre Anwendung hat das Kontingent von 600 Suchen pro Stunde bei kostenpflichtigen Unternehmensdatenquellen ausgeschöpft, und für das Land ist keine kostenlose Quelle mehr verfügbar. Warten Sie, bis das Zeitfenster abgelaufen ist, oder geben Sie das Unternehmen manuell ein. |

Im gehosteten Ablauf erlaubt jeder Registerschritt 3 Suchen bei einer kostenpflichtigen Unternehmensdatenquelle. Nach der dritten wird dem Antragsteller die manuelle Eingabe angeboten.

Wenn Sie einen Kandidaten auswählen, der eine Markenregistrierung und kein Unternehmen ist, gibt der Endpoint `400` mit `code: "kyb_registry_entry_not_a_company"` zurück. Wählen Sie stattdessen ein Unternehmen aus den Suchergebnissen aus.


## OpenAPI

````yaml de/openapi-25.json POST /v3/kyb/search/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API für Ausweisverifizierung. Authentifizierung über den x-api-key-Header.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/kyb/search/:
    post:
      tags:
        - Standalone APIs
      summary: KYB-Unternehmenssuche im Register (eigenständig)
      description: >-
        Durchsuchen Sie offizielle Unternehmensregister nach potenziellen
        Unternehmen anhand des Namens und/oder der Registernummer. Dies ist
        Schritt 1 des zweistufigen Register-Ablaufs: **search** gibt
        leichtgewichtige Kandidaten zurück, anschließend ruft `POST
        /v3/kyb/select/` das vollständige Profil eines Kandidaten ab.


        **Abrechnung der Suche.** Erfolgreiche Suchen über eine kostenpflichtige
        Unternehmensdatenquelle kosten USD 0.50 pro Anfrage, unabhängig von der
        Anzahl der gefundenen Kandidaten. Leere Ergebnisse, Fehler und
        Ergebnisse, die ausschließlich aus anderen Quellen stammen, werden nicht
        berechnet. Der fällige Betrag wird vor der Suche reserviert;
        unzureichendes Guthaben führt zu einem 403-Fehler mit dem Code
        `insufficient_credits`. Sofern vereinbart, gelten Vertragstarife; ein
        nicht konfigurierter Vertragstarif für Suchen gibt 403 zurück. Suchen in
        der Sandbox sind kostenlos. Das Wiederholen einer erfolgreichen Suche
        kann erneute Kosten verursachen; die Zustellung von Callbacks erzeugt
        keine zusätzlichen Kosten. Der Abruf von Profilen wird separat
        abgerechnet. Diese Suchgebühr gilt auch für v2. Kandidaten werden immer
        mit `fetch_status: "pending"` zurückgegeben: Die vollständigen
        Unternehmensdaten werden erst bei der Auswahl abgerufen (und
        abgerechnet).


        **`kyb_response_id` ist flüchtig.** Es handelt sich um ein
        suchspezifisches Handle und nicht um eine dauerhafte Unternehmens-ID.
        Wählen Sie den Kandidaten zeitnah nach der Suche aus und führen Sie bei
        Bedarf eine erneute Suche durch, um ein neues Handle zu erhalten,
        anstatt es zu speichern.


        **`tier` bestimmt die Anbieterkette.** `tier` gibt die Registerstufe an,
        auf der die Suche ausgeführt wird: `basic` (Standard, die Lite-Kette),
        `shareholders` oder `ubo`. Die Suche verwendet die Anbieterkette, die
        diese Stufe bedient. Dies ist nicht immer dieselbe Kette, die von der
        Lite-Suche abgefragt wird; ein leeres Ergebnis bei einer Lite-Suche ist
        daher kein Beweis dafür, dass das Unternehmen nicht im Register
        vorhanden ist — suchen Sie erneut auf der Stufe, die Sie benötigen. Für
        ein Land, das die angegebene Stufe nicht anbietet, wird die Suche auf
        der höchsten verfügbaren Stufe bis zu diesem Wert ausgeführt. Rufen Sie
        den Kandidaten über den Endpoint ab, der die entsprechende Stufe
        bereitstellt: `POST /v3/kyb/select/` (Lite), `POST
        /v3/kyb/shareholders/` oder `POST /v3/kyb/ubo/`.


        **Authentifizierung.** `POST /v3/kyb/search/` (und `/v2/`) erfordert den
        API-Schlüssel Ihrer Anwendung im Header `x-api-key`. Der gehostete
        Endpoint `POST /v1/kyb/search/` ist die sitzungsauthentifizierte Route,
        die von einem gehosteten Verifizierungsablauf aufgerufen wird: Er
        antwortet bei Verwendung eines API-Schlüssels mit `403` und akzeptiert
        keinen `tier`-Parameter — die KYB-Registerkonfiguration des Workflows
        wählt die entsprechende Kette aus.


        **Zwei Modi.**

        - *Synchron (Standard):* Die API fragt das Register ab, bis die Suche
        abgeschlossen ist, und gibt die endgültige Kandidatenliste zurück
        (`search_resolved: true`).

        - *Asynchron:* Übergeben Sie `webhook_url`, und die API antwortet sofort
        — üblicherweise mit `search_status: "pending"` und einer leeren
        Kandidatenliste — und sendet anschließend per POST einen Callback vom
        Typ `kyb.registry_search.resolved` an Ihre URL, sobald das Register die
        Verarbeitung abgeschlossen hat. Der Callback-Body lautet `{"event_id",
        "event_type": "kyb.registry_search.resolved", "request_id",
        "vendor_data", "metadata", "search_status", "search_resolved",
        "kyb_registry", "timestamp", "created_at"}` — beachten Sie, dass
        `timestamp` und `created_at` im Callback Epoch-Ganzzahlen sind, im
        Gegensatz zum ISO-Format von `created_at` dieses Endpoints — und wird
        **unsigniert** gesendet (Header `X-Didit-Unsigned-Callback: true`, kein
        `X-Signature`).


        **Ländercodes.** ISO 3166-1 alpha-2 (`GB`, `DE`), sowie
        `XX-YY`-Unterteilungscodes für regionale Register — z. B. `US-CA` für
        Kalifornien.


        **Sandbox.** Schlüssel von Sandbox-Anwendungen geben einen einzelnen
        statischen Kandidaten zurück, ohne ein Register zu kontaktieren.
      operationId: post_v3_kyb_search
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - country_code
              properties:
                country_code:
                  type: string
                  maxLength: 10
                  description: >-
                    ISO 3166-1 Alpha-2-Code des Landes, dessen
                    Unternehmensregister durchsucht werden soll. Zum Beispiel
                    `GB`. Wenn Unternehmensregister auf Bundesstaat- oder
                    Provinzebene geführt werden, hängen Sie den ISO
                    3166-2-Unterteilungscode als `XX-YY` an: `US-CA` durchsucht
                    das kalifornische Register. Suchanfragen in den Vereinigten
                    Staaten erfordern immer die Unterteilung — ein einfaches
                    `US` wird abgelehnt. Groß-/Kleinschreibung wird nicht
                    beachtet; wird in Großbuchstaben normalisiert.
                  example: GB
                name:
                  type: string
                  maxLength: 255
                  description: >-
                    Zu suchender Unternehmensname. Entweder `name` oder
                    `registration_number` ist erforderlich.
                  example: Tesco
                registration_number:
                  type: string
                  maxLength: 100
                  description: >-
                    Zu suchende Registernummer. Entweder `name` oder
                    `registration_number` ist erforderlich.
                tier:
                  type: string
                  enum:
                    - basic
                    - shareholders
                    - ubo
                  default: basic
                  description: >-
                    Register-Stufe, auf deren Provider-Kette diese Suche
                    ausgeführt wird. `basic` (Standard) durchsucht die
                    Lite-Kette des Landes; `shareholders` und `ubo` durchsuchen
                    die Eigentümerstruktur-Kette dieser Stufe, bei der es sich
                    um eine andere Quelle handeln kann, sodass eine leere
                    Lite-Suche nicht beweist, dass das Unternehmen im Register
                    fehlt. Ein Land, das die genannte Stufe nicht anbietet, wird
                    auf der höchsten Stufe durchsucht, die es bis zu dieser
                    anbietet. Rufen Sie den Treffer über den Endpoint ab, der
                    die von Ihnen gesuchte Stufe bereitstellt: `POST
                    /v3/kyb/select/` (Lite), `POST /v3/kyb/shareholders/` oder
                    `POST /v3/kyb/ubo/`.
                  example: basic
                search_type:
                  type: string
                  enum:
                    - contains
                  default: contains
                  description: >-
                    Strategie für den Namensabgleich, die bei der Registersuche
                    angewendet wird. `contains` ist der einzige zulässige Wert:
                    Keine Registerquelle hinter der Suche bietet einen Präfix-
                    oder Fuzzy-Modus, daher werden `start_with` und `fuzzy` mit
                    `400` (`not a valid choice`) abgelehnt.
                vendor_data:
                  type: string
                  description: >-
                    Ihre Kennung für diese Abfrage; wird zurückgegeben und im
                    Webhook-Callback enthalten sein.
                metadata:
                  type: object
                  nullable: true
                  description: >-
                    Freiform-JSON; wird zurückgegeben und im Webhook-Callback
                    enthalten.
                webhook_url:
                  type: string
                  format: uri
                  maxLength: 500
                  description: >-
                    Schaltet die Suche in den asynchronen Modus um: Die API
                    antwortet sofort und sendet einen nicht signierten
                    `kyb.registry_search.resolved`-Callback per POST an diese
                    URL, sobald die Kandidatenliste bereitsteht.
            example:
              country_code: GB
              name: Tesco
              search_type: contains
              vendor_data: company-1234
      responses:
        '200':
          description: >-
            Suche angenommen. Der synchrone Modus gibt die ermittelte
            Kandidatenliste zurück; der Webhook-Modus antwortet sofort (häufig
            `search_status: "pending"`) und stellt die endgültige Liste über den
            Callback `kyb.registry_search.resolved` zu.
          content:
            application/json:
              schema:
                type: object
                properties:
                  request_id:
                    type: string
                    format: uuid
                    description: >-
                      Mit `webhook_url`: Die persistierte Suchanfrage-ID, die im
                      `kyb.registry_search.resolved`-Callback als `request_id`
                      zurückgegeben wird. Ohne `webhook_url`: Eine
                      vorübergehende Korrelations-UUID (die Suche wird nicht
                      gespeichert).
                  kyb_registry:
                    $ref: '#/components/schemas/KYBRegistrySearchResults'
                  vendor_data:
                    type: string
                    nullable: true
                    description: Wiedergabe der von Ihnen gesendeten `vendor_data`.
                  metadata:
                    type: object
                    nullable: true
                    description: Rückgabe der von Ihnen gesendeten `metadata`.
                  created_at:
                    type: string
                    format: date-time
              examples:
                Resolved search:
                  summary: Synchroner Modus — endgültige Kandidatenliste
                  value:
                    request_id: 0c7e9a40-3a13-4f7e-8a44-9d2e2f1c5b6a
                    kyb_registry:
                      companies:
                        - kyb_response_id: 69aeeb95febb0f1704042259
                          name: Tesco PLC
                          registration_number: '00445790'
                          status: active
                          type: Public Limited Company
                          risk_level: null
                          fetch_status: pending
                        - kyb_response_id: 69aeeb95febb0f170404225a
                          name: E-TESCO LTD
                          registration_number: '15168476'
                          status: active
                          type: Private Limited Company
                          risk_level: null
                          fetch_status: pending
                      pagination:
                        total: 2
                        page: 1
                        per_page: 25
                      search_status: resolved
                      search_resolved: true
                    vendor_data: company-1234
                    metadata: null
                    created_at: '2026-06-11T10:40:00.000000+00:00'
                Pending search (webhook mode):
                  summary: >-
                    `webhook_url` angegeben – Kandidaten treffen über den
                    Callback kyb.registry_search.resolved ein
                  value:
                    request_id: 5f2d8c1b-7e4a-4b9c-9f0d-3a6e8c2b1d4f
                    kyb_registry:
                      companies: []
                      pagination:
                        total: 0
                        page: 1
                        per_page: 25
                      search_status: pending
                      search_resolved: false
                    vendor_data: company-1234
                    metadata:
                      source: onboarding
                    created_at: '2026-06-11T10:41:00.000000+00:00'
        '400':
          description: >-
            Validierungsfehler. Probleme auf Feldebene verwenden die
            Standard-Envelope von DRF; die Regel für Name/Registernummer meldet
            unter `non_field_errors`. Ein Land, das die Register nicht abdecken,
            antwortet mit `400` und `code: kyb_registry_country_unsupported`.
          content:
            application/json:
              examples:
                Missing search criteria:
                  summary: Weder `name` noch `registration_number` angegeben
                  value:
                    non_field_errors:
                      - Either 'name' or 'registration_number' is required.
                Invalid country_code:
                  summary: >-
                    Muss `XX` (Alpha-2) oder eine Unterteilung im Format `XX-YY`
                    sein
                  value:
                    country_code:
                      - country_code must be a 2-letter ISO code.
                Invalid search_type:
                  summary: Nur `contains` wird akzeptiert
                  value:
                    search_type:
                      - '"start_with" is not a valid choice.'
                Invalid webhook_url:
                  summary: '`webhook_url` muss eine gültige URL sein'
                  value:
                    webhook_url:
                      - Enter a valid URL.
                Country not covered:
                  summary: Kein Unternehmensregister deckt das Land ab
                  value:
                    detail: >-
                      Company registry search is not available for this country.
                      Enter the company details manually to continue.
                    code: kyb_registry_country_unsupported
        '403':
          description: >-
            Zugriff verweigert. Wird zurückgegeben, wenn der Header `x-api-key`
            fehlt; ein falscher, widerrufener oder abgelaufener Schlüssel gibt
            `401` zurück. Ein fehlender Schlüssel gibt `403` mit `{"detail":
            ...}` zurück; ein falscher, widerrufener oder abgelaufener Schlüssel
            gibt `401` zurück. Wird auch vor der Suche zurückgegeben, wenn die
            anfallende Suchgebühr nicht gedeckt werden kann (`code:
            "insufficient_credits"`) oder wenn ein vertraglicher Suchtarif
            fehlt.
          content:
            application/json:
              examples:
                Missing or invalid API key:
                  summary: >-
                    Kein `x-api-key`-Header, oder der Schlüssel ist
                    ungültig/widerrufen
                  value:
                    detail: You do not have permission to perform this action.
        '429':
          description: >-
            Rate-Limit überschritten oder das Suchkontingent ist aufgebraucht.
            POST/PATCH/DELETE-Endpoints teilen sich ein Budget von 300
            Schreibanfragen pro Minute pro API-Schlüssel
            (Transaktionserstellungen und Ereignis-Ingestion haben ein separates
            Budget von 600), mit `X-RateLimit-*`- und `Retry-After`-Headern.
            Davon abgesehen sind kostenpflichtige Registersuchen auf 600 pro
            Anwendung pro Stunde begrenzt: Darüber hinaus lautet die Antwort
            `429` mit `code: kyb_registry_search_limit_reached`, und Suchen, die
            ausschließlich über kostenlose Quellen bedient werden, funktionieren
            weiterhin. Warten Sie und suchen Sie später erneut.
          content:
            application/json:
              examples:
                Write rate limit exceeded:
                  summary: Mehr als 300 Schreibanfragen in der aktuellen Minute
                  value:
                    detail: >-
                      Write request rate limit exceeded. You can make up to 300
                      requests per minute.
                Search allowance spent:
                  summary: Mehr als 600 kostenpflichtige Suchen in der letzten Stunde
                  value:
                    detail: >-
                      The maximum number of company registry searches for this
                      session has been reached. Enter the company details
                      manually to continue.
                    code: kyb_registry_search_limit_reached
              schema:
                type: object
                properties:
                  detail:
                    type: string
                  code:
                    type: string
        '502':
          description: >-
            Der KYB-Registeranbieter ist vorübergehend nicht verfügbar – eine
            5xx-Antwort, ein Timeout oder ein Verbindungsfehler des
            vorgelagerten Registers. Die Suche wird nicht abgerechnet. Versuchen
            Sie es später erneut, oder im gehosteten Verifizierungsablauf von
            Didit wird dem Benutzer automatisch eine manuelle
            Unternehmenseingabe anstelle eines Fehlers angeboten, der nur
            wiederholt werden kann.
          content:
            application/json:
              examples:
                Registry provider outage:
                  summary: Der Register-Provider hat die Suche nicht beantwortet
                  value:
                    detail: >-
                      The KYB registry provider is temporarily unavailable.
                      Please try again shortly.
                    code: kyb_registry_provider_unavailable
              schema:
                type: object
                properties:
                  detail:
                    type: string
                  code:
                    type: string
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST https://verification.didit.me/v3/kyb/search/ \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{
                "country_code": "GB",
                "name": "Tesco",
                "search_type": "contains",
                "vendor_data": "company-1234"
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.kyb.search(
                country_code="GB",
                name="Tesco",
                search_type="contains",
                vendor_data="company-1234",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

            // Reads DIDIT_API_KEY.
            const didit = new Didit();

            const result = await didit.kyb.search({
              country_code: "GB",
              name: "Tesco",
              search_type: "contains",
              vendor_data: "company-1234",
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.KYB.Search(ctx, didit.KYBSearchParams{\n\tCountryCode: \"GB\",\n\tName:        didit.String(\"Tesco\"),\n\tSearchType:  didit.Some(didit.KYBSearchParamsSearchType(\"contains\")),\n\tVendorData:  didit.String(\"company-1234\"),\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.KybSearchParams;

            // Reads DIDIT_API_KEY.
            Didit client = new Didit();

            var result = client.kyb().search(KybSearchParams.builder()
                    .countryCode("GB")
                    .name("Tesco")
                    .searchType(KybSearchParams.SearchType.of("contains"))
                    .vendorData("company-1234")
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

            // Reads DIDIT_API_KEY.
            $didit = new DiditClient();

            $result = $didit->kyb->search([
                'country_code' => 'GB',
                'name' => 'Tesco',
                'search_type' => 'contains',
                'vendor_data' => 'company-1234',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Reads DIDIT_API_KEY.
            didit = Didit::Client.new

            result = didit.kyb.search(
              country_code: "GB",
              name: "Tesco",
              search_type: "contains",
              vendor_data: "company-1234"
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: |-
            using System;
            using System.Text.Json;
            using Didit;

            // Reads DIDIT_API_KEY.
            using var client = new DiditClient();

            var result = await client.Kyb.SearchAsync(new KybSearchParams
            {
                CountryCode = "GB",
                Name = "Tesco",
                SearchType = new KybSearchParamsSearchType("contains"),
                VendorData = "company-1234",
            });
            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    KYBRegistrySearchResults:
      type: object
      properties:
        companies:
          type: array
          items:
            type: object
            properties:
              kyb_response_id:
                type: string
                nullable: true
                description: >-
                  Handle für diesen Kandidaten – übergeben Sie ihn an `POST
                  /v3/kyb/select/`, um das vollständige Profil abzurufen.
                  Flüchtig und auf diese Suche beschränkt: Speichern Sie ihn
                  nicht langfristig; führen Sie die Suche erneut durch, um einen
                  neuen zu erhalten.
                example: 69aeeb95febb0f1704042259
              name:
                type: string
                nullable: true
                description: Eingetragener Unternehmensname.
                example: Tesco PLC
              registration_number:
                type: string
                nullable: true
                description: Registernummer im Register.
                example: '00445790'
              status:
                type: string
                nullable: true
                description: >-
                  Normalisierter Registerstatus des Unternehmens (z. B.
                  `active`, `dissolved`, `inactive`, `struck off`).
                example: active
              type:
                type: string
                nullable: true
                description: Rechtsform gemäß Unternehmensregister.
                example: Public Limited Company
              registered_address:
                type: string
                nullable: true
                description: >-
                  Eingetragene Adresse des Treffers, sofern das Register eine
                  zurückgibt. Verwenden Sie diese zusammen mit der
                  Registernummer, um gleichnamige Unternehmen zu unterscheiden:
                  In den Vereinigten Staaten kann ein Treffer unter dem
                  Bundesstaat geführt werden, in dem das Unternehmen tätig ist,
                  und nicht unter dem gesuchten Bundesstaat.
                example: >-
                  Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, AL7
                  1GA
              risk_level:
                type: string
                nullable: true
                description: >-
                  Vom Register gemeldete Risikostufe, sofern verfügbar. Zum
                  Zeitpunkt der Suche üblicherweise `null`.
              fetch_status:
                type: string
                nullable: true
                description: >-
                  Für Suchkandidaten immer `pending` – das vollständige
                  Unternehmensprofil wird erst abgerufen (und abgerechnet), wenn
                  Sie den Kandidaten auswählen.
                example: pending
          description: >-
            Duplikatbereinigte Kandidatenliste. Leer, solange
            `search_resolved=false` (Webhook-Modus) oder wenn keine
            Übereinstimmungen gefunden wurden.
        pagination:
          type: object
          properties:
            total:
              type: integer
              description: Anzahl der zurückgegebenen Kandidaten.
            page:
              type: integer
            per_page:
              type: integer
              example: 25
        search_status:
          type: string
          nullable: true
          enum:
            - pending
            - resolved
          description: Lebenszyklusstatus der Registersuche.
        search_resolved:
          type: boolean
          description: '`true`, sobald die Kandidatenliste endgültig ist.'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Der API-Schlüssel Ihrer Anwendung, aus Entwickler -> API-Schlüssel in
        der Business Console. Der Primärschlüssel hat Vollzugriff. Ein benannter
        Schlüssel kann im Geltungsbereich eingeschränkt werden: keine, Lese-
        oder Schreibberechtigung pro Ressource, beschränkt auf bestimmte
        Workflows oder genehmigte Sitzungen, auf eine Liste von IP-Adressen und
        auf ein Ablaufdatum. 401 bedeutet, dass der Schlüssel falsch, widerrufen
        oder abgelaufen ist; 403 bedeutet, dass kein Schlüssel gesendet wurde,
        der Schlüssel keinen Zugriff auf diese Ressource oder Aktion hat oder
        die Anfrage von einer Adresse außerhalb seiner IP-Liste stammte; 404 bei
        einer Sitzungsroute bedeutet, dass die Sitzung außerhalb der Workflows
        oder Status des Schlüssels liegt. Ein Schlüssel ohne Medienzugriff
        erhält Bild-, Video- und PDF-URLs als null, und ein Schlüssel ohne
        Schreibberechtigung für Sitzungen erhält Sitzungslinks und Token als
        null. Siehe https://docs.didit.me/console/api-keys.

````

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