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

# SDK Server: Python, Node.js, Go, Java, PHP, Ruby, .NET

> Panggil API server Didit dari backend dengan SDK resmi bertipe. Berisi matriks instalasi, konfigurasi, error, retry, versi, dan kebijakan dukungan.

SDK server adalah library resmi Didit untuk backend Anda. Setiap SDK memanggil endpoint server pada [referensi API](https://docs.didit.me/id/api-reference/overview.md) dengan permintaan dan respons yang bertipe, memverifikasi webhook yang dikirim Didit kepada Anda, dan memeriksa token dari [Didit Authentication](https://docs.didit.me/id/authentication/overview.md). Belum ada rilis 1.0.1 yang memiliki dua endpoint Google Wallet: [memulai verifikasi Google Wallet](https://docs.didit.me/id/api-reference/digital-id-wallets/google-wallet.md) dan [mengirim respons dompet](https://docs.didit.me/id/standalone-apis/digital-id-wallet-response.md). SDK Python, Node.js, Java, PHP, Ruby, dan .NET memiliki setiap endpoint server lainnya. Go 1.0.1 juga belum memiliki sembilan endpoint lagi, sebagian besar di antaranya endpoint Travel Rule: lihat [Endpoint yang belum ada di SDK Go](https://docs.didit.me/id/integration/server-sdks/go.md#endpoint-yang-belum-ada-di-go-sdk).

Gunakan SDK tersebut di mana pun kode Anda menyimpan kunci API Didit: membuat sesi verifikasi, membaca keputusan, memanggil API mandiri, mengelola pengguna, bisnis, alur kerja, dan kasus, menyaring transaksi dan dompet, serta Travel Rule. Di browser atau aplikasi seluler, gunakan SDK [web](https://docs.didit.me/id/integration/web-sdks/overview.md) dan [native](https://docs.didit.me/id/integration/native-sdks/overview.md) sebagai gantinya: SDK tersebut menampilkan alur verifikasi kepada pengguna Anda dan tidak pernah menyimpan kunci API Anda.

Halaman endpoint server pada [referensi API](https://docs.didit.me/id/api-reference/overview.md), termasuk halaman layanan [Validasi Database](https://docs.didit.me/id/standalone-apis/database-validation.md), menampilkan contoh kode untuk setiap SDK server di samping permintaan cURL. Contoh ditampilkan setelah rilis terbaru SDK memiliki endpoint dan setiap kolom yang dikirim contoh tersebut. Endpoint atau kolom yang ditambahkan ke API akan mendapat contohnya pada rilis berikutnya dari setiap SDK. Belum ada rilis 1.0.1 yang memiliki 16 kolom permintaan Validasi Database yang ditambahkan setelah rilis tersebut dibuat, seperti `vin` atau `bank_account_number`, sehingga halaman layanan yang mengirimkannya hanya menampilkan cURL.

## Instalasi

```bash Python theme={null}
pip install didit-sdk
```

```bash Node.js theme={null}
npm install @didit-protocol/sdk-node
```

```bash Go theme={null}
go get github.com/didit-protocol/sdk-go
```

```kotlin Java theme={null}
implementation("me.didit:didit-java:1.0.1")
```

```bash PHP theme={null}
composer require didit-protocol/sdk-php guzzlehttp/guzzle
```

```bash Ruby theme={null}
gem install didit-sdk
```

```bash .NET theme={null}
dotnet add package Didit
```

| Bahasa | Paket | Sumber | Runtime minimum |
| - | - | - | - |
| [Python](https://docs.didit.me/id/integration/server-sdks/python.md) | [PyPI `didit-sdk`](https://pypi.org/project/didit-sdk/) | [sdk-python](https://github.com/didit-protocol/sdk-python) | Python 3.10 |
| [Node.js dan TypeScript](https://docs.didit.me/id/integration/server-sdks/node.md) | [npm `@didit-protocol/sdk-node`](https://www.npmjs.com/package/@didit-protocol/sdk-node) | [sdk-node](https://github.com/didit-protocol/sdk-node) | Node.js 18, Bun, Deno, runtime edge dengan `fetch` |
| [Go](https://docs.didit.me/id/integration/server-sdks/go.md) | [Go module `github.com/didit-protocol/sdk-go`](https://pkg.go.dev/github.com/didit-protocol/sdk-go) | [sdk-go](https://github.com/didit-protocol/sdk-go) | Go 1.22 |
| [Java dan Kotlin](https://docs.didit.me/id/integration/server-sdks/java.md) | [Maven Central `me.didit:didit-java`](https://central.sonatype.com/artifact/me.didit/didit-java) | [sdk-java](https://github.com/didit-protocol/sdk-java) | Java 11 |
| [PHP](https://docs.didit.me/id/integration/server-sdks/php.md) | [Packagist `didit-protocol/sdk-php`](https://packagist.org/packages/didit-protocol/sdk-php) | [sdk-php](https://github.com/didit-protocol/sdk-php) | PHP 8.1 |
| [Ruby](https://docs.didit.me/id/integration/server-sdks/ruby.md) | [RubyGems `didit-sdk`](https://rubygems.org/gems/didit-sdk) | [sdk-ruby](https://github.com/didit-protocol/sdk-ruby) | Ruby 3.1 |
| [C# dan .NET](https://docs.didit.me/id/integration/server-sdks/dotnet.md) | [NuGet `Didit`](https://www.nuget.org/packages/Didit) | [sdk-dotnet](https://github.com/didit-protocol/sdk-dotnet) | .NET 8 atau .NET Standard 2.0 |

## Konfigurasi

Setiap SDK membaca variabel lingkungan yang sama, sehingga klien yang dibuat tanpa opsi langsung siap digunakan. Runtime edge tidak memiliki lingkungan proses, jadi di sana Anda meneruskan kunci API ke klien Node.js sebagai opsi.

| Variabel | Digunakan untuk |
| - | - |
| `DIDIT_API_KEY` | Setiap panggilan dengan kunci API. Buat kunci di konsol pada [Kunci API](https://docs.didit.me/id/console/api-keys.md). |
| `DIDIT_ORGANIZATION_ID`, `DIDIT_APPLICATION_ID` | Operasi di bawah `/v3/organization/{organization_id}/application/{application_id}/` (kasus, jaringan, laporan regulasi, templat laporan, dan beberapa alat pengguna serta bisnis). SDK mengisi kedua id path dari klien, sehingga Anda tidak pernah meneruskannya per panggilan. Tanpa keduanya, panggilan tersebut gagal sebelum permintaan apa pun dikirim. |
| `DIDIT_LOG=debug` | Mencatat metode, path, status, durasi, dan id permintaan dari setiap permintaan. Body dan header tidak pernah dicatat. |

Apa pun yang dapat Anda atur melalui lingkungan juga dapat Anda teruskan ke klien, bersama base URL, timeout, coba lagi, header default, dan HTTP client Anda sendiri. Buat satu klien per proses dan gunakan bersama: klien menyimpan kumpulan koneksi dan aman digunakan oleh beberapa thread atau task secara bersamaan.

Metode `account` ([registrasi terprogram](https://docs.didit.me/id/integration/programmatic-registration.md): mendaftar, masuk, organisasi dan aplikasi) memanggil `https://apx.didit.me/auth/v2` dan tidak pernah mengirim kunci API Anda. Masuk dengan `account.login`, lalu teruskan token akses yang dikembalikan ke klien sebagai token akun.

## Yang dilakukan setiap SDK

* **Resource dan metode.** Panggilan mengikuti resource API: `client.<resource>.<method>(...)`, misalnya `sessions.create`, `sessions.retrieve_decision`, atau `transactions.create`, dengan penulisan huruf sesuai bahasa masing-masing. Id path berupa argumen posisional; body dan query adalah satu kumpulan kolom bernama. Python, Node.js, PHP, dan Ruby memakai nama kolom API (`workflow_id`); Go, Java, dan .NET memakai gaya penulisan bahasanya (`WorkflowID`, `workflowId`, `WorkflowId`).
* **Daftar.** Metode daftar menelusuri semua hasil untuk Anda (`limit` dan `offset` di baliknya), dan juga menyediakan setiap halaman dengan `count`, `next`, `previous`, dan `results`. Di Ruby, `auto_paging_each` menelusuri setiap halaman, dan `total_count`, `next_url`, serta `previous_url` pada sebuah halaman adalah `count`, `next`, dan `previous` dari API.
* **File.** Unggahan (gambar dokumen, swafoto, bukti alamat, impor) menerima path, bytes, atau stream. Unduhan (PDF sesi, laporan) mengembalikan bytes atau stream, tidak pernah JSON yang sudah diurai.
* **Kompatibilitas ke depan.** Kolom respons atau nilai enum yang belum dikenal oleh versi SDK tetap disimpan dan dapat dibaca, tidak pernah menjadi error, sehingga penambahan pada API tidak merusak integrasi yang sudah berjalan.
* **Webhook.** `webhooks.verify` memeriksa header `X-Signature-V2` dan `X-Signature` serta timestamp sebuah pengiriman dengan rahasia webhook Anda, lalu mengembalikan event bertipe. Metode ini menerima daftar rahasia selama Anda melakukan rotasi salah satunya. Lihat [Webhook](https://docs.didit.me/id/integration/webhooks.md) untuk skema tanda tangannya.
* **Autentikasi.** Utilitas `Authentication` memverifikasi access token dan ID token yang ditandatangani penerbit Authentication Anda, serta memanggil endpoint token, sesi, dan step-up-nya. Utilitas ini tidak pernah menggunakan kunci API Anda.

## Error, percobaan ulang, dan timeout

| Error | Kapan terjadi |
| - | - |
| `APIConnectionError`, `APITimeoutError` | Tidak ada respons yang diterima |
| `APIStatusError` | Setiap respons non-2xx lainnya, dengan status, body yang sudah diurai, header, dan ID permintaan |
| `BadRequestError` 400, `AuthenticationError` 401, `PermissionDeniedError` 403, `NotFoundError` 404, `ConflictError` 409, `UnprocessableEntityError` 422, `RateLimitError` 429, `InternalServerError` 5xx | Subkelas dari `APIStatusError` |
| `WebhookVerificationError` | Pengiriman webhook gagal diverifikasi; `reason`-nya menjelaskan alasannya |
| `ConfigurationError` | Kunci API, token akun, ID organisasi, atau ID aplikasi tidak ada |

Setiap error diturunkan dari `DiditError`. Di Go, setiap error mengimplementasikan interface `didit.Error` dan berupa tipe pointer, misalnya `*didit.NotFoundError`. Java, PHP, dan .NET menggunakan akhiran `Exception` yang lazim, dan menulis `API` sebagai `Api`: `DiditException`, `ApiStatusException`, `NotFoundException`.

SDK melakukan coba lagi untuk permintaan yang gagal hingga 2 kali, dengan penundaan eksponensial mulai dari 0,5 detik (jitter penuh, paling lama 8 detik) dan menghormati `Retry-After`. `GET`, `HEAD`, `PUT`, dan `DELETE` dicoba lagi pada error koneksi, timeout, 408, 429, dan 5xx. `POST` dan `PATCH` hanya dicoba lagi pada 429 atau ketika koneksi gagal sebelum permintaan terkirim, sehingga coba lagi tidak pernah membuat sesi atau transaksi kedua. Timeout default adalah 60 detik. Setiap respons juga menampilkan status HTTP mentah, header, dan ID permintaan. Lihat [Pembatasan laju](https://docs.didit.me/id/integration/rate-limiting.md) untuk batas yang berlaku pada 429.

## Versi dan dukungan

* SDK mengikuti penerapan versi semantik, dengan satu aturan untuk perubahan API. Perubahan yang mencerminkan API Didit adalah rilis minor, meskipun dapat merusak kode bertipe (kolom yang tipenya berubah, kolom yang kini dapat bernilai null, atau endpoint, kolom, atau nilai enum yang dihapus): API sudah berperilaku seperti itu untuk setiap pemanggil, sehingga versi SDK yang lebih lama tidak lebih aman. Catatan rilis mencantumkan perubahan semacam itu di bawah "Perubahan API yang dapat merusak kode bertipe".
* Versi major hanya untuk perubahan pada desain SDK itu sendiri: metode atau sumber daya yang diganti nama atau dihapus padahal API masih menyediakannya, perubahan pada konfigurasi klien, perilaku error, coba lagi, paginasi, atau verifikasi webhook, atau dihentikannya dukungan versi runtime. Ketika sebuah endpoint dihapus dari API atau metodenya diganti nama, metode lama tetap tersedia setidaknya untuk satu rilis minor berikutnya, ditandai sebagai usang, sehingga kode Anda tetap dapat di-build sambil Anda beralih ke yang baru. Setiap bahasa memiliki nomor versinya sendiri: Node.js, PHP, dan Ruby berada di 2.x dan yang lainnya di 1.x, karena ketiganya merilis perubahan API sebagai versi major sebelum aturan ini berlaku.
* SDK dibuat dari kontrak API yang dipublikasikan ([`openapi-25.json`](https://docs.didit.me/openapi-25.json) dan [`openapi-auth.json`](https://docs.didit.me/openapi-auth.json)), dan method [Didit Authentication](https://docs.didit.me/id/authentication/overview.md) mereka diperiksa terhadap [`openapi-authentication.json`](https://docs.didit.me/openapi-authentication.json). Ketiganya diperiksa setiap hari, sehingga endpoint atau kolom baru tersedia dalam rilis rutin semua tujuh SDK.
* Setiap SDK mendukung versi runtime minimum pada tabel dan setiap versi yang lebih baru. Pengujiannya dijalankan pada versi minimum dan setiap versi yang lebih baru, atau setiap rilis dukungan jangka panjang untuk Node.js dan Java.
* `CHANGELOG.md` di setiap repositori mencantumkan perubahan setiap rilis.
* Laporkan masalah keamanan secara pribadi melalui advisori keamanan di repositori SDK atau ke [support@didit.me](mailto:support@didit.me).


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