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.
Cette page documente l'API REST produit pour les integrations externes (API Gateway {stage}/v1/*, authentification x-api-key).
Les webhooks de fin de resultat sont des notifications HTTPS sortantes configurees dans la gestion API (pas un CRUD REST). Voir Completion webhooks sur cette page.
Les routes navigateur internes (paiements, analytics, etc.) ne remplacent pas cette API produit. Pour les systemes externes, utilisez /v1/* et les webhooks de completion.
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.
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
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.
Utilisez lâURL de base fournie lors du provisionnement de lâaccĂšs API ou par votre contact dâexploitation.
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.
Les fonctions payantes (shift dâurgence, dĂ©tails travail, certaines valeurs par dĂ©faut) nĂ©cessitent un abonnement payant actif. Si la facturation nâest pas configurĂ©e, vous pouvez recevoir **503** (p. ex. code **STRIPE_NOT_CONFIGURED**). Le profil dâentreprise, les journaux dâaudit et la gestion des utilisateurs (comptes) relĂšvent de lâapplication web et ne font pas partie de lâAPI publique.
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/staff"
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).
Liste les lignes parentes SCHEDULE_RESULTÂ : conditionId, status, candidateCount, createdAt/updatedAt, etc. Pagination DynamoDB.
Recherche 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.
RécupÚre une ligne parente SCHEDULE_RESULT par conditionId (attributs JSON ; PK/SK omis).
Sortie 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.
Charge utile de revue pour confirmation manuelle (candidats, requiredByCellKey, allowedCellKeys du personnel, etc.).
Contexte de shift dâurgence (dates, personnel, crĂ©neaux). Abonnement payant requis ; null si la condition est absente.
Liste les lignes parentes SCHEDULE_CONDITION (conditionId, dates, publicApiCancelledAt optionnel).
Ligne parente de condition plus reqDays et staffSnapshots (sans PK/SK).
Ligne de valeurs par défaut du locataire (SCHEDULE_DEFAULTS) ou null si non enregistrée.
Ligne SCHEDULE_ACTUAL des affectations réelles, ou null si absente.
Ligne de souhaits hebdomadaires du collaborateur, ou null si absente.
Liste les membres actifs du personnel du locataire (tri par nom affiché).
RĂ©cupĂšre un membre par staffId, dĂ©tails travail inclus (laborLawCompliance, laborFlsaExempt, plafonds personnels, laborConstraintMask). Suppression logique â 404.
| Méthode | Chemin | Description |
|---|---|---|
| GET | {baseUrl}/v1/schedule-results | Liste les lignes parentes SCHEDULE_RESULTÂ : conditionId, status, candidateCount, createdAt/updatedAt, etc. Pagination DynamoDB. |
| GET | {baseUrl}/v1/schedule-results/history | Recherche 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}/resolution | Sortie 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}/review | Charge utile de revue pour confirmation manuelle (candidats, requiredByCellKey, allowedCellKeys du personnel, etc.). |
| GET | {baseUrl}/v1/schedule-results/{conditionId}/emergency-shift-context | Contexte de shift dâurgence (dates, personnel, crĂ©neaux). Abonnement payant requis ; null si la condition est absente. |
| GET | {baseUrl}/v1/schedule-conditions | Liste 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/schedule-defaults | Ligne 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-wish | Ligne de souhaits hebdomadaires du collaborateur, ou null si absente. |
| GET | {baseUrl}/v1/staff | Liste 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. |
Utilisez la mĂȘme clĂ© API avec des corps JSON. 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). POST /v1/staff renvoie 409 STAFF_LIMIT si lâeffectif dĂ©passerait la limite du locataire. La gestion des utilisateurs (comptes), le profil dâentreprise et les journaux dâaudit relĂšvent de lâapplication web et ne font pas partie de lâAPI publique.
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.
Enregistre les valeurs par défaut de planning du locataire (corps JSON aligné sur saveSchema dans schedule-defaults-actions). Les champs payants suivent votre abonnement.
Crée un membre du personnel (displayName). Renvoie 201 avec le JSON staff.
Clone un planning source terminé avec absences appliquées ; renvoie 201 avec conditionId. Abonnement payant requis.
Valide et enregistre les affectations éditées manuellement (200 avec { ok: true }).
Met à jour displayName et détails travail (laborLawCompliance, laborFlsaExempt, plafonds personnels, laborConstraintMask).
Supprime logiquement un membre du personnel (définit deletedAt).
Marque la condition comme annulée (publicApiCancelledAt) ; ne supprime pas les lignes enfants.
Enregistre les affectations réelles JSON { "assignments": [ ... ] } (validées contre la grille de la condition).
Remplace les souhaits hebdomadaires : grille complĂšte (1â7 jours), wishByCellKey par cellule (NONE|LOW|HIGH) ; granularitĂ© selon les valeurs par dĂ©faut du locataire.
| Méthode | Chemin | Description |
|---|---|---|
| PATCH | {baseUrl}/v1/schedule-defaults | Enregistre 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/staff | Crée un membre du personnel (displayName). Renvoie 201 avec le JSON staff. |
| POST | {baseUrl}/v1/schedule-results/{conditionId}/emergency-shift | Clone un planning source terminé avec absences appliquées ; renvoie 201 avec conditionId. Abonnement payant requis. |
| POST | {baseUrl}/v1/schedule-results/{conditionId}/confirm-assignments | Valide 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-wish | Remplace les souhaits hebdomadaires : grille complĂšte (1â7 jours), wishByCellKey par cellule (NONE|LOW|HIGH) ; granularitĂ© selon les valeurs par dĂ©faut du locataire. |
When a schedule result reaches a terminal status, we POST a signed JSON notification to your HTTPS URL. The body does not include the full result; fetch details with GET /v1/schedule-results/{conditionId}.
Playground results are not delivered. If the webhook is disabled or no URL is saved, nothing is sent.
Event type and when it is sent.
schedule.result.terminal
Schedule result status becomes completed, no_solution, failed, error, or canceled
| type | When |
|---|---|
| schedule.result.terminal | Schedule result status becomes completed, no_solution, failed, error, or canceled |
status is terminal only. customerId is omitted from the body.
{
"type": "schedule.result.terminal",
"conditionId": "019ee481-e855-7000-abd8-977cbfd64ffc",
"status": "completed",
"occurredAt": "2026-07-16T13:00:54.694Z",
"links": {
"result": "{baseUrl}/v1/schedule-results/019ee481-e855-7000-abd8-977cbfd64ffc"
}
}Content-Type
application/json
User-Agent
AutoScheduler-Webhook/1.0
X-AutoScheduler-Timestamp
Unix seconds as a string
X-AutoScheduler-Signature
v1=<hex> (see verification below)
| Header | Description |
|---|---|
| Content-Type | application/json |
| User-Agent | AutoScheduler-Webhook/1.0 |
| X-AutoScheduler-Timestamp | Unix seconds as a string |
| X-AutoScheduler-Signature | v1=<hex> (see verification below) |
Compute a digest from the raw body (before JSON parse) and the Timestamp, then compare to Signature. Reject requests when |now â timestamp| exceeds 300 seconds (5 minutes) unless you intentionally allow wider clock skew.
HMAC-SHA256(signingSecret, `${timestamp}.${rawBody}`) â hex; header value is v1=<hex>On 5xx or timeout we retry automatically. Persistent failures go to a dead-letter queue. Browser push notifications use a separate path.
Register & enable: API management
x-api-key
Clé API liée à votre abonnement payant (identifie le locataire et les limites du plan).
Content-Type
application/json
| En-tĂȘte | Description |
|---|---|
| x-api-key | Clé API liée à votre abonnement payant (identifie le locataire et les limites du plan). |
| Content-Type | application/json |
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 de validation typiques pour votre contrat (granularité 15 min, durée du planning, nombre de collaborateurs inscrits et plafonds associés).
ModĂšle de facturation
Abonnement 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).
maxScheduleDays
JusquâĂ 14 jours civils par envoi pour la planification dĂ©taillĂ©e standard sur deux semaines (plages plus larges uniquement si le contrat le permet).
maxStaffPerSchedule
JusquâĂ 500 lignes staff par POST /v1/schedule (PUBLIC_SCHEDULE_MAX_STAFF ; staffId en ligne dans le corps).
maxRosterStaff
JusquâĂ 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.
maxPayloadBytes
524288 (512 KiB) UTF-8 sauf plafond supérieur accordé.
strictUnknownRootKeys
true â les clĂ©s inconnues Ă la racine ou dans staff sont rejetĂ©es
| ParamĂštre | API payante (typique) |
|---|---|
| ModĂšle de facturation | Abonnement 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). |
| maxScheduleDays | JusquâĂ 14 jours civils par envoi pour la planification dĂ©taillĂ©e standard sur deux semaines (plages plus larges uniquement si le contrat le permet). |
| maxStaffPerSchedule | JusquâĂ 500 lignes staff par POST /v1/schedule (PUBLIC_SCHEDULE_MAX_STAFF ; staffId en ligne dans le corps). |
| maxRosterStaff | JusquâĂ 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. |
| maxPayloadBytes | 524288 (512 KiB) UTF-8 sauf plafond supérieur accordé. |
| strictUnknownRootKeys | true â 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.
En mode strict, seules les clés de niveau supérieur suivantes sont acceptées. Toute autre clé renvoie UNKNOWN_FIELD.
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.
timeZone
Fuseau horaire IANA pour interpréter les dates et les créneaux.
scheduleStartDate / scheduleEndDate
Plage de calendrier inclusive ; début †fin.
timeRangeStart / timeRangeEnd
Plage horaire « horloge murale » qui définit la colonne de créneaux ; doit produire au moins un créneau.
slotGranularityMinutes
API payante : 60 (heure) ou 15 (quarts dâheure). Doit figurer dans allowedGranularities.
requirementsByCell
ClĂ©s = cellKey dans la grille calculĂ©e ; valeurs = entier 0â15.
staff
Non vide ; taille max. selon les limites ; chaque élément : staffId, displayName, availableCells facultatif.
| Champ | Type | Obligatoire | Notes |
|---|---|---|---|
| timeZone | string | Oui | Fuseau horaire IANA pour interpréter les dates et les créneaux. |
| scheduleStartDate / scheduleEndDate | string (YYYY-MM-DD) | Oui | Plage de calendrier inclusive ; début †fin. |
| timeRangeStart / timeRangeEnd | string (HH:mm) | Oui | Plage horaire « horloge murale » qui définit la colonne de créneaux ; doit produire au moins un créneau. |
| slotGranularityMinutes | 60 | 15 | Oui | API payante : 60 (heure) ou 15 (quarts dâheure). Doit figurer dans allowedGranularities. |
| requirementsByCell | object | Oui | ClĂ©s = cellKey dans la grille calculĂ©e ; valeurs = entier 0â15. |
| staff | array | Oui | Non vide ; taille max. selon les limites ; chaque élément : staffId, displayName, availableCells facultatif. |
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 ».
string | omis · Obligatoire: Non â facultatif
Valeurs autorisées
Comportement
Erreurs typiques
TYPE_ERRORValeur apiVersion non prise en charge.string · Obligatoire: Oui
Valeurs autorisées
Comportement
Erreurs typiques
INVALID_TIME_ZONEManquant, vide ou zone IANA invalide.string, string · Obligatoire: Oui â les deux
Valeurs autorisées
Comportement
Erreurs typiques
INVALID_DATE_RANGEMauvais format, dates invalides ou plage vide.SCHEDULE_SPAN_TOO_LONGPlus de maxScheduleDays jours.string, string · Obligatoire: Oui â les deux
Valeurs autorisées
Comportement
Erreurs typiques
INVALID_TIME_RANGEValeurs manquantes ou zéro créneau pour la plage.number (nombre JSON) · Obligatoire: Oui
Valeurs autorisées
Comportement
Erreurs typiques
INVALID_GRANULARITYPas 60/15 ou non autorisé par le plan.Record<string, number> · Obligatoire: Oui
Valeurs autorisées
Comportement
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.array · Obligatoire: Oui â tableau non vide
Valeurs autorisées
Comportement
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.string[] | omis · Obligatoire: Non â facultatif
Valeurs autorisées
ContrĂŽle SHORTFALL
Erreurs typiques
INVALID_AVAILABLE_CELLClĂ© de cellule inconnue ou entrĂ©e vide.SHORTFALL_CELLSPersonnel insuffisant par rapport au besoin pour une cellule.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
Documentation
Si vous envoyez des clés interdites
UNKNOWN_FIELDLe mode strict rejette les propriétés inconnues à la racine ou sur staff.Appliquées avant ou pendant la validation comme dans `sanitize.ts`. Elles expliquent les rejets INVALID_STAFF.
staffId
displayName
Clés de cellule (requirements / availableCells)
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.
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.
INVALID_JSON
Le corps nâest pas du JSON valide.
PAYLOAD_TOO_LARGE
Longueur en octets UTF-8 supérieure à maxPayloadBytes (défaut 512 KiB).
TYPE_ERROR
Type JSON incorrect ou chaĂźne apiVersion non prise en charge.
UNKNOWN_FIELD
Mode strict : propriĂ©tĂ© interdite sur la racine ou lâobjet staff.
INVALID_TIME_ZONE
timeZone manquant ou nom IANA invalide.
INVALID_DATE_RANGE
Dates pas au format YYYY-MM-DD, plage invalide ou énumération vide.
SCHEDULE_SPAN_TOO_LONG
Trop de jours entre début et fin (voir maxScheduleDays).
INVALID_TIME_RANGE
Plage horaire manquante ou zéro créneau.
INVALID_GRANULARITY
slotGranularityMinutes pas 60/15 ou non autorisé par le plan.
INVALID_REQUIREMENTS
requirementsByCell nâest pas un objet ou le compte nâest pas un entier 0â15.
UNKNOWN_CELL_KEY
Clé absente de la grille de planning calculée.
INVALID_STAFF
staff vide, trop grand, ligne invalide ou assainissement échoué.
DUPLICATE_STAFF_ID
Valeurs staffId dupliquées.
INVALID_AVAILABLE_CELL
Entrée vide ou inconnue dans availableCells.
SHORTFALL_CELLS
Disponibilité insuffisante par rapport aux besoins.
DYNAMODB_ERROR
Erreur transitoire ou de persistance aprĂšs validation (selon le gestionnaire).
SCHEDULE_DEFAULTS_SAVE_FAILED
PATCH /v1/schedule-defaults : validation ou rÚgles métier en échec (voir error.details).
LABOR_COMPLIANCE_REQUIRED
PATCH /v1/staff/{staffId} : laborConstraintMask envoyé alors que laborLawCompliance est false.
| Code | Signification |
|---|---|
| INVALID_JSON | Le corps nâest pas du JSON valide. |
| PAYLOAD_TOO_LARGE | Longueur en octets UTF-8 supérieure à maxPayloadBytes (défaut 512 KiB). |
| TYPE_ERROR | Type JSON incorrect ou chaĂźne apiVersion non prise en charge. |
| UNKNOWN_FIELD | Mode strict : propriĂ©tĂ© interdite sur la racine ou lâobjet staff. |
| INVALID_TIME_ZONE | timeZone manquant ou nom IANA invalide. |
| INVALID_DATE_RANGE | Dates pas au format YYYY-MM-DD, plage invalide ou énumération vide. |
| SCHEDULE_SPAN_TOO_LONG | Trop de jours entre début et fin (voir maxScheduleDays). |
| INVALID_TIME_RANGE | Plage horaire manquante ou zéro créneau. |
| INVALID_GRANULARITY | slotGranularityMinutes pas 60/15 ou non autorisé par le plan. |
| INVALID_REQUIREMENTS | requirementsByCell nâest pas un objet ou le compte nâest pas un entier 0â15. |
| UNKNOWN_CELL_KEY | Clé absente de la grille de planning calculée. |
| INVALID_STAFF | staff vide, trop grand, ligne invalide ou assainissement échoué. |
| DUPLICATE_STAFF_ID | Valeurs staffId dupliquées. |
| INVALID_AVAILABLE_CELL | Entrée vide ou inconnue dans availableCells. |
| SHORTFALL_CELLS | Disponibilité insuffisante par rapport aux besoins. |
| DYNAMODB_ERROR | Erreur transitoire ou de persistance aprĂšs validation (selon le gestionnaire). |
| SCHEDULE_DEFAULTS_SAVE_FAILED | PATCH /v1/schedule-defaults : validation ou rÚgles métier en échec (voir error.details). |
| LABOR_COMPLIANCE_REQUIRED | PATCH /v1/staff/{staffId} : laborConstraintMask envoyé alors que laborLawCompliance est false. |
{
"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.