---
title: "Sprint+5 Chantier #4 (2026-05-17) — Multi-org admin sans switch JWT."
method: POST
path: "/api/v1/auth/issue-org-token"
tags: ["Authentification"]
---

# Sprint+5 Chantier #4 (2026-05-17) — Multi-org admin sans switch JWT.

`POST /api/v1/auth/issue-org-token`

## Request

- Base URL: `https://erp.eyeot.fr/api/v1`
- URL: `https://erp.eyeot.fr/api/v1/api/v1/auth/issue-org-token`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

Sprint+5 Chantier #4 (2026-05-17) — Multi-org admin sans switch JWT.

    Émet un NOUVEAU pair access+refresh token pour `organization_id` cible,
    SANS révoquer les tokens existants. Différent de `/switch-org` qui kill
    l'ancien refresh family (switch définitif). Ici : tab parallèle.

    Cas d'usage : DAF d'un groupe FR/BE/CH ouvre 3 tabs, chacun consulte
    son org dans sa propre session token, sans révoquer les autres.

    Body : {"organization_id": "<uuid>"}

    Sécurité :
    - Vérifie `Membership.is_active=True` sur l'org cible (sinon 403).
    - Chaque token a son propre `jti` (rotation indépendante).
    - Audit log `org_token_issued` avec org_id cible.
    - Ne touche pas au `user_min_token_iat` (sinon on révoquerait les
      autres tabs).

## Response `200`

Succès — payload `{data, meta}` (cf. API-GUIDE §3.1)

## Other responses

- `201`: Ressource créée. ID dans `data.id`.
- `400`: Validation Marshmallow échouée. `errors` détaille chaque champ invalide.
- `401`: JWT manquant, expiré ou révoqué.
- `404`: Ressource introuvable (ou cross-tenant — équivalent à hidden).
- `409`: État incohérent (email dupliqué, ressource déjà dans cet état, etc.).
- `422`: Validation Marshmallow échouée. `errors` détaille chaque champ invalide.
- `429`: Trop de requêtes. Honorer le header `Retry-After` (secondes).

---

[API](https://skmtc.dev/eyeot/apis/eyeot-erp-api.md) · [All operations](https://skmtc.dev/eyeot/apis/eyeot-erp-api/llms.txt) · [OpenAPI document](https://skmtc.dev/eyeot/apis/eyeot-erp-api/revisions/42ab95222a89?raw)
