Base URLs
- REST API
- GraphQL API
The REST API is versioned and available at:Current version:
v0.3.6Available endpoints:/chapters- OWASP chapters/committees- OWASP committees/events- OWASP events/issues- GitHub issues/members- OWASP members/milestones- Project milestones/organizations- GitHub organizations/projects- OWASP projects/releases- Project releases/repositories- GitHub repositories/snapshots- Data snapshots/sponsors- OWASP sponsors
REST vs GraphQL
When to Use REST
Use the REST API when:- You need paginated lists of resources
- You want simple, cacheable GET requests
- You’re building integrations with standard HTTP clients
- You need to filter and order results
When to Use GraphQL
Use the GraphQL API when:- You need to fetch multiple related resources in one request
- You want to specify exact fields to return
- You’re managing API keys programmatically
- You need mutations (create/update/delete operations)
API Features
Pagination
REST endpoints return paginated results with the following structure:page- Page number (default: 1, minimum: 1)page_size- Items per page (default: 100, maximum: 100)
backend/apps/api/rest/v0/pagination.py:15-20
Ordering
Most list endpoints support ordering via theordering parameter:
created_at/-created_atupdated_at/-updated_at
Prefix field names with
- for descending order.Filtering
Endpoints support various filters based on the resource type: Project filters:backend/apps/api/rest/v0/project.py:73-84, backend/apps/api/rest/v0/issue.py:47-64
Structured Search
Some endpoints support structured search queries with field-specific operators:- String fields: Contains match (case-insensitive)
- Number fields:
>,<,>=,<=,=
backend/apps/api/rest/v0/project.py:19-28
Rate Limiting
The REST API enforces rate limits to ensure fair usage:Rate limiting is disabled in local, E2E, and fuzz test environments.
backend/apps/api/rest/v0/__init__.py:46
When you exceed the rate limit, you’ll receive a 429 Too Many Requests response.
Error Handling
REST API Errors
REST endpoints return standard HTTP status codes:200 OK- Successful request400 Bad Request- Invalid request parameters401 Unauthorized- Missing or invalid API key404 Not Found- Resource not found429 Too Many Requests- Rate limit exceeded
backend/apps/api/rest/v0/__init__.py:107-114
GraphQL Errors
GraphQL mutations return result objects with error information:INVALID_NAME- API key name is invalidINVALID_DATE- Expiry date must be in the futureLIMIT_REACHED- Maximum active API keys reached (3)NOT_FOUND- API key not foundERROR- General error
backend/apps/api/internal/mutations/api_key.py:20-37
GraphQL Schema
The GraphQL API uses Strawberry with the following features:- Query depth limit: Maximum 5 levels deep
- Introspection: Disabled in production (enabled in debug mode)
- CSRF protection: Required for all mutations
backend/settings/graphql.py:46-54
GraphQL Introspection
In development environments, you can explore the full schema using GraphiQL at
/graphql/Interactive Documentation
REST API Documentation
The REST API provides interactive Swagger documentation:- Browse all available endpoints
- View request/response schemas
- Test endpoints directly in the browser
- Authorize with your API key (persists across page refreshes)
backend/apps/api/rest/v0/__init__.py:45
GraphQL Playground
In development mode, GraphiQL is available at:Next Steps
Authentication
Learn how to authenticate API requests with API keys
REST API Reference
Explore REST endpoints and schemas
GraphQL API Reference
Browse GraphQL queries and mutations
Rate Limits
Understand rate limiting policies