Auto Scheduler
TarifsEspace d’essaiFluxBlogFAQDocumentation API
Se connecter

Sur cette page

Vue d’ensemblePérimètreAbonnement et facturationAuthentificationPoint de terminaisonUtilisation (démarrage rapide)API en lecture (GET)API en écriture (PATCH / POST / PUT / DELETE)En-têtesLimites et valeurs par défautClés racine autoriséesCorps de la requête (aperçu)Tableau de référence rapideRéférence des champs (valeurs autorisées)apiVersiontimeZonescheduleStartDate / scheduleEndDatetimeRangeStart / timeRangeEndslotGranularityMinutesrequirementsByCellstaffavailableCellsDroit du travail et options payantes (valeurs serveur)AssainissementRéponse de succèsCodes d’erreur (liste complète)Exemple JSONPour aller plus loin
API payante · Abonnement

Référence API développeur (payant)

Intégrez l’API de production d’envoi de plannings avec une clé API liée à votre abonnement payant. Les valeurs par défaut du locataire s’enregistrent avec PATCH /v1/schedule-defaults ; les souhaits hebdomadaires par collaborateur se lisent ou se remplacent avec GET/PUT /v1/staff/{staffId}/weekly-shift-wish. La facturation suit votre abonnement et votre contrat (pas de tarification à l’appel API). Cette page documente les droits, règles de validation et codes d’erreur — utilisez la barre latérale pour accéder à chaque champ.

Périmètre de cette documentation

