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.
| Scope | Owned By | Examples |
|---|---|---|
| Organization | Org admin | Billing, marketplace packages, org members |
| Project | Project members | API keys, providers, domains, webhooks, messages |
Project Endpoints
/v1/projectsCreate a new project within the current organization.
/v1/projectsList all projects the authenticated user has access to.
/v1/projects/:slugGet project details by slug.
/v1/projects/:slugUpdate project name or description.
/v1/projects/:slugDelete 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.
/v1/projects/:slug/membersList all members of a project with their roles.
/v1/projects/:slug/membersInvite a user to the project with a specified role.
/v1/projects/:slug/members/:userIdUpdate a member's role within the project.
/v1/projects/:slug/members/:userIdRemove 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.
| Permission | ADMIN | DEVELOPER | VIEWER |
|---|---|---|---|
| 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
| Name | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Display name for the project (e.g. "Production", "Staging"). A URL-safe slug is generated automatically. |
description | string | No | Optional 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
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"
# }