Skip to content

Accounts

Les exemples utilisent $SPAVIK_BASE_URL et $SPAVIK_API_KEY, définis dans Démarrer.

GET /health

État du service et de ses dépendances

Authentification : Route publique, aucune authentification

Réponses

CodeDescription
200Succès

Exemple

sh
curl -X GET "$SPAVIK_BASE_URL/health" \
  -H 'X-API-Key: sk-spv-api-...'

GET /openapi.json

Contrat de l'API (ce document)

Authentification : Route publique, aucune authentification

Réponses

CodeDescription
200Succès

Exemple

sh
curl -X GET "$SPAVIK_BASE_URL/openapi.json" \
  -H 'X-API-Key: sk-spv-api-...'

GET /v1/api-keys

Lister les clés du workspace

Authentification : Clé d'usage (X-API-Key) ou session web (Authorization: Bearer)

Paramètres

NomTypeDescription
limitqueryintegerfacultatif
offsetqueryintegerfacultatif

Réponses

CodeDescription
200Succès
401Authentification requise, ou jeton invalide.
403Cet appelant n'est pas autorisé à faire cette action.

Exemple

sh
curl -X GET "$SPAVIK_BASE_URL/v1/api-keys" \
  -H 'X-API-Key: sk-spv-api-...'

POST /v1/api-keys

Créer une clé d'API

Authentification : Clé d'usage (X-API-Key) ou session web (Authorization: Bearer)

Corps de la requête

NomTypeDescription
namestringrequis
kindapi | adminfacultatifUne clé « admin » ne se crée que depuis une session web, et son préfixe est sk-spv-admin-.
expires_atstringfacultatifFacultatif. Sans lui la clé n'expire jamais, ce que veulent les clés de production.

Réponses

CodeDescription
201Créée (le secret n'est rendu qu'une seule fois)
401Authentification requise, ou jeton invalide.
403Cet appelant n'est pas autorisé à faire cette action.

Exemple

sh
curl -X POST "$SPAVIK_BASE_URL/v1/api-keys" \
  -H 'X-API-Key: sk-spv-api-...' \
  -H 'Content-Type: application/json' \
  -d '{
  "name": "prod",
  "kind": "api"
}'

DELETE /v1/api-keys/{keyId}

Révoquer une clé

Authentification : Clé d'usage (X-API-Key) ou session web (Authorization: Bearer)

Réponses

CodeDescription
204Révoquée
401Authentification requise, ou jeton invalide.
403Cet appelant n'est pas autorisé à faire cette action.
404Clé inconnue.

Exemple

sh
curl -X DELETE "$SPAVIK_BASE_URL/v1/api-keys/{keyId}" \
  -H 'X-API-Key: sk-spv-api-...'

POST /v1/api-keys/{keyId}/rotate

Remplacer une clé sans couper l'application

Crée une clé jumelle (même portée) et donne à l'ancienne une date de fin, dans sept jours par défaut : les deux fonctionnent pendant la migration. grace_days: 0 révoque l'ancienne immédiatement, pour un secret compromis.

Authentification : Clé d'usage (X-API-Key) ou session web (Authorization: Bearer)

Corps de la requête

NomTypeDescription
grace_daysintegerfacultatif

Réponses

CodeDescription
201Nouvelle clé (le secret n'est rendu qu'une seule fois)
401Authentification requise, ou jeton invalide.
403Cet appelant n'est pas autorisé à faire cette action.
404Clé inconnue.
409Clé déjà remplacée.

Exemple

sh
curl -X POST "$SPAVIK_BASE_URL/v1/api-keys/{keyId}/rotate" \
  -H 'X-API-Key: sk-spv-api-...' \
  -H 'Content-Type: application/json' \
  -d '{
  "grace_days": 7
}'

POST /v1/auth/login

Commencer la connexion avec une adresse e-mail

Le point d'entrée unique, pour tout le monde. Envoyez l'adresse et l'API dit la suite : magic_link (un lien et un code ont été envoyés par e-mail, à échanger sur POST /v1/auth/magic-link/verify) ou password (une adresse du staff Spavik : envoyer le mot de passe sur POST /v1/auth/login/password, puis le code reçu sur POST /v1/auth/login/verify).

La réponse ne dépend que du domaine de l'adresse, jamais de l'existence d'un compte.

Authentification : Route publique, aucune authentification

Corps de la requête

NomTypeDescription
emailstringrequis

Réponses

CodeDescription
200Succès

Exemple

sh
curl -X POST "$SPAVIK_BASE_URL/v1/auth/login" \
  -H 'X-API-Key: sk-spv-api-...' \
  -H 'Content-Type: application/json' \
  -d '{
  "email": "{{email}}"
}'

POST /v1/auth/login/password

Connexion du staff : le mot de passe

Réservé aux adresses du staff Spavik. Le mot de passe est vérifié avant tout envoi de code. En cas de succès, un code à six chiffres est envoyé par e-mail ; échangez-le sur POST /v1/auth/login/verify.

Authentification : Route publique, aucune authentification

Corps de la requête

NomTypeDescription
emailstringrequis
passwordstringrequis

Réponses

