Documentation integrateur
Reference complete de l'API Ts-Identity Customer Area.
Authentification
/auth/registerInscription d'un nouvel utilisateur. Restriction de domaine email configurable, metadata libres des l'inscription.
{
"email": "user@example.com",
"password": "SecureP@ss123",
"first_name": "Jean",
"last_name": "Dupont",
"metadata": { "source": "landing_page" }
}{
"id": "usr_abc123",
"email": "user@example.com",
"first_name": "Jean",
"last_name": "Dupont",
"email_verified": false,
"created_at": "2026-03-25T10:00:00Z"
}/auth/loginConnexion avec JWT RS256 (1h) + refresh token (7j) avec rotation automatique.
{
"email": "user@example.com",
"password": "SecureP@ss123"
}{
"access_token": "eyJhbGciOiJSUzI1NiIs...",
"refresh_token": "d4f8a2b1-e5c6-...",
"token_type": "Bearer",
"expires_in": 3600
}/auth/oauth/{provider}/authorizeSocial login OAuth2 — Google & GitHub. Flow SPA ou redirect.
GET /auth/oauth/google/authorize?redirect_uri=https://app.example.com/callback{
"authorization_url": "https://accounts.google.com/o/oauth2/auth?..."
}/auth/meProfil utilisateur complet avec 10+ champs metier et metadata libres.
GET /auth/me
Authorization: Bearer eyJhbGci...{
"id": "usr_abc123",
"email": "user@example.com",
"first_name": "Jean",
"last_name": "Dupont",
"agency_name": "Immo Plus",
"phone": "+33 6 12 34 56 78",
"metadata": { "plan": "pro" }
}/auth/public-keyCle publique RSA 2048 bits pour validation JWT locale sans appel reseau.
GET /auth/public-key{
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBg..."
}Achats & Abonnements
/purchasesCreation d'un achat (one-shot, mensuel ou annuel) via Stripe Checkout.
{
"plan_code": "pro_monthly",
"billing_mode": "SUBSCRIPTION_MONTHLY",
"success_url": "https://app.example.com/success",
"cancel_url": "https://app.example.com/cancel"
}{
"id": "pur_xyz789",
"checkout_url": "https://checkout.stripe.com/c/pay/...",
"status": "PENDING"
}/purchases/{id}/addonsAjout d'items supplementaires sur un abonnement existant, prorata automatique.
{
"plan_code": "addon_storage",
"quantity": 1
}{
"id": "pur_xyz789",
"addons": [{ "plan_code": "addon_storage", "status": "ACTIVE" }]
}/purchases/{id}/subscription/cancelAnnulation en fin de periode avec fenetre de grace 30 jours.
POST /purchases/pur_xyz789/subscription/cancel{
"id": "pur_xyz789",
"status": "CANCEL_PENDING",
"cancel_at": "2026-04-25T00:00:00Z",
"grace_period_end": "2026-05-25T00:00:00Z"
}Plans
/staff/plansListe des plans avec support multi-devises (EUR/USD/CAD) et i18n.
GET /staff/plans
Authorization: Bearer eyJhbGci...[
{
"code": "pro",
"title": { "fr": "Pro", "en": "Pro" },
"description": { "fr": "Pour les SaaS en croissance" },
"price_in_cents": {
"monthly": { "eur": 14900, "usd": 16900, "cad": 22900 },
"annual": { "eur": 142800, "usd": 162000 }
},
"enabled": true,
"displayed": true,
"recommended": true,
"priority": 10
}
]Support
/supportCreation d'un ticket de support avec workflow 5 statuts, metadata et pieces jointes.
{
"scope": "immo",
"subject": "Probleme de facturation",
"description": "Ma facture de mars ne correspond pas...",
"attachment_ids": ["med_abc123"],
"metadata": { "urgency": "high" }
}{
"id": "sup_abc123",
"status": "WAITING_FOR_SUPPORT",
"subject": "Probleme de facturation",
"created_at": "2026-03-25T10:00:00Z"
}/support/{id}/commentsAjout de commentaire client ou staff, avec pieces jointes optionnelles.
{
"content": "Voici la capture d'ecran du probleme",
"attachment_ids": ["med_xyz789"]
}{
"id": "com_abc123",
"author_type": "CLIENT",
"content": "Voici la capture d'ecran du probleme",
"created_at": "2026-03-25T10:30:00Z"
}Media / Fichiers
/mediaUpload multipart jusqu'a 10 Mo avec isolation par utilisateur (cle S3 : {userId}/{uuid}.{ext}).
POST /media
Content-Type: multipart/form-data
file: invoice.pdf
title: "Facture Mars 2026"{
"id": "med_xyz789",
"title": "Facture Mars 2026",
"filename": "invoice.pdf",
"size": 245760,
"download_url": "/media/med_xyz789/download"
}/media/{id}/downloadTelechargement via URL pre-signee S3, valide 1 heure.
GET /media/med_xyz789/download
Authorization: Bearer eyJhbGci...// Redirect 302 vers URL pre-signee S3
// Location: https://s3.eu-west-3.amazonaws.com/...?X-Amz-Signature=...API Tokens
/tokensCreation de token API UUID par scope, avec metadata libres.
{
"scope": "immo",
"metadata": { "env": "production", "app": "crm" }
}{
"token": "tsi_a1b2c3d4e5f6g7h8...",
"scope": "immo",
"created_at": "2026-03-25T10:00:00Z"
}/oauth2/introspectIntrospection OAuth2 pour validation de token avec claims types.
{
"token": "tsi_a1b2c3d4e5f6g7h8..."
}{
"active": true,
"scope": "immo",
"sub": "usr_abc123",
"metadata": { "env": "production" }
}Stripe & Facturation
/stripe/invoicingListe des factures avec telechargement PDF direct depuis Stripe.
GET /stripe/invoicing
Authorization: Bearer eyJhbGci...{
"invoices": [
{
"id": "inv_abc123",
"amount": 14900,
"currency": "eur",
"status": "paid",
"pdf_url": "https://pay.stripe.com/invoice/...",
"created_at": "2026-03-01T00:00:00Z"
}
]
}Administration
/admin/usersListe des utilisateurs avec gestion des scopes, activation/desactivation.
GET /admin/users?page=1&limit=20
Authorization: Bearer <SERVICE_API_KEY>{
"data": [
{
"id": "usr_abc123",
"email": "user@example.com",
"active": true,
"scopes": ["immo", "learning"]
}
],
"total": 156,
"page": 1
}/admin/migrationsImport depuis PayPal, Mollie ou GoCardless avec fenetre de grace 30 jours.
{
"source": "paypal",
"user_id": "usr_abc123",
"external_subscription_id": "I-1234567890",
"plan_code": "pro_monthly"
}{
"id": "mig_abc123",
"status": "PENDING",
"grace_period_end": "2026-04-25T00:00:00Z"
}Erreurs & Codes
Format des erreursToutes les erreurs suivent un format structure avec code, message et details.
// Toute requete invalide retourne :{
"status": 422,
"error": "VALIDATION_ERROR",
"message": "Le champ email est requis",
"details": {
"field": "email",
"rule": "required"
}
}
// Codes HTTP utilises :
// 400 - Bad Request
// 401 - Unauthorized
// 403 - Forbidden
// 404 - Not Found
// 409 - Conflict
// 422 - Validation Error
// 429 - Rate Limited
// 500 - Internal Server Error