API and agentsAPI reference
Projects
An optional named set over maps, workflows and datasets. A map or workflow is in at most one project; a dataset can be in several. Project workflows are workflow-origin recipes; builder-origin recipes cannot be project members. A project is also the one boundary of sharing: its owner gives people the viewer or editor role, and they reach everything filed in it, whoever owns it. Filing never changes who owns a resource or what a plain table name means in a map's or workflow's SQL. Deleting one dissolves the set, ends every person's reach through it and deletes nothing.
19 operations on 8 paths.
/api/projects
GETList projects
Sign-in Session cookie or Bearer tokenMCP tool list_projects
A project is reached by its owner and by its people, its viewers and editors. Lists, counts and member lists cover exactly the reached projects and everything filed in them, whoever owns it, and name each project's owner and the caller's role (owner, editor or viewer). Renaming, the note, dissolution, adding people, changing their roles, removing other people and its transfer are the owner's; a member may leave their own grant, including in a frozen project; administrators reach nothing more. Filing follows its own rules: adding a map, workflow or dataset needs the destination's permission (the project's owner, or an editor filing their own resource) and a project whose owner is active; the owner of a resource may always withdraw it from any project, member or not; the project's owner may remove anything filed in their project, which never deletes it or changes its owner. Unreached or missing references return the same not_found before changes or archive assembly; a reached project whose change the caller may not make returns forbidden and changes nothing. Compound changes are atomic. Deleting a project unfiles its contents without deleting artifacts or changing their owners. Anyone who reaches a project may export it, viewers included: a selection names members filed in it that the caller reaches, whoever owns them. Every project the caller reaches, its own and those shared with it, with its member counts (maps, workflows as workflow-origin recipes, datasets, published maps), its size total — sizeComplete is false when a member dataset's size is unknown, so the sum is honest about being partial — and when it last changed. Most recent first.
Responses
200
Success.
application/json401403404503default
Error with a machine-readable code and human message.
application/json405
method_not_allowed: the method is unsupported for this path.
application/jsonAllowHeaderExactly the documented methods for this path.
stringalways
GET, HEAD, OPTIONS, POST
POSTCreate a project
Sign-in Session cookie or Bearer tokenMCP tool create_project
At most 16,777,216 wire bytes; a larger body is refused with request_body_too_large before JSON parsing. Created resources belong to the authenticated account. Submitted owner identities cannot assign or transfer ownership. A project is reached by its owner and by its people, its viewers and editors. Lists, counts and member lists cover exactly the reached projects and everything filed in them, whoever owns it, and name each project's owner and the caller's role (owner, editor or viewer). Renaming, the note, dissolution, adding people, changing their roles, removing other people and its transfer are the owner's; a member may leave their own grant, including in a frozen project; administrators reach nothing more. Filing follows its own rules: adding a map, workflow or dataset needs the destination's permission (the project's owner, or an editor filing their own resource) and a project whose owner is active; the owner of a resource may always withdraw it from any project, member or not; the project's owner may remove anything filed in their project, which never deletes it or changes its owner. Unreached or missing references return the same not_found before changes or archive assembly; a reached project whose change the caller may not make returns forbidden and changes nothing. Compound changes are atomic. Deleting a project unfiles its contents without deleting artifacts or changing their owners. Anyone who reaches a project may export it, viewers included: a selection names members filed in it that the caller reaches, whoever owns them. The name is trimmed, must not be empty, and is at most 120 characters; two projects may share one. members files initial members in the same act — one invalid member means nothing is created at all. Only workflows can be project members.
Request body
At most 16,777,216 bytes (16 MiB); a larger body is refused with request_body_too_large.
Responses
201
Created.
application/json400401403404409413503default
Error with a machine-readable code and human message.
application/json405
method_not_allowed: the method is unsupported for this path.
application/jsonAllowHeaderExactly the documented methods for this path.
stringalways
GET, HEAD, OPTIONS, POST
HEADRead response headers
Sign-in Session cookie or Bearer tokenAnswers 200, 401, 403, 404, 405, 503, defaultAllow
GET, HEAD, OPTIONS, POSTAutomatic HEAD uses GET with no response body.
Also on this path: OPTIONS under System.
/api/projects/{id}
GETRead a project
Sign-in Session cookie or Bearer tokenMCP tool get_project
A project is reached by its owner and by its people, its viewers and editors. Lists, counts and member lists cover exactly the reached projects and everything filed in them, whoever owns it, and name each project's owner and the caller's role (owner, editor or viewer). Renaming, the note, dissolution, adding people, changing their roles, removing other people and its transfer are the owner's; a member may leave their own grant, including in a frozen project; administrators reach nothing more. Filing follows its own rules: adding a map, workflow or dataset needs the destination's permission (the project's owner, or an editor filing their own resource) and a project whose owner is active; the owner of a resource may always withdraw it from any project, member or not; the project's owner may remove anything filed in their project, which never deletes it or changes its owner. Unreached or missing references return the same not_found before changes or archive assembly; a reached project whose change the caller may not make returns forbidden and changes nothing. Compound changes are atomic. Deleting a project unfiles its contents without deleting artifacts or changing their owners. Anyone who reaches a project may export it, viewers included: a selection names members filed in it that the caller reaches, whoever owns them. One project with its member counts and size. Its workflows are workflow-origin recipes.
Parameters
idPathrequiredProject id.
string
Responses
200
Success.
application/json401403404503default
Error with a machine-readable code and human message.
application/json405
method_not_allowed: the method is unsupported for this path.
application/jsonAllowHeaderExactly the documented methods for this path.
stringalways
DELETE, GET, HEAD, OPTIONS, PATCH
PATCHRename a project or edit its note
Sign-in Session cookie or Bearer tokenMCP tool update_project
At most 16,777,216 wire bytes; a larger body is refused with request_body_too_large before JSON parsing. A project is reached by its owner and by its people, its viewers and editors. Lists, counts and member lists cover exactly the reached projects and everything filed in them, whoever owns it, and name each project's owner and the caller's role (owner, editor or viewer). Renaming, the note, dissolution, adding people, changing their roles, removing other people and its transfer are the owner's; a member may leave their own grant, including in a frozen project; administrators reach nothing more. Filing follows its own rules: adding a map, workflow or dataset needs the destination's permission (the project's owner, or an editor filing their own resource) and a project whose owner is active; the owner of a resource may always withdraw it from any project, member or not; the project's owner may remove anything filed in their project, which never deletes it or changes its owner. Unreached or missing references return the same not_found before changes or archive assembly; a reached project whose change the caller may not make returns forbidden and changes nothing. Compound changes are atomic. Deleting a project unfiles its contents without deleting artifacts or changing their owners. Anyone who reaches a project may export it, viewers included: a selection names members filed in it that the caller reaches, whoever owns them. Renaming and the note follow the creation rules; a null note clears it. Membership is not edited here — that is the members operation.
Parameters
idPathrequiredProject id.
string
Request body
At most 16,777,216 bytes (16 MiB); a larger body is refused with request_body_too_large.
application/json
object
namestringnotestringor null
Responses
200
Success.
application/json401403404413503default
Error with a machine-readable code and human message.
application/json405
method_not_allowed: the method is unsupported for this path.
application/jsonAllowHeaderExactly the documented methods for this path.
stringalways
DELETE, GET, HEAD, OPTIONS, PATCH
DELETEDelete a project
Sign-in Session cookie or Bearer tokenMCP tool delete_project
A project is reached by its owner and by its people, its viewers and editors. Lists, counts and member lists cover exactly the reached projects and everything filed in them, whoever owns it, and name each project's owner and the caller's role (owner, editor or viewer). Renaming, the note, dissolution, adding people, changing their roles, removing other people and its transfer are the owner's; a member may leave their own grant, including in a frozen project; administrators reach nothing more. Filing follows its own rules: adding a map, workflow or dataset needs the destination's permission (the project's owner, or an editor filing their own resource) and a project whose owner is active; the owner of a resource may always withdraw it from any project, member or not; the project's owner may remove anything filed in their project, which never deletes it or changes its owner. Unreached or missing references return the same not_found before changes or archive assembly; a reached project whose change the caller may not make returns forbidden and changes nothing. Compound changes are atomic. Deleting a project unfiles its contents without deleting artifacts or changing their owners. Anyone who reaches a project may export it, viewers included: a selection names members filed in it that the caller reaches, whoever owns them. The set dissolves: memberships are removed and every map, workflow, dataset and artifact remains, unfiled unless another project holds it. The response says so explicitly.
Parameters
idPathrequiredProject id.
string
Responses
200
Dissolved; contents remain.
application/jsonobject
deletedbooleanrequiredcontentsRemainbooleanrequiredmessagestringrequired
All of:
object
revisionsarrayrequiredResulting revisions for each affected surviving map or workflow the caller still reaches, including withdrawn filings. Empty when none remain reachable.
(each item)objectkindstringrequiredOne of
map,workflowidstringrequirededitRevisionstringrequiredpattern^[0-9a-f]{32}$Opaque durable revision paired with this document state. Camera and derived writes do not change it.
401403404503default
Error with a machine-readable code and human message.
application/json405
method_not_allowed: the method is unsupported for this path.
application/jsonAllowHeaderExactly the documented methods for this path.
stringalways
DELETE, GET, HEAD, OPTIONS, PATCH
HEADRead response headers
Sign-in Session cookie or Bearer tokenAnswers 200, 401, 403, 404, 405, 503, defaultAllow
DELETE, GET, HEAD, OPTIONS, PATCHAutomatic HEAD uses GET with no response body.
Also on this path: OPTIONS under System.
/api/projects/{id}/members
GETRead a project's members
Sign-in Session cookie or Bearer tokenMCP tool get_project_members
A project is reached by its owner and by its people, its viewers and editors. Lists, counts and member lists cover exactly the reached projects and everything filed in them, whoever owns it, and name each project's owner and the caller's role (owner, editor or viewer). Renaming, the note, dissolution, adding people, changing their roles, removing other people and its transfer are the owner's; a member may leave their own grant, including in a frozen project; administrators reach nothing more. Filing follows its own rules: adding a map, workflow or dataset needs the destination's permission (the project's owner, or an editor filing their own resource) and a project whose owner is active; the owner of a resource may always withdraw it from any project, member or not; the project's owner may remove anything filed in their project, which never deletes it or changes its owner. Unreached or missing references return the same not_found before changes or archive assembly; a reached project whose change the caller may not make returns forbidden and changes nothing. Compound changes are atomic. Deleting a project unfiles its contents without deleting artifacts or changing their owners. Anyone who reaches a project may export it, viewers included: a selection names members filed in it that the caller reaches, whoever owns them. The composite: the project's maps, workflow-origin recipes and datasets, each in its ordinary listing shape and order. The response field remains recipes.
Parameters
idPathrequiredProject id.
string
Responses
200
Success.
application/json401403404503default
Error with a machine-readable code and human message.
application/json405
method_not_allowed: the method is unsupported for this path.
application/jsonAllowHeaderExactly the documented methods for this path.
stringalways
GET, HEAD, OPTIONS, PATCH
PATCHChange a project's members
Sign-in Session cookie or Bearer tokenMCP tool update_project_members
At most 16,777,216 wire bytes; a larger body is refused with request_body_too_large before JSON parsing. A project is reached by its owner and by its people, its viewers and editors. Lists, counts and member lists cover exactly the reached projects and everything filed in them, whoever owns it, and name each project's owner and the caller's role (owner, editor or viewer). Renaming, the note, dissolution, adding people, changing their roles, removing other people and its transfer are the owner's; a member may leave their own grant, including in a frozen project; administrators reach nothing more. Filing follows its own rules: adding a map, workflow or dataset needs the destination's permission (the project's owner, or an editor filing their own resource) and a project whose owner is active; the owner of a resource may always withdraw it from any project, member or not; the project's owner may remove anything filed in their project, which never deletes it or changes its owner. Unreached or missing references return the same not_found before changes or archive assembly; a reached project whose change the caller may not make returns forbidden and changes nothing. Compound changes are atomic. Deleting a project unfiles its contents without deleting artifacts or changing their owners. Anyone who reaches a project may export it, viewers included: a selection names members filed in it that the caller reaches, whoever owns them. One atomic change: adds and removes for maps, recipes and datasets together — everything applies or nothing does. Only workflows can be project members. Adding a map or eligible recipe moves it from any previous project; adding a dataset adds another membership; repeated adds are idempotent. Each part follows the filing rules, so a caller may add only their own resources, and a removal of what is not filed there changes nothing. An owner who no longer reaches the project may still withdraw their own resources from it; anyone else is answered as for an unknown project. Answers the updated composite as the caller reads it, empty for an owner who withdrew from a project they do not reach.
Parameters
idPathrequiredProject id.
string
Request body
At most 16,777,216 bytes (16 MiB); a larger body is refused with request_body_too_large.
application/json
Responses
200
Success.
application/json400401403404409413503default
Error with a machine-readable code and human message.
application/json405
method_not_allowed: the method is unsupported for this path.
application/jsonAllowHeaderExactly the documented methods for this path.
stringalways
GET, HEAD, OPTIONS, PATCH
HEADRead response headers
Sign-in Session cookie or Bearer tokenAnswers 200, 401, 403, 404, 405, 503, defaultAllow
GET, HEAD, OPTIONS, PATCHAutomatic HEAD uses GET with no response body.
Also on this path: OPTIONS under System.
/api/projects/{id}/export
POSTExport a project as one archive
Sign-in Session cookie or Bearer tokenMCP tool export_project
At most 16,777,216 wire bytes; a larger body is refused with request_body_too_large before JSON parsing. Private execution retains the initiating account through completion. Retained images and download receipts belong only to that account, including for administrators, even after the source or output is deleted. A copied result identifier has the same refusal as an unknown identifier and cannot consume or release the owner's result. Account activity is checked before returning bytes or retaining a new result; deactivation freezes access until reactivation. Reach is asked again where the work commits. A prepared layer download is refused on the claim when its layer, on a map the claimant does not own, or a dataset it drew that someone else owns has left the claimant's reach since the ticket, with the same answer as an expired ticket. A server render and a look check ask at every phase whether the caller still reaches the map and are refused as absent otherwise. A project export checks every selected member against the caller's reach as the archive completes and fails with export_failed naming the first one withdrawn rather than delivering a thinner archive. Results already issued (a query download, a retained look image, a project archive, an assistant answer) remain the initiator's for their retention lifetime after reach is withdrawn, as a copy they hold; they grant no new access to the source. A project is reached by its owner and by its people, its viewers and editors. Lists, counts and member lists cover exactly the reached projects and everything filed in them, whoever owns it, and name each project's owner and the caller's role (owner, editor or viewer). Renaming, the note, dissolution, adding people, changing their roles, removing other people and its transfer are the owner's; a member may leave their own grant, including in a frozen project; administrators reach nothing more. Filing follows its own rules: adding a map, workflow or dataset needs the destination's permission (the project's owner, or an editor filing their own resource) and a project whose owner is active; the owner of a resource may always withdraw it from any project, member or not; the project's owner may remove anything filed in their project, which never deletes it or changes its owner. Unreached or missing references return the same not_found before changes or archive assembly; a reached project whose change the caller may not make returns forbidden and changes nothing. Compound changes are atomic. Deleting a project unfiles its contents without deleting artifacts or changing their owners. Anyone who reaches a project may export it, viewers included: a selection names members filed in it that the caller reaches, whoever owns them. A chosen subset of the project's members as one zip: datasets byte for byte as their stored GeoParquet artifacts — or, with datasetFormat, every dataset converted to GeoJSON or CSV, a dataset without geometry going as CSV under GeoJSON and the manifest naming each dataset's effective format — maps and workflows (workflow-origin recipes) as portable JSON projections (publication state, membership and runtime stripped; the workflow carries its canvas layout), and a versioned project.json manifest naming every included member. Every dataset has its own entry under the name the exporter types for it, its qualifiedName: the plain name for the exporter's own, <sql name>.<name> for another owner's, so two people's same-named datasets never collide; the manifest names each one's qualifiedName and owner and the exporter's SQL name (exportedBy). Map and workflow documents carry their SQL home, the account whose datasets their plain names mean. No connection facts travel. The archive is assembled and finalized before any success is claimed — a failed assembly is a coded refusal, never a truncated file. Refuses an unknown project, an empty selection, and any id that is not a current member. The response is an attachment named <file>.zip; through the agent tool it arrives as a base64 attachment envelope. With prepare, a single-use ticket instead — the page's road; redeem it with GET within a minute.
Parameters
idPathrequiredProject id.
string
Request body
At most 16,777,216 bytes (16 MiB); a larger body is refused with request_body_too_large.
application/json
object
mapsarray of stringMember map ids to include.
workflowsarray of stringMember workflow ids to include.
datasetsarray of stringMember dataset ids to include.
filestringArchive base name; normalized to file form, falling back to "project".
preparebooleanAnswer a single-use ticket {ticket, key, filename, size} instead of the bytes.
datasetFormatstringdefaultgeoparquetOne format for every dataset in the archive. Omitted or geoparquet: the stored artifact byte for byte. geojson: spatial datasets as GeoJSON, a dataset without geometry as CSV. csv: geometry as WKT text. The manifest records each dataset's effective format beside its file; the format version stays 1.
One of
geoparquet,geojson,csv
Responses
200
The zip attachment — or, with prepare, the JSON ticket.
application/jsonobject
ticketstringrequiredkeystringrequiredfilenamestringrequiredsizeintegerrequiredminimum0
application/zipstringformat
binary401403404413503default
Error with a machine-readable code and human message.
application/json405
method_not_allowed: the method is unsupported for this path.
application/jsonAllowHeaderExactly the documented methods for this path.
stringalways
GET, HEAD, OPTIONS, POST
GETRedeem a prepared project export
Sign-in Session cookie or Bearer token
Private execution retains the initiating account through completion. Retained images and download receipts belong only to that account, including for administrators, even after the source or output is deleted. A copied result identifier has the same refusal as an unknown identifier and cannot consume or release the owner's result. Account activity is checked before returning bytes or retaining a new result; deactivation freezes access until reactivation. Reach is asked again where the work commits. A prepared layer download is refused on the claim when its layer, on a map the claimant does not own, or a dataset it drew that someone else owns has left the claimant's reach since the ticket, with the same answer as an expired ticket. A server render and a look check ask at every phase whether the caller still reaches the map and are refused as absent otherwise. A project export checks every selected member against the caller's reach as the archive completes and fails with export_failed naming the first one withdrawn rather than delivering a thinner archive. Results already issued (a query download, a retained look image, a project archive, an assistant answer) remain the initiator's for their retention lifetime after reach is withdrawn, as a copy they hold; they grant no new access to the source. The second half of the page's download road: a ticket from a prepare call streams its finalized archive once as a native attachment. Tickets expire after a minute; a redeemed, expired or mismatched ticket answers 410 and the staged file is discarded. Not an agent tool — agents call the POST directly.
Parameters
idPathrequiredProject id.
string
ticketQueryrequiredThe ticket the prepare call answered.
string
keyQueryrequiredThe key the prepare call answered.
string
Responses
200
The zip attachment, once.
application/zipstringformat
binary401403503default
Error with a machine-readable code and human message.
application/json405
method_not_allowed: the method is unsupported for this path.
application/jsonAllowHeaderExactly the documented methods for this path.
stringalways
GET, HEAD, OPTIONS, POST
HEADRead response headers
Sign-in Session cookie or Bearer tokenAnswers 200, 401, 403, 405, 503, defaultAllow
GET, HEAD, OPTIONS, POSTAutomatic HEAD uses GET with no response body.
Also on this path: OPTIONS under System.
/api/projects/{id}/leave
POSTLeave a project
Sign-in Session cookie or Bearer tokenMCP tool leave_project
A project is reached by its owner and by its people, its viewers and editors. Lists, counts and member lists cover exactly the reached projects and everything filed in them, whoever owns it, and name each project's owner and the caller's role (owner, editor or viewer). Renaming, the note, dissolution, adding people, changing their roles, removing other people and its transfer are the owner's; a member may leave their own grant, including in a frozen project; administrators reach nothing more. Filing follows its own rules: adding a map, workflow or dataset needs the destination's permission (the project's owner, or an editor filing their own resource) and a project whose owner is active; the owner of a resource may always withdraw it from any project, member or not; the project's owner may remove anything filed in their project, which never deletes it or changes its owner. Unreached or missing references return the same not_found before changes or archive assembly; a reached project whose change the caller may not make returns forbidden and changes nothing. Compound changes are atomic. Deleting a project unfiles its contents without deleting artifacts or changing their owners. Anyone who reaches a project may export it, viewers included: a selection names members filed in it that the caller reaches, whoever owns them. An active viewer or editor may leave, including a frozen project. The credential supplies the departing member; there is no request body or member selector. Ends only that member's grant, with exactly the same reach loss as removal by the owner: exclusive reach ends on the next request, and the project disappears from lists and filters on the next read. Other grants and ownership remain. Owned work stays filed and shared, readable by its owner with the project's identity for withdrawal. Historical attribution stays named. Already admitted reads finish once; outputs recheck permission and input reach at commit, as after removal. Membership changes no edit revisions. No consent or notification is required, and the owner may add the person again normally. Answers only departure, never a roster. Missing and non-member projects both answer 404 not_found; owners answer 409 project_owner_cannot_leave. A repeated departure answers not_found.
Parameters
idPathrequiredProject id.
string
Responses
200
Success.
application/json401403404409503default
Error with a machine-readable code and human message.
application/json405
method_not_allowed: the method is unsupported for this path.
application/jsonAllowHeaderExactly the documented methods for this path.
stringalways
OPTIONS, POST
Also on this path: OPTIONS under System.
/api/projects/{id}/people
GETList a project's people
Sign-in Session cookie or Bearer tokenMCP tool list_project_people
A project is reached by its owner and by its people, its viewers and editors. Lists, counts and member lists cover exactly the reached projects and everything filed in them, whoever owns it, and name each project's owner and the caller's role (owner, editor or viewer). Renaming, the note, dissolution, adding people, changing their roles, removing other people and its transfer are the owner's; a member may leave their own grant, including in a frozen project; administrators reach nothing more. Filing follows its own rules: adding a map, workflow or dataset needs the destination's permission (the project's owner, or an editor filing their own resource) and a project whose owner is active; the owner of a resource may always withdraw it from any project, member or not; the project's owner may remove anything filed in their project, which never deletes it or changes its owner. Unreached or missing references return the same not_found before changes or archive assembly; a reached project whose change the caller may not make returns forbidden and changes nothing. Compound changes are atomic. Deleting a project unfiles its contents without deleting artifacts or changing their owners. Anyone who reaches a project may export it, viewers included: a selection names members filed in it that the caller reaches, whoever owns them. A project's people are its owner and its members, each member a viewer or an editor. The project's owner reads them all; anyone else who reaches the project reads the owner and themselves alone, with their own role. Adding a person, changing a role and removing a person are the project owner's alone: a member's attempt returns forbidden and an administrator gains nothing. A person is named by their SQL name. A change governs the person's reach on their next request, with no sign-out. Answers the owner first, then the members by name (to a member, themselves), each with their display name, SQL name and role, and marked deactivated while their account is: a deactivated member keeps their place with their grant inert until reactivation. Never an email or an account identity.
Parameters
idPathrequiredProject id.
string
Responses
200
Success.
application/json401403404503default
Error with a machine-readable code and human message.
application/json405
method_not_allowed: the method is unsupported for this path.
application/jsonAllowHeaderExactly the documented methods for this path.
stringalways
GET, HEAD, OPTIONS
HEADRead response headers
Sign-in Session cookie or Bearer tokenAnswers 200, 401, 403, 404, 405, 503, defaultAllow
GET, HEAD, OPTIONSAutomatic HEAD uses GET with no response body.
Also on this path: OPTIONS under System.
/api/projects/{id}/people/{sqlName}
PUTGive a person a role on a project
Sign-in Session cookie or Bearer tokenMCP tool set_project_person
At most 16,777,216 wire bytes; a larger body is refused with request_body_too_large before JSON parsing. A project is reached by its owner and by its people, its viewers and editors. Lists, counts and member lists cover exactly the reached projects and everything filed in them, whoever owns it, and name each project's owner and the caller's role (owner, editor or viewer). Renaming, the note, dissolution, adding people, changing their roles, removing other people and its transfer are the owner's; a member may leave their own grant, including in a frozen project; administrators reach nothing more. Filing follows its own rules: adding a map, workflow or dataset needs the destination's permission (the project's owner, or an editor filing their own resource) and a project whose owner is active; the owner of a resource may always withdraw it from any project, member or not; the project's owner may remove anything filed in their project, which never deletes it or changes its owner. Unreached or missing references return the same not_found before changes or archive assembly; a reached project whose change the caller may not make returns forbidden and changes nothing. Compound changes are atomic. Deleting a project unfiles its contents without deleting artifacts or changing their owners. Anyone who reaches a project may export it, viewers included: a selection names members filed in it that the caller reaches, whoever owns them. A project's people are its owner and its members, each member a viewer or an editor. The project's owner reads them all; anyone else who reaches the project reads the owner and themselves alone, with their own role. Adding a person, changing a role and removing a person are the project owner's alone: a member's attempt returns forbidden and an administrator gains nothing. A person is named by their SQL name. A change governs the person's reach on their next request, with no sign-out. Adds the person with the role, or changes the role they hold. Only an active account other than the project's owner can hold a role: the owner is never its own member (invalid_request), and a deactivated account, an invitation not yet redeemed and an unknown SQL name are refused alike with invalid_request and the sentence "No active person has that SQL name." A viewer opens everything filed in the project; an editor can also change its maps and workflows and file their own work there. Answers the project's people as they now stand. While the owner's account is deactivated nobody can change the people.
Parameters
idPathrequiredProject id.
string
sqlNamePathrequiredThe person's SQL name.
string
Request body
At most 16,777,216 bytes (16 MiB); a larger body is refused with request_body_too_large.
application/json
object
rolestringrequiredOne of
viewer,editor
Responses
200
Success.
application/json400401403404413503default
Error with a machine-readable code and human message.
application/json405
method_not_allowed: the method is unsupported for this path.
application/jsonAllowHeaderExactly the documented methods for this path.
stringalways
DELETE, OPTIONS, PUT
DELETERemove a person from a project
Sign-in Session cookie or Bearer tokenMCP tool remove_project_person
A project is reached by its owner and by its people, its viewers and editors. Lists, counts and member lists cover exactly the reached projects and everything filed in them, whoever owns it, and name each project's owner and the caller's role (owner, editor or viewer). Renaming, the note, dissolution, adding people, changing their roles, removing other people and its transfer are the owner's; a member may leave their own grant, including in a frozen project; administrators reach nothing more. Filing follows its own rules: adding a map, workflow or dataset needs the destination's permission (the project's owner, or an editor filing their own resource) and a project whose owner is active; the owner of a resource may always withdraw it from any project, member or not; the project's owner may remove anything filed in their project, which never deletes it or changes its owner. Unreached or missing references return the same not_found before changes or archive assembly; a reached project whose change the caller may not make returns forbidden and changes nothing. Compound changes are atomic. Deleting a project unfiles its contents without deleting artifacts or changing their owners. Anyone who reaches a project may export it, viewers included: a selection names members filed in it that the caller reaches, whoever owns them. A project's people are its owner and its members, each member a viewer or an editor. The project's owner reads them all; anyone else who reaches the project reads the owner and themselves alone, with their own role. Adding a person, changing a role and removing a person are the project owner's alone: a member's attempt returns forbidden and an administrator gains nothing. A person is named by their SQL name. A change governs the person's reach on their next request, with no sign-out. Takes the person off the project, a deactivated member included; removing someone who holds no role there changes nothing. Nothing the person owns is deleted, unfiled or reassigned. Answers the project's people as they now stand. While the owner's account is deactivated nobody can change the people.
Parameters
idPathrequiredProject id.
string
sqlNamePathrequiredThe person's SQL name.
string
Responses
200
Success.
application/json401403404503default
Error with a machine-readable code and human message.
application/json405
method_not_allowed: the method is unsupported for this path.
application/jsonAllowHeaderExactly the documented methods for this path.
stringalways
DELETE, OPTIONS, PUT
Also on this path: OPTIONS under System.
/api/projects/{id}/transfer
POSTTransfer a project to one of its members
Sign-in Session cookie or Bearer tokenMCP tool transfer_project
At most 16,777,216 wire bytes; a larger body is refused with request_body_too_large before JSON parsing. A project is reached by its owner and by its people, its viewers and editors. Lists, counts and member lists cover exactly the reached projects and everything filed in them, whoever owns it, and name each project's owner and the caller's role (owner, editor or viewer). Renaming, the note, dissolution, adding people, changing their roles, removing other people and its transfer are the owner's; a member may leave their own grant, including in a frozen project; administrators reach nothing more. Filing follows its own rules: adding a map, workflow or dataset needs the destination's permission (the project's owner, or an editor filing their own resource) and a project whose owner is active; the owner of a resource may always withdraw it from any project, member or not; the project's owner may remove anything filed in their project, which never deletes it or changes its owner. Unreached or missing references return the same not_found before changes or archive assembly; a reached project whose change the caller may not make returns forbidden and changes nothing. Compound changes are atomic. Deleting a project unfiles its contents without deleting artifacts or changing their owners. Anyone who reaches a project may export it, viewers included: a selection names members filed in it that the caller reaches, whoever owns them. Transfer is the only change of ownership any operation makes, and it is always the current owner's own act. The new owner is named by their SQL name and must be an active account. The owner's authority, the recipient, the ownership change and everything that moves with it commit together, or nothing changes. Datasets and connections have no transfer. Makes one of the project's active members its owner: the recipient leaves the member list and the previous owner becomes an editor. The project keeps its name, note, other people and contents, and everything filed in it keeps its own owner. The project owner's alone: a member's attempt returns forbidden. A recipient who is not an active member (a deactivated member, someone outside the project, an unknown SQL name, the owner) is refused with invalid_request, and nothing changes. While the owner's account is deactivated nobody can transfer it. Answers the project's identity and its new owner.
Parameters
idPathrequiredProject id.
string
Request body
At most 16,777,216 bytes (16 MiB); a larger body is refused with request_body_too_large.
application/json
object
tostringrequiredmin length1The new owner's SQL name.
Responses
200
Success.
application/json400401403404413503default
Error with a machine-readable code and human message.
application/json405
method_not_allowed: the method is unsupported for this path.
application/jsonAllowHeaderExactly the documented methods for this path.
stringalways
OPTIONS, POST
Also on this path: OPTIONS under System.
7439201b