Skip to main content

Intro

The Projects API lets you manage LangWatch projects via REST. When you create a project, a project-scoped service API key is automatically generated and returned — ready to use for sending traces. This API is designed for service-to-service automation (e.g. an internal tool that scaffolds new projects), not for end-user access.

Authentication

The Projects API requires an organization-level API key (created in Settings > API Keys). Pass it as a Bearer token:
Authorization: Bearer sk-lw-<id>_<secret>
Project API keys (X-Auth-Token) cannot be used here — they lack organization context.

Endpoints

MethodPathDescription
GET/api/projectsList all projects in the organization
POST/api/projectsCreate a new project (returns a service API key)
GET/api/projects/{id}Get project details
PATCH/api/projects/{id}Update project fields (including moving to a different team)
DELETE/api/projects/{id}Archive a project
GET/api/projects/{id}/api-keyGet the project’s API key
POST/api/projects/{id}/regenerate-api-keyRegenerate the project API key

Moving a Project to Another Team

You can move a project to a different team by including teamId in the PATCH request:
curl -X PATCH https://app.langwatch.ai/api/projects/<project_id> \
  -H "Authorization: Bearer sk-lw-..." \
  -H "Content-Type: application/json" \
  -d '{"teamId": "<destination_team_id>"}'
Moving a project changes its access boundary. Members who had access through the source team will lose inherited access, while members of the destination team will gain it. Project-level access overrides are preserved.

Typical Flow

  1. Create an admin API key in Settings > API Keys with organization:manage permission
  2. Call POST /api/projects with the project name and either an existing teamId or a newTeamName
  3. Store the returned serviceApiKey and project id
  4. Use both values in your application:
LANGWATCH_API_KEY=<serviceApiKey>
LANGWATCH_PROJECT_ID=<project id>
The serviceApiKey is shown only once in the create response. Store it securely — you cannot retrieve it later.