Get a project
Returns the Project's settings and Spec ID. List its Targets separately to retrieve Target configuration and Deliveries.
Authorization
apiKey Organization API key from the console (ak_...), or an OAuth access token with user:org:read, the organization selected during consent, and the capability required by the operation.
In: header
Path Parameters
Unique identifier for a project.
^prj_[a-z0-9]{16}$Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/projects/prj_4f8k2m7x9q1v6b3n"{ "id": "prj_4f8k2m7x9q1v6b3n", "object": "project", "name": "Parcel API", "spec_id": "spec_2p8m4q7k1v9d6h3c", "auto_generate": true, "config": null, "created_at": "2026-09-23T08:00:00Z", "updated_at": "2026-09-23T08:00:00Z", "request_id": "req_3k8m1v6q9p2d7h4c"}Create a project POST
Creates a Project from a URL or GitHub Spec. Automatic generation is enabled by default for a saved Project. Free includes one saved Project, all selected Targets, and the first 25 operations per Target, with regeneration, history, delivery pull requests, and previews. Pro supports additional Projects and all operations. One-shot generation does not use a Project slot.
Update a project PATCH
Omitted fields keep their current values. A supplied config replaces the entire stored object; null or an empty object clears it. With auto_generate enabled, changing shared config queues a Generation for each Target whose effective config changes. A queued or running Target reuses that Generation. Omitting If-Match applies the update to the current resource; with If-Match, a stale ETag returns 412 precondition_failed without saving. A `409 target_busy` means a Target is publishing. Retrieve the Project, wait for publishing to finish, reconcile your update, and retry. A `502` response means the Project was saved, but an obsolete release pull request could not be retired. Retrieve the Project and retry the same update to finish retiring reviews if that update is still desired. See [conditional writes](https://typeship.dev/docs/typeship-api#conditional-writes) for ETag and If-Match.