---
title: "CreateProject"
description: "Create a project"
canonical: "https://pgbeam.com/docs/go-sdk/projects/createProject"
last-updated: "2026-09-14T19:37:21.000Z"
---

# CreateProject

> Create a project

URL: https://pgbeam.com/docs/go-sdk/projects/createProject

Creates a new project within the specified organization.

## Usage

## Parameters

Parameter

Type

Required

Description

ctx

`context.Context`

Yes

Request context

req

`pgbeam.CreateProjectRequest`

Yes

Request body

req.Name

`string`

Yes

Human-readable project name.

req.OrgID

`string`

Yes

Better Auth organization ID.

req.Description

`*string`

No

Optional project description.

req.Tags

`*[]string`

No

User-defined labels to attach to the project.

req.Cloud

`*string`

No

Cloud provider for the project.

req.SelfHosted

`*bool`

No

Mark this project as running on a self-hosted (BYOC) data plane in the customer's own VPC/cluster. Requires the Scale or enterprise plan.

req.Database

`pgbeam.CreateDatabaseRequest`

Yes

Request body for registering an upstream database.

## Response

`(*pgbeam.CreateProjectResponse, error)`: project created.

## Example

## Errors

Status

Description

400

The request was rejected. `code` is `INVALID_INPUT`, and `errors` names the offending fields when the failure was a validation one.

401

Missing or invalid authentication. `code` is `UNAUTHORIZED`.

403

The caller is authenticated but not allowed to perform this operation. `code` is `FORBIDDEN` when the caller's role is insufficient, and `PLAN_LIMIT_REACHED` when the organization's plan is what stands in the way. The two are answered differently, so branch on the code rather than the status.

409

The request conflicts with the current state. `code` distinguishes the cases: `RESOURCE_EXISTS` for a name or value already in use, `INVALID_STATE` for a resource that is no longer in a state that allows the operation, and `IDEMPOTENCY_KEY_REUSED` for a retry whose body does not match the request the key was first used for.

413

The request body exceeds the 2 MB limit. `code` is `PAYLOAD_TOO_LARGE`.

415

The request body is not JSON, or carries a body without declaring a Content-Type. `code` is `UNSUPPORTED_MEDIA_TYPE`.

429

Rate limited. `code` is `RATE_LIMITED`.

500

The request failed for a reason on our side. `code` is `INTERNAL_ERROR`. Quote `request_id` when reporting it.