PayRouterDocs

Authentification

PayRouter utilise l'authentification par jeton. Chaque requête authentifiée envoie un jeton dans l'en-tête Authorization avec le schéma Bearer :

http
Authorization: Bearer <your-token>

Seuls l'inscription, la vérification d'e-mail, la réinitialisation de mot de passe et les webhooks des fournisseurs sont non authentifiés. Tout le reste requiert un jeton valide.

Prerequisites

Pour suivre cette page, vous avez besoin d'une adresse e-mail que vous contrôlez. Pour générer un jeton API (étape 3), vous devez déjà disposer d'un profil marchand complété.

1. S'inscrire & vérifier votre e-mail

Créez un compte, puis confirmez l'OTP à 6 chiffres qui vous est envoyé par e-mail.

cURL
# Step 1 — sign up
curl -X POST https://payrouter.io/api/auth/signup/ \
  -H "Content-Type: application/json" \
  -d '{
    "email": "you@example.com",
    "password": "S0me-Str0ng-Pass",
    "password2": "S0me-Str0ng-Pass",
    "first_name": "Jane",
    "last_name": "Doe"
  }'

# Step 2 — confirm the OTP sent to your inbox
curl -X POST https://payrouter.io/api/auth/verify-email/ \
  -H "Content-Type: application/json" \
  -d '{ "email": "you@example.com", "otp": "123456" }'
Python
import requests

requests.post("https://payrouter.io/api/auth/signup/", json={
    "email": "you@example.com",
    "password": "S0me-Str0ng-Pass",
    "password2": "S0me-Str0ng-Pass",
    "first_name": "Jane",
    "last_name": "Doe",
})

# After receiving the OTP by email:
res = requests.post("https://payrouter.io/api/auth/verify-email/", json={
    "email": "you@example.com",
    "otp": "123456",
})
print(res.json()["token"])

Champs de la requête d'inscription

ChampTypeRequisDescription
emailstringIdentité de connexion ; doit être unique.
passwordstringDoit respecter la politique de mot de passe de la plateforme.
password2stringDoit correspondre à password.
first_namestringNom d'affichage optionnel.
last_namestringNom d'affichage optionnel.
phonestringNuméro de téléphone E.164 optionnel.

L'inscription renvoie un temp_key et envoie l'OTP par e-mail. Verify-email le confirme et renvoie votre premier jeton ainsi que votre profil utilisateur. Si l'OTP a expiré, demandez-en un nouveau avec POST /api/auth/resend-otp/ ({ "email": "…" }).

Complétez ensuite votre profil marchand

Un nouveau compte ne peut pas effectuer de transactions tant que vous n'avez pas soumis votre profil d'entreprise (nom, e-mail, téléphone, pays). Vous serez guidé vers /complete-profile juste après la vérification. Cela provisionne aussi automatiquement vos comptes de service et vos portefeuilles. Voir Démarrer.

2. Se connecter (jeton de session)

Échangez e-mail + mot de passe contre un jeton :

cURL
curl -X POST https://payrouter.io/api/auth/token/ \
  -H "Content-Type: application/json" \
  -d '{ "email": "you@example.com", "password": "S0me-Str0ng-Pass" }'
Python
res = requests.post("https://payrouter.io/api/auth/token/", json={
    "email": "you@example.com",
    "password": "S0me-Str0ng-Pass",
})
token = res.json()["token"]
json
{
  "access": "9a8b7c6d5e…",
  "token": "9a8b7c6d5e…",
  "user": {
    "id": "0b1f…",
    "email": "you@example.com",
    "type": "merchant",
    "account_type": "sandbox",
    "profile_completed": true,
    "has_wallet": true,
    "is_staff": false
  }
}

access et token sont la même valeur — utilisez l'un ou l'autre comme jeton Bearer. Récupérez l'utilisateur courant à tout moment avec GET /api/auth/me/, et mettez à jour votre propre profil (phone, first_name, last_name) avec PATCH /api/auth/me/.

Sandbox vs production

Les nouveaux comptes démarrent en account_type: "sandbox". Un administrateur vous promeut en "prod" une fois votre intégration validée. Conditionnez les flux réservés à la production sur account_type === "prod". Voir Passage en production.

3. Clés API (jetons à longue durée de vie) {#api-keys}

Pour les intégrations serveur à serveur, générez un jeton API dédié qui ne dépend pas d'une connexion interactive. Dans le tableau de bord : Profil → Clés API → Générer un nouveau jeton (vous devez ressaisir votre mot de passe pour confirmer). Via l'API :

cURL
curl -X POST https://payrouter.io/api/auth/login-tokens/ \
  -H "Authorization: Bearer $SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "password": "S0me-Str0ng-Pass" }'
Python
res = requests.post(
    "https://payrouter.io/api/auth/login-tokens/",
    headers={"Authorization": f"Bearer {session_token}"},
    json={"password": "S0me-Str0ng-Pass"},
)
print(res.json()["token"])  # shown once — store securely
json
{
  "token": "f8849564a1b2c3…",
  "token_key": "f8849564",
  "expiry": "2026-09-25T19:00:25Z"
}
ChampDescription
tokenLe secret complet. Affiché une seule fois — stockez-le dès maintenant dans votre gestionnaire de secrets.
token_keyUn préfixe non secret utilisé pour identifier/révoquer le jeton.
expiryHorodatage d'expiration. Les jetons API sont valides 90 jours.
  • Lister vos jetons : GET /api/auth/login-tokens/
  • Révoquer l'un d'eux : DELETE /api/auth/login-tokens/<token_key>/

Traitez les jetons comme des mots de passe

Ne validez jamais de jetons dans le contrôle de version, ne les intégrez pas dans des clients mobiles/web, et ne les journalisez pas. Utilisez des variables d'environnement ou un gestionnaire de secrets, et révoquez immédiatement si un jeton est exposé. Voir Bonnes pratiques de sécurité.

Se déconnecter

Révoquez le jeton de la requête courante :

http
POST /api/auth/logout/
Authorization: Bearer <token>