Une API.
Vos possibilités.
Authentifiez-vous, découvrez le modèle, envoyez votre premier message.
Votre compte, votre accès.
Créez votre compte sur le site, puis générez un jeton dans votre espace. Vous pouvez aussi obtenir un jeton avec votre email et votre mot de passe :
curl https://api.famchek.com/auth/token \
-H 'Content-Type: application/json' \
-d '{"email":"vous@exemple.com","password":"VOTRE_MOT_DE_PASSE"}'La réponse contient access_token (alias token), refresh_token, client_id, expires_in, scope et user. L’access token dure 1 heure ; le refresh token 30 jours. Ne conservez pas le mot de passe dans l’application. Les endpoints protégés exigent Authorization: Bearer VOTRE_JETON.
Connexion navigateur : OAuth 2.0 + PKCE
Enregistrez votre application dans Mes applications pour obtenir un client_id public et enregistrer ses URLs de retour exactes (HTTPS, ou HTTP sur 127.0.0.1 / [::1] avec un port explicite). Aucun secret applicatif n’est nécessaire. Permissions : profile et api.
Créez un verifier aléatoire de 43 à 128 caractères, son challenge SHA-256 encodé en base64url sans padding, et un state aléatoire. Ouvrez le navigateur système sur :
https://famchek.com/oauth/authorize
?response_type=code&client_id=CLIENT_ID
&redirect_uri=URL_ENCODED_CALLBACK&scope=profile%20api
&state=RANDOM_STATE&code_challenge=CHALLENGE
&code_challenge_method=S256L’utilisateur se connecte et autorise ou refuse l’application. Le callback reçoit code et state. Vérifiez le state, puis échangez le code (valable 5 minutes, utilisable une seule fois) :
curl https://api.famchek.com/oauth/token \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'client_id=CLIENT_ID' \
--data-urlencode 'redirect_uri=http://127.0.0.1:8765/callback' \
--data-urlencode 'code=CODE' \
--data-urlencode 'code_verifier=ORIGINAL_VERIFIER'
Connexion CLI / VPS : Device Code
curl https://api.famchek.com/oauth/device_authorization \
-d 'client_id=CLIENT_ID&scope=profile%20api'Affichez verification_uri et user_code. L’utilisateur se connecte sur le site et confirme l’accès. verification_uri_complete préremplit le code sans l’autoriser automatiquement. Le device_code reste secret dans la CLI ; les codes expirent après 10 minutes.
curl https://api.famchek.com/oauth/token \
-d 'grant_type=urn:ietf:params:oauth:grant-type:device_code' \
-d 'client_id=CLIENT_ID' -d 'device_code=DEVICE_CODE'Attendez au moins interval secondes entre les requêtes (5 par défaut). authorization_pending demande de patienter ; slow_down impose d’ajouter 5 secondes à tous les intervalles suivants. Arrêtez en cas de access_denied, expired_token ou invalid_grant. Après approbation, la réponse contient la même paire de jetons que les autres méthodes.
Renouveler automatiquement
curl https://api.famchek.com/oauth/token \
-d 'grant_type=refresh_token' -d 'client_id=CLIENT_ID' \
-d 'refresh_token=CURRENT_REFRESH_TOKEN'Avant l’expiration de l’access token, renouvelez puis remplacez atomiquement les deux jetons dans votre stockage sécurisé. Chaque nouveau refresh token est valable 30 jours. L’ancien ne doit plus être utilisé : son rejeu révoque toute cette connexion. Sérialisez les renouvellements concurrents. invalid_grant impose une nouvelle connexion. L’alias POST /auth/refresh accepte aussi le refresh token de la connexion directe.
Les métadonnées sont disponibles à /.well-known/oauth-authorization-server. Les applications web peuvent appeler l’API depuis les origines HTTPS de leurs callbacks enregistrés, avec Bearer et sans cookies interorigines. Ne placez aucun token dans une URL ou localStorage.
Créer un compte depuis l’API
curl https://api.famchek.com/auth/register \
-H 'Content-Type: application/json' \
-d '{"email":"vous@exemple.com","password":"VOTRE_MOT_DE_PASSE"}'Mot de passe : au moins 10 caractères, ni courant, ni entièrement numérique. Réponse HTTP 201 avec le jeton et le profil. Les adresses email sont normalisées en minuscules.
Les modèles disponibles.
/v1/modelscurl https://api.famchek.com/v1/models \
-H 'Authorization: Bearer VOTRE_JETON'{
"object": "list",
"data": [{
"id": "donkey-test",
"object": "model",
"created": 1791417600,
"owned_by": "donkey"
}]
}Votre premier message.
/v1/chat/completionscurl https://api.famchek.com/v1/chat/completions \
-H 'Authorization: Bearer VOTRE_JETON' \
-H 'Content-Type: application/json' \
-d '{"model":"donkey-test","messages":[{"role":"user","content":"Bonjour !"}]}'La réponse suit le format chat.completion. Le texte se trouve dans choices[0].message.content. Pour recevoir des événements SSE au format OpenAI, ajoutez "stream": true. Le flux se termine par data: [DONE].
Un modèle inconnu renvoie HTTP 404. Une requête invalide renvoie HTTP 400. Un jeton absent, expiré ou révoqué renvoie HTTP 401. Les erreurs utilisent une enveloppe error. Les compteurs usage valent zéro : ce prototype ne fait aucune tokenisation.
Avec le SDK OpenAI.
Renseignez l’URL de base DonKey et utilisez votre jeton DonKey comme clé API.
from openai import OpenAI
client = OpenAI(
base_url="https://api.famchek.com/v1",
api_key="VOTRE_JETON_DONKEY",
)
print(client.models.list())
response = client.chat.completions.create(
model="donkey-test",
messages=[{"role": "user", "content": "Bonjour !"}],
)
print(response.choices[0].message.content)Gardez le contrôle.
GET /auth/me retourne l’utilisateur associé au jeton. Révoquez le jeton courant avec :
curl -X POST https://api.famchek.com/auth/logout \
-H 'Authorization: Bearer VOTRE_JETON'Une réponse HTTP 204 confirme la révocation de toute cette connexion, access et refresh tokens compris. Si l’access token est expiré, appelez POST /oauth/revoke avec client_id et token=REFRESH_TOKEN : HTTP 200 confirme le traitement, même si déjà révoqué. Mes applications permet de révoquer une connexion ou désactiver une application. Dans votre espace, « Révoquer mes jetons » invalide tous vos jetons API. La déconnexion du site ferme votre session navigateur.