> ## 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 servidor: Python, Node.js, Go, Java, PHP, Ruby, .NET

> Crida les APIs de servidor de Didit des del backend amb un SDK oficial i tipat. Instal·lació, configuració, errors, reintents i versions.

Els SDK de servidor són les biblioteques oficials de Didit per al teu backend. Cadascun crida els endpoints de servidor de la [referència de l'API](https://docs.didit.me/ca/api-reference/overview.md) amb sol·licituds i respostes tipades, verifica els webhooks que Didit t'envia i comprova els tokens de [Didit Authentication](https://docs.didit.me/ca/authentication/overview.md). Cap versió 1.0.1 té encara els dos endpoints de Google Wallet: [iniciar una verificació de Google Wallet](https://docs.didit.me/ca/api-reference/digital-id-wallets/google-wallet.md) i [enviar una resposta de cartera](https://docs.didit.me/ca/standalone-apis/digital-id-wallet-response.md). Els SDK de Python, Node.js, Java, PHP, Ruby i .NET tenen tots els altres endpoints de servidor. El SDK de Go 1.0.1 també en manca nou més, la majoria dels endpoints de Travel Rule: consulta [Endpoints que encara no són al SDK de Go](https://docs.didit.me/ca/integration/server-sdks/go.md#endpoints-que-encara-no-són-al-sdk-de-go).

Usa'ls allà on el teu codi tingui una clau d'API de Didit: en crear sessions de verificació, llegir decisions, cridar les APIs independents, gestionar usuaris, empreses, fluxos de treball i casos, fer cribratge de transaccions i carteres, i Travel Rule. Al navegador o en una aplicació mòbil, usa en lloc seu els [SDK web](https://docs.didit.me/ca/integration/web-sdks/overview.md) i els [SDK natius](https://docs.didit.me/ca/integration/native-sdks/overview.md): presenten el flux de verificació a l'usuari i mai no tenen la teva clau d'API.

Les pàgines d'endpoints de servidor de la [referència de l'API](https://docs.didit.me/ca/api-reference/overview.md), incloses les pàgines del servei [Validació en bases de dades](https://docs.didit.me/ca/standalone-apis/database-validation.md), mostren un exemple de codi per a cada SDK de servidor al costat de la sol·licitud cURL. Un exemple es mostra quan l'última versió del SDK té l'endpoint i tots els camps que l'exemple envia: un endpoint o camp afegit a l'API rebrà els seus exemples amb la següent versió de cada SDK. Cap versió 1.0.1 té els 16 camps de sol·licitud de Validació en bases de dades que es van afegir després que es generés aquesta versió, com `vin` o `bank_account_number`, així que les pàgines de servei que els envien només mostren cURL.

## Instal·lació

```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
```

| Llenguatge | Paquet | Codi font | Entorn d'execució mínim |
| - | - | - | - |
| [Python](https://docs.didit.me/ca/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 i TypeScript](https://docs.didit.me/ca/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, entorns edge amb `fetch` |
| [Go](https://docs.didit.me/ca/integration/server-sdks/go.md) | [Mòdul Go `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 i Kotlin](https://docs.didit.me/ca/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/ca/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/ca/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# i .NET](https://docs.didit.me/ca/integration/server-sdks/dotnet.md) | [NuGet `Didit`](https://www.nuget.org/packages/Didit) | [sdk-dotnet](https://github.com/didit-protocol/sdk-dotnet) | .NET 8 o .NET Standard 2.0 |

## Configuració

Cada SDK llegeix les mateixes variables d'entorn, de manera que un client creat sense opcions ja està a punt per usar-se. Els entorns edge no tenen entorn de procés: en aquests casos, passa la clau d'API al client de Node.js com a opció.

| Variable | Per a què serveix |
| - | - |
| `DIDIT_API_KEY` | Cada crida amb clau d'API. Crea la clau a la consola, a [Claus d'API](https://docs.didit.me/ca/console/api-keys.md). |
| `DIDIT_ORGANIZATION_ID`, `DIDIT_APPLICATION_ID` | Operacions sota `/v3/organization/{organization_id}/application/{application_id}/` (casos, xarxes, informes regulatoris, plantilles d'informes i algunes eines d'usuaris i empreses). El SDK omple tots dos identificadors de ruta des del client, de manera que mai no els passes per cada crida. Sense ells, aquestes crides fallen abans d'enviar cap sol·licitud. |
| `DIDIT_LOG=debug` | Registra el mètode, la ruta, l'estat, la durada i l'identificador de sol·licitud de cada sol·licitud. Mai no es registren cossos ni capçaleres. |

Tot el que pots definir des de l'entorn també ho pots passar al client, juntament amb l'URL base, el temps d'espera, els reintents, les capçaleres per defecte i el teu propi client HTTP. Crea un client per procés i comparteix-lo: manté un pool de connexions i és segur d'usar des de diversos fils o tasques.

Els mètodes `account` ([registre programàtic](https://docs.didit.me/ca/integration/programmatic-registration.md): registre, inici de sessió, organitzacions i aplicacions) criden `https://apx.didit.me/auth/v2` i mai no envien la teva clau d'API. Inicia sessió amb `account.login` i després passa el token d'accés retornat al client com a token de compte.

## Què fa cada SDK

* **Recursos i mètodes.** Les crides segueixen els recursos de l'API: `client.<resource>.<method>(...)`, per exemple `sessions.create`, `sessions.retrieve_decision` o `transactions.create`, amb la capitalització de cada llenguatge. Els identificadors de ruta són arguments posicionals; el cos i la consulta són un sol conjunt de camps amb nom. Python, Node.js, PHP i Ruby usen els noms de camp de l'API (`workflow_id`); Go, Java i .NET usen la capitalització del seu llenguatge (`WorkflowID`, `workflowId`, `WorkflowId`).
* **Llistes.** Els mètodes de llista recorren tots els resultats per tu (`limit` i `offset` per sota), i també exposen cada pàgina amb `count`, `next`, `previous` i `results`. En Ruby, `auto_paging_each` recorre totes les pàgines, i `total_count`, `next_url` i `previous_url` d'una pàgina són els `count`, `next` i `previous` de l'API.
* **Fitxers.** Les pujades (imatges de documents, selfies, comprovant de domicili, importacions) accepten una ruta, bytes o un flux. Les descàrregues (PDF de sessions, informes) retornen bytes o un flux, mai JSON analitzat.
* **Compatibilitat cap endavant.** Un camp de resposta o un valor d'enumeració que la versió del SDK encara no coneix es conserva i és llegible, mai no és un error, així que una addició de l'API no trenca una integració desplegada.
* **Webhooks.** `webhooks.verify` comprova les capçaleres `X-Signature-V2` i `X-Signature` i la marca de temps d'un lliurament amb el teu secret del webhook, i retorna un esdeveniment tipat. Accepta una llista de secrets mentre en rotes un. Consulta [Webhooks](https://docs.didit.me/ca/integration/webhooks.md) per a l'esquema de signatura.
* **Autenticació.** Un ajudant `Authentication` verifica els tokens d'accés i d'ID que signa el teu emissor d'Authentication, i crida els seus endpoints de token, sessió i step-up. Mai no usa la teva clau d'API.

## Errors, reintents i temps límit

| Error | Quan |
| - | - |
| `APIConnectionError`, `APITimeoutError` | No ha arribat cap resposta |
| `APIStatusError` | Qualsevol altra resposta no 2xx, amb l'estat, el cos analitzat, les capçaleres i l'identificador de la sol·licitud |
| `BadRequestError` 400, `AuthenticationError` 401, `PermissionDeniedError` 403, `NotFoundError` 404, `ConflictError` 409, `UnprocessableEntityError` 422, `RateLimitError` 429, `InternalServerError` 5xx | Subclasses de `APIStatusError` |
| `WebhookVerificationError` | Una entrega de webhook no ha superat la verificació; el seu `reason` indica el motiu |
| `ConfigurationError` | Falta la clau d'API, el token del compte, l'identificador de l'organització o l'identificador de l'aplicació |

Tots els errors deriven de `DiditError`. En Go, tots els errors implementen la interfície `didit.Error` i són de tipus punter, com `*didit.NotFoundError`. Java, PHP i .NET els anomenen amb el sufix habitual `Exception` i escriuen `API` com a `Api`: `DiditException`, `ApiStatusException`, `NotFoundException`.

Els SDK reintenten una sol·licitud fallida fins a 2 vegades, amb un retard exponencial a partir de 0,5 segons (aleatorietat completa, com a màxim 8 segons) i respectant la capçalera `Retry-After`. `GET`, `HEAD`, `PUT` i `DELETE` es reintenten en cas d'errors de connexió, temps límit, 408, 429 i 5xx. `POST` i `PATCH` només es reintenten en cas de 429 o quan la connexió ha fallat abans d'enviar la sol·licitud, de manera que un reintent mai no crea una segona sessió ni una segona transacció. El temps límit per defecte és de 60 segons. Cada resposta també exposa l'estat HTTP en brut, les capçaleres i l'identificador de la sol·licitud. Consulta [Límit de freqüència](https://docs.didit.me/ca/integration/rate-limiting.md) per conèixer els límits que hi ha darrere del 429.

## Versions i suport

* Els SDK segueixen el versionat semàntic, amb una regla per als canvis de l'API. Un canvi que reflecteix l'API de Didit es publica com a versió menor, fins i tot quan pot trencar el codi tipat (un camp amb un tipus canviat, un camp que ara pot ser nul, o un endpoint, un camp o un valor d'enumeració eliminat): l'API ja es comporta així per a tots els clients, de manera que una versió anterior de l'SDK no és més segura. Les notes de la versió enumeren aquests canvis sota "Canvis de l'API que poden trencar el codi tipat".
* Una versió major només es fa per a un canvi en el disseny del propi SDK: un mètode o un recurs reanomenat o eliminat mentre l'API el manté, un canvi en la configuració del client, en els errors, en els reintents, en la paginació o en el comportament de la verificació de webhooks, o l'eliminació d'una versió d'entorn d'execució. Quan un endpoint surt de l'API o un dels seus mètodes es reanomena, el mètode antic es manté durant almenys una versió menor més, marcat com a obsolet, perquè el teu codi continuï compilant mentre migres al nou mètode. Cada llenguatge manté el seu propi número de versió: Node.js, PHP i Ruby estan a la 2.x i la resta a la 1.x, perquè aquests tres van publicar un canvi de l'API com a versió major abans que s'apliqués aquesta regla.
* Es generen a partir del contracte d'API publicat ([`openapi-25.json`](https://docs.didit.me/openapi-25.json) i [`openapi-auth.json`](https://docs.didit.me/openapi-auth.json)), i els seus mètodes de [Didit Authentication](https://docs.didit.me/ca/authentication/overview.md) es comproven amb [`openapi-authentication.json`](https://docs.didit.me/openapi-authentication.json). Les tres fonts es comproven cada dia, de manera que un endpoint o un camp nou arriba en una versió regular dels set SDK.
* Cada SDK és compatible amb l'entorn d'execució mínim de la taula i amb totes les versions posteriors. Les seves proves s'executen amb el mínim i amb cada versió posterior o, per a Node.js i Java, amb cada versió de suport a llarg termini.
* El fitxer `CHANGELOG.md` de cada repositori enumera els canvis de cada versió.
* Informa d'un problema de seguretat de forma privada mitjançant els avisos de seguretat del repositori de l'SDK o a [support@didit.me](mailto:support@didit.me).


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