API Documentation
Version 1.2 - Avril 2026
Authentification
L'API utilise une authentification par clef API. Incluez votre clef API dans l'en-tete X-Api-Key de chaque requete.
curl -X GET "https://plus-tard.com/api/auth/validate" \ -H "X-Api-Key: votre_clef_api"
Valide une clef API et retourne ses informations.
Headers
| Nom | Type | Description |
|---|---|---|
X-Api-Key requis |
string | Votre clef API |
Reponse
200 OK { "valid": true, "api_key": { "created_at": "2026-01-01T12:00:00+00:00", "expires_at": "2027-01-01T12:00:00+00:00", "last_used_at": "2026-01-28T10:30:00+00:00" } }
Gestion des utilisateurs
Cree un nouvel utilisateur et retourne une URL pour connecter ses comptes sociaux.
Corps de la requete
| Parametre | Type | Description |
|---|---|---|
email optionnel |
string | Adresse email de l'utilisateur |
language optionnel |
string | Langue preferee (fr, en). Defaut: fr |
Exemple de requete
curl -X POST "https://plus-tard.com/api/auth/register" \
-H "X-Api-Key: votre_clef_api" \
-H "Content-Type: application/json" \
-d '{
"email": "utilisateur@example.com",
"language": "fr"
}'
Reponse
201 Created { "success": true, "user": { "id": 123, "email": "utilisateur@example.com", "language": "fr", "is_subscribed": true }, "oauth_url": "https://plus-tard.com/api/auth/connect/eyJ..." }
Erreurs possibles
400 Bad Request - Email invalide { "success": false, "error": "invalid_email", "error_description": "The provided email address is not valid" } 409 Conflict - Email deja utilise { "success": false, "error": "email_exists", "error_description": "A user with this email already exists" }
Recupere les informations d'un utilisateur par son ID, incluant ses comptes sociaux connectes.
Parametres de l'URL
| Parametre | Type | Description |
|---|---|---|
id requis |
integer | ID de l'utilisateur |
Reponse
200 OK { "success": true, "user": { "id": 123, "email": "utilisateur@example.com", "language": "fr", "is_subscribed": true, "providers": [ { "id": 1, "provider": "facebook", "providerId": "10225678901234567", "username": "John Doe", "accounts": [ { "id": "123456789", "name": "Ma Page Facebook", "type": "page" } ] }, { "id": 2, "provider": "linkedin", "providerId": "urn:li:person:AbCdEf123", "username": "John Doe", "accounts": [] } ], "created_at": "2026-01-01T12:00:00+00:00", "updated_at": "2026-01-28T10:30:00+00:00" } }
Genere une nouvelle URL OAuth pour permettre a un utilisateur existant de connecter des comptes sociaux supplementaires.
Parametres de l'URL
| Parametre | Type | Description |
|---|---|---|
id requis |
integer | ID de l'utilisateur |
Reponse
200 OK { "success": true, "user_id": 123, "oauth_url": "https://plus-tard.com/api/auth/connect/eyJ..." }
OAuth - Connexion des comptes sociaux
Les endpoints OAuth permettent aux utilisateurs de connecter leurs comptes de reseaux sociaux. Le flux typique est le suivant:
- Creez un utilisateur via
POST /api/auth/registerpour obtenir uneoauth_url - Redirigez l'utilisateur vers cette URL
- L'utilisateur choisit le reseau social a connecter et s'authentifie
- Apres authentification reussie, le compte est lie et l'utilisateur voit une page de confirmation
- Facebook - Pages et profils
- Instagram - Comptes professionnels (connectes via Facebook)
- LinkedIn - Profils personnels et pages entreprise
- Twitter/X - Comptes utilisateur
- TikTok - Comptes createur
- Threads - Comptes utilisateur
- Bluesky - Comptes utilisateur (via mot de passe d'application)
POST /api/post (provider google), mais la connexion du compte Google n'est pas encore exposee via l'API publique. Elle se fait pour l'instant depuis l'interface web, dans les parametres du compte utilisateur.
Page de connexion OAuth. Affiche les boutons pour connecter les differents reseaux sociaux.
Parametres de l'URL
| Parametre | Type | Description |
|---|---|---|
token requis |
string | Token signe identifiant l'utilisateur (valide 24h) |
Callbacks OAuth
Ces endpoints sont appeles automatiquement par les plateformes sociales apres l'authentification. Ils ne doivent pas etre appeles directement.
| Methode | Endpoint | Description |
|---|---|---|
| GET | /api/auth/facebook/callback |
Callback Facebook OAuth |
| GET | /api/auth/linkedin/callback |
Callback LinkedIn (profil personnel) |
| GET | /api/auth/linkedin-pro/callback |
Callback LinkedIn (page entreprise) |
| GET | /api/auth/twitter/callback |
Callback Twitter/X OAuth |
| GET | /api/auth/tiktok/callback |
Callback TikTok OAuth |
| GET | /api/auth/threads/callback |
Callback Threads OAuth |
| POST | /api/auth/bluesky/connect |
Connexion Bluesky (via mot de passe d'application) |
Gestion des posts
Cree un nouveau post programme pour publication sur un reseau social.
Corps de la requete
| Parametre | Type | Description |
|---|---|---|
provider requis |
string | Plateforme cible: facebook, instagram, linkedin, twitter, tiktok, threads, bluesky, google |
plannedAt requis |
string | Date/heure de publication (format ISO 8601) |
pageId requis |
string | ID du compte cible sur le reseau social. Pour les providers avec sous-comptes (Facebook, Instagram), utilisez le champ id du sous-compte dans accounts. Pour les autres providers (Twitter, LinkedIn, Threads, TikTok, Bluesky, Google), utilisez le champ providerId retourne par GET /api/auth/user/{id}. |
text optionnel |
string | Texte du post |
imagePosts optionnel |
array | Liste d'URLs d'images ou videos. Chaque element peut etre une chaine (URL) ou un objet {"path": "URL", "isStory": false}. Le champ isStory permet de publier en story (Instagram). |
tiktokParams optionnel |
object | Parametres specifiques TikTok |
twitterParams optionnel |
object | Parametres specifiques Twitter |
Exemple de requete
curl -X POST "https://plus-tard.com/api/post" \
-H "X-Api-Key: votre_clef_api" \
-H "Content-Type: application/json" \
-d '{
"provider": "facebook",
"plannedAt": "2026-02-01T14:00:00Z",
"pageId": "123456789",
"text": "Mon nouveau post programme via l API!",
"imagePosts": [
"https://example.com/image1.jpg",
"https://example.com/image2.jpg"
]
}'
Reponse
201 Created { "success": true, "post_id": 456, "message": "Post created successfully" }
Erreurs possibles
400 Bad Request - Champs manquants { "error": "Missing required fields", "missing_fields": ["provider", "plannedAt"] } 400 Bad Request - Format de date invalide { "error": "Invalid date format for plannedAt. Expected ISO 8601 format (e.g., 2024-01-01T12:00:00Z)" }
Parametres Twitter/X
Pour les posts Twitter/X, vous pouvez specifier des parametres supplementaires pour creer des threads:
| Parametre | Type | Description |
|---|---|---|
is_thread |
boolean | Active le mode thread. Le texte sera automatiquement decoupe en plusieurs tweets. Defaut: false |
max_chars_per_tweet |
integer | Nombre maximum de caracteres par tweet dans un thread. Defaut: 280 |
{
"twitterParams": {
"is_thread": true,
"max_chars_per_tweet": 280
}
}
is_thread est active, le texte du post sera automatiquement divise en plusieurs tweets en respectant la limite de caracteres. Les medias (images/videos) seront attaches au premier tweet du thread.
Parametres TikTok
Pour les posts TikTok, vous pouvez specifier des parametres supplementaires:
| Parametre | Type | Description |
|---|---|---|
privacy_level |
string | Niveau de confidentialite: PUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, SELF_ONLY |
disable_comment |
boolean | Desactive les commentaires. Defaut: false |
disable_duet |
boolean | Desactive les duos. Defaut: false |
disable_stitch |
boolean | Desactive le stitch. Defaut: false |
brand_organic_toggle |
boolean | Indique un contenu promotionnel organique. Defaut: false |
brand_content_toggle |
boolean | Indique un partenariat de marque. Defaut: false |
{
"tiktokParams": {
"privacy_level": "PUBLIC_TO_EVERYONE",
"disable_comment": false,
"disable_duet": false,
"disable_stitch": false,
"brand_organic_toggle": false,
"brand_content_toggle": false
}
}
Contraintes par plateforme
imagePosts. Un post sans media sera rejete avec une erreur 400.
.mp4 uniquement. Les autres formats video (mov, avi, mkv, etc.) seront rejetes avec une erreur 400.
Formats de medias supportes
| Type | Extensions |
|---|---|
| Images | jpg, jpeg, png, gif, webp |
| Videos | mp4, mov, avi, mkv, webm, flv, wmv |
Codes d'erreur
| Code HTTP | Description |
|---|---|
| 200 | Requete reussie |
| 201 | Ressource creee avec succes |
| 400 | Requete invalide (parametres manquants ou incorrects) |
| 401 | Authentification requise ou clef API invalide |
| 403 | Acces refuse (l'utilisateur demande n'appartient pas a votre compte) |
| 404 | Ressource non trouvee |
| 409 | Conflit (ex: email deja utilise) |
| 500 | Erreur serveur interne |
Format des erreurs
Toutes les erreurs suivent un format standardise:
{
"success": false,
"error": "error_code",
"error_description": "Description lisible de l'erreur"
}
Codes d'erreur specifiques
| Code | Description |
|---|---|
missing_api_key |
L'en-tete X-Api-Key est manquant |
invalid_api_key |
La clef API est invalide ou expiree |
invalid_email |
L'adresse email fournie n'est pas valide |
email_exists |
Un utilisateur avec cet email existe deja |
user_not_found |
L'utilisateur demande n'existe pas |
access_denied |
Vous n'avez pas la permission d'acceder aux informations de cet utilisateur |
invalid_token |
Le token OAuth est invalide ou expire |
account_already_linked |
Le compte social est deja lie a un autre utilisateur |