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

# واجهة بحث سجل الشركات (KYB) - البحث عن الشركات

> يبحث Didit عن مرشحي الشركات عبر POST /v3/kyb/search/. كل بحث ناجح في مصادر مدفوعة بـ $0.50 لكل طلب؛ الملف الشخصي يُفوتر منفصلاً.

استخدم نقطة النهاية هذه أولاً للعثور على مرشحين مطابقين من سجل الشركات.
لا ينشئ البحث فحصاً يدوياً محفوظاً.

تُكلّف عمليات البحث المستقلة الناجحة التي تستخدم مصدر بيانات شركات مدفوعاً **\$0.50 لكل طلب**، بغض النظر عن عدد المرشحين. لا تُحتسب رسوم على النتائج الفارغة، أو عمليات البحث الفاشلة، أو النتائج التي تأتي فقط من مصادر أخرى. ويُفوتَر استرجاع الملف التعريفي لاحقاً بشكل منفصل.

بالنسبة إلى البحث الذي قد يستخدم مصدراً مدفوعاً، يتحقق Didit من سعر البحث المطبّق ويحجزه قبل الاتصال بالسجل.
عند عدم كفاية الرصيد، يُعيد الطلب الاستجابة `403` مع `code: "insufficient_credits"`.
تتبع الفوترة التعاقدية سعر البحث المتفق عليه معك؛ ويُرفض أي سعر تعاقدي غير مُعدّ قبل تنفيذ البحث.
عمليات البحث في البيئة التجريبية مجانية.
كل عملية بحث ناجحة مكررة تُعد طلباً جديداً قابلاً للفوترة؛ ولا يضيف تسليم الاستدعاء رسوماً إضافية على البحث.

