Skip to content

Move a personal project into a company, for good

POST
/v1/projects/{id}/transfer
curl --request POST \
--url https://beta-api.plune.ai/v1/projects/example/transfer \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "companyId": "6f1c2b3a-0000-4000-8000-0000000000a5" }'

An owner of the project moves it into a company they own or run (ADR 0038). One way: there is no road back, and a project already in a company answers 409 — so does a default project, the place a request with no project lands. Its people stay: a member of the company takes the role their company role maps to, anybody else keeps theirs — except an owner from outside the company, who becomes a member, as does an address asked in as owner and not signed in yet. The refusals go project first: somebody who is not in the project gets the 404 an invented id gets, whatever company they name. Recorded in the project’s audit feed.

id
required
string

An id from GET /v1/projects

Media type application/json

The body of POST /v1/projects/{id}/transfer — the company the project moves into, for good.

object
companyId
required
string
Example
{
"companyId": "6f1c2b3a-0000-4000-8000-0000000000a5"
}

Moved — the project and the company it is in now

Media type application/json
object
id
required
string
name
required
string
company
required
object
id
required
string
name
required
string
Example
{
"id": "9c4e7d10-0000-4000-8000-0000000000a4",
"name": "Mobile app",
"company": {
"id": "6f1c2b3a-0000-4000-8000-0000000000a5",
"name": "Acme"
}
}

Invalid body — a company id

Media type application/json
object
error
required
string
Example generated
{
"error": "example"
}

No / invalid token or session

Not an owner of the project, or not an owner or admin of the company

Media type application/json
object
error
required
string
Example
{
"error": "company owner or admin only"
}

No such project among yours, or no such company among yours

Media type application/json
object
error
required
string
Example
{
"error": "company '6f1c2b3a-0000-4000-8000-0000000000a5' not found"
}

A default project, or one already in a company

Media type application/json
object
error
required
string
Example
{
"error": "this project is already in a company — a transfer is one-way"
}

Rate-limited: either the per-route throttle or a tenant quota. Retry-After carries the seconds until the window rolls over.

Media type application/json
object
error
required
string
Example generated
{
"error": "example"
}
Retry-After
integer

Seconds until the window rolls over