API Documentation v1.0.0
Intégrez fantasticbook à vos outils grâce à notre API REST.
Authentification
Comment authentifier vos requêtes auprès de l'API fantasticbook.
Clé d'API et header Authorization
Tous les endpoints de l'API nécessitent une clé d'API, propre à votre compte. Elle se transmet dans le header Authorization de chaque requête, avec le schéma Bearer. Toutes les requêtes se font en POST, avec un body JSON (header Content-Type: application/json).
Authorization: Bearer YOUR_API_KEY
curl -X POST https://api.fantasticbook.co/me \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json"
Gérez votre clé d'API sur votre compte fantasticbook, page Automatisation. Gardez-la secrète : elle donne accès à vos commandes et à votre crédit. Si elle fuite, régénérez-la depuis cette même page (l'ancienne clé est immédiatement révoquée).
| Code HTTP | Message | Signification |
|---|---|---|
| 401 | No API key provided. |
Le header Authorization est absent de la requête. |
| 401 | Invalid API key. |
La clé fournie ne correspond à aucun compte (clé erronée ou régénérée depuis). |
Général
Version de l'API et informations sur le compte authentifié.
Version Check
Retourne la version actuelle de l'API.
{
"status": "success",
"version": "1.0.0"
}
User Information
Retourne les informations de l'utilisateur authentifié.
{
"status": "success",
"data": {
"id": "user_public_id",
"company": "Company Name",
"email": "user@example.com"
}
}
Commandes
Votre inventaire et le cycle de vie de vos commandes : consultation, création, mise à jour.
Items List
Retourne l'inventaire de l'utilisateur. Aucun paramètre requis.
{
"status": "success",
"data": [
{
"id": "ab54def",
"name": "Item Name 01",
"sku": "ITEM-NAME-01",
"current_stock": 10, // stock en temps réel
"damaged_stock": 1, // stock abîmé (ex: retours clients)
"weight": 140, // en grammes
"category": "book",
"status": "published",
"automation_matches": ["Item Name 02", "Item Name 03"]
},
{
"id": "ij35mn",
"name": "Item Name 02",
"sku": "ITEM-NAME-02",
"current_stock": 14,
"damaged_stock": 0,
"weight": 504,
"category": "pack",
"status": "published",
"automation_matches": []
}
]
}
List Orders
Retourne une liste de commandes avec pagination et options de filtrage. Les paramètres sont à passer dans un objet params dans le body de la requête.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| items_ids | array | Optionnel | Filtrer par IDs d'items défaut : tous les items |
| id | string | array | Optionnel |
Filtrer par ID de commande (string) ou IDs (array)
"id": "a68e-ve" ou "id": ["a68evZ", "BX67ea"]
défaut : toutes les commandes |
| status | string | Optionnel |
Filtrer par statut
archived
sent
waiting
disabled
suspect
défaut : tous les statuts |
| from_date | integer | Optionnel | Date de début (UNIX timestamp) défaut : 0 |
| to_date | integer | Optionnel | Date de fin (UNIX timestamp) défaut : now |
| limit | integer | Optionnel | Nombre de résultats par page défaut : 300 · max : 300 |
| offset | integer | Optionnel | Décalage de pagination défaut : 0 |
{
"params": {
"items_ids": [1, 2, 3],
"status": "sent",
"from_date": 1718236800,
"to_date": 1718236800,
"limit": 50,
"offset": 0
}
}
{
"status": "success",
"data": {
"totalCount": 150,
"inPageCount": 50,
"limit": 50,
"offset": 0,
"hasNextPage": true,
"orders": [
// Array of order objects (voir structure ci-dessous)
]
}
}
{
"id": "string", // ID public de la commande
"timestamp": integer, // Date de création (UNIX timestamp)
"date": "string", // Date formatée (Y-m-d h:i:s)
"canal": "string", // Source / canal de la commande
"last_name": "string", // Nom du client
"first_name": "string", // Prénom du client
"mail": "string", // Email du client
"address": "string", // Adresse de livraison
"zipcode": "string", // Code postal
"city": "string", // Ville
"country_iso_code": "string", // Code ISO du pays
"country": "string", // Nom du pays
"status": "string", // Statut de la commande
"tracking_number": "string", // Numéro de suivi
"date_sent": integer, // Date d'expédition (UNIX timestamp)
"items": [ // Articles commandés
{
"item": "string", // Nom de l'article
"item_sku": "string", // SKU de l'article
"quantity": integer, // Quantité commandée
"current_stock": integer // Stock actuel
}
],
"suspect_flags": [ // Drapeaux de suspicion (si applicable)
{
"code": "string", // Code du drapeau
"details": "string" // Description
}
]
}
| Code | Description |
|---|---|
| BAD_NAME | Le nom du destinataire est douteux |
| BAD_ADDRESS | L'adresse du destinataire est douteuse |
| IS_TEST | Cette commande semble être un test |
| IS_SIMILAR | Cette commande semble être un doublon |
| ITEM_DOUBLON | Un item semble en doublon dans la commande |
| BAD_PHONENUMBER | Le numéro de téléphone semble invalide |
Add Order
Crée une nouvelle commande. Les paramètres sont à passer dans un objet params dans le body de la requête.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| items | array | Requis | Tableau d'articles. Chaque article doit contenir "item" (string : son SKU ou l'un de ses SKU alternatifs) et "quantity" (integer) |
| last_name | string | Requis | Nom du client |
| first_name | string | Requis | Prénom du client |
| address | string | Requis | Adresse de livraison |
| zipcode | string | Requis | Code postal |
| city | string | Requis | Ville |
| country_iso_code | string | Requis | Code ISO du pays (ex : "FR") |
| phone | string | Optionnel | Numéro de téléphone |
| string | Optionnel | Adresse email | |
| canal | string | Optionnel | Canal de la commande défaut : "api" |
{
"params": {
"items": [
{
"item": "MON-LIVRE-SKU-7489",
"quantity": 1
}
],
"last_name": "Dupont",
"first_name": "Jean",
"address": "123 Rue de la Paix",
"zipcode": "75000",
"city": "Paris",
"country_iso_code": "FR",
"phone": "0606060606",
"mail": "jean.dupont@example.com"
}
}
{
"status": "success",
"order_id": "a68e-ve"
}
Update Order
Met à jour une commande existante. Pour l'instant, seul le status peut être mis à jour.
Attention : une commande ne peut pas être modifiée si son statut actuel est tosend (en cours de préparation) ou sent (déjà expédiée).
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| id | string | Requis | ID public de la commande à mettre à jour |
| status | string | Optionnel |
Nouveau statut de la commande. Valeurs autorisées :
waiting
archived
disabled
|
{
"params": {
"id": "a68e-ve",
"status": "archived"
}
}
{
"status": "success",
"order_id": "a68e-ve"
}
| Code HTTP | Message | Signification |
|---|---|---|
| 400 | Missing parameters. |
Le body ne contient pas d'objet params. |
| 400 | Missing or invalid order id. |
Le champ id est absent ou n'est pas une string. |
| 400 | Invalid status. |
Le status fourni n'est pas l'une des valeurs autorisées (waiting, archived, disabled). |
| 403 | Order cannot be edited anymore. |
La commande n'est plus modifiable (statut tosend ou sent). |
| 404 | Order not found. |
Aucune commande ne correspond à l'id fourni, ou elle n'appartient pas à l'utilisateur authentifié. |
Courriers
Les courriers à l'unité : crédit prépayé, devis, envoi, suivi et annulation.
Credit Balance
Retourne le solde du crédit courriers du compte, en centimes HT. Ce crédit prépayé (rechargeable par carte bancaire depuis votre compte fantasticbook, section Crédit courriers) règle chaque courrier envoyé via /letter/add, et peut aussi régler vos campagnes.
{
"status": "success",
"data": {
"balance_ht_cents": 4815,
"balance": "48,15 € HT"
}
}
Quote Letter
Devis d'un courrier à l'unité : le prix qui serait débité de votre crédit pour un nombre de pages et une destination donnés. Ne crée aucun courrier et ne touche pas au crédit.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| pages | integer | Requis | Nombre de pages du PDF (impression recto-verso : 2 pages = 1 feuille) |
| country | string | Optionnel | Pays de destination : code ISO ("BE") ou nom ("Belgique")défaut : France |
{
"status": "success",
"data": {
"price_ht_cents": 260,
"zone": "EUROPE",
"country_iso_code": "BE",
"sheets": 2,
"weight_grams": 18.5
}
}
Add Letter
Crée un courrier à l'unité : nous imprimons votre PDF (papier blanc, recto-verso), le mettons sous pli et l'expédions au destinataire. Le prix est débité de votre crédit prépayé à la création. Si le crédit est insuffisant, le courrier est enregistré avec le statut error_credit (HTTP 402) : il ne part pas, mais sera relancé automatiquement dès votre prochaine recharge de crédit.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| pdf_base64 | string | Requis* | Contenu du courrier : fichier PDF encodé en base64 (10 Mo max). *Fournir pdf_base64 OU pdf_url |
| pdf_url | string | Requis* | URL https publique du PDF (téléchargé immédiatement, redirections non suivies) |
| first_name | string | Requis* | Prénom du destinataire. *Au moins l'un de first_name / last_name |
| last_name | string | Requis* | Nom du destinataire |
| address | string | Requis | Adresse du destinataire |
| zipcode | string | Optionnel | Code postal |
| city | string | Requis | Ville |
| country | string | Optionnel | Pays : code ISO ou nom défaut : France |
{
"params": {
"first_name": "Jean",
"last_name": "Dupont",
"address": "4 rue des Lilas",
"zipcode": "75011",
"city": "Paris",
"pdf_url": "https://example.com/mon-courrier.pdf"
}
}
{
"status": "success",
"letter_id": "HLowYA",
"letter_status": "pending",
"price_ht_cents": 185,
"balance_ht_cents": 4815
}
{
"status": "error",
"message": "Insufficient credit: the letter was recorded with status \"error_credit\" and will be sent automatically after a top-up.",
"letter_id": "BsfvWQ",
"letter_status": "error_credit",
"price_ht_cents": 185,
"balance_ht_cents": 100
}
Get Letter
Détail d'un courrier à l'unité du compte. Statuts possibles : pending (en attente de préparation), error_credit (crédit insuffisant), in_batch (en préparation), sent (envoyé), canceled (archivé, remettable en traitement par le client).
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| id | string | Requis | Identifiant du courrier (retourné par /letter/add) |
{
"status": "success",
"data": {
"id": "HLowYA",
"status": "pending",
"status_label": "En attente de préparation",
"recipient": {
"first_name": "Jean",
"last_name": "Dupont",
"address": "4 rue des Lilas",
"zipcode": "75011",
"city": "Paris",
"country_iso_code": "FR"
},
"pages": 1,
"price_ht_cents": 185,
"error_message": null,
"tracking_number": null,
"created_at": 1788281373,
"sent_at": null
}
}
List Letters
Tous les courriers à l'unité du compte, du plus récent au plus ancien. Chaque élément a la même structure que la réponse de /letter/get.
{
"status": "success",
"data": [
{ "id": "HLowYA", "status": "pending", … },
{ "id": "BsfvWQ", "status": "sent", … }
]
}
Cancel Letter
Annule un courrier tant qu'il n'est pas parti en préparation (statut pending ou error_credit). Un courrier déjà débité est remboursé sur votre crédit. Un courrier en préparation ou envoyé n'est plus annulable.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| id | string | Requis | Identifiant du courrier |
{
"status": "success",
"letter_id": "HLowYA",
"letter_status": "canceled",
"refunded": true,
"balance_ht_cents": 5000
}