API REST
Mis à jour le 27 juillet 2026 · 9 min de lecture
Sur cette page
L'API expose vos feuilles en lecture et en écriture. Les charges utiles suivent la forme de l'API Airtable : une intégration écrite pour Airtable se transpose sans réapprentissage.
URL de base : https://rowbase.co/api/v1
S'authentifier
Créez un jeton depuis Jetons d'API, dans la barre latérale. Réservé aux administrateurs. Vous cochez les tables auxquelles il donne accès ; il ne voit rien d'autre. Le secret n'est affiché qu'une fois.
Authorization: Bearer rowb_…
Sans en-tête, la réponse est 401 AUTHENTICATION_REQUIRED. Avec un jeton révoqué ou inconnu, 401 INVALID_API_KEY. Avec une table hors périmètre, 403 NOT_AUTHORIZED.
Le débit est limité à cinq appels par seconde et par jeton.
Lister les tables
GET /api/v1/tables
Renvoie les tables du jeton, leurs feuilles et les colonnes de chaque feuille. C'est là que vous lisez les identifiants à utiliser dans les autres appels.
{
"tables": [
{
"id": "1",
"slug": "lar",
"name": "LAR",
"sheets": [
{
"id": "5",
"slug": "sheet-1",
"name": "Sheet 1",
"fields": [
{ "id": "fld20", "name": "ID", "type": "text" },
{ "id": "fld23", "name": "Email", "type": "email" }
]
}
]
}
]
}
Une table et une feuille se désignent indifféremment par leur slug ou par leur identifiant numérique.
Lister des enregistrements
GET /api/v1/tables/{table}/{sheet}/records
{
"records": [
{
"id": "0c8f2b16-1f3e-4a91-9a0c-2b7d0f5c8ab1",
"createdTime": "2026-07-27T00:06:46.000Z",
"fields": { "ID": "…", "Website": "lettre-ar.com" }
}
],
"offset": "100"
}
L'identifiant d'un enregistrement est un UUID, sans rapport avec sa position ni avec la clé interne. Les cellules sont keyées par nom de colonne ; une cellule vide est absente de la charge utile.
| Paramètre | Effet |
|---|---|
pageSize |
Enregistrements par page, 100 au maximum et par défaut |
offset |
Reprend la page suivante, renvoyé tant qu'il en reste |
maxRecords |
Borne le nombre total renvoyé |
fields[] |
Ne renvoie que ces colonnes, par nom ou par fld… |
sort[0][field], sort[0][direction] |
Trie sur une colonne, asc ou desc |
returnFieldsByFieldId |
Keye les cellules par fld… plutôt que par nom |
filterByFormula et view n'existent pas : Rowbase n'a ni formules ni vues.
Lire un enregistrement
GET /api/v1/tables/{table}/{sheet}/records/{recordId}
Créer des enregistrements
POST /api/v1/tables/{table}/{sheet}/records
Une seule ligne :
{ "fields": { "ID": "abc", "Website": "lettre-ar.com" } }
Ou jusqu'à dix d'un coup :
{ "records": [ { "fields": { "ID": "abc" } }, { "fields": { "ID": "def" } } ] }
La réponse a la même forme que la requête : un objet pour la forme unitaire, un tableau records pour la forme groupée.
Les valeurs sont converties selon le type de la colonne, comme une saisie dans la grille. Un nom de colonne inconnu renvoie 422 UNKNOWN_FIELD_NAME, et rien n'est écrit.
Une ligne créée par l'API déclenche les synchronisations Google Sheets de la feuille, exactement comme une saisie à la main.
Modifier des enregistrements
PATCH /api/v1/tables/{table}/{sheet}/records
{ "records": [ { "id": "0c8f2b16-…", "fields": { "Website": "exemple.fr" } } ] }
PATCH ne touche qu'aux cellules fournies. PUT remplace la ligne : les cellules absentes sont vidées.
Une modification par l'API réécrit la ligne dans Google Sheets, comme une modification faite dans la grille.
Supprimer des enregistrements
DELETE /api/v1/tables/{table}/{sheet}/records?records[]=0c8f2b16-…
{ "records": [ { "id": "0c8f2b16-…", "deleted": true } ] }
Dix enregistrements au maximum par appel.
Erreurs
Toutes les erreurs ont la même forme :
{ "error": { "type": "UNKNOWN_FIELD_NAME", "message": "Unknown field “Nope”." } }
| Type | Code | Quand |
|---|---|---|
AUTHENTICATION_REQUIRED |
401 | En-tête Authorization absent |
INVALID_API_KEY |
401 | Jeton inconnu ou révoqué |
NOT_AUTHORIZED |
403 | Table hors du périmètre du jeton |
TABLE_NOT_FOUND, SHEET_NOT_FOUND, ROW_NOT_FOUND |
404 | Identifiant inconnu |
UNKNOWN_FIELD_NAME |
422 | Nom de colonne absent de la feuille |
TOO_MANY_RECORDS |
422 | Plus de dix enregistrements dans un appel |
INVALID_REQUEST_BODY |
422 | Corps mal formé |
RATE_LIMIT_REACHED |
429 | Plus de cinq appels par seconde |
Exemple complet
curl -X POST https://rowbase.co/api/v1/tables/lar/sheet-1/records \
-H "Authorization: Bearer rowb_…" \
-H "Content-Type: application/json" \
-d '{
"fields": {
"ID": "Cj0KCQjw4a3OBhCHARIsAChaq",
"Date": "2026-04-01 02:35:53",
"Website": "lettre-ar.com",
"Email": "[email protected]"
}
}'