---
title: "Offer a project to another org (owner only; an owner there has to accept before anything moves)"
method: POST
path: "/v1/projects/{project_id}/transfers"
tags: ["transfers"]
---

# Offer a project to another org (owner only; an owner there has to accept before anything moves)

`POST /v1/projects/{project_id}/transfers`

## Request

- Base URL: `https://api.wavehouse.cloud`
- URL: `https://api.wavehouse.cloud/v1/projects/{project_id}/transfers`
- Auth: one of:
  - API key in cookie `whc_session`
  - HTTP bearer

## Path parameters

- `project_id` string, required

## Headers

- `Idempotency-Key` string: A unique value you choose per logical request (a random UUID). A retry with the same key and the same request within 24 hours returns the first response, marked Idempotency-Replayed: true, instead of acting twice. The same key with a different request is refused with 422; one sent while the first is still running gets 409.

## Request body

- OfferProjectTransferInput
  - `reason` string: shown to every owner of both orgs in the offer email
  - `to_org_id` string: the org that receives the project; give this or to_owner_email
  - `to_owner_email` string, email: an owner of the receiving org, when you know the person and not the org id

## Response `201`

Created

- ProjectTransferView
  - `completed_at` string, date-time
  - `consequences` string[], required: what accepting does, in the same words the offer email uses
  - `created_at` string, date-time, required
  - `decided_at` string, date-time
  - `expires_at` string, date-time, required
  - `from_org_id` string, required
  - `from_org_name` string, required
  - `offered_by` string, required: email of the owner who made the offer
  - `project_id` string, required
  - `project_name` string, required
  - `reason` string, required
  - `status` string, required: pending | accepted | declined | canceled | expired | completed | failed
  - `to_org_id` string, required
  - `to_org_name` string, required
  - `transfer_id` string, required

## Other responses

- `429`: Rate limited, per client IP, API key or org; a client IP is also refused on every route for a while after repeated authentication failures. A limited operation carries RateLimit-Policy and RateLimit on every response; wait Retry-After seconds before retrying.
- `default`: Error

---

[API](https://skmtc.dev/wavehouse/apis/wavehouse-cloud-api.md) · [All operations](https://skmtc.dev/wavehouse/apis/wavehouse-cloud-api/llms.txt) · [OpenAPI document](https://skmtc.dev/wavehouse/apis/wavehouse-cloud-api/revisions/adea029bf505?raw)
