Project plans
Read project work and review template or event-date changes before applying them.
Use read:to-dos to read a plan and write:to-dos to preview or apply changes. API keys also accept to-dos:read and to-dos:write. Access to the parent project, client and event day still applies; a write scope does not replace those checks.
Read a plan
GET /api/v1/plans uses the same reader as To-dos. Reads default to scope=standalone. For a project's work, including its day work, send scope=all&projectId=….
The response includes data, items, complete, pagination, coverage, sources, evaluatedAt, revisions, nextAction and notice. Follow pagination.nextCursor as after, even when a page is short. Check complete, coverage.stopped and sources before treating an empty result as no work. A stopped read can still have more items to return.
Preview and apply changes
Template changes use POST /api/v1/plans/templates/preview, then /api/v1/plans/templates/apply. Event-date changes use /api/v1/plans/dates/preview, then /api/v1/plans/dates/apply. Review the preview's consequences before applying it. The ClientCasa review sheets provide this review in the dashboard.
Every request carries a UUID commandId. Apply also carries the exact previewId returned for the same actor. Keep the original body and command ID when retrying a lost response; a different change needs a new command ID. Stale, expired or consumed previews are refused, so fetch a fresh preview when the plan has changed.
For an event day, a date preview takes eventDayId and a day in YYYY-MM-DD form. Optional zone and venueId describe the new place and timezone. keepDoDates and keepDeadlines name the To-dos whose dates should stay fixed. For a project without an event day, send projectId and day instead; this changes the project's date without creating an event day. Venue changes require an existing event day.
Applying a move into the past requires acknowledgePast: true after reviewing the warning. A preview does not save the proposed date. Applying it does not record a payment, send an invoice or directly set a project stage. Record what happened through project acts when the project's progress changes.
In: header
Query Parameters
UUID v4
uuidUUID v4
uuid"standalone""standalone" | "day" | "all"UUID v4
uuid"records""records" | "dated" | "no-date" | "overdue" | "planned-earlier"datedate1 <= length <= 4001001 <= value <= 1000"ordinary" | "milestone""open" | "done" | "cancelled"Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://www.clientcasa.com/api/v1/plans"{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"persisted": true,
"mutationPath": "string",
"businessId": "550e8400-e29b-41d4-a716-446655440000",
"projectId": "550e8400-e29b-41d4-a716-446655440000",
"clientId": "550e8400-e29b-41d4-a716-446655440000",
"title": "string",
"details": "string",
"kind": "ordinary",
"status": "open",
"revision": 0,
"doRule": {
"kind": "none"
},
"deadlineRule": {
"kind": "none"
},
"localStart": "string",
"durationMinutes": 0,
"scheduleZone": "string",
"location": "string",
"assigneeId": "550e8400-e29b-41d4-a716-446655440000",
"seriesId": "550e8400-e29b-41d4-a716-446655440000",
"nominalOccurrenceKey": "string",
"doDate": "2019-08-24",
"deadlineDay": "2019-08-24",
"completedAt": "2019-08-24T14:15:22Z",
"completedOn": "2019-08-24",
"completionPrecision": "instant",
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z"
}
],
"items": [
{
"property1": null,
"property2": null
}
],
"complete": true,
"pagination": {
"nextCursor": "string"
},
"coverage": {
"after": "string",
"next": "string",
"stopped": true
},
"sources": {
"property1": null,
"property2": null
},
"evaluatedAt": "2019-08-24T14:15:22Z",
"revisions": {
"property1": 0,
"property2": 0
},
"nextAction": {
"property1": null,
"property2": null
},
"notice": "string"
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}In: header
Header Parameters
Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://www.clientcasa.com/api/v1/plans/templates/preview" \ -H "Content-Type: application/json" \ -d '{ "templateId": "string", "projectId": "5a8591dd-4039-49df-9202-96385ba3eff8", "commandId": "9e2dd63c-3478-489f-86d3-8c292a65a0aa" }'{
"property1": null,
"property2": null
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}In: header
Header Parameters
Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://www.clientcasa.com/api/v1/plans/templates/apply" \ -H "Content-Type: application/json" \ -d '{ "commandId": "9e2dd63c-3478-489f-86d3-8c292a65a0aa", "previewId": "aa80f39b-ade0-40b6-909f-f6684cf78d20" }'{
"property1": null,
"property2": null
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}In: header
Header Parameters
Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://www.clientcasa.com/api/v1/plans/dates/preview" \ -H "Content-Type: application/json" \ -d '{ "commandId": "9e2dd63c-3478-489f-86d3-8c292a65a0aa", "eventDayId": "0db66fe4-a999-4ecb-82ed-093d4744b354", "day": "string" }'{
"property1": null,
"property2": null
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}In: header
Header Parameters
Optional unique key that makes this request safely retryable. Replaying the same key returns the original response instead of creating a duplicate; reusing a key with a different request body returns 409.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://www.clientcasa.com/api/v1/plans/dates/apply" \ -H "Content-Type: application/json" \ -d '{ "commandId": "9e2dd63c-3478-489f-86d3-8c292a65a0aa", "previewId": "aa80f39b-ade0-40b6-909f-f6684cf78d20" }'{
"property1": null,
"property2": null
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}{
"error": {
"code": "unauthorized",
"message": "string",
"requestId": "string",
"details": {
"code": "invalid_step_graph",
"property1": null,
"property2": null
}
}
}