API Reference
The DevBar REST API base URL is https://api.devbar.app. All endpoints are prefixed with /api/v1.
Authentication: Endpoints marked Auth required require a Bearer token in the
Authorization header: Authorization: Bearer <access_token>Rate Limits: Most authenticated endpoints allow 120 requests per minute per user. Authentication endpoints (login, register) are limited to 10 requests per 15 minutes per IP. Responses include
X-RateLimit-Remaining and X-RateLimit-Reset headers. When rate-limited you receive a 429 response.Base URL:
https://api.devbar.app/api/v1. EU customers use https://eu.api.devbar.app/api/v1.AuthenticationOAuthDevice AuthSAMLUsersTokensOrganisationWorkflowsAdminWebhooksSCIMWebSocketRequest / Response Examples
Authentication
| Method | Path |
|---|---|
| POST | /auth/register |
| POST | /auth/login |
| POST | /auth/refresh |
| POST | /auth/forgot-password |
| POST | /auth/reset-password |
| POST | /auth/verify-email |
OAuth
| Method | Path |
|---|---|
| GET | /auth/google |
| GET | /auth/github |
Device Auth
| Method | Path |
|---|---|
| POST | /auth/device/authorize |
| GET | /auth/device/status |
| POST | /auth/device/complete |
SAML
| Method | Path |
|---|---|
| GET | /saml/metadata |
| GET | /saml/login |
| POST | /saml/acs |
Users
| Method | Path |
|---|---|
| GET | /users/me |
| PATCH | /users/me |
| GET | /users/me/features |
Tokens
| Method | Path |
|---|---|
| GET | /tokens |
| POST | /tokens |
| GET | /tokens/:id |
| DELETE | /tokens/:id |
Organisation
| Method | Path |
|---|---|
| GET | /org |
| PATCH | /org |
| GET | /org/members |
| DELETE | /org/members/:userId |
| GET | /org/invitations |
| POST | /org/invitations |
| DELETE | /org/invitations/:id |
Workflows
| Method | Path |
|---|---|
| GET | /workflows |
| POST | /workflows |
| GET | /workflows/:id |
| PUT | /workflows/:id |
| DELETE | /workflows/:id |
| GET | /workflows/marketplace |
Admin
| Method | Path |
|---|---|
| GET | /admin/users |
| GET | /admin/orgs |
| GET | /admin/features |
| PUT | /admin/features/:key |
| GET | /admin/plans |
| GET | /admin/audit-log |
| GET | /admin/email-config |
| PUT | /admin/email-config |
| GET | /admin/saml-config |
| PUT | /admin/saml-config |
Webhooks
| Method | Path |
|---|---|
| POST | /webhooks/stripe |
| POST | /webhooks/pagerduty |
| POST | /webhooks/github |
| POST | /webhooks/datadog |
SCIM
| Method | Path |
|---|---|
| GET | /scim/v2/Users |
| POST | /scim/v2/Users |
| GET | /scim/v2/Users/:id |
| PUT | /scim/v2/Users/:id |
| PATCH | /scim/v2/Users/:id |
| DELETE | /scim/v2/Users/:id |
WebSocket
| Method | Path |
|---|---|
| GET | /ws |
Request / Response Examples
Curl examples for the most commonly used endpoints. Replace bearer tokens with your own.
Authentication
POST /api/v1/auth/login
Request
curl -X POST https://api.devbar.app/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]", "password": "s3cret!"}'Response (200)
{
"data": {
"user": { "id": "usr_abc123", "email": "[email protected]", "name": "Jane Doe" },
"access_token": "eyJhbGciOiJSUzI1NiIs...",
"refresh_token": "dGhpcyBpcyBhIHJlZnJl..."
}
}Errors
- 401 Invalid credentials
- 429 Rate limited (10 req/15min)
POST /api/v1/auth/register
Request
curl -X POST https://api.devbar.app/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{"name": "Jane Doe", "email": "[email protected]", "password": "s3cret!"}'Response (201)
{
"data": {
"user": { "id": "usr_abc123", "email": "[email protected]", "name": "Jane Doe" },
"access_token": "eyJhbGciOiJSUzI1NiIs...",
"refresh_token": "dGhpcyBpcyBhIHJlZnJl..."
}
}Errors
- 409 Email already registered
- 422 Validation error (weak password, invalid email)
POST /api/v1/auth/refresh
Request
curl -X POST https://api.devbar.app/api/v1/auth/refresh \
-H "Content-Type: application/json" \
-d '{"refresh_token": "dGhpcyBpcyBhIHJlZnJl..."}'Response (200)
{
"data": {
"access_token": "eyJhbGciOiJSUzI1NiIs...",
"refresh_token": "bmV3IHJlZnJlc2ggdG9r..."
}
}Errors
- 401 Invalid or expired refresh token
Tokens
POST /api/v1/tokens/verify
Request
curl -X POST https://api.devbar.app/api/v1/tokens/verify \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIs..."Response (200)
{
"data": {
"valid": true,
"user_id": "usr_abc123",
"scopes": ["read", "write"],
"expires_at": "2026-05-01T00:00:00Z"
}
}Errors
- 401 Token invalid or expired
POST /api/v1/tokens
Request
curl -X POST https://api.devbar.app/api/v1/tokens \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{"name": "CI Pipeline", "scopes": ["read"]}'Response (201)
{
"data": {
"id": "tok_xyz789",
"name": "CI Pipeline",
"token": "dvb_live_abc123...",
"scopes": ["read"],
"created_at": "2026-04-24T12:00:00Z"
}
}Errors
- 401 Unauthorized
- 422 Invalid scopes or missing name
GET /api/v1/tokens
Request
curl https://api.devbar.app/api/v1/tokens \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIs..."Response (200)
{
"data": [
{
"id": "tok_xyz789",
"name": "CI Pipeline",
"scopes": ["read"],
"last_used_at": "2026-04-23T18:30:00Z",
"created_at": "2026-04-01T12:00:00Z"
}
]
}Errors
- 401 Unauthorized
Billing
GET /api/v1/billing/plans
Request
curl https://api.devbar.app/api/v1/billing/plans \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIs..."Response (200)
{
"data": [
{ "id": "plan_solo", "name": "Solo", "price_monthly": 0, "max_integrations": 5 },
{ "id": "plan_pro", "name": "Pro", "price_monthly": 12, "max_integrations": 21 },
{ "id": "plan_team", "name": "Team", "price_monthly": 24, "max_integrations": 21, "max_seats": 50 },
{ "id": "plan_enterprise", "name": "Enterprise", "price_monthly": null, "max_integrations": 21, "max_seats": null }
]
}Errors
- 401 Unauthorized
POST /api/v1/billing/checkout
Request
curl -X POST https://api.devbar.app/api/v1/billing/checkout \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{"plan_id": "plan_pro", "billing_cycle": "monthly"}'Response (200)
{
"data": {
"checkout_url": "https://checkout.stripe.com/c/pay/cs_live_...",
"session_id": "cs_live_abc123"
}
}Errors
- 401 Unauthorized
- 400 Already subscribed to this plan
Announcements
GET /api/v1/announcements
Request
curl https://api.devbar.app/api/v1/announcements \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIs..."Response (200)
{
"data": [
{
"id": "ann_001",
"title": "v1.3.0 Released",
"body": "Free trial and storage provider choice now available.",
"created_at": "2026-04-20T10:00:00Z",
"reactions": { "thumbsup": 12, "heart": 5, "rocket": 8 }
}
]
}Errors
- 401 Unauthorized
POST /api/v1/announcements/:id/react
Request
curl -X POST https://api.devbar.app/api/v1/announcements/ann_001/react \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{"emoji": "rocket"}'Response (200)
{
"data": {
"announcement_id": "ann_001",
"emoji": "rocket",
"count": 9
}
}Errors
- 401 Unauthorized
- 404 Announcement not found
- 422 Invalid emoji type