# client.projects.production

> client.projects.production — the projects.production operations.

`client.projects.production` — the `projects.production` operations.

On `AsyncKindgi` every method is the same, awaited.

## `client.projects.production.set()`

```python signature
set(
    project_id: str | UUID,
    body: ProjectProductionBody | Mapping[str, Any] | None = None,
    /,
    *,
    idempotency_key: str | None = None,
    timeout: float | None = None,
    **fields: Any,
) -> ProjectProduction
```

Put a project in production, or take it out. `PUT /v1/projects/{projectId}/production`

A run in a project in production is a production run; a run anywhere else is staging. For tenant admins (`admin` on the tenant), both ways. Setting what's already set answers 200 unchanged and keeps the first `productionSince`. With the runtime's production gate on, putting a project in production is refused with 403 `production-not-allowed` while the tenant isn't allowed it, with `details.next` naming where to go to be allowed when the runtime names one; a project already in production stays so. With the tenant's `projectsInProduction` limit set, putting another project in production is refused with 403 `production-limit-reached` while that many of its projects are in production, or more; taking one out is never refused. 501 `production-unsupported` from a runtime whose projects can't be put in production.
