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.

Authentication

MethodPath
POST/auth/register
POST/auth/login
POST/auth/refresh
POST/auth/forgot-password
POST/auth/reset-password
POST/auth/verify-email

OAuth

MethodPath
GET/auth/google
GET/auth/github

Device Auth

MethodPath
POST/auth/device/authorize
GET/auth/device/status
POST/auth/device/complete

SAML

MethodPath
GET/saml/metadata
GET/saml/login
POST/saml/acs

Users

MethodPath
GET/users/me
PATCH/users/me
GET/users/me/features

Tokens

MethodPath
GET/tokens
POST/tokens
GET/tokens/:id
DELETE/tokens/:id

Organisation

MethodPath
GET/org
PATCH/org
GET/org/members
DELETE/org/members/:userId
GET/org/invitations
POST/org/invitations
DELETE/org/invitations/:id

Workflows

MethodPath
GET/workflows
POST/workflows
GET/workflows/:id
PUT/workflows/:id
DELETE/workflows/:id
GET/workflows/marketplace

Admin

MethodPath
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

MethodPath
POST/webhooks/stripe
POST/webhooks/pagerduty
POST/webhooks/github
POST/webhooks/datadog

SCIM

MethodPath
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

MethodPath
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