11 KiB
Axonaut API v2 — Documentation de référence
Base URL : https://axonaut.com/api/v2
Doc officielle : https://axonaut.com/api/v2/doc
Authentification : Header userApiKey avec la clé API du compte
Contexte Localiztoi
On n'édite pas de facture Amazon via Axonaut. L'intégration sert à :
- Destocker les produits vendus (mise à jour quantité stock)
- Créer une observation/note sur le produit ou la société avec les numéros IMEI
Flux prévu
- Commande Amazon traitée (IMEI scannés + FOTA OK)
- →
PATCH /products/{id}/stockpour diminuer la quantité - →
POST /events(nature=6 Note) avec les IMEI dans le champcontent
Authentification
Toutes les requêtes nécessitent le header :
userApiKey: <votre_clé_api>
La clé est stockée dans notre table api_keys (provider: axonaut, label: api_key).
Endpoints pertinents
1. Produits
GET /products
Récupérer tous les produits.
| Paramètre | Type | Emplacement | Description |
|---|---|---|---|
page |
integer | header | Pagination |
internal_id |
string | query | Filtre par ID interne |
product_code |
string | query | Filtre par code produit (SKU) |
name |
string | query | Filtre par nom |
with_disabled |
boolean | query | Inclure les produits désactivés |
Réponse : Array de produits
[
{
"id": 123,
"internal_id": "LOC-001",
"product_code": "FMC130",
"name": "Teltonika FMC130",
"description": "Boîtier GPS Teltonika FMC130",
"price": 45.00,
"tax_rate": 20.0,
"type": 707,
"disabled": false
}
]
Types de produit :
601= Matière première701= Produit fini706= Service707= Marchandise ← notre cas
GET /products/{productId}
Récupérer un produit spécifique par son ID Axonaut.
POST /products
Créer un produit.
{
"name": "Teltonika FMC130",
"product_code": "FMC130",
"price": 45.00,
"tax_rate": 20.0,
"type": 707
}
PATCH /products/{productId}
Mettre à jour un produit.
2. Stock
GET /products/{productId}/stock
Récupérer le stock actuel d'un produit.
Réponse :
{
"product_id": 123,
"quantity": 50,
"reserved": 5
}
quantity: stock total disponiblereserved: quantité réservée (devis en cours, etc.)
PATCH /products/{productId}/stock ⭐ ENDPOINT CLÉ
Mettre à jour le stock d'un produit (destockage).
Body :
{
"quantity": 45
}
IMPORTANT : C'est une valeur absolue, pas un delta. Pour destocker, il faut :
GET /products/{id}/stock→ récupérerquantityactuelle- Calculer
nouvelle_quantité = quantity - nb_articles_vendusPATCH /products/{id}/stockavec{ "quantity": nouvelle_quantité }
Champs disponibles :
quantity(number) : nouveau stock totalreserved(number) : nouveau stock réservé
Limitation : Pas de champ commentaire/raison pour le mouvement de stock. C'est pour ça qu'on crée une observation/note séparée avec les IMEI.
3. Événements / Notes (Observations)
POST /events ⭐ ENDPOINT CLÉ
Créer un événement (note, appel, email, etc.) attaché à une société.
Body :
{
"company_id": 33,
"title": "Destockage Amazon - Commande #AMZ-12345",
"content": "Destockage de 3x FMC130.\n\nIMEI :\n- 352656100123456\n- 352656100123457\n- 352656100123458",
"nature": 6,
"date": "2024-01-15T10:30:00+01:00",
"is_done": true
}
Codes nature :
| Code | Type |
|---|---|
| 1 | Rendez-vous |
| 2 | |
| 3 | Appel |
| 4 | Courrier |
| 5 | SMS |
| 6 | Note ← notre cas |
Champs complets :
| Champ | Type | Description |
|---|---|---|
company_id |
integer | ID de la société Axonaut (requis sauf si employee) |
employee_email |
string | Email du contact (alternatif à company_id) |
title |
string | Titre de l'événement |
content |
string | Contenu texte libre — on y met les IMEI |
nature |
integer | Type d'événement (1-6) |
date |
string | Date RFC3339 |
duration |
integer | Durée en minutes |
is_done |
boolean | Marquer comme terminé |
opportunity_id |
integer | Lier à une opportunité |
users |
array | Liste d'utilisateurs associés |
attachments |
object | invoices_ids, quotations_ids, documents_ids |
GET /events
Lister les événements avec filtrage par date.
| Paramètre | Type | Description |
|---|---|---|
date[inf] |
string | Date minimum |
date[sup] |
string | Date maximum |
date[eq] |
string | Date exacte |
orders[date] |
string | Tri par date |
GET /companies/{companyId}/events
Lister les événements d'une société spécifique.
4. Sociétés
GET /companies
Lister les sociétés.
| Paramètre | Type | Description |
|---|---|---|
search |
string | Recherche par nom |
type |
string | customer, prospect, supplier, all |
is_customer |
boolean | Filtre clients |
is_supplier |
boolean | Filtre fournisseurs |
siret |
string | Filtre par SIRET |
address_city |
string | Filtre par ville |
sort |
string | id, name, address_city |
GET /companies/{companyId}
Récupérer une société par ID.
POST /companies
Créer une société.
{
"name": "Amazon EU SARL",
"is_customer": true,
"currency": "EUR"
}
Pour les B2C : ajouter
"isB2C": true+ données employé
PATCH /companies/{companyId}
Mettre à jour une société.
DELETE /companies/{companyId}
Supprimer une société. Réponse : 202 Accepted.
5. Factures (référence, pas utilisé pour Amazon)
GET /invoices
Lister les factures.
| Paramètre | Type | Description |
|---|---|---|
number |
string | Numéro de facture |
date_before / after |
string | Filtre par date |
is_paid |
boolean | Filtre payé/non payé |
POST /invoices
Créer une facture.
{
"company_id": 33,
"date": "2024-01-15T00:00:00+01:00",
"title": "Facture FMC130",
"products": [
{
"product_id": 123,
"quantity": 3,
"price": 45.00
}
]
}
company_idOUemployee_emailrequis. Types d'acompte :1= premier,2= acompte,3= solde
GET /invoices/{invoiceId}
Récupérer une facture.
6. Bons de livraison
GET /delivery-forms
Lister les bons de livraison.
POST /delivery-forms
Créer un bon de livraison à partir d'une facture.
{
"invoice_id": 456
}
GET /delivery-forms/{id}/download
Télécharger le PDF. Ajouter ?alt=media pour le binaire brut.
7. Paiements
GET /payments
Lister les paiements de factures.
POST /payments
Créer un paiement.
Codes nature :
| Code | Mode |
|---|---|
| 1 | Prélèvement |
| 2 | Virement |
| 3 | Chèque |
| 4 | Carte bancaire |
| 5 | Espèces |
| 6 | Autre |
Endpoints secondaires (non prioritaires)
| Endpoint | Méthode | Description |
|---|---|---|
/employees |
GET/POST | Contacts/employés |
/quotations |
GET/POST | Devis |
/contracts |
GET/POST | Commandes/contrats récurrents |
/expenses |
GET/POST | Dépenses |
/opportunities |
CRUD | Pipeline commercial |
/tasks |
CRUD | Tâches |
/projects |
CRUD | Projets |
/tickets |
CRUD | Support/tickets |
/suppliers |
CRUD | Fournisseurs |
/supplier-contracts |
GET/POST | Commandes fournisseur |
/supplier-deliveries |
GET/POST | Livraisons fournisseur |
/bank-accounts |
GET | Comptes bancaires |
/bank-transactions |
GET | Transactions bancaires |
/tax-rates |
GET | Taux de TVA |
/accounting-codes |
GET/POST | Codes comptables |
/diverse-operations |
GET | Opérations diverses |
/workforces |
GET | Effectifs |
/payslips |
GET | Bulletins de paie |
/me |
GET | Infos compte connecté |
/customfields |
GET | Champs personnalisés |
/users |
GET | Utilisateurs du compte |
/themes |
GET | Thèmes |
/languages |
GET | Langues |
Format des dates
- RFC3339 pour la plupart des endpoints :
2024-01-15T10:30:00+01:00 - DD/MM/YYYY pour certains filtres spécifiques (credits-history)
Implémentation prévue dans Localiztoi
Étape 1 : Mapping produits Axonaut ↔ SKU
- Rechercher les produits Axonaut via
GET /products?product_code=FMC130 - Stocker le
product_idAxonaut dans notre tablesku_mappings
Étape 2 : Destockage automatique
Quand une commande est finalisée (tous les IMEI scannés + FOTA OK) :
1. Pour chaque SKU de la commande :
a. GET /products/{axonaut_id}/stock → récupérer quantité actuelle
b. PATCH /products/{axonaut_id}/stock → { quantity: actuelle - nb_vendus }
2. POST /events (nature=6) sur la société "Amazon" :
- title: "Destockage - Commande Amazon #XXX"
- content: Liste des IMEI par produit
Étape 3 : Vérification
GET /products/{id}/stockpour confirmer le nouveau niveau de stock- Log du mouvement dans notre base (traçabilité)