Projects

Projects are the primary unit of operational isolation in SendPipe. Each project has its own API keys, providers, sending domains, webhooks, and message history. The parent organization owns billing and marketplace packages -- everything else lives at the project level.

Isolation Model

Use projects to separate environments (production vs staging), products, or teams. Resources are fully isolated between projects -- a provider configured in one project is not visible to another.

ScopeOwned ByExamples
OrganizationOrg adminBilling, marketplace packages, org members
ProjectProject membersAPI keys, providers, domains, webhooks, messages

Project Endpoints

POST
/v1/projects

Create a new project within the current organization.

GET
/v1/projects

List all projects the authenticated user has access to.

GET
/v1/projects/:slug

Get project details by slug.

PATCH
/v1/projects/:slug

Update project name or description.

DELETE
/v1/projects/:slug

Delete a project and all associated resources. This action is irreversible.

Member Endpoints

Manage who has access to a project and what they can do. Members are scoped to the project -- a user can have different roles in different projects.

GET
/v1/projects/:slug/members

List all members of a project with their roles.

POST
/v1/projects/:slug/members

Invite a user to the project with a specified role.

PATCH
/v1/projects/:slug/members/:userId

Update a member's role within the project.

DELETE
/v1/projects/:slug/members/:userId

Remove a member from the project.

Role Permissions

Each project member is assigned one of three roles. Permissions are enforced at the API level -- dashboard UI reflects the same access controls.

PermissionADMINDEVELOPERVIEWER
View messages & analytics
Send messages via API
Manage providers
Manage domains
Manage webhooks
Create / rotate API keys
Invite & remove members
Change member roles
Update project settings
Delete project

Create Project Body

POST /v1/projects

Request Body
NameTypeRequiredDescription
namestringYesDisplay name for the project (e.g. "Production", "Staging"). A URL-safe slug is generated automatically.
descriptionstringNoOptional description of the project's purpose.

Example: Create a Project

curl -X POST https://api.sendpipe.io/v1/projects \
  -H "X-SendPipe-Key: sp_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Production",
    "description": "Main production environment for transactional messages"
  }'

# Response:
# {
#   "id": "prj_clx4...",
#   "name": "Production",
#   "slug": "production",
#   "description": "Main production environment for transactional messages",
#   "createdAt": "2026-03-26T10:00:00.000Z"
# }

Example: Invite a Member

bash
curl -X POST https://api.sendpipe.io/v1/projects/production/members \
  -H "X-SendPipe-Key: sp_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "dev@yourcompany.com",
    "role": "DEVELOPER"
  }'

# Response:
# {
#   "userId": "usr_clx4...",
#   "email": "dev@yourcompany.com",
#   "role": "DEVELOPER",
#   "invitedAt": "2026-03-26T10:05:00.000Z"
# }