Procédures tRPC
L'API de la plateforme Inklura est servie en tRPC. Chaque domaine est exposé comme un
router de procédures, accessible à l'adresse /api/trpc/<router>.<procedure>. Le
catalogue plus bas est représentatif, pas exhaustif.
Nommage des procédures
Un appel nomme un router et une procédure, séparés par un point :
<router>.<procedure>
Par exemple products.list, orders.getOrderById, invoices.createDraft, campaigns.sendCampaign.
Le router regroupe un domaine ; la procédure est l'opération.
Niveaux d'accès
Chaque procédure a un niveau d'accès qui détermine ce que l'appelant doit présenter :
| Niveau | Requiert |
|---|---|
| Public | Rien : appelable sans session (connexion, inscription, réinitialisation de mot de passe, etc.). |
| Authentifié | Une session valide (JWT Bearer ou cookie de session). |
| Avec permission | Une session et la ou les permissions nommées, au format ressource:action (par ex. products:read). Sans session, l'appel n'aboutit que si le site accorde ces permissions aux visiteurs anonymes. |
| Limité au locataire | Une session appartenant au locataire de la procédure (ou un administrateur de la plateforme). |
| Limité à un rôle | Une session qui détient l'un des rôles requis. |
Sans identifiant valide, un appel à une procédure protégée échoue avec UNAUTHORIZED (401).
Authentifié mais sans la permission, le rôle ou le locataire requis, il échoue avec
FORBIDDEN (403). Voir Erreurs et limites de débit.
Conventions d'appel
Les queries sont des GET, les mutations des POST. Les entrées et les sorties sont
encapsulées en superjson : les entrées vont dans {"json":<value>}, et le résultat se
trouve sous result.data.json. Authentifiez-vous avec un JWT Bearer (voir
Sessions et tokens).
HTTP brut : query (GET)
L'entrée est encodée dans l'URL, dans ?input= :
curl -G "https://manage.inklura.fr/api/trpc/products.getById" \
-H "Authorization: Bearer $INKLURA_TOKEN" \
--data-urlencode 'input={"json":{"id":"<product-id>"}}'
Pour une procédure sans entrée, omettez ?input= :
curl "https://manage.inklura.fr/api/trpc/auth.getSession" \
-H "Authorization: Bearer $INKLURA_TOKEN"
HTTP brut : mutation (POST)
L'entrée est le corps JSON, encapsulé de la même manière :
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"}}'
Les deux renvoient la charge utile sous result.data.json :
{ "result": { "data": { "json": { "id": "…" } } } }
Client TypeScript (@trpc/client)
En TypeScript, utilisez @trpc/client (v11) avec le transformer superjson et un
httpBatchLink pointé vers /api/trpc. Ajoutez l'en-tête Authorization via l'option
headers du link. Le type du router de la plateforme (AppRouter) n'est pas publié sous
forme de paquet : le client ci-dessous n'est donc pas typé (any), vérifiez l'entrée de
chaque procédure dans cette documentation.
import { createTRPCClient, httpBatchLink } from "@trpc/client";
import superjson from "superjson";
const client = createTRPCClient<any>({
links: [
httpBatchLink({
url: "https://manage.inklura.fr/api/trpc",
transformer: superjson,
headers() {
return { Authorization: `Bearer ${process.env.INKLURA_TOKEN}` };
},
}),
],
});
const session = await client.auth.getSession.query();
const created = await client.clients.create.mutate({
name: "Acme SARL",
email: "contact@acme.example",
});
Avec le transformer configuré sur le link, le client gère l'encapsulation superjson pour vous : vous passez et recevez des valeurs simples.
Batching
L'endpoint accepte le protocole de batch tRPC standard : httpBatchLink regroupe les appels
effectués dans le même tick en une seule requête HTTP. /api/trpc accepte GET comme
POST, et les queries peuvent être envoyées en POST (remplacement de méthode activé).
Catalogue des routers
Les routers ci-dessous sont des exemples, regroupés par famille. La liste n'est pas complète.
Auth et identité
| Router | Procédures (exemples) |
|---|---|
auth |
getSession, getProfile, getUserInfo, resendVerificationEmail, et les procédures publiques login / register / signup / requestPasswordReset / verifyEmail |
Commerce et CRM
| Router | Procédures (exemples) |
|---|---|
products |
getById, getBySlug, create, update, deleteProduct, bulkUpdate, et les procédures publiques list / getProductsByIds |
orders |
getOrders, getOrderById, createOrder, updateOrder, updateStatus, markPaid, deleteOrder, et les sous-routers lifecycle, fulfillment et refund |
clients |
getClients, getClientById, create, updateClient, deleteClient, getClientContacts |
invoices |
getInvoices, getInvoice, createInvoice, createDraft, updateDraft, updateInvoiceStatus, convertQuote, createCreditNote, getDashboardMetrics, et la procédure publique getPublicInvoice |
Autres routers de cette famille (noms seulement) : profile, users, tiers, vendors,
inventory, stockActions, recurringInvoices, payments, stripe, shipping,
taxRates, coupons, subscriptions, accounting.
POS et restaurant
Noms seulement : posManagement, posOrders, kitchen/kds, tablePayment, posLoyalty,
clickCollect, floorPlans, tableReservations, delivery.
CMS et publication
Noms seulement : cms, articles, posts, medias, forms, sections, slider,
magazinePublications, classifiedAds, feedApiKeys.
Communication et marketing
| Router | Procédures (exemples) |
|---|---|
campaigns |
getCampaigns, getCampaignById, createCampaign, createCampaignWizard, updateCampaign, deleteCampaign, sendCampaign, pauseCampaign, resumeCampaign, duplicateCampaign, getCampaignActivity, getCampaignTags, createCampaignTag |
helpdeskKb |
getArticles, getArticleById, createArticle, updateArticle, deleteArticle, getCategories, getCategoryById, createCategory, updateCategory, deleteCategory |
Autres routers de cette famille (noms seulement) : marketingCampaigns, emails,
emailTemplates, newsletter, segments, communications, support, chat, liveChat.
Paramètres du compte
Noms seulement : settings, permissions, onboarding, site, webhooks,
workflowAutomation.
Le catalogue évolue : servez-vous de ces listes comme d'une carte de départ. Les procédures nommées dans les tableaux peuvent être appelées telles quelles ; les routers « noms seulement » existent, mais leurs signatures ne sont pas documentées ici.
Voir aussi
- Sessions et tokens : comment le serveur résout votre identité et votre portée
- Erreurs et limites de débit : l'enveloppe d'erreur et les erreurs de validation
- Pagination et filtrage : comment paginent les procédures de liste
- Endpoints REST : pourquoi l'API est uniquement tRPC