ClientCasa
API

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.

GET
/api/v1/plans
x-api-key<token>

In: header

Query Parameters

projectId?string

UUID v4

Formatuuid
clientId?string

UUID v4

Formatuuid
scope?string
Default"standalone"
Value in"standalone" | "day" | "all"
eventDayId?string

UUID v4

Formatuuid
mode?string
Default"records"
Value in"records" | "dated" | "no-date" | "overdue" | "planned-earlier"
start?string
Formatdate
end?string
Formatdate
after?string
Length1 <= length <= 400
limit?integer
Default100
Range1 <= value <= 1000
kind?string
Value in"ordinary" | "milestone"
status?string
Value in"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
    }
  }
}
POST
/api/v1/plans/templates/preview
x-api-key<token>

In: header

Header Parameters

Idempotency-Key?string

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.

Lengthlength <= 255

Request 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
    }
  }
}
POST
/api/v1/plans/templates/apply
x-api-key<token>

In: header

Header Parameters

Idempotency-Key?string

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.

Lengthlength <= 255

Request 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
    }
  }
}
POST
/api/v1/plans/dates/preview
x-api-key<token>

In: header

Header Parameters

Idempotency-Key?string

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.

Lengthlength <= 255

Request 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
    }
  }
}
POST
/api/v1/plans/dates/apply
x-api-key<token>

In: header

Header Parameters

Idempotency-Key?string

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.

Lengthlength <= 255

Request 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
    }
  }
}

On this page