CodeDescription
202Code envoyé
401STAFF_LOGIN_INVALID : adresse inconnue ou mot de passe erroné.

Exemple

sh
curl -X POST "$SPAVIK_BASE_URL/v1/auth/login/password" \
  -H 'X-API-Key: sk-spv-api-...' \
  -H 'Content-Type: application/json' \
  -d '{
  "email": "{{staff_email}}"
}'

POST /v1/auth/login/verify

Connexion du staff : le code reçu par e-mail

Authentification : Route publique, aucune authentification

Corps de la requête

NomTypeDescription
emailstringrequis
codestringrequis

Réponses

CodeDescription
200Succès
400OTP_INVALID ou OTP_TOO_MANY_ATTEMPTS.
401STAFF_LOGIN_INVALID.

Exemple

sh
curl -X POST "$SPAVIK_BASE_URL/v1/auth/login/verify" \
  -H 'X-API-Key: sk-spv-api-...' \
  -H 'Content-Type: application/json' \
  -d '{
  "email": "{{staff_email}}",
  "code": "{{otp_code}}"
}'

POST /v1/auth/logout

Révoquer un jeton de rafraîchissement

Authentification : Route publique, aucune authentification

Corps de la requête

NomTypeDescription
refresh_tokenstringrequis

Réponses

CodeDescription
204Révoquée

Exemple

sh
curl -X POST "$SPAVIK_BASE_URL/v1/auth/logout" \
  -H 'X-API-Key: sk-spv-api-...' \
  -H 'Content-Type: application/json' \
  -d '{
  "refresh_token": "{{refresh_token}}"
}'

POST /v1/auth/magic-link/verify

Échanger le lien ou le code contre des jetons

Authentification : Route publique, aucune authentification

Corps de la requête

NomTypeDescription
tokenstringfacultatif
emailstringfacultatif
codestringfacultatif

Réponses

CodeDescription
200Succès
400Lien ou code invalide.
403STAFF_LOGIN_REQUIRED : une adresse du staff ne se connecte jamais par un lien.

Exemple

sh
curl -X POST "$SPAVIK_BASE_URL/v1/auth/magic-link/verify" \
  -H 'X-API-Key: sk-spv-api-...' \
  -H 'Content-Type: application/json' \
  -d '{
  "token": "{{magic_token}}"
}'

GET /v1/auth/me

Profil, plan et workspaces

Authentification : Clé d'usage (X-API-Key) ou session web (Authorization: Bearer)

Réponses

CodeDescription
200Succès
401Authentification requise, ou jeton invalide.
403Cet appelant n'est pas autorisé à faire cette action.

Exemple

sh
curl -X GET "$SPAVIK_BASE_URL/v1/auth/me" \
  -H 'X-API-Key: sk-spv-api-...'

PATCH /v1/auth/me

Modifier votre profil

Authentification : Clé d'usage (X-API-Key) ou session web (Authorization: Bearer)

Corps de la requête

NomTypeDescription
full_namestringrequis

Réponses

CodeDescription
200Succès
401Authentification requise, ou jeton invalide.
403Cet appelant n'est pas autorisé à faire cette action.

Exemple

sh
curl -X PATCH "$SPAVIK_BASE_URL/v1/auth/me" \
  -H 'X-API-Key: sk-spv-api-...' \
  -H 'Content-Type: application/json' \
  -d '{ }'

DELETE /v1/auth/me

Supprimer définitivement votre compte

Efface les workspaces, les modèles (côté moteur compris) et les clés. Confirmez avec votre propre adresse e-mail.

Authentification : Clé d'usage (X-API-Key) ou session web (Authorization: Bearer)

Corps de la requête

NomTypeDescription
emailstringrequis

Réponses

CodeDescription
204Supprimé
400La confirmation ne correspond pas.
401Authentification requise, ou jeton invalide.
403Cet appelant n'est pas autorisé à faire cette action.

Exemple

sh
curl -X DELETE "$SPAVIK_BASE_URL/v1/auth/me" \
  -H 'X-API-Key: sk-spv-api-...' \
  -H 'Content-Type: application/json' \
  -d '{
  "email": "{{email}}"
}'

GET /v1/auth/oauth/{provider}

Démarrer la connexion OAuth (navigateur)

Authentification : Route publique, aucune authentification

Réponses

CodeDescription
302Redirection vers le fournisseur
404Fournisseur inconnu.

Exemple

sh
curl -X GET "$SPAVIK_BASE_URL/v1/auth/oauth/{provider}" \
  -H 'X-API-Key: sk-spv-api-...'

GET /v1/auth/oauth/{provider}/callback

Retour du fournisseur (navigateur)

Authentification : Route publique, aucune authentification

Réponses

CodeDescription
302Redirection vers l'interface avec un code
400État OAuth invalide.

Exemple

sh
curl -X GET "$SPAVIK_BASE_URL/v1/auth/oauth/{provider}/callback" \
  -H 'X-API-Key: sk-spv-api-...'

POST /v1/auth/oauth/{provider}/link

Lier un fournisseur au compte connecté