Cette page ne couvre que l’API REST produit sur API Gateway ({stage}/v1/*, authentification x-api-key).

Les routes Next.js /api/* (webhooks Stripe, images OG, Web Vitals, etc.) sont internes à l’application web et ne font pas partie de cette API développeur. Ne les utilisez pas pour des intégrations externes.

GET /v1/processing-history n’est pas proposé (supprimé avec l’ancienne interface) et n’apparaît pas dans la liste des points de terminaison de cette page.

Abonnement et accès

Cette API HTTP fait partie du produit payant : l’accès nécessite un accord commercial actif et les clés sont émises pour votre organisation après l’onboarding.

La facturation repose sur l’abonnement et le contrat. Pour les offres payantes, les montants suivent généralement la page Tarifs (souvent par collaborateur inscrit et par mois).

Les limites du playground ou du niveau gratuit ne s’appliquent pas aux clés API payantes. Les limites effectives (durée, effectifs, granularité 15 min) dépendent de vos droits payants. Voir Limites et valeurs par défaut sur cette page.

Authentification

Les requêtes doivent inclure une clé API valide émise dans le cadre de votre abonnement payant. Créez, faites tourner et révoquez les clés depuis l’espace compte après connexion.

Envoyez la clé dans l’en-tête x-api-key. Les clés sont liées à votre organisation pour la résolution du locataire et les plafonds d’accès prévus au contrat.

Gérer les clés : Gestion des API

Point de terminaison

Envoyez une condition de planning au format JSON. Il s’agit de la surface d’intégration payante ; l’URL de base exacte est fournie par environnement après provisionnement de l’accès API.

POST {baseUrl}/v1/schedule

Utilisez l’URL de base fournie lors du provisionnement de l’accès API ou par votre contact d’exploitation.

Utilisation (démarrage rapide)

Remplacez BASE_URL par l’URL de base de l’API (préfixe de chemin) fournie lors du provisionnement de votre accès.

Envoyez votre clé API dans l’en-tête **x-api-key**. Votre organisation (locataire) est identifiée à partir de la clé — vous ne passez pas d’identifiant de locataire séparé dans la chaîne de requête.

La lecture et la mise à jour des données d’entreprise (GET/PATCH /v1/company) nécessitent un abonnement payant actif. Si la facturation n’est pas configurée pour votre locataire, vous pouvez recevoir **503** (p. ex. code **STRIPE_NOT_CONFIGURED**).

Exemple curl (bash / macOS / Linux / WSL)

Windows PowerShell : un `\` en fin de ligne **ne** poursuit **pas** la ligne. Écrivez sur une seule ligne, ou terminez chaque ligne par un accent grave (`) pour continuer.

curl -sS -D - \
  -H "x-api-key: YOUR_API_KEY" \
  "BASE_URL/v1/schedule-results?limit=10"

curl -sS -D - \
  -H "x-api-key: YOUR_API_KEY" \
  "BASE_URL/v1/company"

API en lecture (GET)

Même URL de base et même clé x-api-key que pour POST /v1/schedule. Paramètres facultatifs : limit (1–100, 50 par défaut), cursor (jeton opaque : reprenez le champ nextCursor de la réponse précédente).

GET /v1/company et les mises à jour d’entreprise nécessitent un abonnement payant actif. Si la facturation n’est pas configurée, vous pouvez recevoir **503 / STRIPE_NOT_CONFIGURED**.

MéthodeCheminDescription
GET{baseUrl}/v1/schedule-resultsListe les lignes parentes SCHEDULE_RESULT : conditionId, status, candidateCount, createdAt/updatedAt, etc. Pagination DynamoDB.
GET{baseUrl}/v1/schedule-results/historyRecherche d’historique des résultats (équivalent navigateur). from / to (ISO 8601, défaut début de service à maintenant), keyword, eventName (INSERT,MODIFY,REMOVE séparés par virgules), limit, cursor. Fusion automatique récent + archive ; retourne uniquement items / nextCursor.
GET{baseUrl}/v1/schedule-results/{conditionId}Récupère une ligne parente SCHEDULE_RESULT par conditionId (attributs JSON ; PK/SK omis).
GET{baseUrl}/v1/schedule-results/{conditionId}/resolutionSortie d’optimisation résolue : status, candidates, confirmedAssignments si présents. Si status est completed et pas encore confirmé, rank-1 peut être auto-confirmé sur ce GET (effet de bord). Utilisez POST …/confirm-assignments pour une confirmation manuelle.
GET{baseUrl}/v1/schedule-results/{conditionId}/reviewCharge utile de revue pour confirmation manuelle (candidats, requiredByCellKey, allowedCellKeys du personnel, etc.).
GET{baseUrl}/v1/schedule-results/{conditionId}/emergency-shift-contextContexte de shift d’urgence (dates, personnel, créneaux). Abonnement payant requis ; null si la condition est absente.
GET{baseUrl}/v1/schedule-conditionsListe les lignes parentes SCHEDULE_CONDITION (conditionId, dates, publicApiCancelledAt optionnel).
GET{baseUrl}/v1/schedule-conditions/{conditionId}Ligne parente de condition plus reqDays et staffSnapshots (sans PK/SK).
GET{baseUrl}/v1/audit-logsListe les entrées du journal d’audit (plus récentes d’abord ; pagination par cursor).
GET{baseUrl}/v1/schedule-defaultsLigne de valeurs par défaut du locataire (SCHEDULE_DEFAULTS) ou null si non enregistrée.
GET{baseUrl}/v1/schedule-actual/{conditionId}Ligne SCHEDULE_ACTUAL des affectations réelles, ou null si absente.
GET{baseUrl}/v1/staff/{staffId}/weekly-shift-wishLigne de souhaits hebdomadaires du collaborateur, ou null si absente.
GET{baseUrl}/v1/companyRenvoie les champs Stripe Customer (nom, e-mail, téléphone, adresse) pour le customerId lié à votre clé API.
GET{baseUrl}/v1/usersListe les utilisateurs du locataire (facultatif : limit, cursor, userName, permissionProfileId, scope fullAccess|nonFullAccess).
GET{baseUrl}/v1/users/{userId}Récupère un utilisateur par le userId indiqué dans le chemin.
GET{baseUrl}/v1/staffListe les membres actifs du personnel du locataire (tri par nom affiché).
GET{baseUrl}/v1/staff/{staffId}Récupère un membre par staffId, détails travail inclus (laborLawCompliance, laborFlsaExempt, plafonds personnels, laborConstraintMask). Suppression logique → 404.

API en écriture (PATCH / POST / PUT / DELETE)

Utilisez la même clé API avec des corps JSON. PATCH /v1/company refuse les chaînes vides pour des champs tels que le nom de l’entreprise (aligné sur l’application web). PATCH /v1/schedule-defaults enregistre les valeurs par défaut du locataire (requirementsByCellKey, horizon de planification, etc.) ; les champs payants suivent votre abonnement. PUT /v1/staff/{staffId}/weekly-shift-wish remplace entièrement la grille hebdomadaire des souhaits (voir la note de validation). DELETE /v1/users/{userId} renvoie 409 s’il ne resterait aucun utilisateur actif ou lors de la suppression du dernier administrateur. POST /v1/staff renvoie 409 STAFF_LIMIT si l’effectif dépasserait la limite du locataire.

POST /v1/users exige userName, email, permissionProfileId ; facultatif : locale, password. PATCH utilisateur : champs à modifier uniquement. POST /v1/staff : JSON { "displayName": "..." } uniquement. PATCH /v1/staff/{staffId} : displayName, laborLawCompliance, laborFlsaExempt, personalMaxWeeklyMinutes / personalMaxMonthlyMinutes / personalMaxThreeMonthMinutes (entier ou null), laborConstraintMask (objet ou null si laborLawCompliance true) — champs travail payants. POST /v1/schedule-results/{conditionId}/emergency-shift : absentStaffIds, absentDatesYmd et/ou absentSlots (payant, planning source terminé). POST …/confirm-assignments : tableau assignments et relaxAvailability optionnel. PATCH /v1/schedule-defaults : PUBLIC_API_SCHEDULE_REQUEST_BODY.md §12. PUT /v1/staff/{staffId}/weekly-shift-wish : scheduleStartDate, scheduleEndDate, timeRangeStart, timeRangeEnd, wishByCellKey.

MéthodeCheminDescription
PATCH{baseUrl}/v1/companyMet à jour les champs du profil d’entreprise (client de facturation).
PATCH{baseUrl}/v1/schedule-defaultsEnregistre les valeurs par défaut de planning du locataire (corps JSON aligné sur saveSchema dans schedule-defaults-actions). Les champs payants suivent votre abonnement.
POST{baseUrl}/v1/usersCrée un utilisateur. Renvoie 201 avec le JSON utilisateur.
PATCH{baseUrl}/v1/users/{userId}Met à jour les champs utilisateur (userName, email, permissionProfileId, locale).
DELETE{baseUrl}/v1/users/{userId}Supprime un utilisateur. 409 s’il ne resterait aucun utilisateur ou règle du dernier administrateur.
POST{baseUrl}/v1/staffCrée un membre du personnel (displayName). Renvoie 201 avec le JSON staff.
POST{baseUrl}/v1/schedule-results/{conditionId}/emergency-shiftClone un planning source terminé avec absences appliquées ; renvoie 201 avec conditionId. Abonnement payant requis.
POST{baseUrl}/v1/schedule-results/{conditionId}/confirm-assignmentsValide et enregistre les affectations éditées manuellement (200 avec { ok: true }).
PATCH{baseUrl}/v1/staff/{staffId}Met à jour displayName et détails travail (laborLawCompliance, laborFlsaExempt, plafonds personnels, laborConstraintMask).
DELETE{baseUrl}/v1/staff/{staffId}Supprime logiquement un membre du personnel (définit deletedAt).
DELETE{baseUrl}/v1/schedule-conditions/{conditionId}Marque la condition comme annulée (publicApiCancelledAt) ; ne supprime pas les lignes enfants.
PUT{baseUrl}/v1/schedule-actual/{conditionId}Enregistre les affectations réelles JSON { "assignments": [ ... ] } (validées contre la grille de la condition).
PUT{baseUrl}/v1/staff/{staffId}/weekly-shift-wishRemplace les souhaits hebdomadaires : grille complète (1–7 jours), wishByCellKey par cellule (NONE|LOW|HIGH) ; granularité selon les valeurs par défaut du locataire.
POST{baseUrl}/v1/users/{userId}/restoreRestaure un utilisateur supprimé logiquement.

En-têtes

En-têteDescription
x-api-keyClé API liée à votre abonnement payant (identifie le locataire et les limites du plan).
Content-Typeapplication/json

En-têtes de réponse

Certains en-têtes de réponse (comme les identifiants de requête) sont des métadonnées de traçage, pas votre clé API. Traitez les **corps** JSON comme confidentiels lorsqu’ils contiennent des données d’entreprise ou d’utilisateur.

Limites du niveau payant (droits)

Limites de validation typiques pour votre contrat (granularité 15 min, durée du planning, nombre de collaborateurs inscrits et plafonds associés).

ParamètreAPI payante (typique)
Modèle de facturationAbonnement Stripe ; les frais produit évoluent généralement avec le nombre de sièges (personnel enregistré) comme sur la page tarifs (pas de facturation à l’appel API).
maxScheduleDaysJusqu’à 14 jours civils par envoi pour la planification détaillée standard sur deux semaines (plages plus larges uniquement si le contrat le permet).
maxStaffPerScheduleJusqu’à 500 lignes staff par POST /v1/schedule (PUBLIC_SCHEDULE_MAX_STAFF ; staffId en ligne dans le corps).
maxRosterStaffJusqu’à 30 collaborateurs actifs via POST /v1/staff (STAFF_ROSTER_MAX_PAID) ; 409 STAFF_LIMIT si dépassement.
allowedGranularities[60, 15] — les créneaux de 15 minutes sont une fonctionnalité payante ; 60 minutes est aussi pris en charge.
maxPayloadBytes524288 (512 KiB) UTF-8 sauf plafond supérieur accordé.
strictUnknownRootKeystrue — les clés inconnues à la racine ou dans staff sont rejetées

Le besoin en effectifs par cellule reste un entier de 0 à 15. Le dépassement des limites de débit peut renvoyer une réponse d’erreur.

Clés racine autorisées (mode strict)

En mode strict, seules les clés de niveau supérieur suivantes sont acceptées. Toute autre clé renvoie UNKNOWN_FIELD.

  • apiVersion
  • timeZone
  • scheduleStartDate
  • scheduleEndDate
  • timeRangeStart
  • timeRangeEnd
  • slotGranularityMinutes
  • requirementsByCell
  • staff

Corps de la requête (aperçu)

Le corps suit le modèle public payant : dates de calendrier, fuseau horaire, grille de créneaux (60 ou 15 minutes sur l’API payante), besoins par cellule et disponibilité du personnel. La juridiction en droit du travail, les indicateurs d’optimisation payante et les champs travail au niveau du personnel ne font pas partie du JSON — le serveur écrit des valeurs par défaut sur la ligne parente SCHEDULE_CONDITION à la persistance (voir « Droit du travail et options payantes »). N’incluez pas les clés DynamoDB ni les types d’entité internes dans le corps.

  • apiVersion — Facultatif. Si présent, uniquement la chaîne de version de schéma prise en charge.
  • Format cellKey — Les clés dans requirementsByCell et availableCells doivent correspondre à `${date}__${slotId}`, où date est au format YYYY-MM-DD dans la plage et slotId provient des créneaux énumérés pour votre plage horaire et granularité (comme `cellKey` dans les helpers du playground).

Tableau de référence rapide

ChampTypeObligatoireNotes
timeZonestringOuiFuseau horaire IANA pour interpréter les dates et les créneaux.
scheduleStartDate / scheduleEndDatestring (YYYY-MM-DD)OuiPlage de calendrier inclusive ; début ≤ fin.
timeRangeStart / timeRangeEndstring (HH:mm)OuiPlage horaire « horloge murale » qui définit la colonne de créneaux ; doit produire au moins un créneau.
slotGranularityMinutes60 | 15OuiAPI payante : 60 (heure) ou 15 (quarts d’heure). Doit figurer dans allowedGranularities.
requirementsByCellobjectOuiClés = cellKey dans la grille calculée ; valeurs = entier 0–15.
staffarrayOuiNon vide ; taille max. selon les limites ; chaque élément : staffId, displayName, availableCells facultatif.

Référence des champs (valeurs autorisées)

Les sections suivantes reflètent le validateur dans `app/lib/public-schedule-api/validate.ts` et les assainisseurs dans `sanitize.ts`, avec les valeurs par défaut payantes de `PUBLIC_SCHEDULE_SUBMIT_DEFAULTS` sauf options explicites. Envoyez les nombres JSON comme nombres réels (pas comme chaînes). Après validation, `build-schedule-transact-items.ts` ajoute des champs de ligne parente (copie d’optimisation payante, juridiction travail, version du modèle) qui ne sont pas des clés de requête — voir « Droit du travail et options payantes ».

apiVersion

string | omis · Obligatoire: Non — facultatif

Valeurs autorisées

  • Omis : accepté (comportement actuel).
  • Si présent, doit être exactement "2026-04-01" (PUBLIC_SCHEDULE_API_VERSION).
  • Toute autre chaîne est rejetée (TYPE_ERROR).

Comportement

  • Comparaison après traitement équivalent à un trim dans sanitizeApiVersion.

Erreurs typiques

  • TYPE_ERRORValeur apiVersion non prise en charge.

timeZone

string · Obligatoire: Oui

Valeurs autorisées

  • Format : une seule chaîne. L’API ne publie pas une énumération fermée de toutes les zones : le serveur valide dynamiquement.
  • La validation correspond à `isValidIanaTimeZone` : Luxon `DateTime.now().setZone(zone).isValid` doit être true.
  • Utilisez des identifiants IANA canoniques, ex. `Asia/Tokyo`, `America/New_York`, `Europe/Berlin`, `UTC`.
  • Ne vous fiez pas seulement aux abréviations (`EST`, `JST`, `GMT`) — ce ne sont pas des ID IANA stables et elles peuvent être rejetées.
  • Listes de référence : distribution IANA (https://www.iana.org/time-zones) ou l’API fuseau horaire de votre plateforme.

Comportement

  • Utilisé avec les dates et les heures de créneau dans la normalisation en aval.
  • Si vous avez besoin d’une liste fixe côté client, dérivez-la avec les mêmes règles (IDs IANA), sans attendre une énumération serveur dans le schéma JSON.

Erreurs typiques

  • INVALID_TIME_ZONEManquant, vide ou zone IANA invalide.

scheduleStartDate, scheduleEndDate

string, string · Obligatoire: Oui — les deux

Valeurs autorisées

  • Doit correspondre à /^\d{4}-\d{2}-\d{2}$/ (après trim).
  • Dates de calendrier réelles ; la plage inclusive doit produire au moins un jour via enumerateDates.
  • Le nombre de jours ne doit pas dépasser maxScheduleDays (API payante typiquement jusqu’à 14 jours ; plafond exact = droits du locataire).

Comportement

  • scheduleStartDate doit être antérieur ou égal à scheduleEndDate.

Erreurs typiques

  • INVALID_DATE_RANGEMauvais format, dates invalides ou plage vide.
  • SCHEDULE_SPAN_TOO_LONGPlus de maxScheduleDays jours.

timeRangeStart, timeRangeEnd

string, string · Obligatoire: Oui — les deux

Valeurs autorisées

  • Chaînes non vides (trim) interprétées avec la même énumération de créneaux que l’UI (`enumerateSlotsByGranularity`).
  • La paire doit produire au moins un créneau ; sinon la validation échoue.

Comportement

  • Avec slotGranularityMinutes, définit les slotId utilisés pour cellKey.

Erreurs typiques

  • INVALID_TIME_RANGEValeurs manquantes ou zéro créneau pour la plage.

slotGranularityMinutes

number (nombre JSON) · Obligatoire: Oui

Valeurs autorisées

  • Exactement 60 ou 15 (pas une chaîne).
  • Doit aussi figurer dans allowedGranularities. Sur l’API payante les deux sont en général activés ; si 15 est désactivé pour votre locataire, INVALID_GRANULARITY.

Comportement

  • Définit le nombre de créneaux avec la plage horaire.

Erreurs typiques

  • INVALID_GRANULARITYPas 60/15 ou non autorisé par le plan.

requirementsByCell

Record<string, number> · Obligatoire: Oui

Valeurs autorisées

  • Doit être un objet JSON plan (pas un tableau).
  • Chaque clé doit être un cellKey dans la grille attendue (dates × slotIds). Clés inconnues → UNKNOWN_CELL_KEY.
  • Chaque valeur : nombre JSON entier entre 0 et 15 inclus.
  • Les cellules omises sont traitées comme besoin 0 (SHORTFALL seulement pour besoin ≥ 1).

Comportement

  • Les clés sont comparées après trim via sanitizeCellKey.

Erreurs typiques

  • INVALID_REQUIREMENTSPas un objet ou valeur numérique invalide pour une clé.
  • UNKNOWN_CELL_KEYClé hors de la grille date × créneau calculée.

staff

array · Obligatoire: Oui — tableau non vide

Valeurs autorisées

  • Longueur entre 1 et maxStaffPerSchedule (500 par défaut pour POST /v1/schedule ; distinct du plafond de liste POST /v1/staff).
  • Chaque élément : objet plan avec uniquement les clés autorisées : staffId, displayName, availableCells (mode strict).
  • staffId et displayName doivent passer l’assainissement (section Assainissement).
  • staffId doit être unique dans le tableau (DUPLICATE_STAFF_ID).

Comportement

  • L’ordre est conservé pour le décompte de disponibilité.

Erreurs typiques

  • INVALID_STAFFTableau vide, trop de lignes, objet invalide ou assainissement échoué.
  • UNKNOWN_FIELDClé supplémentaire sur un objet staff en mode strict.
  • DUPLICATE_STAFF_IDMême staffId deux fois.

staff[].availableCells

string[] | omis · Obligatoire: Non — facultatif

Valeurs autorisées

  • Si omis : le membre du personnel est considéré disponible sur toutes les cellules (null = « toutes les cellules » en interne).
  • Si présent : tableau JSON de chaînes ; chaque chaîne non vide doit être un cellKey dans la grille attendue.
  • Les chaînes vides dans le tableau sont invalides (INVALID_AVAILABLE_CELL).

Contrôle SHORTFALL

  • Pour chaque cellule avec besoin ≥ 1, le nombre de personnel disponible doit être ≥ besoin, sinon SHORTFALL_CELLS.

Erreurs typiques

  • INVALID_AVAILABLE_CELLClé de cellule inconnue ou entrée vide.
  • SHORTFALL_CELLSPersonnel insuffisant par rapport au besoin pour une cellule.

Droit du travail et optimisation payante (pas dans le corps JSON)

n/a — persisté côté serveur · Dans la requête: Non — n’envoyez jamais ces clés

Ce que l’API enregistre sur la ligne parente

  • L’API publique n’accepte que ROOT_KEYS à la racine et STAFF_KEYS sur chaque ligne personnel. N’envoyez pas laborLawJurisdiction, usLaborStateCode, laborModelVersion ni paidOptimization.
  • À l’envoi, le serveur remplit la ligne parente SCHEDULE_CONDITION avec les valeurs partagées : paidOptimization = DEFAULT_PAID_OPTIMIZATION — laborLawCompliance false ; balanceStaffLoad, honorShiftWishes et preferConsecutiveShifts true (voir schedule-defaults-shared.ts et build-schedule-transact-items.ts). laborLawJurisdiction JP, usLaborStateCode GENERIC, laborModelVersion v1.
  • Les contraintes de type légal dans l’optimiseur exigent les indicateurs de conformité parent et par personne ; ce chemin les laisse désactivés : n’attendez pas de plafonds légaux uniquement avec ce JSON.
  • Le modèle travail est une approximation pour la planification, pas un conseil juridique. Catalogue : optimizer/config/labor_models.json.

Documentation

  • Détail : docs/data-and-api/PUBLIC_API_SCHEDULE_REQUEST_BODY.md §2.1.1 et §3.1.

Si vous envoyez des clés interdites

  • UNKNOWN_FIELDLe mode strict rejette les propriétés inconnues à la racine ou sur staff.

Règles d’assainissement

Appliquées avant ou pendant la validation comme dans `sanitize.ts`. Elles expliquent les rejets INVALID_STAFF.

staffId

  • Trim ; longueur 1–128.
  • Caractères : /^[a-zA-Z0-9._-]+$/ (pas de slash ni d’antislash).

displayName

  • Supprimer caractères de contrôle et zero-width ; fusionner les espaces ; trim.
  • Les chevrons < et > sont interdits.
  • Max. 128 caractères après assainissement ; ne doit pas devenir vide.

Clés de cellule (requirements / availableCells)

  • Les clés sont trimmées ; doivent correspondre exactement aux cellKey de la grille calculée.

Réponse de succès

202 Accepted

Le corps a passé la validation et la condition a été écrite ; l’optimisation peut continuer de façon asynchrone. Le gestionnaire peut renvoyer un JSON avec conditionId et champs associés.

Codes d’erreur (liste complète)

Les erreurs de validation renvoient une information structurée avec un `code` stable. L’analyse précède la validation (INVALID_JSON, PAYLOAD_TOO_LARGE). Les échecs de persistance peuvent apparaître comme DYNAMODB_ERROR. PATCH /v1/schedule-defaults peut renvoyer SCHEDULE_DEFAULTS_SAVE_FAILED (HTTP 400) avec des détails.

CodeSignification
INVALID_JSONLe corps n’est pas du JSON valide.
PAYLOAD_TOO_LARGELongueur en octets UTF-8 supérieure à maxPayloadBytes (défaut 512 KiB).
TYPE_ERRORType JSON incorrect ou chaîne apiVersion non prise en charge.
UNKNOWN_FIELDMode strict : propriété interdite sur la racine ou l’objet staff.
INVALID_TIME_ZONEtimeZone manquant ou nom IANA invalide.
INVALID_DATE_RANGEDates pas au format YYYY-MM-DD, plage invalide ou énumération vide.
SCHEDULE_SPAN_TOO_LONGTrop de jours entre début et fin (voir maxScheduleDays).
INVALID_TIME_RANGEPlage horaire manquante ou zéro créneau.
INVALID_GRANULARITYslotGranularityMinutes pas 60/15 ou non autorisé par le plan.
INVALID_REQUIREMENTSrequirementsByCell n’est pas un objet ou le compte n’est pas un entier 0–15.
UNKNOWN_CELL_KEYClé absente de la grille de planning calculée.
INVALID_STAFFstaff vide, trop grand, ligne invalide ou assainissement échoué.
DUPLICATE_STAFF_IDValeurs staffId dupliquées.
INVALID_AVAILABLE_CELLEntrée vide ou inconnue dans availableCells.
SHORTFALL_CELLSDisponibilité insuffisante par rapport aux besoins.
DYNAMODB_ERRORErreur transitoire ou de persistance après validation (selon le gestionnaire).
SCHEDULE_DEFAULTS_SAVE_FAILEDPATCH /v1/schedule-defaults : validation ou règles métier en échec (voir error.details).
LABOR_COMPLIANCE_REQUIREDPATCH /v1/staff/{staffId} : laborConstraintMask envoyé alors que laborLawCompliance est false.

Exemple JSON minimal

{
  "apiVersion": "2026-04-01",
  "timeZone": "Asia/Tokyo",
  "scheduleStartDate": "2026-04-07",
  "scheduleEndDate": "2026-04-13",
  "timeRangeStart": "08:00",
  "timeRangeEnd": "20:00",
  "slotGranularityMinutes": 60,
  "requirementsByCell": {
    "2026-04-07__slot-0": 2
  },
  "staff": [
    {
      "staffId": "550e8400-e29b-41d4-a716-446655440000",
      "displayName": "Example",
      "availableCells": ["2026-04-07__slot-0"]
    }
  ]
}

Pour aller plus loin. Offres et fonctions payantes : docs/architecture/NURSE_SCHEDULING_SERVICE_SPECIFICATION.md. Corps POST /v1/schedule : docs/data-and-api/PUBLIC_API_SCHEDULE_REQUEST_BODY.md §1–§11. Corps PATCH des valeurs par défaut locataire : même fichier §12. Code : app/lib/public-schedule-api/, app/features/schedule-settings/schedule-defaults-actions.ts, app/lib/public-api-write/weekly-shift-wish-tenant.ts. Déploiement : docs/aws/CDK_DEPLOY.md.

Auto Scheduler

Service cloud pour la planification et l’optimisation des plannings, avec contraintes opérationnelles et conformité.

Conditions d'utilisation|Politique de confidentialité|Mentions légales

Solver (éditeur)