1055 - Espaces de loisirs

Intégration 1055 - Espaces de loisirs via Obypay

Créer un compte

Contact API POST /cashless/users
8 à 32 caractères, au moins une majuscule, une minuscule et un chiffre.

Connexion

Contact API POST /auth/users/login
8 à 32 caractères, au moins une majuscule, une minuscule et un chiffre.

Mot de passe oublié

Contact API POST /cashless/users/code

🔒 Authentification des requêtes

Certains endpoints nécessitent une authentification par token JWT (identifiés par le badge 🔒 Bearer token requis). Le token est obtenu lors du login, de la création de compte, ou de la vérification du code de mot de passe oublié.

1. Obtenir le token

Le token JWT est retourné dans le champ meta.jwt.token de la réponse des endpoints suivants :

  • POST /cashless/users — Création de compte
  • POST /auth/users/login — Connexion
  • POST /cashless/users/code/:code — Vérification code mot de passe oublié

2. Signer les requêtes

Pour chaque requête authentifiée, ajoutez l'en-tête Authorization avec la valeur Bearer {token} :

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c3JfYWJj...

3. Base URL

Toutes les requêtes Contact API utilisent la base URL configurée :


      

4. Exemple complet (cURL)


      

Erreurs courantes

Code HTTPCause
401Token manquant, expiré ou invalide — refaire un login pour obtenir un nouveau token
403Token valide mais l'utilisateur n'a pas les droits pour cette ressource
POST /cashless/users — Créer un compte

Crée un nouveau compte utilisateur sur la plateforme. Un token JWT est retourné directement dans la réponse, permettant une connexion immédiate après l'inscription.

Headers

HeaderValeur
Content-Typeapplication/json
Acceptapplication/json

Payload (body JSON)

ChampTypeDescription
emailstring requisAdresse email de l'utilisateur
passwordstring requisMot de passe (8-32 car., 1 maj., 1 min., 1 chiffre)
firstnamestring requisPrénom
lastnamestring requisNom de famille
birthdatestring optionnelDate de naissance au format JJ/MM/AAAA
phonestring optionnelNuméro de téléphone avec indicatif (ex: +33612345678)
dialCountrystring optionnelCode pays ISO 3166-1 alpha-2 (ex: FR, DE, BE)
langstring optionnelLangue (fr, en, es, de, it, da)
optinboolean optionnelAcceptation des communications marketing
instancestring requisIdentifiant de l'instance partenaire
g-recaptcha-responsestring requisToken reCAPTCHA v3

Exemple de payload

{
  "email": "jean.dupont@email.com",
  "password": "MonPass123",
  "firstname": "Jean",
  "lastname": "Dupont",
  "birthdate": "15/03/1990",
  "phone": "+33612345678",
  "dialCountry": "FR",
  "lang": "fr",
  "optin": true,
  "instance": "i-Htzf8i200P-1",
  "g-recaptcha-response": "03AGdBq26..."
}

Réponse succès (201)

La réponse contient le token JWT dans meta.jwt.token et l'objet utilisateur complet dans data, identique à celle de GET /cashless/users/me.

{
  "meta": {
    "message": "Compte créé avec succès",
    "jwt": {
      "token": "eyJhbGciOiJIUz..."
    }
  },
  "data": {
    // même structure que GET /cashless/users/me
  }
}
POST /auth/users/login — Connexion

Authentifie un utilisateur existant et retourne un token JWT pour les requêtes ultérieures.

Payload (body JSON)

ChampTypeDescription
emailstring requisAdresse email
passwordstring requisMot de passe
instancestring requisIdentifiant de l'instance partenaire
g-recaptcha-responsestring requisToken reCAPTCHA v3

Réponse succès (200)

La réponse contient le token JWT dans meta.jwt.token et l'objet utilisateur complet dans data, identique à celle de GET /cashless/users/me.

{
  "meta": {
    "message": "Connexion réussie",
    "jwt": {
      "token": "eyJhbGciOiJIUz..."
    }
  },
  "data": {
    // même structure que GET /cashless/users/me
  }
}
GET /cashless/users/me — Récupérer le profil
🔒 Bearer token requis

Récupère les informations complètes du profil de l'utilisateur connecté, incluant les données de fidélité et de cagnotte.

Headers

HeaderValeur
AuthorizationBearer {token}
Acceptapplication/json

Query parameters

ParamètreTypeDescription
instancestring requisIdentifiant de l'instance partenaire

Réponse succès (200)

