Aller au contenu principal

Supabase API

Authentification

Toutes les requêtes nécessitent les headers suivants :

apikey: <SUPABASE_ANON_KEY>
Authorization: Bearer <JWT_TOKEN> # Pour les requêtes authentifiées
Content-Type: application/json

Products (Événements)

Lister les Événements

GET /rest/v1/product?select=*

Réponse :

[
{
"id": 1,
"name": "Anniversaire Marie",
"description": "Tous vos messages pour Marie",
"created_by": "uuid-user",
"date_event": "2024-03-15",
"plan": "basic",
"close": false,
"created_at": "2024-02-01T10:00:00Z"
}
]

Obtenir un Événement avec ses Messages

GET /rest/v1/product?id=eq.1&select=*,product_items(*)

Réponse :

{
"id": 1,
"name": "Anniversaire Marie",
"product_items": [
{
"id": "uuid-item",
"participant_name": "Jean",
"message_media": "<p>Joyeux anniversaire !</p>",
"message_type": "TEXT"
}
]
}

Créer un Événement

POST /rest/v1/product
Content-Type: application/json
Prefer: return=representation

{
"name": "Mon événement",
"description": "Description de l'événement",
"date_event": "2024-06-01",
"created_by": "uuid-user"
}

Réponse : 201 Created

{
"id": 2,
"name": "Mon événement",
"description": "Description de l'événement",
"date_event": "2024-06-01",
"created_by": "uuid-user",
"plan": null,
"close": false,
"created_at": "2024-02-15T14:30:00Z"
}

Mettre à Jour un Événement

PATCH /rest/v1/product?id=eq.1

{
"close": true
}

Réponse : 204 No Content

Supprimer un Événement

DELETE /rest/v1/product?id=eq.1

Réponse : 204 No Content


Product Items (Messages)

Lister les Messages d'un Événement

GET /rest/v1/product_items?product_id=eq.1&select=*&order=created_at.asc

Réponse :

[
{
"id": "uuid-1",
"product_id": 1,
"participant_id": "uuid-participant",
"participant_name": "Jean",
"message_media": "<p>Mon message</p>",
"message_type": "TEXT",
"created_at": "2024-02-10T09:00:00Z"
},
{
"id": "uuid-2",
"product_id": 1,
"participant_name": "Marie",
"message_media": "video_1/dedicaces_uuid.webm",
"message_type": "VIDEO",
"created_at": "2024-02-11T15:30:00Z"
}
]

Créer un Message Texte

POST /rest/v1/product_items
Content-Type: application/json
Prefer: return=representation

{
"product_id": 1,
"participant_id": "uuid-participant",
"participant_name": "Jean",
"message_media": "<p>Joyeux anniversaire !</p>",
"message_type": "TEXT"
}

Créer un Message Vidéo

POST /rest/v1/product_items
Content-Type: application/json

{
"product_id": 1,
"participant_id": "uuid-participant",
"participant_name": "Jean",
"message_media": "video_1/dedicaces_uuid.webm",
"message_type": "VIDEO"
}

Supprimer un Message

DELETE /rest/v1/product_items?id=eq.uuid-item

Storage

Upload Vidéo

POST /storage/v1/object/video_dedicace/video_1/dedicaces_uuid.webm
Content-Type: video/webm
Authorization: Bearer <JWT_TOKEN>

<binary video data>

Réponse : 200 OK

{
"Key": "video_dedicace/video_1/dedicaces_uuid.webm"
}

Obtenir une URL Signée

POST /storage/v1/object/sign/video_dedicace/video_1/dedicaces_uuid.webm

{
"expiresIn": 3600
}

Réponse :

{
"signedURL": "https://xxx.supabase.co/storage/v1/object/sign/video_dedicace/video_1/dedicaces_uuid.webm?token=..."
}

Filtres et Opérateurs

Opérateurs de Comparaison

OpérateurDescriptionExemple
eqÉgal?id=eq.1
neqDifférent?status=neq.closed
gtSupérieur?count=gt.10
gteSupérieur ou égal?date=gte.2024-01-01
ltInférieur?price=lt.100
lteInférieur ou égal?age=lte.30
likePattern matching?name=like.*marie*
ilikePattern (insensible)?name=ilike.*MARIE*
inDans une liste?id=in.(1,2,3)
isEst null/true/false?plan=is.null

Tri

GET /rest/v1/product?order=created_at.desc
GET /rest/v1/product?order=name.asc,created_at.desc

Pagination

GET /rest/v1/product?limit=10&offset=20

Sélection de Colonnes

GET /rest/v1/product?select=id,name,created_at

Relations

# Inclure les items
GET /rest/v1/product?select=*,product_items(*)

# Filtrer par relation
GET /rest/v1/product?select=*,product_items!inner(*)&product_items.message_type=eq.VIDEO

Codes de Réponse

CodeDescription
200Succès (GET, PATCH)
201Créé (POST avec return=representation)
204Pas de contenu (DELETE, PATCH sans return)
400Requête invalide
401Non authentifié
403Non autorisé (RLS)
404Non trouvé
409Conflit (contrainte unique)
500Erreur serveur