FonctionnalitésTarifsÀ proposArticlesDocumentation
Développeurs

API, SDK, MCP et webhooks.

Plateforme développeurDémarrage rapideAuthentificationRéférence de l’APISDKMCPWebhooksErreursPaginationLimites de débitIdempotenceJournal des modificationsPolitique de migration et de versionnage
Documentation API bruteOpenAPI YAMLAsyncAPI YAML
  1. Accueil
  2. /
  3. Développeurs
  4. /
  5. Référence de l’API

Référence de l'API

Référence complète de l'API publique de FabHub. Le portail de marque fait foi ; vous pouvez aussi charger le contrat exploitable par machine dans n'importe quel visualiseur OpenAPI (Swagger Editor, Redoc, Postman ou votre IDE).

  • OpenAPI JSON - OpenAPI YAML

URL de base

https://api.fabhub.app/v1

Conventions

  • Authentifiez-vous avec X-API-Key (ou Authorization: Bearer). Voir Authentification.
  • Les corps de requête sont en JSON avec des clés en camelCase ; les filtres de liste sont des paramètres de requête en snake_case.
  • Les endpoints de liste sont paginés par page et renvoient un objet pagination ; voir Pagination.
  • Les endpoints en écriture exigent un en-tête Idempotency-Key ; voir Idempotence.
  • Les erreurs utilisent une enveloppe stable avec un code exploitable par machine ; voir Erreurs.

Tous les endpoints

Ce tableau est généré à partir du contrat OpenAPI et liste toujours chaque opération publique et son scope requis. Les sections ci-dessous sont des exemples pratiques pour les ressources les plus courantes ; le contrat OpenAPI est la source exhaustive des schémas de requête et de réponse.

MéthodeCheminScope
GET/v1authenticated
GET/v1/audit/eventsaudit:read
GET/v1/auth/contextauthenticated
GET/v1/contactscontacts:read
POST/v1/contactscontacts:write
DELETE/v1/contacts/{contact_id}contacts:write
GET/v1/contacts/{contact_id}contacts:read
PATCH/v1/contacts/{contact_id}contacts:write
GET/v1/itemsitems:read
POST/v1/itemsitems:write
DELETE/v1/items/{item_id}items:write
GET/v1/items/{item_id}items:read
PATCH/v1/items/{item_id}items:write
GET/v1/items/{item_id}/ingredientsitems:read
POST/v1/items/{item_id}/ingredientsitems:write
DELETE/v1/items/{item_id}/ingredients/{ingredient_id}items:write
PATCH/v1/items/{item_id}/ingredients/{ingredient_id}items:write
GET/v1/items/{item_id}/suppliersitems:read
POST/v1/items/{item_id}/suppliersitems:write
DELETE/v1/items/{item_id}/suppliers/{supplier_id}items:write
PATCH/v1/items/{item_id}/suppliers/{supplier_id}items:write
GET/v1/ordersorders:read
POST/v1/ordersorders:write
GET/v1/orders/{order_id}orders:read
PATCH/v1/orders/{order_id}orders:write
GET/v1/orders/{order_id}/linesorders:read
GET/v1/organizationorganization:read
GET/v1/stock-documentsinventory:read
POST/v1/stock-documentsinventory:write
DELETE/v1/stock-documents/{document_id}inventory:write
GET/v1/stock-documents/{document_id}inventory:read
PATCH/v1/stock-documents/{document_id}inventory:write
POST/v1/stock-documents/{document_id}/approveinventory:write
POST/v1/stock-documents/{document_id}/cancelinventory:write
GET/v1/stock-documents/{document_id}/linesinventory:read
POST/v1/stock-documents/{document_id}/linesinventory:write
DELETE/v1/stock-documents/{document_id}/lines/{line_id}inventory:write
PATCH/v1/stock-documents/{document_id}/lines/{line_id}inventory:write
POST/v1/stock-documents/{document_id}/submitinventory:write
GET/v1/stock-levelsinventory:read
GET/v1/usageusage:read
GET/v1/webhookswebhooks:read
POST/v1/webhookswebhooks:write
DELETE/v1/webhooks/{webhook_id}webhooks:delete
GET/v1/webhooks/{webhook_id}webhooks:read
PATCH/v1/webhooks/{webhook_id}webhooks:write
GET/v1/webhooks/{webhook_id}/deliverieswebhooks:deliveries:read

Service

GET /v1

Renvoie les capacités (méthode, chemin, scope) que l'identifiant appelant peut utiliser. Aucun scope requis.

GET /v1/auth/context

Renvoie le tenant, le plan, les scopes, le palier de limitation de débit et l'expiration de l'identifiant appelant. Aucun scope requis. Voir l'exemple dans Démarrage rapide.


Articles

GET /v1/items

Scope : items:read. Liste les articles (produits, matières, combos).

RequêteTypeNotes
pageintegerNuméro de page à base 1 (par défaut 1)
page_sizeintegerArticles par page (par défaut 20)
searchstringCorrespondance plein texte sur le nom/SKU
curl "https://api.fabhub.app/v1/items?page=1&page_size=2&search=widget" \
  -H "X-API-Key: $FABHUB_API_KEY"
{
  "data": [
    {
      "id": "a1c9...",
      "name": "Blue Widget",
      "sku": "WIDG-BLUE",
      "itemType": "product",
      "salePrice": 19.99,
      "purchasePrice": 8.5,
      "isActive": true,
      "category": { "id": "cat_1", "name": "Widgets" },
      "supplier": { "id": "sup_1", "name": "Acme", "company": "Acme Ltd" },
      "updatedAt": "2026-06-19T14:02:00Z"
    }
  ],
  "pagination": { "page": 1, "pageSize": 2, "total": 57, "totalPages": 29 }
}

