Beekube API
API Beekube v2 — Accédez à toutes vos données apicoles : ruchers, ruches, interventions, récoltes, reines, objets connectés. Créez des interventions et des tâches depuis vos outils. Configurez des webhooks pour recevoir des notifications en temps réel dans vos outils d'automatisation (Make, N8N, etc.).
Authentification
Incluez votre clé API dans l'en-tête X-API-KEY de chaque requête. Générez votre clé dans Configuration > Développeur.
Pagination
Les endpoints de liste retournent des résultats paginés. Utilisez les paramètres page et limit pour naviguer.
Webhooks
Souscrivez à des événements pour recevoir des notifications HTTP en temps réel. Les payloads sont signés avec HMAC-SHA256.
API d'écriture
Un endpoint par type : POST /interventions/{type} (groupe « Interventions (création) ») et POST /tasks/{type} (groupe « Tâches (création) »). Chaque endpoint publie son propre schéma de requête : toute clé inconnue est refusée et aucune valeur n'est convertie ("3" n'est pas un entier).
Scopes et auteur
write:interventionspour créer des interventions,write:taskspour créer des tâches. Cochez-les dansConfiguration > Développeur.- Une clé sans scopes explicites reste en lecture seule : un scope
write:*doit toujours être coché. - Les saisies sont faites au nom de l'« Auteur des saisies » choisi pour la clé (un membre non lecteur de l'exploitation), sinon au nom du propriétaire de l'exploitation.
- Scope manquant, auteur lecteur ou retiré, aucun auteur possible :
403.
Enveloppe commune
{
"target": { "beehiveId": 12 },
"date": "2026-10-04T10:15:00+02:00",
"comments": "RAS",
"taskId": 87,
"stepId": null,
"data": {}
}
target: exactement une forme parmi{"beehiveId": 12}(une ruche),{"beehiveIds": [12, 13]}(1 à 100 ruches, une saisie par ruche),{"apiaryId": 3}(toutes les ruches actives du rucher),{"queenId": 5}(une reine) et{}(l'exploitation, pourqueen-reserve-addseulement). Les formes acceptées sont indiquées par chaque endpoint ; une autre forme donnetarget_not_allowed.date: RFC 3339 avec fuseau horaire. Intervention : facultative (défaut : maintenant), au plus maintenant + 5 minutes. Tâche : obligatoire (date planifiée), du 2000-01-01 à maintenant + 5 ans. Une saisie a posteriori est permise.comments: 1 à 10 000 caractères. Omettez le champ plutôt que d'envoyer une chaîne vide.taskId(interventions) : tâche non validée, du même type, sur une des ruches ciblées. Elle est validée par la création.stepId(élevage de reines) : étape de la série. SansstepId, l'étape en cours est cherchée sur la ruche ciblée.data: champs propres au type, décrits par le schéma de l'endpoint.{}ou absent pour un type sans données.
Réponses
- Interventions :
200avec{"data": [...], "count": n}, une intervention par ruche ciblée, au format deGET /interventions/{id}. Les interventions créées en cascade (déplacement de ruche d'une division, etc.) restent consultables parGET /interventions. - Tâches :
200avec{"taskGroupId": 451, "data": [...], "count": n}. - Les automatismes, webhooks (
intervention.created,task.created) et mises à jour de la ruche ou de la reine sont ceux de la saisie dans l'application. Un automatisme en erreur ne fait pas échouer la création.
Idempotence : Idempotency-Key
En-tête facultatif, un UUID v4 par saisie (Idempotency-Key: 3f6c2b1e-8a4d-4c3e-9b7a-1d2e3f4a5b6c). Rejouer la même requête avec la même clé renvoie la même réponse 200 sans rien créer de nouveau : un client peut réessayer sans risque après une coupure réseau. La même clé avec un corps différent donne 400 idempotency_key_reused. Une valeur qui n'est pas un UUID v4 donne type_mismatch sur le chemin Idempotency-Key.
Erreurs de validation (400)
Toutes les erreurs détectables avant l'écriture sont renvoyées en une fois, sans rien enregistrer :
{
"error": {
"code": 400,
"message": "Requête invalide",
"details": {
"violations": [
{ "path": "data.quantity.unit", "code": "invalid_choice", "message": "Valeurs autorisées : gram, kilogram, millilitre" },
{ "path": "target.beehiveIds[3]", "code": "not_found", "message": "Ruche inconnue" }
]
}
}
}
path suit la notation du corps (data.supers[2].frames). Codes : required, unknown_field, type_mismatch, invalid_choice, out_of_range, too_short, too_long, count, duplicate, invalid_date, date_in_future, exclusive, not_found, target_not_allowed, apiary_empty, precondition_failed, idempotency_key_reused. Un identifiant inconnu et un identifiant d'une autre exploitation donnent la même erreur not_found. precondition_failed signale un geste impossible dans l'état actuel (reine absente, ruche déjà pourvue, étape introuvable…) : la saisie n'est pas enregistrée.
Référentiels
Les identifiants à fournir se lisent dans le groupe « Référentiel » : GET /feed-types, /feed-presets, /treatments, /treatment-presets, /materials, /maladies, /bees, /beehive-types, /contacts, /evaluation-criteria, /supers, /breeding-configs et /queen-breeding-steps (paramètres beehive_id et type facultatifs). Les unités (gram, kilogram, millilitre…) sont des valeurs fixes, listées dans chaque schéma.
Exemples
Tâche de nourrissement sur tout un rucher (une tâche par ruche) :
POST /api/v2/tasks/feed
X-API-KEY: votre-clé
Content-Type: application/json
{
"target": { "apiaryId": 3 },
"date": "2026-10-15T09:00:00+02:00",
"comments": "Avant l'hivernage",
"data": { "feedTypeId": 2, "quantity": { "value": 1.5, "unit": "kilogram" } }
}
Intervention simple, une visite sur deux ruches :
POST /api/v2/interventions/check
X-API-KEY: votre-clé
Idempotency-Key: 3f6c2b1e-8a4d-4c3e-9b7a-1d2e3f4a5b6c
Content-Type: application/json
{
"target": { "beehiveIds": [12, 13] },
"data": { "seeQueen": true, "seeBrood": true, "broodFrames": 6, "powerPercent": 80, "behaviour": "calm" }
}
Division vers une ruche existante et une ruche à créer :
POST /api/v2/interventions/splitting
X-API-KEY: votre-clé
Content-Type: application/json
{
"target": { "beehiveId": 12 },
"date": "2026-05-02T11:00:00+02:00",
"data": {
"daughters": [
{ "beehiveId": 21 },
{ "create": { "beehiveTypeId": 1, "reference": "R-2026-07" } }
]
}
}
Étape d'élevage, le greffage d'une série en cours (stepId lu dans GET /queen-breeding-steps?type=queen-breeding-gref) :
POST /api/v2/interventions/queen-breeding-gref
X-API-KEY: votre-clé
Content-Type: application/json
{
"target": { "beehiveId": 30 },
"stepId": 418,
"data": { "actualQuantity": 32 }
}
Document OpenAPI
https://www.beekube.com/docs/v2_openapi.yaml
Contact Support Beekube: [email protected]