Bearer token Coordonnées TLCTLC coordinates Endpoint schemaSchema endpoint OpérateursOperators

Guide développeur
Interroger APIBASE par code
Developer Guide
Querying APIBASE from code

Découvrez vos tables, lisez leurs coordonnées, puis adressez chaque enregistrement directement — sans ORM, sans jointures, sans deviner.

Discover your tables, read their coordinates, then address every record directly — no ORM, no joins, no guessing.

Comment ça fonctionneHow it works

APIBASE expose les données par coordonnées, pas par SQL. Chaque valeur dans votre base possède une adresse : un ID de table, une ligne et un ID de colonne.

APIBASE exposes data through coordinates, not SQL. Every value in your base has an address: a Table ID, a Line, and a Column ID.

T

Table

Un entier stable attribué à chaque table. Il ne change jamais après la création.

A stable integer assigned to each table. Never changes after creation.

L

LigneLine

La valeur de clé primaire d’un enregistrement. L42 cible la ligne dont id_* = 42.

The primary key value of a record. L42 targets the row whose id_* = 42.

C

ColonneColumn

Un entier stable attribué à chaque colonne. La colonne 1 est toujours la clé primaire.

A stable integer assigned to each column. Column 1 is always the primary key.

Votre proxy conserve le token. Votre frontend appelle votre proxy. APIBASE ne voit jamais le navigateur directement.

Your proxy holds the token. Your frontend calls your proxy. APIBASE never sees the browser.

# the flow
Browser → your proxy (holds token) → APIBASE
                                  ↳ checks ACL
                                  ↳ returns data

Tokens et ACLs Hive — le flux completTokens and Hive ACLs — the complete flow

Chaque utilisateur crée ses propres tokens dans son compte APIBASE. Le même compte peut posséder simultanément un token full et un token hive.

Every user creates their own tokens in their APIBASE account. The same account can hold both a full token and a hive token simultaneously.

scope: full — votre propre basescope: full — your own base

