---
title: "Sprint +23 Phase 5 (2026-05-18) — Recrée une organisation pour un user"
method: POST
path: "/api/v1/settings/workspace/create-from-template"
tags: ["Paramètres"]
---

# Sprint +23 Phase 5 (2026-05-18) — Recrée une organisation pour un user

`POST /api/v1/settings/workspace/create-from-template`

## Request

- Base URL: `https://erp.eyeot.fr/api/v1`
- URL: `https://erp.eyeot.fr/api/v1/api/v1/settings/workspace/create-from-template`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

Sprint +23 Phase 5 (2026-05-18) — Recrée une organisation pour un user
    qui a supprimé sa seule org et atterri sur `/workspace/welcome`.

    Body :
        {
          "org_type": "personal" | "professional",
          "name": "...",                  # requis
          "country": "FR",                # optionnel (défaut "FR")
          "siret": "...",                 # requis si professional + FR
          "company_name": "...",          # optionnel
          "vat_id": "...",                # optionnel
          "plan": "starter"|"professional"|"trial",  # défaut "starter"
          "billing_cycle": "monthly"|"yearly",       # défaut "monthly"
          "currency": "EUR",
          "address_line1": "...",
          "city": "...",
          "postal_code": "...",
          ...
        }

    Flow :
        1. Provision l'org via `provisioning_service.provision_organization(
              ..., allow_multi=True)` — `allow_multi=True` est requis car
              l'user peut avoir d'autres orgs (cas multi-org) OU re-créer
              juste après suppression (idempotence membership écartée).
        2. Crée une Stripe Checkout session pour le plan choisi.
        3. Retourne `{organization_id, checkout_url, name, slug}` pour
           que le front redirige vers Checkout.

    Réutilise au maximum :
      - `provision_organization()` (= même flow que signup + wizard)
      - `billing_service.create_checkout_session()` (= même flow Stripe
        que /billing/checkout). Plan `personal` est mappé sur le checkout
        seat_pack `individual` (1 siège).

## 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)
