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.

Note

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