Donne accès à /api/* sur votre propre base. À utiliser lorsque vous êtes le propriétaire des données et que vous interrogez vos propres tables.

Gives access to /api/* on your own base. Use this when you are the data owner querying your own tables.

scope: hive — bases partagéesscope: hive — shared bases

Donne accès à /hive/* sur les bases où un autre propriétaire vous a accordé des droits. Vous interrogez ses données dans le périmètre défini par les ACLs.

Gives access to /hive/* on bases where another owner has granted you rights. You query their data, scoped by ACL.

# Worker's tokens page — creates their own hive token
id_token  label                  scope  status
19        Agent-research For HIVE  hive   Active

Une fois que le worker possède son token, il communique son ID de token (ici : 19) au propriétaire de la base. Le propriétaire ouvre ensuite Account → Hive ACLs → Add ACL et définit précisément les tables accessibles par ce token ainsi que les droits accordés :

Once the worker has their token, they communicate the token ID (here: 19) to the base owner. The owner then opens Account → Hive ACLs → Add ACL and sets exactly which tables that token can access and with which rights:

# Owner's Hive ACLs — one rule per token + table
id_token  label                    table          read  add  edit  delete
19        Agent-research For HIVE  memorys (T30)   ✓    ✓    —     —
Enregistrer une base dans Hive ne donne aucun accès par défaut — les permissions doivent être ajoutées explicitement dans les ACLs Hive, table par table. Tant qu’une règle ACL n’existe pas pour une combinaison token + table, toute requête /hive/* sur cette table retourne 403.Registering a base in Hive does not grant access by itself — permissions must be added explicitly in Hive ACLs, table by table. Until an ACL rule exists for a token + table combination, every /hive/* request on that table returns 403.

Étape 1 — Découvrir votre schémaStep 1 — Discover your schema

Appelez l’endpoint schema pour obtenir les IDs T et C avant de construire vos requêtes.

Call the schema endpoint to get T and C ids before building your queries.

Token propriétaire (scope: full)Owner token (scope: full)

GET /api/schema Toutes vos tables — ID T, nombre de lignes, min_idAll tables you own — T id, row count, min_id
GET /api/schema/{tablename} Colonnes d’une table — IDs C et nomsColumns for one table — C ids and names

Token worker (scope: hive)Worker token (scope: hive)

GET /hive/schema/{basekey} Tables lisibles par ce worker — filtrées par ACLTables this worker can read — filtered by ACL
GET /hive/schema/{basekey}/{tablename} Colonnes — 403 si hors ACL du workerColumns — 403 if not in worker's ACL
GET /hive/schema/pierre/equipements

{
  "status":  "success",
  "table":   "equipements",
  "T":       31,
  "columns": {
    "1": "id_equipement",
    "2": "equipement",
    "3": "nom",
    "4": "categorie"
  },
  "hive_base": "pierre"
}
Sauvegardez les IDs T et C une seule fois dans votre configuration. Les deux sont stables — les noms de tables sont globaux dans APIBASE (modifier un nom crée une nouvelle table, ce n’est pas un renommage) et les IDs de colonnes ne changent jamais, même si le libellé de la colonne est modifié.Save T and C ids in your config once. Both are stable — table names are global in APIBASE (editing a name creates a new table, not a rename), and column ids never change regardless of column label edits.

Étape 2 — Structure d’URLStep 2 — URL structure

Chaque requête de lecture suit ce modèle. Les segments sont positionnels — la valeur de filtre va seulement dans ?V=.

Every read request follows this pattern. Segments are positional — filter value in ?V= only.

/hive/get/{basekey}/T31/L/C3/O28?V=pump
T31 — table id L — all lines  ·  L42 — primary key 42 C3 — filter on column 3 O28 — operator (LIKE) V=pump — filter value
# all rows
GET /hive/get/{base}/T31/L

# one row by primary key
GET /hive/get/{base}/T31/L42

# filter: category == "HVAC"
GET /hive/get/{base}/T31/L/C4/O1?V=HVAC

# filter: name contains "pump"
GET /hive/get/{base}/T31/L/C3/O28?V=pump

# named keys (format=assoc)
GET /hive/get/{base}/T31/L?format=assoc

# single cell value
GET /hive/get/{base}/T31/L42/C3

Étape 3 — OpérateursStep 3 — Operators

Passez le numéro d’opérateur dans le segment O{n} et la valeur à tester dans ?V=.

Pass the operator number in the O{n} segment and the test value in ?V=.

OSymboleSymbolDescriptionExemple ?V=Example ?V=
1==Equal (loose, numeric-aware)V=42
3!=Not equalV=draft
6<Less thanV=100
7>Greater thanV=1000
28LIKEContains (case-insensitive)V=pump
32BETWEENInclusive range — _ separatorV=100_500
33IN LISTValue is one of — _ separatorV=new_reserved

Endpoints d’écritureWrite endpoints

POST, PUT et DELETE suivent le même système de coordonnées. Le token doit posséder le droit ACL correspondant.

POST, PUT, and DELETE follow the same coordinate system. The token must have the matching ACL right.

POST /hive/post/{base}/T{n} Ajouter un enregistrement — body : {"record": {...}}Add a record — body: {"record": {...}}
PUT /hive/put/{base}/T{n}/L{pk} Remplacer une ligne complèteReplace a full line
PUT /hive/put/{base}/T{n}/L{pk}/C{n} Modifier une seule cellule — body : {"value": "..."}Update a single cell — body: {"value": "..."}
DELETE /hive/delete/{base}/T{n}/L{pk} Supprimer un enregistrement par clé primaireDelete one record by primary key
# POST — add a record
POST /hive/post/pierre/T31
Authorization: Bearer <token>

{ "record": { "nom": "Centrifugal pump", "categorie": "HVAC" } }

# PUT cell — update one value
PUT /hive/put/pierre/T31/L99/C4
{ "value": "Plumbing" }

Archives — le coffre à suffixesArchives — the Suffix Vault

Quand une table devient trop volumineuse, elle est rotée vers une archive en lecture seule. La table active reste rapide. L’historique reste interrogeable.

When a table fills up, it rotates into a read-only archive. The active table stays fast. The past stays queryable.

Chaque table APIBASE possède un compteur de cellules. Lorsqu’il atteint sa limite, vous déclenchez une rotation depuis le tableau de bord : APIBASE prend un snapshot global de cohérence — toutes les tables liées en même temps — et le fige comme segment d’archive en lecture seule. La table active repart ensuite allégée.

Each APIBASE table has a cell counter. When it reaches its limit, you trigger a rotation from the dashboard: APIBASE takes a global consistency snapshot — all related tables at once — and freezes it as a read-only archive chunk. The active table starts fresh.

BASE activeActive BASE

Modifiable. Rapide. Le compteur de cellules augmente à chaque écriture. C’est la cible par défaut de vos requêtes.

Writable. High speed. Cell counter increments with every write. This is what your queries hit by default.

Rotation

Déclenchée depuis le tableau de bord APIBASE. Prend un snapshot des tables liées ensemble pour préserver l’intégrité relationnelle au passage de frontière entre segments.

Triggered from the APIBASE dashboard. Snapshots all related tables together to preserve relational integrity across the chunk boundary.

Coffre à suffixesSuffix Vault

Segments en lecture seule nommés aaa, aab, aac… Les clés primaires restent continues — L95 dans l’archive aaa reste le même enregistrement qu’avant.

Read-only chunks named aaa, aab, aac… Primary keys are continuous — L95 in archive aaa is the same record it always was.

Pour interroger une archive, ajoutez ?archive={suffix} à n’importe quelle requête de lecture. Tout le reste demeure identique — même T, même L, même C, mêmes opérateurs.

To query an archive, add ?archive={suffix} to any read request. Everything else stays identical — same T, same L, same C, same operators.

# active table — default, no parameter needed
GET /hive/get/{base}/T2/L95

# same record in archive chunk "aaa"
GET /hive/get/{base}/T2/L95?archive=aaa

# filter across an archive chunk
GET /hive/get/{base}/T2/L/C3/O1?V=active&archive=aab&format=assoc
Les IDs ne se collisionnent jamais. La rotation préserve la continuité des clés primaires entre les segments. Un enregistrement L95 dans l’archive aaa et un enregistrement L95 dans la table active sont deux enregistrements différents — la table active a repris le comptage là où l’archive s’est arrêtée.IDs never collide. The rotation preserves primary key continuity across all chunks. A record at L95 in archive aaa and a record at L95 in the active table are two different records — the active table started counting from where the archive left off.

Exemples completsComplete examples

Un proxy minimal en trois langages. Le token reste côté serveur. Le navigateur reste propre.

A minimal proxy in three languages. The token stays server-side. The browser stays clean.

Ces exemples utilisent un token hive — créé dans votre propre compte APIBASE, avec des droits accordés par le propriétaire de la base.

These examples use a hive token — created in your own APIBASE account, with rights granted by the base owner.

JavaScript (Node / fetch)

const API        = 'https://apibase.work';
const BASE       = 'pierre';            // basekey of the owner's base
const HIVE_TOKEN = process.env.HIVE_TOKEN; // your hive token (scope: hive)

// 1 — discover schema (only tables the owner granted you)
const schema = await fetch(
  `${API}/hive/schema/${BASE}/equipements`,
  { headers: { Authorization: `Bearer ${HIVE_TOKEN}` } }
).then(r => r.json());

const T = schema.T;  // 31 — store this in config

// 2 — query: category == "HVAC"
const result = await fetch(
  `${API}/hive/get/${BASE}/T${T}/L/C4/O1?V=HVAC&format=assoc`,
  { headers: { Authorization: `Bearer ${HIVE_TOKEN}` } }
).then(r => r.json());

PHP

$api       = 'https://apibase.work';
$base      = 'pierre';               // basekey of the owner's base
$hiveToken = getenv('HIVE_TOKEN');   // your hive token (scope: hive)

// 1 — schema once — store T + C ids in config
$schema = api_get("$api/hive/schema/$base/equipements", $hiveToken);
$T      = $schema['T'];  // 31

// 2 — filter: nom contains "pump"
$rows = api_get("$api/hive/get/$base/T{$T}/L/C3/O28?V=pump&format=assoc", $hiveToken)['data'];

Python

import os, requests

API        = "https://apibase.work"
BASE       = "pierre"                 # basekey of the owner's base
HIVE_TOKEN = os.environ["HIVE_TOKEN"]  # your hive token (scope: hive)
HDR        = {"Authorization": f"Bearer {HIVE_TOKEN}"}

# 1 — schema once
T = requests.get(f"{API}/hive/schema/{BASE}/equipements", headers=HDR).json()["T"]

# 2 — BETWEEN: id between 60001 and 60100
rows = requests.get(
  f"{API}/hive/get/{BASE}/T{T}/L/C1/O32?V=60001_60100&format=assoc",
  headers=HDR,
).json()["data"]

Checklist d’intégrationIntegration checklist

  1. Créez votre tokenCreate your token Dans votre compte APIBASE, générez un token avec le scope hive. Donnez votre ID de token au propriétaire de la base — il vous accorde les droits table par table. Gardez le token côté serveur seulement.In your APIBASE account, generate a token with scope hive. Give your token ID to the base owner — they grant you rights table by table. Keep the token server-side only.
  2. Appelez /schema une foisCall /schema once Récupérez les IDs T et C pour chaque table nécessaire. Stockez-les dans un fichier de config ou des constantes. Ils sont permanents.Retrieve T and C ids for each table you need. Store them in a config file or constants. They are permanent.
  3. Construisez votre proxyBuild your proxy Un seul fichier dans le langage de votre choix. Il lit le token depuis une variable d’environnement, relaie les requêtes vers APIBASE et retourne le JSON au navigateur.One file in any language. Reads the token from an environment variable, relays requests to APIBASE, returns JSON to the browser.
  4. Interrogez par coordonnéesQuery by coordinates Utilisez T{n}/L pour les tables complètes, T{n}/L{pk} pour une ligne, C{n}/O{op}?V= pour les filtres. Ajoutez ?format=assoc pour obtenir des clés nommées.Use T{n}/L for full tables, T{n}/L{pk} for one row, C{n}/O{op}?V= for filters. Add ?format=assoc for named keys.
  5. Vérifiez la réponseCheck the response Chaque réponse inclut "status": "success" ou une erreur HTTP avec "message". Les lectures et écritures refusées sont explicites — jamais silencieuses.Every response includes "status": "success" or an HTTP error with "message". Denied reads and writes are explicit — never silent.
Collection Postman / Insomnia — tous les endpoints sont prêts, avec une seule variable à remplir (token). Télécharger la collection →Postman / Insomnia collection — all endpoints pre-built, one variable to fill (token). Download collection →