The public API is deliberately bounded: cursor pages stay fast, writes are replay-safe, and every response explains its version and credit cost.
Send JSON over HTTPS to api.ceyu.org. Timestamps are Unix seconds, absent fields mean “not selected”, and null means “selected but empty”. Responses are private and never shared through an intermediary cache.
Lists return at most 100 objects and never use OFFSET or an implicit total. Pass next_cursor back as starting_after. Use ending_before to move in the other direction.
GET /v1/tasks?workspace=ws_…&limit=50&starting_after=task_…
Repeat a filter value for OR and combine different parameters with AND. Task lists support project, status, assignee, due_before and is_archived. fields trims each object and marks the list with fields_selected.
GET /v1/tasks?status=todo&status=in_progress&fields=id,title,due_at
Every POST, PATCH and DELETE needs an Idempotency-Key. The same key and input replay the original status, headers and body for 24 hours; different input returns a conflict.
GET responses carry an ETag. Send it in If-None-Match to receive 304 without a response body when nothing changed.
Every response includes the operation cost and current rate window. On 429 or a temporary 503, honor Retry-After and use bounded exponential backoff with jitter. Validation and permission failures are not retryable.