Aperçu
L'API de la plateforme Inklura expose chaque domaine métier — produits, commandes, clients, factures, campagnes, et environ 350 autres routers — sur une seule surface canonique.
- Canonique : tRPC. Chaque procédure est accessible à l'adresse
/api/trpc/<router>.<procedure>. Il y a environ 350 routers de premier niveau et ~6 567 procédures. - Partiel : REST. Un pont
/api/v1/<router>/<procedure>existe, mais seule une poignée de procédures est câblée à ce jour. Considérez-le comme expérimental.
Les nouvelles intégrations devraient viser tRPC.
URL de base
https://manage.inklura.fr
Tous les exemples de cette page utilisent cet hôte. Voir Environnements pour d'autres cibles.
Une copie interne « lean » du même router tourne sur l'interface de loopback
(127.0.0.1:4000) pour servir la console ; elle n'est pas publique. Le serveur de
développement écoute sur le port 3060.
Format des requêtes et des réponses
tRPC est monté sur /api/trpc et accepte à la fois GET et POST. Le transformer de
sérialisation est superjson : les entrées sont donc encapsulées sous la forme
{"json": <value>}, et la charge utile qui vous intéresse est imbriquée sous
result.data.json dans la réponse.
| Type de procédure | Verbe HTTP | Entrée |
|---|---|---|
| Query | GET |
?input={"json":<value>} (encodé dans l'URL) |
| Mutation | POST |
corps de requête {"json":<value>} |
Query (GET)
Une query passe son entrée dans l'URL. Ici, auth.getSession ne prend aucune entrée, donc le
?input= est omis :
curl "https://manage.inklura.fr/api/trpc/auth.getSession" \
-H "Authorization: Bearer $INKLURA_TOKEN"
Une query qui prend une entrée encode une enveloppe superjson dans ?input= :
curl -G "https://manage.inklura.fr/api/trpc/products.get" \
-H "Authorization: Bearer $INKLURA_TOKEN" \
--data-urlencode 'input={"json":{"id":"<product-id>"}}'
La réponse imbrique le résultat sous result.data.json :
{
"result": {
"data": {
"json": { "id": "<product-id>", "name": "…" }
}
}
}
Mutation (POST)
Une mutation envoie son entrée dans le corps JSON, là encore encapsulée dans
{"json":<value>} :
curl -X POST "https://manage.inklura.fr/api/trpc/clients.create" \
-H "Authorization: Bearer $INKLURA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"json":{"name":"Acme SARL","email":"contact@acme.example"}}'
La réponse a la même forme result.data.json. Voir Procédures tRPC pour un
exemple @trpc/client typé et l'ensemble des conventions d'appel.
Batching
L'endpoint parle le protocole de batch tRPC standard : un client configuré avec
httpBatchLink peut donc regrouper plusieurs appels dans une seule requête HTTP. Le
remplacement de méthode est activé sur le mount (allowMethodOverride=true). Voir
Procédures tRPC.
Tenancy
Inklura est multi-locataire, et votre locataire voyage dans votre identifiant. Chaque appel se résout à une portée locataire (et généralement site) :
- JWT Bearer (recommandé). Le token signé encode votre
tenantIdet votresiteId. Lorsque vous vous authentifiez avec un token Bearer, le serveur prend le locataire/site directement dans le token et ne cherche pas plus loin. C'est ce qui fait demanage.inklura.frun endpoint unique et véritablement multi-locataire — vous choisissez le locataire en choisissant le token que vous envoyez, et la même URL sert tous les locataires. Voir Sessions et tokens. - Cookie de session / navigateur. Une requête authentifiée uniquement par un cookie de
session déduit sa portée à partir de, dans l'ordre : les en-têtes explicites
X-Tenant-Id/X-Site-Id, puis les cookiesselected_tenant/selected_site/selected_host, puis l'en-têteHostde la requête.
X-Tenant-Id: <tenant uuid>
X-Site-Id: <site uuid>
Ne comptez pas sur X-Tenant-Id / X-Site-Id pour choisir un locataire sur l'hôte
partagé manage.inklura.fr — les en-têtes de tenancy fournis par le client y sont
supprimés à titre de mesure anti-usurpation. Les appelants programmatiques doivent
porter le locataire dans leur token Bearer, qui fait autorité sur tous les hôtes ;
le chemin par en-tête est destiné à un locataire appelant son propre domaine, où le Host
identifie déjà le locataire. Les portails OpenAPI annoncent toujours les deux en-têtes aux
côtés de bearerAuth pour ce cas.
La tenancy est appliquée dans le code applicatif, et non par la sécurité au niveau des
lignes de la base de données. Chaque ligne détenue par un locataire porte un tenantId — voir
le Modèle de données.
Où aller ensuite
| Page | Ce qu'elle couvre |
|---|---|
| Sessions et tokens | Ordre de résolution des tokens, portée locataire/site, bypass de dev |
| Procédures tRPC | Types de procédures, conventions d'appel, catalogue des routers |
| Endpoints REST | Le pont partiel /api/v1 et les portails OpenAPI |
| Modèle de données | ORM, multi-tenancy et les modèles clés |
| Erreurs et limites de débit | Enveloppe d'erreur, codes et limites limitées à des fonctionnalités |
| Pagination et filtrage | La convention page/pageSize |