Every call belongs to a project
projectId is required on every capability call. Create one first, then pass
it:
A project may stay untitled forever — POST /v1/projects with no body is valid
and creates one. Naming is optional; having a project is not.
Pass the same projectId across calls and the script, the render and the
thumbnail all land in one container you can read back in a single request:
The response carries the project plus compact references to everything in it —
id, type, title, status, timestamp. Fetch the full artifact through the
capability that owns it.
An id you do not own is not an error
Passing a projectId belonging to another workspace does not fail the request
and does not write into that project. The work is filed under a fresh project
instead.A wrong id costs you attribution, never a cross-tenant write — and the response
never confirms whether the id existed, so project ids cannot be used as an
existence oracle across tenants.
Because of that, always read projectId back off the response rather than
assuming the one you sent was honoured.
Archive, never delete
There is no DELETE. A container holding renders you paid for should not be
destroyable by one HTTP verb, so archiving is the reversible equivalent:
Clearing title returns the project to untitled, which is a legal state rather
than a validation failure.