> ## 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 Perbarui Status Bisnis: Blokir atau Tandai

> Blokir, tandai, atau aktifkan Bisnis Didit (KYB). Status berlaku untuk sesi KYB mendatang dan skrining transaksi. Berbayar per panggilan.



Prompt Pembaruan Status Bisnis
        Salin prompt ke papan klip



      
      

\<pre>

\`Goal: Flip ONLY the lifecycle status of a Didit Business (KYB) entity. Use the full PATCH /v3/businesses/{vendor_data}/ when you also need to touch other fields.

Endpoint: PATCH https://verification.didit.me/v3/businesses/{vendor_data}/update-status/
Auth header: x-api-key: <DIDIT_API_KEY>
Content-Type: application/json

Path param:
\- vendor_data (string, REQUIRED) — free-form string, NOT a UUID. URL-encode.

Request body:
\- status (enum, REQUIRED) — "ACTIVE" | "FLAGGED" | "BLOCKED" (VendorBusinessStatusChoices, NOT the session enum).
\- reason (string, optional, max 1000): why the status changed. Recorded on the status-change entry in the company's Activity in the Business Console, only when the status actually changes. Webhooks do not carry it.

Status semantics:
\- ACTIVE  → normal. New KYB sessions allowed for this vendor_data.
\- FLAGGED → still accepted, highlighted in Console for manual review; filterable with ?status=FLAGGED.
\- BLOCKED → terminal. Adds vendor_data to the system blocklist. Subsequent KYB session creations for the same identifier are rejected. Flipping back to ACTIVE/FLAGGED removes the blocklist entry automatically.

curl:
curl -X PATCH 'https://verification.didit.me/v3/businesses/company-123/update-status/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"status": "BLOCKED", "reason": "Registry shows the company dissolved"}'

Response 200: full updated BusinessDetailItem (same shape as GET /v3/businesses/{vendor_data}/). See /reference/data-models.

Side effects:
\- Toggles the system blocklist entry when entering/leaving BLOCKED.
\- Writes one status-change entry to the company's activity (actor = API key identity), with reason as its comment.
\- Idempotent — re-sending the same status is a no-op (no extra audit row, no extra blocklist toggle).

Failure modes:
\- 400 — validation:
\{ "status": "This field is required." }
\{ "status": "Invalid status. Valid options are: ACTIVE, FLAGGED, BLOCKED" }
\{ "reason": ["Ensure this field has no more than 1000 characters."] }
\- 401 — missing/invalid x-api-key.
\- 403: a scoped API key without businesses write. { "detail": "This API key has no write access to companies." }
\- 404 — vendor_data not found (or deleted). { "detail": "Not found." }
\- 429 — rate-limited.

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

\</pre>



      
      

Tempel ke

## IkhtisarMemindahkan [entitas bisnis](https://docs.didit.me/id/entities/businesses/overview.md) di antara `ACTIVE`, `FLAGGED`, dan `BLOCKED`. Lihat [siklus hidup entitas](https://docs.didit.me/id/entities/lifecycle.md) untuk mesin status lengkap.## Kapan digunakan- **Blokir** bisnis yang terkena sanksi atau terkonfirmasi melakukan penipuan.
- **Tandai** bisnis yang menunggu peninjauan manual.
- **Buka blokir** setelah perbaikan.
- **Teruskan sinyal eksternal** dari sistem kepatuhan Anda sendiri.## Catatan- Nilai yang valid: `ACTIVE`, `FLAGGED`, `BLOCKED`.
- Sertakan `reason` opsional (hingga 1000 karakter) untuk mencatat alasan perubahan status.
  Didit menyimpannya pada entri perubahan status di **Aktivitas** perusahaan di Business Console.
  Alasan hanya dicatat ketika status benar-benar berubah.
- Bisnis `BLOCKED` akan otomatis menolak semua sesi Verifikasi Bisnis (KYB) baru dan semua transaksi baru, termasuk ketika bisnis tersebut muncul sebagai pihak lawan.
- Mengirim event webhook `business.status.updated` dengan `previous_status` dan `status`.
  Webhook tidak memuat `reason`.## Penegakan| Status | Sesi Verifikasi Bisnis (KYB) baru | Transaksi yang melibatkan bisnis ini |
| - | - | - |
| `ACTIVE` | Alur normal | Alur normal |
| `FLAGGED` | Diarahkan ke `IN_REVIEW` | Dapat dieskalasi secara otomatis melalui aturan |
| `BLOCKED` | Ditolak otomatis | Ditolak otomatis |## IzinRahasia utama dan [kunci API](https://docs.didit.me/id/console/api-keys.md) dengan akses penuh selalu dapat memanggil endpoint ini.
Kunci dengan akses kustom memerlukan izin tulis pada **Perusahaan** (`businesses`).
Kunci yang dibatasi ke beberapa alur kerja atau ke sesi yang disetujui tidak dapat mengakses endpoint ini.[Peran dan izin](https://docs.didit.me/id/console/roles-permissions.md) di Console menentukan apa yang dapat dilakukan anggota tim di Console.
Keduanya tidak dievaluasi untuk permintaan kunci API.## Terkait- [Siklus hidup entitas](https://docs.didit.me/id/entities/lifecycle.md)
- [Daftar blokir bisnis](https://docs.didit.me/id/entities/businesses/blocklist.md)
- [Webhook entitas](https://docs.didit.me/id/entities/webhooks.md)


## OpenAPI

````yaml id/openapi-25.json PATCH /v3/businesses/{vendor_data}/update-status/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API Verifikasi Identitas. Lakukan autentikasi dengan header x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/businesses/{vendor_data}/update-status/:
    patch:
      tags:
        - Businesses
      summary: Perbarui status bisnis
      description: >-
        Ubah hanya `status` siklus hidup bisnis: `ACTIVE`, `FLAGGED`, atau
        `BLOCKED` (bukan status sesi). `BLOCKED` menambahkan `vendor_data` ke
        daftar blokir sistem; berpindah dari `BLOCKED` akan menghapus entri
        tersebut. Setiap perubahan dicatat dalam aktivitas perusahaan, beserta
        `reason` opsional. Mengirim status saat ini tidak mengubah apa pun dan
        tidak mencatat `reason`. Webhook `business.status.updated` tidak memuat
        `reason`.
      operationId: update_business_status
      parameters:
        - name: vendor_data
          in: path
          required: true
          schema:
            type: string
          description: >-
            Pengidentifikasi unik Anda untuk bisnis (string bentuk bebas, BUKAN
            UUID).
          example: company-123
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/EntityStatusUpdateRequest'
                - type: object
                  properties:
                    reason:
                      type: string
                      nullable: true
                      maxLength: 1000
                      description: >-
                        Alasan mengapa status berubah. Dicatat pada entri
                        perubahan status di **Activity** perusahaan di Business
                        Console, hanya jika status benar-benar berubah. Webhook
                        tidak menyertakannya.
            examples:
              Flag:
                summary: Tandai bisnis untuk ditinjau
                value:
                  status: FLAGGED
              Block:
                summary: Blokir bisnis (menambahkan ke daftar blokir sistem)
                value:
                  status: BLOCKED
              Reactivate:
                summary: Aktifkan kembali bisnis
                value:
                  status: ACTIVE
              Block with reason:
                summary: Blokir bisnis dan catat alasannya
                value:
                  status: BLOCKED
                  reason: Registry shows the company dissolved
      responses:
        '200':
          description: Status bisnis diperbarui. Data bisnis lengkap dikembalikan.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BusinessDetailItem'
              examples:
                Blocked:
                  value:
                    didit_internal_id: a1b2c3d4-e5f6-4890-abcd-ef1234567890
                    vendor_data: company-123
                    display_name: null
                    legal_name: Acme Trading Ltd
                    registration_number: '12345678'
                    country_code: GB
                    effective_name: Acme Trading Ltd
                    status: BLOCKED
                    session_count: 2
                    approved_count: 1
                    declined_count: 0
                    in_review_count: 1
                    features:
                      KYB: Approved
                    features_list:
                      - feature: KYB
                        status: Approved
                    last_session_at: '2026-03-15T10:30:00Z'
                    last_activity_at: '2026-03-15T10:30:00Z'
                    first_session_at: '2026-01-10T08:00:00Z'
                    tags:
                      - uuid: 9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d
                        name: VIP
                        color: '#2567FF'
                    created_at: '2026-01-10T08:00:00Z'
                    metadata:
                      industry: fintech
                    updated_at: '2026-03-15T10:30:00Z'
        '400':
          description: >-
            `status` tidak ada atau tidak valid, atau `reason` lebih dari 1000
            karakter.
          content:
            application/json:
              examples:
                Missing status:
                  value:
                    status:
                      - This field is required.
                Bad status:
                  value:
                    status:
                      - >-
                        Invalid status. Valid options are: ACTIVE, FLAGGED,
                        BLOCKED
                Reason too long:
                  value:
                    reason:
                      - Ensure this field has no more than 1000 characters.
        '403':
          description: >-
            Kunci API tidak ada, tidak valid, atau dicabut, atau kunci tersebut
            tidak dapat memperbarui bisnis untuk aplikasi ini. Kunci yang tidak
            ada mengembalikan `403`; kunci yang salah, dicabut, atau kedaluwarsa
            mengembalikan `401`.
          content:
            application/json:
              examples:
                Forbidden:
                  value:
                    detail: You do not have permission to perform this action.
        '404':
          description: >-
            Tidak ada bisnis (yang belum dihapus) dengan `vendor_data` yang
            diberikan untuk aplikasi ini.
          content:
            application/json:
              examples:
                Not found:
                  value:
                    detail: Not found.
        '429':
          description: >-
            Batas laju terlampaui; kurangi laju permintaan dan coba lagi setelah
            interval yang ditunjukkan dalam `Retry-After`.
          content:
            application/json:
              examples:
                Rate limited:
                  value:
                    detail: Request was throttled. Expected available in 30 seconds.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X PATCH
            'https://verification.didit.me/v3/businesses/company-123/update-status/'
            \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{"status": "BLOCKED"}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.businesses.update_status(
                "company-123",
                status="FLAGGED",
            )
            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.businesses.updateStatus("company-123", {
              status: "FLAGGED",
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Businesses.UpdateStatus(ctx, \"company-123\", didit.BusinessesUpdateStatusParams{\n\tStatus: \"FLAGGED\",\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.BusinessesUpdateStatusParams;

            import me.didit.types.EntityStatusUpdateRequest;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result = client.businesses().updateStatus("company-123",
            BusinessesUpdateStatusParams.builder()
                    .status(EntityStatusUpdateRequest.Status.of("FLAGGED"))
                    .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->businesses->updateStatus('company-123', [
                'status' => 'FLAGGED',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.businesses.update_status(
              "company-123",
              status: "FLAGGED"
            )
            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.Businesses.UpdateStatusAsync("company-123", new
            BusinessesUpdateStatusParams

            {
                Status = "FLAGGED",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    EntityStatusUpdateRequest:
      type: object
      required:
        - status
      properties:
        status:
          type: string
          enum:
            - ACTIVE
            - FLAGGED
            - BLOCKED
          description: >-
            Status siklus hidup baru. `BLOCKED` juga menambahkan `vendor_data`
            ke daftar blokir sistem.
    BusinessDetailItem:
      type: object
      description: >-
        Detail bisnis lengkap. Memperluas BusinessListItem dengan metadata dan
        updated_at.
      allOf:
        - $ref: '#/components/schemas/BusinessListItem'
        - type: object
          properties:
            metadata:
              type: object
              description: >-
                JSON metadata kustom yang Anda lampirkan ke bisnis ini. Default
                adalah `{}`.
            updated_at:
              type: string
              format: date-time
    BusinessListItem:
      type: object
      description: Bisnis yang terverifikasi.
      properties:
        didit_internal_id:
          type: string
          format: uuid
          description: UUID internal yang stabil dari Didit untuk bisnis ini.
        vendor_data:
          type: string
          nullable: true
          description: >-
            Pengidentifikasi unik Anda untuk bisnis ini (diteruskan saat membuat
            sesi). Nilai ini dapat berupa null jika tidak ada pengidentifikasi
            vendor yang diberikan.
        display_name:
          type: string
          nullable: true
          description: Nama tampilan kustom yang Anda tetapkan
        legal_name:
          type: string
          nullable: true
          description: Nama resmi menurut hukum dari registri atau entri manual
        registration_number:
          type: string
          nullable: true
          description: Nomor registrasi atau nomor pendirian perusahaan
        country_code:
          type: string
          nullable: true
          description: Negara pendirian (ISO 3166-1 alpha-2, misalnya `GB`, `US`).
        effective_name:
          type: string
          nullable: true
          description: >-
            Nama terbaik yang tersedia: display_name jika disetel, selain itu
            legal_name
        status:
          type: string
          enum:
            - ACTIVE
            - FLAGGED
            - BLOCKED
          description: >-
            Status siklus hidup rekaman bisnis (BUKAN status sesi). `ACTIVE`
            adalah default, `FLAGGED` menandainya untuk perhatian manual,
            `BLOCKED` mencegah sesi baru untuk `vendor_data` ini.
        session_count:
          type: integer
          description: Jumlah total sesi verifikasi untuk bisnis ini
        approved_count:
          type: integer
          description: Jumlah sesi yang disetujui
        declined_count:
          type: integer
          description: Jumlah sesi yang ditolak
        in_review_count:
          type: integer
          description: Jumlah sesi dalam peninjauan
        features:
          type: object
          description: >-
            Status per-fitur agregat di semua sesi KYB bisnis ini. Saat ini
            satu-satunya kunci adalah `KYB` (status pemeriksaan perusahaan di
            registri). Nilai yang memungkinkan: `Approved`, `Declined`, `In
            Review`, `Not Finished`, `Resub Requested`.
        features_list:
          type: array
          items:
            type: object
            properties:
              feature:
                type: string
              status:
                type: string
          description: >-
            Data yang sama dengan `features`, sebagai array berurutan dari objek
            `{feature, status}`.
        last_session_at:
          type: string
          format: date-time
          nullable: true
          description: Cap waktu sesi terbaru
        first_session_at:
          type: string
          format: date-time
          nullable: true
          description: Cap waktu sesi pertama
        last_activity_at:
          type: string
          format: date-time
          nullable: true
          description: Cap waktu aktivitas terbaru (perubahan status, pembaruan sesi, dll.)
        tags:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              name:
                type: string
              color:
                type: string
          description: Tag yang ditetapkan untuk bisnis ini
        created_at:
          type: string
          format: date-time
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Kunci API aplikasi Anda, dari Developers -> API keys di Business
        Console. Kunci utama memiliki akses penuh. Kunci bernama dapat diberi
        cakupan: none, read, atau write per sumber daya, dibatasi pada beberapa
        alur kerja atau pada sesi yang disetujui, pada daftar alamat IP, dan
        pada tanggal kedaluwarsa. 401 berarti kuncinya salah, dicabut, atau
        kedaluwarsa; 403 berarti tidak ada kunci yang dikirimkan, kunci tidak
        memiliki akses ke sumber daya atau tindakan ini, atau permintaan datang
        dari alamat di luar daftar IP-nya; 404 pada rute sesi berarti sesi
        berada di luar alur kerja atau status kunci tersebut. Kunci tanpa akses
        media menerima URL gambar, video, dan PDF sebagai null, dan kunci tanpa
        izin tulis sesi menerima tautan sesi dan token sebagai null. Lihat
        https://docs.didit.me/console/api-keys.

````

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