A valid request URL is required to generate request examples{
"id": "plan-restock-aigle-32",
"family": "restock",
"reference": "RSA-26-0142",
"name": "Réassort Aigle — semaine 32",
"notes": null,
"status": "SENT",
"ruleGroupId": null,
"deadline": "2026-08-14T16:00:00.000Z",
"supplierId": "sup-aigle",
"storeId": null,
"version": 4
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123,
"fieldErrors": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}Move a plan one step along its lifecycle
Advances — or REVERTS — a plan by exactly one step of ITS family’s lifecycle. A restock runs DRAFT → VALIDATED → SENT → RECEIVED → CLOSED; a return has no validation step (sending the goods back IS the commitment); an exchange runs PROPOSED → AGREED, two states because the supplier has to answer. The revert path is a legitimate move and is accepted here (SENT → VALIDATED), but only to the ONE immediate predecessor, and never out of CLOSED, which is one-way on every family. A refused edge names both statuses. expectedVersion is required.
A valid request URL is required to generate request examples{
"id": "plan-restock-aigle-32",
"family": "restock",
"reference": "RSA-26-0142",
"name": "Réassort Aigle — semaine 32",
"notes": null,
"status": "SENT",
"ruleGroupId": null,
"deadline": "2026-08-14T16:00:00.000Z",
"supplierId": "sup-aigle",
"storeId": null,
"version": 4
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123,
"fieldErrors": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}Authorizations
Authorization: Bearer <token>. Accepts EITHER a Keycloak access token (scopes-in-token) OR an opaque POS session token; both resolve to the same pos.* scope vocabulary the route guards enforce.
Path Parameters
The plan id, e.g. plan-restock-aigle-32.
1Body
Response
The plan in its new status, at its new version.
- Option 1
- Option 2
- Option 3
The plan in its new status, at its new version.
11 - 641 - 25510000DRAFT, VALIDATED, SENT, RECEIVED, PROPOSED, AGREED, IN_TRANSIT, SETTLED, CREDITED, CLOSED, CANCELLED 1^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$Show child attributes
Show child attributes
0 < x <= 9007199254740991restock, pre_season_order, supplier_return, supplier_exchange 11