POST /v1/items

Scope : items:write. Exige Idempotency-Key. Crée un article.

Champ du corpsTypeNotes
namestringRequis
itemTypeproduct | material | comboPar défaut product
sku, mpn, barcodestring | nullIdentifiants optionnels
categoryId, unitId, supplierIdstring | nullRéférences optionnelles
salePrice, purchasePricenumber | nullTarification optionnelle
supplierCode, notesstring | nullOptionnel
isActivebooleanPar défaut true
curl -X POST https://api.fabhub.app/v1/items \
  -H "X-API-Key: $FABHUB_API_KEY" \
  -H "Idempotency-Key: 0b9c4a2e-..." \
  -H "Content-Type: application/json" \
  -d '{"name":"Blue Widget","itemType":"product","salePrice":19.99}'

Renvoie { "data": { ...item } } avec l'article créé.

GET /v1/items/{item_id}

Scope : items:read. Renvoie { "data": { ...item } }, ou 404 avec code: "NOT_FOUND".

PATCH /v1/items/{item_id}

Scope : items:write. Exige Idempotency-Key. Accepte n'importe quel sous-ensemble des champs de création et renvoie l'article mis à jour.

Sous-ressources d'article

  • GET /v1/items/{item_id}/ingredients (scope items:read) - composants d'un article combo/fabriqué.
  • GET /v1/items/{item_id}/suppliers (scope items:read) - fournisseurs liés à un article.

Commandes

GET /v1/orders

Scope : orders:read.

RequêteTypeNotes
modulebuy | sell | make | check | fixRequis
statusstatut de commandeFiltre optionnel (draft, open, in_progress, waiting, completed, cancelled)
page, page_size, search-Paramètres de liste standard
{
  "data": [
    {
      "id": "ord_1",
      "module": "sell",
      "orderNumber": "SO-1042",
      "status": "open",
      "contactId": "con_7",
      "orderDate": "2026-06-18",
      "dueDate": "2026-06-25",
      "siteId": null,
      "priority": "normal",
      "assignedTo": null,
      "contact": { "id": "con_7", "name": "Globex" },
      "site": null,
      "createdAt": "2026-06-18T10:00:00Z",
      "updatedAt": "2026-06-18T10:05:00Z"
    }
  ],
  "pagination": { "page": 1, "pageSize": 20, "total": 3, "totalPages": 1 }
}

Les commandes prennent également en charge POST /v1/orders, GET /v1/orders/{order_id} et PATCH /v1/orders/{order_id} (les écritures exigent Idempotency-Key), ainsi que GET /v1/orders/{order_id}/lines (scope orders:read) pour les lignes de commande. Consultez le contrat OpenAPI pour les corps de requête exacts.


Contacts

GET /v1/contacts

Scope : contacts:read.

RequêteTypeNotes
contact_typesstringSéparés par des virgules : customer, supplier, both
page, page_size, search-Paramètres de liste standard

Chaque contact : id, name, email, phone, company, contactType, country, contactGroup, isPrimaryContact, isActive, updatedAt.

Les contacts prennent également en charge POST /v1/contacts, GET /v1/contacts/{contact_id} et PATCH /v1/contacts/{contact_id} (les écritures exigent Idempotency-Key) ; consultez le contrat OpenAPI pour les champs.


Organisation

GET /v1/organization

Scope : organization:read. Renvoie { "data": { "id", "name", "slug", "plan", "createdAt" } } où plan vaut free | standard | pro | enterprise.


Utilisation

GET /v1/usage

Scope : usage:read. Renvoie la période de facturation en cours, les totaux de requêtes (globaux et par capacité), ainsi que le palier de limitation de débit avec le budget restant. Voir Limites de débit.


Événements d'audit

GET /v1/audit/events

Scope : audit:read (Enterprise). Export paginé par curseur.

RequêteTypeNotes
since, untilISO 8601Fenêtre temporelle
action_prefixstringFiltrer par préfixe d'action
actor_typeuser | system | apiFiltrer par acteur
limitintegerTaille de page
cursor_created_at, cursor_id-Reprendre depuis une page précédente
{
  "data": [
    {
      "id": "evt_1",
      "actorType": "api",
      "actorId": "key_8f...",
      "action": "item.created",
      "resourceType": "item",
      "resourceId": "a1c9...",
      "metadata": {},
      "ipAddress": "203.0.113.10",
      "createdAt": "2026-06-19T14:02:00Z"
    }
  ],
  "pagination": { "hasMore": true, "nextCursor": { "createdAt": "2026-06-19T14:02:00Z", "id": "evt_1" } }
}

Stock

GET /v1/stock-levels

Renvoie les niveaux de stock actuels pour les articles du tenant (voir le tableau ci-dessus pour le scope requis, et le contrat OpenAPI pour les filtres et la forme de la réponse).


Webhooks

Le cycle de vie complet et les détails de signature figurent dans Webhooks.

MéthodeCheminScope
GET/v1/webhookswebhooks:read
POST/v1/webhookswebhooks:write (Enterprise)
GET/v1/webhooks/{webhook_id}webhooks:read
PATCH/v1/webhooks/{webhook_id}webhooks:write
DELETE/v1/webhooks/{webhook_id}webhooks:delete
GET/v1/webhooks/{webhook_id}/deliverieswebhooks:deliveries:read
AccueilFonctionnalitésTarifsÀ proposArticlesDocumentationDéveloppeurs
© FabHubConfidentialité et cookiesConditionsAccessibilité