{
  "data": {
    "id": "usr_abc123",
    "email": "jean.dupont@email.com",
    "firstname": "Jean",
    "lastname": "Dupont",
    "birthdate": "1990-03-15T00:00:00.000Z",
    "phone": "+33612345678",
    "dialCountry": "FR",
    "lang": "fr",
    "optin": true,
    "loyalty": {
      "points_validated": 150,
      "bankroll": {
        "available_amount": 2500
      }
    }
  }
}

Champs de la réponse

ChampTypeDescription
data.idstringIdentifiant unique de l'utilisateur
data.emailstringEmail
data.firstnamestringPrénom
data.lastnamestringNom
data.birthdatestring|nullDate de naissance ISO 8601 — afficher en JJ/MM/AAAA
data.phonestring|nullNuméro de téléphone avec indicatif
data.dialCountrystring|nullCode pays ISO (FR, DE, etc.)
data.langstringLangue
data.optinbooleanStatut opt-in marketing
data.loyalty.points_validatednumberNombre de points de fidélité validés
data.loyalty.bankroll.idstringIdentifiant du compte cagnotte du consommateur (à utiliser comme {accountId} dans l'API Bankroll)
data.loyalty.bankroll.available_amountnumberMontant de cagnotte en centimes (diviser par 100 pour obtenir des euros)
data.loyalty.bankroll.bankroll.bankroll_productsarrayListe des offres de recharges de cagnotte
PUT /cashless/users/:id — Modifier le compte
🔒 Bearer token requis

Met à jour les informations du profil utilisateur. Seuls les champs envoyés seront modifiés.

Headers

HeaderValeur
AuthorizationBearer {token}
Content-Typeapplication/json
Acceptapplication/json

URL Parameters

ParamètreTypeDescription
:idstring requisID de l'utilisateur (obtenu lors du login)

Payload (body JSON)

ChampTypeDescription
firstnamestring optionnelPrénom
lastnamestring optionnelNom de famille
birthdatestring optionnelDate de naissance (JJ/MM/AAAA)
phonestring optionnelNuméro de téléphone
dialCountrystring optionnelCode pays ISO
langstring optionnelLangue
optinboolean optionnelOpt-in marketing
instancestring requisIdentifiant de l'instance

Réponse succès (200)

La réponse est identique à celle de GET /cashless/users/me : l'objet utilisateur complet avec les données mises à jour, incluant les informations de fidélité.

{
  "meta": {
    "message": "Compte mis à jour"
  },
  "data": {
    "id": "usr_abc123",
    "firstname": "Jean-Pierre",
    ...
    // même structure que GET /cashless/users/me
  }
}
PUT /cashless/users/:id — Changer le mot de passe
🔒 Bearer token requis

Change le mot de passe de l'utilisateur. Utilise le même endpoint que la modification de profil, mais avec uniquement le champ password.

Payload (body JSON)

ChampTypeDescription
passwordstring requisNouveau mot de passe (8-32 car., 1 maj., 1 min., 1 chiffre)
instancestring requisIdentifiant de l'instance

Réponse succès (200)

{
  "meta": {
    "message": "Mot de passe mis à jour"
  }
}
POST /cashless/users/:id/logout — Déconnexion
🔒 Bearer token requis

Invalide le token JWT de l'utilisateur côté serveur.

Payload (body JSON)

ChampTypeDescription
instancestring requisIdentifiant de l'instance

Réponse succès (200)

{
  "meta": {
    "message": "Déconnexion réussie"
  }
}
POST /cashless/users/code — Mot de passe oublié (envoi code)

Envoie un code de vérification par email à l'utilisateur pour la procédure de réinitialisation de mot de passe.

Payload (body JSON)

ChampTypeDescription
emailstring requisAdresse email du compte
instancestring requisIdentifiant de l'instance
g-recaptcha-responsestring requisToken reCAPTCHA v3

Réponse succès (200)

{
  "meta": {
    "message": "Code envoyé par email"
  }
}
POST /cashless/users/code/:code — Mot de passe oublié (vérification)

Vérifie le code reçu par email. Si le code est valide, un nouveau token JWT est retourné et l'utilisateur est automatiquement connecté. Il peut ensuite changer son mot de passe via PUT /cashless/users/:id.

URL Parameters

ParamètreTypeDescription
:codestring requisCode reçu par email

Payload (body JSON)

ChampTypeDescription
emailstring requisAdresse email du compte
g-recaptcha-responsestring requisToken reCAPTCHA v3

Réponse succès (200)

La réponse contient le token JWT dans meta.jwt.token et l'objet utilisateur complet dans data, identique à celle de GET /cashless/users/me.

{
  "meta": {
    "message": "Code vérifié",
    "jwt": {
      "token": "eyJhbGciOiJIUz..."
    }
  },
  "data": {
    // même structure que GET /cashless/users/me
  }
}

🔒 Authentification des requêtes

L'API Bankroll utilise un token API (et non un token JWT utilisateur). Ce token doit être placé directement dans l'en-tête Authorization de chaque requête. Le middleware location-bankroll valide l'accès.

⚠ ATTENTION — Token secret

Ce token est critique et strictement confidentiel. Il ne doit jamais apparaître dans le code source (HTML, JavaScript, dépôt Git) ni être utilisé dans des appels côté client (navigateur). Toutes les requêtes vers l'API Bankroll doivent transiter par un serveur backend qui injecte le token de manière sécurisée.

Signer les requêtes

Pour chaque requête, ajoutez l'en-tête Authorization avec la valeur du token API fourni :

Authorization: votre-token-api-ici

Base URL

Toutes les requêtes Bankroll API utilisent la base URL configurée :


      

Exemple complet (cURL)


      

Notes importantes

  • Tous les montants sont exprimés en centimes (ex : 1000 = 10,00 €)
POST /locations/bankrolls/accounts/{accountId}/histories — Recharger une cagnotte (montant libre)

Recharge la cagnotte d'un compte avec un montant libre, sans bonus. Le montant crédité est celui envoyé dans le champ price.

Headers

HeaderValeur
Authorization{token API}
Content-Typeapplication/json
Acceptapplication/json

URL Parameters

ParamètreTypeDescription
{accountId}string requisID du compte cagnotte

Payload (body JSON)

ChampTypeDescription
priceint requisMontant à créditer en centimes (ex : 550 = 5,50 €)
paid_priceint optionnelMontant réellement payé en centimes
sourcestring optionnelSource du paiement (ex : cb, cash)

Exemple de payload

{
  "price": 1000,
  "source": "cb"
}

Réponse succès (201)

{
  "id": "b7f59069-a256-41eb-a7f2-99a46cef8f3f",
  "state": "pending",
  "price": 1000,
  "paid_price": 1000,
  "source": "cb",
  "created_at": "2022-02-15 19:54:08"
}
POST /locations/bankrolls/accounts/{accountId}/histories — Recharger une cagnotte (avec bonus)

Recharge la cagnotte via un produit cagnotte (bankroll_product_id). Le produit définit le montant payé (price_paid) et le montant crédité (price_added, qui inclut le bonus).

Les produits disponibles et leurs bonus sont accessibles dans les informations du Contact, dans la clé data.loyalty.bankroll.bankroll.bankroll_products (voir GET /cashless/users/me).

Headers

HeaderValeur
Authorization{token API}
Content-Typeapplication/json
Acceptapplication/json

URL Parameters

ParamètreTypeDescription
{accountId}string requisID du compte cagnotte

Payload (body JSON)

ChampTypeDescription
bankroll_product_idstring requisUUID du produit cagnotte
sourcestring optionnelSource du paiement

Exemple de payload

Exemple : payer 20 €, recevoir 25 € (bonus de 5 €) :

{
  "bankroll_product_id": "239f28f3-db3c-405b-b850-e2f383091c1b",
  "source": "cb"
}

Réponse succès (201)

{
  "id": "b7f59069-a256-41eb-a7f2-99a46cef8f3f",
  "state": "pending",
  "price": 2500,
  "paid_price": 2000,
  "source": "cb",
  "created_at": "2022-02-15 19:54:08"
}
GET /locations/bankrolls/accounts/{accountId}/histories — Lister les transactions

Récupère l'historique des transactions (recharges et utilisations) d'une cagnotte.

Headers

HeaderValeur
Authorization{token API}
Acceptapplication/json

URL Parameters

ParamètreTypeDescription
{accountId}string requisID du compte cagnotte

Réponse succès (200)

[
  {
    "id": "4088bbf8-de54-4aa7-b34b-b2487dcbc89f",
    "state": "validated",
    "price": 2500,
    "paid_price": 2000,
    "source": "cb",
    "created_at": "2022-02-21 19:27:25"
  },
  {
    "id": "876fdbfe-57d0-4abd-887a-cf1025fbc588",
    "state": "validated",
    "price": -550,
    "paid_price": null,
    "source": "connecs",
    "created_at": "2022-02-21 19:28:27"
  }
]

Champs de la réponse

ChampTypeDescription
idstringUUID de la transaction
statestringStatut : pending, validated, canceled
priceintMontant en centimes — positif = recharge, négatif = utilisation
paid_priceint|nullMontant réellement payé (null pour les utilisations)
sourcestringSource/contexte de la transaction
created_atstringDate de création (YYYY-MM-DD HH:mm:ss)
POST /locations/bankrolls/accounts/{accountId}/histories/use — Utiliser un montant

Débite un montant de la cagnotte d'un compte. L'API vérifie que le solde est suffisant (sinon erreur 409). Les contacts anonymes sont bloqués si is_bankroll_to_anonymous_blocked est activé.

Headers

HeaderValeur
Authorization{token API}
Content-Typeapplication/json
Acceptapplication/json

URL Parameters

ParamètreTypeDescription
{accountId}string requisID du compte cagnotte

Payload (body JSON)

ChampTypeDescription
priceint requisMontant à débiter en centimes (ex : 550 = 5,50 €)
sourcestring optionnelSource/contexte de l'utilisation

Exemple de payload

{
  "price": 550,
  "source": "connecs"
}

Réponse succès (201)

Le price envoyé est positif, mais la réponse le retourne en négatif (débit).

{
  "id": "b7f59069-a256-41eb-a7f2-99a46cef8f3f",
  "state": "pending",
  "price": -550,
  "paid_price": null,
  "source": "connecs",
  "created_at": "2022-02-15 19:54:08"
}

Erreurs courantes

Code HTTPCause
409Solde insuffisant — le montant demandé dépasse le solde disponible
PUT /locations/bankrolls/accounts/{accountId}/histories/{historyId} — Valider ou annuler une transaction

Met à jour le statut d'une transaction cagnotte. Permet de valider (validated) ou annuler (canceled) une transaction existante.

Headers

HeaderValeur
Authorization{token API}
Content-Typeapplication/json
Acceptapplication/json

URL Parameters

ParamètreTypeDescription
{accountId}string requisID du compte cagnotte
{historyId}string requisUUID de la transaction à mettre à jour

Payload (body JSON)

ChampTypeDescription
statestring requisNouveau statut : validated ou canceled

Exemple de payload — Valider

{
  "state": "validated"
}

Exemple de payload — Annuler

{
  "state": "canceled"
}

Réponse succès (200)

{
  "id": "b7f59069-a256-41eb-a7f2-99a46cef8f3f",
  "state": "validated",
  "price": -550,
  "paid_price": null,
  "source": "connecs",
  "created_at": "2022-02-15 19:54:08"
}

Champs de la réponse

ChampTypeDescription
idstringUUID de la transaction
statestringNouveau statut de la transaction
pricenumberMontant en centimes (positif = crédit, négatif = débit)
paid_pricenumber|nullMontant payé (si recharge avec produit)
sourcestringSource/contexte de la transaction
created_atstringDate de création

Google reCAPTCHA v3

L'API exige un token reCAPTCHA v3 (invisible) pour les endpoints d'inscription, de connexion, et de mot de passe oublié. Ce token est envoyé dans le champ g-recaptcha-response du body.

Clé de site (Site Key)

Utilisez la clé suivante pour charger le script reCAPTCHA et exécuter les challenges :

6LfOKB0qAAAAAA6eJ-A4B1z_QS444tUsNdDqfpfj

1. Charger le script

Ajoutez cette balise dans le <head> de votre page :

<script src="https://www.google.com/recaptcha/api.js?render=6LfOKB0qAAAAAA6eJ-A4B1z_QS444tUsNdDqfpfj"></script>

2. Obtenir un token

Avant chaque appel API nécessitant le reCAPTCHA, exécutez :

grecaptcha.ready(() => { grecaptcha.execute('6LfOKB0qAAAAAA6eJ-A4B1z_QS444tUsNdDqfpfj', { action: 'submit' }) .then(token => { // Envoyer le token dans le body de la requête // champ : "g-recaptcha-response" }); });

3. Endpoints concernés

Le champ g-recaptcha-response est requis sur les endpoints suivants :

EndpointMéthode
/cashless/usersPOST Création de compte
/auth/users/loginPOST Connexion
/cashless/users/codePOST Envoi code mot de passe oublié
/cashless/users/code/:codePOST Vérification code

4. Masquer le badge reCAPTCHA

Le badge reCAPTCHA v3 apparaît par défaut en bas à droite. Pour le masquer, ajoutez ce CSS :

.grecaptcha-badge { visibility: hidden; }

Conformément aux conditions Google, si vous masquez le badge vous devez mentionner l'utilisation de reCAPTCHA dans vos CGU.

Domaines autorisés

Le reCAPTCHA ne fonctionne que sur les domaines enregistrés dans notre console Google reCAPTCHA. Actuellement autorisé :

  • localhost — pour le développement local

Pour vos environnements de développement, staging et production, vous devez nous fournir la liste complète de vos domaines afin que nous les ajoutions à la configuration reCAPTCHA. Sans cela, le captcha échouera et les appels API seront rejetés.

Non connecté