Skip to main content
Endpoints “Me” = profil de l’utilisateur connecté (session Sanctum).

Prérequis

Authentification

Tous les endpoints ci-dessous requièrent Sanctum Bearer token. Headers recommandés :
Accept: application/json
Authorization: Bearer <token>
X-App-Locale: fr
  • X-App-Locale : optionnel, mais recommandé. Fallback fr si absent ou invalide.
  • Les erreurs et messages sont localisés.

GET /api/v1/me

Retourne le profil complet de l’utilisateur connecté.

Exemple (curl)

curl --location 'https://api.flowxi.app/api/v1/me' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <token>' \
  --header 'X-App-Locale: fr'

Réponse 200

  • photo_url est une URL exploitable :
    • si la photo est uploadée : URL signée Backblaze (TTL ~ 30 min)
    • sinon : fallback DiceBear (URL publique stable)
{
  "code": "ME_OK",
  "message": "OK",
  "data": {
    "id": 17,
    "email": "[email protected]",
    "status": "active",
    "locale": "fr",
    "username": "fx00000017",
    "photo_url": "https://s3.us-west-004.backblazeb2.com/flowxi-storage-prod/profile_photos/....",
    "first_name": "Jafette",
    "last_name": "Fandjinou",
    "birth_date": "1999-01-01",
    "country": "BJ",
    "nationality": "BEN",
    "phone_number": "+22900000000",
    "twofa_enabled": false,
    "created_at": "2026-01-09T17:08:57.000000Z",
    "updated_at": "2026-01-09T17:39:23.000000Z"
  }
}

PATCH /api/v1/me

Met à jour les informations de base.

Champs supportés

  • first_name (string)
  • last_name (string)
  • birth_date (YYYY-MM-DD)
  • country (string, ex: BJ) → normalisé en uppercase
  • nationality (string, ex: BEN) → normalisé en uppercase
  • phone_number (string)

Exemple (curl)

curl --location --request PATCH 'https://api.flowxi.app/api/v1/me' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <token>' \
  --header 'X-App-Locale: fr' \
  --data '{
    "first_name": "Jafette",
    "last_name": "Fandjinou",
    "birth_date": "1999-01-01",
    "country": "BJ",
    "nationality": "BEN",
    "phone_number": "+22900000000"
  }'

Réponse 200

{
  "code": "ME_UPDATED",
  "message": "Profil mis à jour.",
  "data": {
    "id": 17,
    "first_name": "Jafette",
    "last_name": "Fandjinou",
    "birth_date": "1999-01-01",
    "country": "BJ",
    "nationality": "BEN",
    "phone_number": "+22900000000",
    "updated_at": "2026-01-09T17:11:56.000000Z"
  }
}

POST /api/v1/me/photo

Upload photo de profil (multipart/form-data).

Règles

  • Champ : photo (required)
  • Types : jpg, jpeg, png, webp
  • Taille max : 4096 KB
  • Stockage :
    • upload sur Backblaze B2 (S3 compatible)
    • en base, seule la clé profile_photos/... est stockée
    • suppression automatique de l’ancienne photo si présente

Exemple (curl)

curl --location 'https://api.flowxi.app/api/v1/me/photo' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <token>' \
  --header 'X-App-Locale: fr' \
  --form "photo=@/path/to/photo.jpg"

Réponse 200

{
  "code": "ME_PHOTO_UPDATED",
  "message": "Photo de profil mise à jour.",
  "data": {
    "photo_url": "https://s3.us-west-004.backblazeb2.com/flowxi-storage-prod/profile_photos/user_17_....jpg?...",
    "updated_at": "2026-01-09T17:39:23.000000Z"
  }
}

Codes d’erreur (contract)

401 UNAUTHENTICATED

{
  "code": "UNAUTHENTICATED",
  "message": "Non authentifié."
}

422 VALIDATION_FAILED

{
  "code": "VALIDATION_FAILED",
  "message": "Certaines informations sont invalides.",
  "errors": {
    "field": ["..."]
  }
}

500 SERVER_ERROR

{
  "code": "SERVER_ERROR",
  "message": "Une erreur est survenue, réessayez plus tard."
}