# Create Postgres Cluster (/postgres-clusters/Postgres_create)

Create a Managed Postgres cluster for the organization named in the request body. Provisioning is asynchronous, and a name is generated when one is not supplied.

`POST /v1/postgres`

## Request Body

Type: `createPostgresClusterRequest`

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `disk_size_gb` | `integer` | No | Disk size in gigabytes. |
| `name` | `string` | No | Name for the cluster. A name is generated when omitted. |
| `org_slug` | `string` | Yes | Slug of the organization that will own the cluster. |
| `pg_major_version` | `string` | No | Postgres major version. — Enum: 16, 17 |
| `plan` | `string` | Yes | Plan slug selecting CPU, memory, and disk sizing. — Enum: basic, starter, launch, scale, Performance |
| `pool_mode` | `string` | No | Connection pooler mode. — Enum: session, transaction |
| `postgis_enabled` | `boolean` | No | Enable PostGIS support, required to later enable PostGIS extensions. |
| `region` | `string` | Yes | Fly region code where the cluster's primary runs. |

## Responses

| Status | Description | Schema |
| --- | --- | --- |
| `201` | Cluster accepted for provisioning | `showPostgresClusterResponse` |
| `400` | Creation failed | `PostgresErrorResponse` |
| `404` | Organization not found | `PostgresErrorResponse` |
| `422` | Invalid attributes | `PostgresErrorResponse` |

The full machine-readable OpenAPI spec is available at /openapi.json.