Skip to main content
The REST API v0 is built with Django Ninja and served at /api/v0/. It is the primary integration point for external consumers and official SDKs.

Base URL

https://nest.owasp.org/api/v0/
The interactive Swagger documentation is available at /api/v0/docs and the raw OpenAPI schema at /api/v0/openapi.json.

Authentication

All endpoints require an API key passed in the X-API-Key request header.
curl https://nest.owasp.org/api/v0/projects/ \
  -H "X-API-Key: your-api-key"
Authentication is disabled in Local environments. You can call the API without a key when running the stack with DJANGO_CONFIGURATION=Local.

Pagination

All list endpoints return paginated responses. Pass page and page_size as query parameters.
ParameterTypeDefaultMaxDescription
pageinteger1Page number (1-indexed)
page_sizeinteger100100Items per page
Paginated responses have the following envelope:
{
  "current_page": 1,
  "has_next": true,
  "has_previous": false,
  "items": [...],
  "total_count": 540,
  "total_pages": 6
}

Endpoints

Chapters

Retrieve a paginated list of active OWASP chapters.Query parameters
ParameterTypeDescription
countrystringFilter by country name
orderingstringSort by created_at, -created_at, updated_at, -updated_at, latitude, -latitude, longitude, -longitude
Response schema (item)
FieldTypeDescription
keystringUnique chapter key (e.g., www-chapter-london)
namestringChapter display name
latitudefloat | nullGeographic latitude
longitudefloat | nullGeographic longitude
created_atdatetimeCreation timestamp
updated_atdatetimeLast update timestamp
Retrieve details for a single chapter.Path parameters
ParameterExampleDescription
chapter_idLondonChapter name or full key (www-chapter-london)
Additional response fields
FieldTypeDescription
countrystringCountry name
regionstringRegion name
leadersarrayList of { key, name } leader objects

Committees

GET /api/v0/committees
GET /api/v0/committees/{committee_id}
Returns paginated OWASP committees.

Events

GET /api/v0/events
GET /api/v0/events/{event_id}
Returns paginated OWASP events.

Issues

Retrieve a paginated list of GitHub issues.Query parameters
ParameterTypeDescription
organizationstringFilter by GitHub organization login (e.g., OWASP)
repositorystringFilter by repository name (e.g., Nest)
statestringFilter by issue state (open, closed)
orderingstringSort by created_at, -created_at, updated_at, -updated_at
Response schema (item)
FieldTypeDescription
titlestringIssue title
urlstringGitHub issue URL
statestringIssue state
created_atdatetimeCreation timestamp
updated_atdatetimeLast update timestamp
Retrieve a specific GitHub issue.Path parameters
ParameterExampleDescription
organization_idOWASPGitHub organization login
repository_idNestRepository name
issue_id1234Issue number
Additional response fields
FieldTypeDescription
bodystringIssue body (Markdown)

Labels

GET /api/v0/labels
Returns a paginated list of GitHub labels.

Members

GET /api/v0/members
GET /api/v0/members/{member_id}
Returns paginated GitHub users associated with OWASP.

Milestones

GET /api/v0/milestones
GET /api/v0/milestones/{organization_id}/{repository_id}/{milestone_id}
Returns paginated GitHub milestones. Filtering by organization and repository query parameters is supported on the list endpoint. The detail endpoint takes the organization login, repository name, and milestone number as path parameters.

Organizations

GET /api/v0/organizations
GET /api/v0/organizations/{organization_id}
Returns paginated GitHub organizations affiliated with OWASP.

Projects

Retrieve a paginated list of active OWASP projects.Query parameters
ParameterTypeDescription
levelstringFilter by project level (flagship, production, incubator, lab, demo)
typestring (multi)Filter by project type. Accepts multiple values.
qstringStructured search query (e.g., name:security stars:>100)
orderingstringSort by created_at, -created_at, updated_at, -updated_at
Response schema (item)
FieldTypeDescription
keystringUnique project key (e.g., www-project-nest)
namestringProject display name
levelstringProject maturity level
typestringProject type
created_atdatetimeCreation timestamp
updated_atdatetimeLast update timestamp
Retrieve details for a single project.Path parameters
ParameterExampleDescription
project_idNestProject name or full key (www-project-nest)
Additional response fields
FieldTypeDescription
descriptionstringProject description
leadersarrayList of { key, name } leader objects

Releases

GET /api/v0/releases
GET /api/v0/releases/{organization_id}/{repository_id}/{release_id}
Returns paginated GitHub releases. Filtering by organization, repository, and tag_name query parameters is supported on the list endpoint. The detail endpoint takes the organization login, repository name, and tag name as path parameters.

Repositories

GET /api/v0/repositories
GET /api/v0/repositories/{organization_id}/{repository_id}
Returns paginated GitHub repositories. Filter by organization_id query parameter to scope to a specific GitHub organization. The detail endpoint takes the organization login and repository name as path parameters.

Snapshots

Retrieve a paginated list of completed community snapshots.Response schema (item)
FieldTypeDescription
keystringSnapshot key (e.g., 2025-02)
titlestringSnapshot title
start_atdatetimeStart of the snapshot period
end_atdatetimeEnd of the snapshot period
created_atdatetimeCreation timestamp
updated_atdatetimeLast update timestamp
Retrieve details and aggregate counts for a single snapshot.Additional response fields
FieldTypeDescription
new_chapters_countintegerNew chapters in this snapshot
new_issues_countintegerNew issues in this snapshot
new_projects_countintegerNew projects in this snapshot
new_releases_countintegerNew releases in this snapshot
new_users_countintegerNew users in this snapshot
Each snapshot exposes paginated sub-resource lists:
GET /api/v0/snapshots/{snapshot_id}/chapters/
GET /api/v0/snapshots/{snapshot_id}/issues/
GET /api/v0/snapshots/{snapshot_id}/members/
GET /api/v0/snapshots/{snapshot_id}/projects/
GET /api/v0/snapshots/{snapshot_id}/releases/

Sponsors

GET /api/v0/sponsors
GET /api/v0/sponsors/{sponsor_id}
Returns paginated OWASP sponsors.

Structured search (query syntax)

Some endpoints support a structured search query via the q query parameter. This uses a field-specific syntax parsed server-side. Example: GET /api/v0/projects/?q=name:security stars:>100 Supported on the Projects list endpoint (name, stars). The query syntax supports:
OperatorMeaningExample
:Exact match or icontains for stringsname:nest
:>Greater than (numeric)stars:>500
:<Less than (numeric)stars:<10
:>=Greater than or equalstars:>=100
:<=Less than or equalstars:<=50

Example: fetch projects

curl "https://nest.owasp.org/api/v0/projects/?level=flagship&page_size=5" \
  -H "X-API-Key: your-api-key"
{
  "current_page": 1,
  "has_next": true,
  "has_previous": false,
  "items": [
    {
      "key": "www-project-zap",
      "name": "ZAP",
      "level": "flagship",
      "type": "tool",
      "created_at": "2024-01-15T10:00:00Z",
      "updated_at": "2025-03-01T08:30:00Z"
    }
  ],
  "total_count": 24,
  "total_pages": 5
}

SDK compatibility requirements

When adding or modifying endpoints, always assign a unique operationId in the @router.get or @router.post decorator. Duplicate operationIds break SDK generation.The authentication class in apps/api/rest/v0/__init__.py must remain named ApiKey. Renaming it changes the generated api_key parameter name in all SDKs.

Build docs developers (and LLMs) love