Le seul chemin qui rattache une identité à un compte existant. Une identité inconnue ne prend jamais la main sur un compte au seul motif qu'elle en annonce l'adresse : un jeton valablement signé peut porter une adresse que son porteur ne possède pas.

Authentification : Clé d'usage (X-API-Key) ou session web (Authorization: Bearer)

Corps de la requête

NomTypeDescription
codestringrequis

Réponses

CodeDescription
204Lié
401Authentification requise, ou jeton invalide.
403Cet appelant n'est pas autorisé à faire cette action.
409Identité déjà liée à un autre compte.

Exemple

sh
curl -X POST "$SPAVIK_BASE_URL/v1/auth/oauth/{provider}/link" \
  -H 'X-API-Key: sk-spv-api-...' \
  -H 'Content-Type: application/json' \
  -d '{ }'

POST /v1/auth/oauth/exchange

Échanger le code OAuth contre des jetons

Authentification : Route publique, aucune authentification

Corps de la requête

NomTypeDescription
codestringrequis

Réponses

CodeDescription
200Succès
400Code invalide ou déjà utilisé.
409Un compte utilise déjà cette adresse : liez le fournisseur depuis une session connectée.

Exemple

sh
curl -X POST "$SPAVIK_BASE_URL/v1/auth/oauth/exchange" \
  -H 'X-API-Key: sk-spv-api-...' \
  -H 'Content-Type: application/json' \
  -d '{ }'

GET /v1/auth/providers

Méthodes de connexion disponibles

À lire avant de composer un écran de connexion, plutôt que de coder les boutons en dur. Un fournisseur n'est annoncé que si ses identifiants sont configurés : ce qui est absent de cette liste ne peut connecter personne.

Authentification : Route publique, aucune authentification

Réponses

CodeDescription
200Succès

Exemple

sh
curl -X GET "$SPAVIK_BASE_URL/v1/auth/providers" \
  -H 'X-API-Key: sk-spv-api-...'

POST /v1/auth/refresh

Renouveler les jetons

Authentification : Route publique, aucune authentification

Corps de la requête

NomTypeDescription
refresh_tokenstringrequis

Réponses

CodeDescription
200Succès
401Jeton de rafraîchissement invalide.

Exemple

sh
curl -X POST "$SPAVIK_BASE_URL/v1/auth/refresh" \
  -H 'X-API-Key: sk-spv-api-...' \
  -H 'Content-Type: application/json' \
  -d '{
  "refresh_token": "{{refresh_token}}"
}'

GET /v1/geoip

Géolocaliser le visiteur (pour préremplir un formulaire)

Authentification : Route publique, aucune authentification

Réponses

CodeDescription
200Succès
422PRIVATE_IP : adresse privée ou locale, rien à géolocaliser (développement local et réseaux internes).
503Géolocalisation indisponible.

Exemple

sh
curl -X GET "$SPAVIK_BASE_URL/v1/geoip" \
  -H 'X-API-Key: sk-spv-api-...'

GET /v1/workspaces

Lister vos workspaces

Authentification : Clé d'usage (X-API-Key) ou session web (Authorization: Bearer)

Réponses

CodeDescription
200Succès
401Authentification requise, ou jeton invalide.
403Cet appelant n'est pas autorisé à faire cette action.

Exemple

sh
curl -X GET "$SPAVIK_BASE_URL/v1/workspaces" \
  -H 'X-API-Key: sk-spv-api-...'

POST /v1/workspaces

Créer un workspace

Authentification : Clé d'usage (X-API-Key) ou session web (Authorization: Bearer)

Corps de la requête

NomTypeDescription
namestringrequis

Réponses

CodeDescription
201Succès
401Authentification requise, ou jeton invalide.
403Cet appelant n'est pas autorisé à faire cette action.

Exemple

sh
curl -X POST "$SPAVIK_BASE_URL/v1/workspaces" \
  -H 'X-API-Key: sk-spv-api-...' \
  -H 'Content-Type: application/json' \
  -d '{
  "name": "My mobile app"
}'

GET /v1/workspaces/{workspaceId}

Détail d'un workspace

Authentification : Clé d'usage (X-API-Key) ou session web (Authorization: Bearer)

Réponses

CodeDescription
200Succès
401Authentification requise, ou jeton invalide.
403Cet appelant n'est pas autorisé à faire cette action.

Exemple

sh
curl -X GET "$SPAVIK_BASE_URL/v1/workspaces/{workspaceId}" \
  -H 'X-API-Key: sk-spv-api-...'

PATCH /v1/workspaces/{workspaceId}

Renommer un workspace

Authentification : Clé d'usage (X-API-Key) ou session web (Authorization: Bearer)

Corps de la requête

NomTypeDescription
namestringrequis

Réponses

CodeDescription
200Succès
401Authentification requise, ou jeton invalide.
403Cet appelant n'est pas autorisé à faire cette action.

Exemple

sh
curl -X PATCH "$SPAVIK_BASE_URL/v1/workspaces/{workspaceId}" \
  -H 'X-API-Key: sk-spv-api-...' \
  -H 'Content-Type: application/json' \
  -d '{ }'

Documentation générée pour partie depuis le contrat OpenAPI.