إذا أرسلت `webhook_url`، يمكن أن يعيد Didit الاستجابة فوراً بينما يحلّ المزوّد البحث، ثم يرسل المرشحين إلى رابط الاستدعاء الخاص بك عند جاهزيتهم. الاستدعاء غير موقّع بحكم التصميم، لذلك لا تحتاج إلى إعداد سر webhook لإشعار البحث هذا. راجع [مثال على حمولة استدعاء البحث](https://docs.didit.me/ar/standalone-apis/kyb-registry.md#استدعاء-البحث).

بعد اختيار `kyb_response_id` الصحيح، استدعِ `POST /v3/kyb/select/` (Lite) أو `POST /v3/kyb/shareholders/` أو `POST /v3/kyb/ubo/` لاسترجاع الملف التعريفي القابل للفوترة من السجل بالمستوى الذي تحتاجه.

> [!NOTE]
>
> تكون قيمة `fetch_status` لكل مرشح `pending` وقت البحث، وتبقى `pending` حتى تختار ذلك المرشح. فالبحث يسرد المرشحين فقط، والاختيار هو ما يجلب الملف التعريفي الكامل. لا تُكرّر الاستعلام عن البحث في انتظار حلّ هذه القيمة.
>
> `kyb_response_id` معرّف غامض ومؤقت مرتبط بطلب بحث واحد: أعِده تماماً كما تلقيته، ولا تُحلّله ولا تستنتج أي شيء من محتوياته، وتوقع أن يعيد تكرار البحث نفسه معرّفات جديدة. اختر المرشح بسرعة بعد البحث، واستخدم `registration_number` عندما تحتاج إلى معرّف ثابت للشركة نفسها.

## مستوى البحث

يحدد `tier` مستوى السجل الذي تعمل عليه سلسلة المزوّدين للبحث: `basic` (الافتراضي، وهو سلسلة Lite)، أو `shareholders`، أو `ubo`. تأتي قائمة المرشحين من سلسلة ذلك المستوى، وهي ليست دائماً المصدر الذي يقرأ منه بحث Lite، لذلك فإن بحث Lite الفارغ لا يُثبت أن السجل لا يحتوي على الشركة. ابحث مرة أخرى بالمستوى الذي تحتاجه.

عندما لا توفّر الدولة المستوى الذي حددته، يعمل البحث على أعلى مستوى تتيحه الدولة دون تجاوز ذلك المستوى. الدولة التي لا تتوفر لها بيانات سجل على الإطلاق لا تُتاح لفحوص السجل؛ تابع بإدخال بيانات الشركة يدوياً.

ابحث بالمستوى الذي تنوي شراءه، ثم استرجع المرشح من نقطة النهاية التي تبيعه:

| `tier` الذي بحثت به | نقطة النهاية التي تسترجع المرشح |
| - | - |
| `basic` (الافتراضي) | `POST /v3/kyb/select/` (Lite) |
| `shareholders` | `POST /v3/kyb/shareholders/` |
| `ubo` | `POST /v3/kyb/ubo/` |

## search\_type

لا يقبل `search_type` سوى `contains`، وهي القيمة الافتراضية. تطابق مصادر السجل التي يعتمد عليها البحث اسم الشركة بالاحتواء، لذلك تُرفض القيمتان `start_with` و`fuzzy` بالاستجابة `400` (`"start_with" is not a valid choice`) بدلاً من معاملتهما بصمت على أنهما `contains`. أرسل `registration_number` للحصول على تطابق دقيق مع الشركة.

## البحث المستضاف والبحث المستقل

`POST /v1/kyb/search/` هو البحث الذي يُجريه مسار التحقق المستضاف: يُصادَق عليه بجلسة التحقق، ويُعيد `403` عند استخدام مفتاح API، ولا يقبل `tier`، إذ يحدد إعداد سجل KYB في سير العمل السلسلة المستخدمة. يستدعي التكامل المستقل `POST /v2/kyb/search/` أو `POST /v3/kyb/search/` مع `x-api-key` الخاص بك؛ ومدخل `tier` ونقاط النهاية المتدرجة للاختيار هي الوسيلة التي يصل بها التكامل المستقل إلى المرشحين أنفسهم، بالمستوى الذي يحتاجه.

## التعامل مع انقطاعات السجل

إذا كان مزوّد السجل غير متاح مؤقتاً، تُعيد نقطة النهاية الاستجابة `502` مع رمز ثابت يمكن للآلة قراءته:

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

عند استلام هذا الرمز، اسمح للمستخدم بالمتابعة بإدخال بيانات الشركة يدوياً، أو اطلب منه إعادة المحاولة لاحقاً. وافصل أخطاء التحقق عن هذا: مدخلات البحث غير الصالحة تُعيد `400` ولا تستخدم رمز الانقطاع هذا.

## التعامل مع الدول غير المدعومة وحدود البحث

هناك رمزان ثابتان آخران يُخبراك بالتوقف عن إعادة المحاولة والمتابعة بإدخال بيانات الشركة يدوياً:

| الحالة | `code` | متى |
| - | - | - |
| `400` | `kyb_registry_country_unsupported` | لا تتوفر لدى الدولة أي مصدر لسجل الشركات على أي مستوى. القيد دائم، لذلك لن تنجح إعادة البحث نفسه أبداً. |
| `429` | `kyb_registry_search_limit_reached` | استنفد تطبيقك حصته البالغة 600 عملية بحث في الساعة على مصادر بيانات الشركات المدفوعة، ولم يبقَ أي مصدر مجاني للدولة. انتظر انقضاء النافذة الزمنية أو أدخل بيانات الشركة يدوياً. |

في مسار التحقق المستضاف، تسمح كل خطوة من خطوات السجل بثلاث عمليات بحث على مصدر بيانات شركات مدفوع. وبعد المحاولة الثالثة يُعرض على مقدّم الطلب الإدخال اليدوي.

يؤدي اختيار مرشح يمثّل تسجيل علامة تجارية لا شركة إلى استجابة `400` مع `code: "kyb_registry_entry_not_a_company"`. اختر شركة من نتائج البحث بدلاً من ذلك.


## OpenAPI

````yaml ar/openapi-25.json POST /v3/kyb/search/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API التحقق من الهوية. قم بالمصادقة باستخدام الرأس x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/kyb/search/:
    post:
      tags:
        - Standalone APIs
      summary: البحث عن الشركات في سجل KYB (مستقل)
      description: >-
        ابحث في سجلات الشركات الرسمية عن الشركات المرشحة بالاسم و/أو رقم
        التسجيل. هذه هي الخطوة 1 من مسار السجل المكون من خطوتين: يُرجع **البحث**
        مرشحين ببيانات خفيفة، ثم يسترجع `POST /v3/kyb/select/` الملف التعريفي
        الكامل لمرشح واحد.


        **فوترة البحث.** تبلغ تكلفة عمليات البحث الناجحة التي تستخدم مصدراً
        مدفوعاً لبيانات الشركات USD 0.50 لكل طلب، بغض النظر عن عدد المرشحين. لا
        يتم احتساب رسوم على النتائج الفارغة وحالات الفشل والنتائج المقدمة من
        مصادر أخرى فقط. يتم حجز السعر المطبق قبل البحث؛ ويؤدي عدم كفاية الرصيد
        إلى إرجاع 403 مع الرمز `insufficient_credits`. تنطبق أسعار العقود حيثما
        تم الاتفاق عليها، ويؤدي عدم ضبط سعر بحث العقد إلى إرجاع 403. عمليات
        البحث في البيئة التجريبية مجانية. قد يؤدي تكرار بحث ناجح إلى فرض رسوم
        إضافية؛ لا يضيف تسليم الاستدعاء رسوماً إضافية. تتم فوترة استرجاع الملف
        التعريفي بشكل منفصل. تنطبق رسوم البحث هذه أيضاً على v2. يعود المرشحون
        دائماً مع `fetch_status: "pending"`: إذ لا يتم جلب بيانات الشركة الكاملة
        (وفوترتها) إلا عند التحديد.


        **معرّف `kyb_response_id` مؤقت.** هو معرّف لكل عملية بحث وليس معرّف شركة
        ثابتاً. قم بالتحديد فوراً بعد البحث، وأعد البحث للحصول على معرّف جديد
        بدلاً من تخزينه.


        **يحدد `tier` سلسلة المزودين.** يحدد `tier` مستوى السجل الذي يُجرى البحث
        فيه: `basic` (الافتراضي، سلسلة Lite)، أو `shareholders` أو `ubo`. يستخدم
        البحث سلسلة المزودين التي تخدم ذلك المستوى، وليست دائماً السلسلة نفسها
        التي يقرأ منها بحث Lite، لذا فإن بحث Lite الفارغ ليس دليلاً على أن السجل
        لا يحتوي على الشركة — ابحث مجدداً عند المستوى الذي تحتاجه. يتم البحث في
        الدولة التي لا توفر المستوى المحدد عند أعلى مستوى توفره حتى ذلك المستوى.
        استرجع المرشح من endpoint الذي يقدم ذلك المستوى: `POST /v3/kyb/select/`
        (Lite)، أو `POST /v3/kyb/shareholders/` أو `POST /v3/kyb/ubo/`.


        **المصادقة.** يقبل `POST /v3/kyb/search/` (وكذلك `/v2/`) مفتاح API الخاص
        بتطبيقك في الرأس `x-api-key`. أما `POST /v1/kyb/search/` المستضاف فهو
        المسار المعتمد على مصادقة الجلسة الذي يستدعيه سير عمل التحقق المستضاف:
        فهو يستجيب بـ `403` لمفتاح API ولا يأخذ أي `tier` — حيث تختار إعدادات
        سجل KYB في سير العمل السلسلة المطلوبة.


        **وضعان.**

        - *متزامن (افتراضي):* يستطلع الـ API السجل بشكل دوري حتى تكتمل عملية
        البحث ويُرجع القائمة النهائية للمرشحين (`search_resolved: true`).

        - *غير متزامن:* قم بتمرير `webhook_url` وسيرد الـ API على الفور — عادةً
        مع `search_status: "pending"` وقائمة مرشحين فارغة — ثم يرسل استدعاء
        `kyb.registry_search.resolved` عبر POST إلى رابطك عند انتهاء السجل. جسم
        الاستدعاء هو `{"event_id", "event_type": "kyb.registry_search.resolved",
        "request_id", "vendor_data", "metadata", "search_status",
        "search_resolved", "kyb_registry", "timestamp", "created_at"}` — لاحظ أن
        `timestamp` و`created_at` في الاستدعاء هما أعداد صحيحة بنظام epoch،
        بخلاف `created_at` بصيغة ISO في هذا الـ endpoint — ويتم إرساله **غير
        موقّع** (الرأس `X-Didit-Unsigned-Callback: true`، ودون `X-Signature`).


        **رموز الدول.** رموز ISO 3166-1 alpha-2 (`GB`، `DE`)، بالإضافة إلى رموز
        التقسيم الفرعي `XX-YY` حيث تكون السجلات إقليمية — على سبيل المثال
        `US-CA` لكاليفورنيا.


        **البيئة التجريبية.** تُرجع المفاتيح من تطبيقات البيئة التجريبية مرشحاً
        ثابتاً واحداً دون الاتصال بأي سجل.
      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 للدولة المطلوب البحث في سجل الشركات
                    الخاص بها. على سبيل المثال، `GB`. عندما تعمل سجلات الشركات
                    على مستوى الولاية أو المقاطعة، ألحق رمز التقسيم الفرعي ISO
                    3166-2 بصيغة `XX-YY`: يبحث `US-CA` في سجل كاليفورنيا. تتطلب
                    عمليات البحث في الولايات المتحدة دائماً التقسيم الفرعي —
                    ويتم رفض إدخال `US` بمفرده. غير حساس لحالة الأحرف؛ ويتم
                    توحيده إلى أحرف كبيرة.
                  example: GB
                name:
                  type: string
                  maxLength: 255
                  description: >-
                    اسم الشركة المراد البحث عنها. يلزم توفير `name` أو
                    `registration_number`.
                  example: Tesco
                registration_number:
                  type: string
                  maxLength: 100
                  description: >-
                    رقم تسجيل السجل المطلوب البحث عنه. يلزم إدخال إما `name` أو
                    `registration_number`.
                tier:
                  type: string
                  enum:
                    - basic
                    - shareholders
                    - ubo
                  default: basic
                  description: >-
                    مستوى السجل الذي تعمل سلسلة المزود الخاصة به في هذا البحث.
                    يبحث `basic` (الافتراضي) في سلسلة Lite الخاصة بالدولة؛ بينما
                    يبحث `shareholders` و`ubo` في سلسلة الملكية الخاصة بذلك
                    المستوى، والتي قد تكون مصدراً مختلفاً، لذا فإن بحث Lite
                    الفارغ لا يثبت أن السجل يفتقر إلى الشركة. أما الدولة التي لا
                    توفر المستوى المذكور، فيتم البحث فيها بأعلى مستوى تقدمه حتى
                    ذلك المستوى. استرد المرشح من الـ endpoint التي تبيع المستوى
                    الذي بحثت عنه: `POST /v3/kyb/select/` (Lite)، أو `POST
                    /v3/kyb/shareholders/`، أو `POST /v3/kyb/ubo/`.
                  example: basic
                search_type:
                  type: string
                  enum:
                    - contains
                  default: contains
                  description: >-
                    استراتيجية مطابقة الأسماء المطبقة بواسطة بحث السجل.
                    `contains` هي القيمة الوحيدة المقبولة: لا يوجد أي مصدر سجل
                    خلف البحث يوفّر وضع البادئة أو المطابقة التقريبية، لذا يُرفض
                    استخدام `start_with` و`fuzzy` مع إرجاع `400` (`not a valid
                    choice`).
                vendor_data:
                  type: string
                  description: >-
                    المعرّف الخاص بك لعملية البحث هذه؛ تتم إعادته وتضمينه في
                    استدعاء webhook.
                metadata:
                  type: object
                  nullable: true
                  description: >-
                    كائن JSON بصيغة حرة؛ تتم إعادته في الاستجابة وتضمينه في
                    استدعاء webhook.
                webhook_url:
                  type: string
                  format: uri
                  maxLength: 500
                  description: >-
                    يحوّل البحث إلى الوضع غير المتزامن: تستجيب API على الفور
                    وتُرسل طلب POST لـ callback غير موقّع من نوع
                    `kyb.registry_search.resolved` إلى عنوان URL هذا عندما تصبح
                    قائمة المرشحين جاهزة.
            example:
              country_code: GB
              name: Tesco
              search_type: contains
              vendor_data: company-1234
      responses:
        '200':
          description: >-
            تم قبول البحث. يُرجع الوضع المتزامن قائمة المرشحين النهائية؛ بينما
            يُرجع وضع webhook الاستجابة فوراً (غالباً `search_status:
            "pending"`) ويسلّم القائمة النهائية عبر استدعاء
            `kyb.registry_search.resolved`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  request_id:
                    type: string
                    format: uuid
                    description: >-
                      مع `webhook_url`: معرّف طلب البحث الدائم، ويُعاد كـ
                      `request_id` في رد الاستدعاء
                      `kyb.registry_search.resolved`. بدون `webhook_url`: معرّف
                      UUID ارتباطي مؤقت (لا يتم تخزين البحث).
                  kyb_registry:
                    $ref: '#/components/schemas/KYBRegistrySearchResults'
                  vendor_data:
                    type: string
                    nullable: true
                    description: تكرار لقيمة `vendor_data` التي أرسلتها.
                  metadata:
                    type: object
                    nullable: true
                    description: نسخة مطابقة من `metadata` التي أرسلتها.
                  created_at:
                    type: string
                    format: date-time
              examples:
                Resolved search:
                  summary: الوضع المتزامن — قائمة المرشحين النهائية
                  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` — تصل النتائج المرشحة عبر استدعاء
                    kyb.registry_search.resolved
                  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: >-
            خطأ في التحقق. تستخدم المشكلات على مستوى الحقول غلاف DRF القياسي؛
            وتُبلغ قاعدة الاسم/رقم التسجيل تحت `non_field_errors`. الدولة التي
            لا تغطيها سجلات الشركات تُرجع الرد `400` مع `code:
            kyb_registry_country_unsupported`.
          content:
            application/json:
              examples:
                Missing search criteria:
                  summary: لم يتم تقديم `name` ولا `registration_number`
                  value:
                    non_field_errors:
                      - Either 'name' or 'registration_number' is required.
                Invalid country_code:
                  summary: يجب أن يكون `XX` (alpha-2) أو تقسيماً فرعياً `XX-YY`
                  value:
                    country_code:
                      - country_code must be a 2-letter ISO code.
                Invalid search_type:
                  summary: يُقبل `contains` فقط
                  value:
                    search_type:
                      - '"start_with" is not a valid choice.'
                Invalid webhook_url:
                  summary: يجب أن يكون `webhook_url` عنوان URL صالحاً
                  value:
                    webhook_url:
                      - Enter a valid URL.
                Country not covered:
                  summary: لا يغطي سجل الشركات هذه الدولة
                  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: >-
            تم رفض الإذن. يُرجع عند فقدان الرأس `x-api-key`؛ ويُرجع المفتاح
            الخاطئ أو الملغى أو منتهي الصلاحية `401`. يؤدي المفتاح المفقود إلى
            إرجاع `403` مع `{"detail": ...}`؛ ويؤدي المفتاح الخاطئ أو الملغى أو
            منتهي الصلاحية إلى إرجاع `401`. يُرجع أيضاً قبل البحث عندما يتعذر
            تغطية رسوم البحث المطبقة (`code: "insufficient_credits"`)، أو عند
            فقدان سعر البحث التعاقدي.
          content:
            application/json:
              examples:
                Missing or invalid API key:
                  summary: لا يوجد رأس `x-api-key`، أو أن المفتاح غير صالح/ملغى
                  value:
                    detail: You do not have permission to perform this action.
        '429':
          description: >-
            تم تجاوز حد المعدل، أو تم استنفاد الحصة المخصصة للبحث. تشترك نقاط
            endpoint الخاصة بـ POST/PATCH/DELETE في ميزانية قدرها 300 طلب كتابة
            في الدقيقة لكل مفتاح API (إنشاء المعاملات واستيعاب الأحداث لهما
            ميزانية منفصلة تبلغ 600)، مع رؤوس `X-RateLimit-*` و`Retry-After`.
            وبشكل منفصل، تقتصر عمليات البحث المدفوعة في السجلات على 600 عملية
            لكل تطبيق في الساعة: بعد ذلك تكون الاستجابة `429` مع `code:
            kyb_registry_search_limit_reached`، بينما تستمر عمليات البحث التي
            تعتمد على المصادر المجانية فقط في العمل. انتظر وابحث مرة أخرى
            لاحقاً.
          content:
            application/json:
              examples:
                Write rate limit exceeded:
                  summary: أكثر من 300 طلب كتابة في الدقيقة الحالية
                  value:
                    detail: >-
                      Write request rate limit exceeded. You can make up to 300
                      requests per minute.
                Search allowance spent:
                  summary: أكثر من 600 عملية بحث مدفوعة خلال الساعة الماضية
                  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: >-
            مزود سجل KYB غير متاح مؤقتاً - استجابة 5xx أو انتهاء المهلة أو فشل
            الاتصال من السجل المصدر. لا تتم فوترة البحث. أعد المحاولة لاحقاً،
            أو، في سير عمل التحقق المستضاف من Didit، يُعرض تلقائياً على المستخدم
            إدخال بيانات الشركة يدوياً بدلاً من مجرد خطأ إعادة المحاولة.
          content:
            application/json:
              examples:
                Registry provider outage:
                  summary: لم يستجب مزود سجل الشركات لعملية البحث
                  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: >-
                  معرّف لهذا المرشح — مرره إلى `POST /v3/kyb/select/` لاسترداد
                  الملف التعريفي الكامل. مؤقت ومقتصر على هذا البحث: لا تقم
                  بتخزينه على المدى الطويل؛ أعد البحث للحصول على معرّف جديد.
                example: 69aeeb95febb0f1704042259
              name:
                type: string
                nullable: true
                description: اسم الشركة المسجل.
                example: Tesco PLC
              registration_number:
                type: string
                nullable: true
                description: رقم تسجيل السجل.
                example: '00445790'
              status:
                type: string
                nullable: true
                description: >-
                  حالة السجل المعيارية للشركة (مثل `active` أو `dissolved` أو
                  `inactive` أو `struck off`).
                example: active
              type:
                type: string
                nullable: true
                description: الشكل القانوني كما هو مسجل في السجل التجاري.
                example: Public Limited Company
              registered_address:
                type: string
                nullable: true
                description: >-
                  العنوان المسجل للمرشح، عندما يرجعه السجل. استخدمه، مع رقم
                  التسجيل، للتمييز بين الشركات التي تحمل نفس الاسم: في الولايات
                  المتحدة يمكن إدراج المرشح تحت الولاية التي تعمل فيها الشركة
                  بدلاً من الولاية التي بحثت عنها.
                example: >-
                  Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, AL7
                  1GA
              risk_level:
                type: string
                nullable: true
                description: >-
                  مستوى المخاطر كما ورد في السجل، عند توفره. عادةً ما يكون
                  `null` وقت البحث.
              fetch_status:
                type: string
                nullable: true
                description: >-
                  دائماً `pending` للمرشحين في البحث — لا يتم جلب ملف الشركة
                  الكامل (وفرض الرسوم عليه) إلا عند اختيارك للمرشح.
                example: pending
          description: >-
            قائمة المرشحين بعد إزالة التكرار. فارغة طالما كانت
            `search_resolved=false` (وضع webhook) أو عندما لا يتطابق أي شيء.
        pagination:
          type: object
          properties:
            total:
              type: integer
              description: عدد المرشحين المُرجَعين.
            page:
              type: integer
            per_page:
              type: integer
              example: 25
        search_status:
          type: string
          nullable: true
          enum:
            - pending
            - resolved
          description: حالة دورة حياة البحث في السجل.
        search_resolved:
          type: boolean
          description: تكون القيمة `true` بمجرد أن تصبح قائمة المرشحين نهائية.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        مفتاح API الخاص بتطبيقك، من Developers -> API keys في Business Console.
        يمتلك المفتاح الأساسي وصولاً كاملاً. يمكن تحديد نطاق المفتاح المسمى: لا
        شيء، أو قراءة، أو كتابة لكل مورد، ومحدوداً ببعض مسارات العمل أو بالجلسات
        المقبولة، وبقائمة من عناوين IP، وبتاريخ انتهاء الصلاحية. يشير 401 إلى أن
        المفتاح غير صحيح أو ملغى أو منتهي الصلاحية؛ ويشير 403 إلى أنه لم يتم
        إرسال أي مفتاح، أو أن المفتاح ليس لديه حق الوصول إلى هذا المورد أو
        الإجراء، أو أن الطلب جاء من عنوان خارج قائمة عناوين IP الخاصة به؛ ويشير
        404 في مسار جلسة إلى أن الجلسة خارج مسارات العمل أو الحالات الخاصة
        بالمفتاح. يتلقى المفتاح الذي لا يمتلك حق الوصول إلى الوسائط عناوين URL
        للصور ومقاطع الفيديو وملفات PDF كـ null، ويتلقى المفتاح الذي لا يمتلك
        إذن كتابة للجلسات روابط الجلسة وtoken كـ null. راجع
        https://docs.didit.me/console/api-keys.

````

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