API Introduction
Everything you need to get started with the ProBeya REST API — base URL, authentication, response format, and conventions.
Welcome to the ProBeya API
The ProBeya REST API gives you programmatic access to every resource in the platform — organizations, workspaces, projects, boards, items, KPIs, actions, and more. The API follows RESTful conventions and returns JSON for all responses.
Use the API to build integrations, automate workflows, ingest data from external systems (SAP, MES, QMS), or power custom dashboards.
Base URL
Every organization in ProBeya gets a dedicated subdomain. All REST API requests target that subdomain with a /api/v1 prefix:
https://{org}.probeya.com/api/v1
For example, if your organization slug is acme:
https://acme.probeya.com/api/v1/items
https://acme.probeya.com/api/v1/kpis
https://acme.probeya.com/api/v1/actions
The {org} placeholder is the slug you chose when creating your organization (visible in Settings > Organization > General). It is case-insensitive.
Authentication
Authenticate every request by including a Bearer token in the Authorization header. Tokens are created in Settings > API Tokens in the ProBeya dashboard.
curl https://acme.probeya.com/api/v1/items \
-H "Authorization: Bearer probeya_sk_live_abc123..."
ProBeya supports two token types:
| Token Type | Prefix | Use Case |
|---|---|---|
| Personal Access Token | probeya_sk_live_ | Server-to-server, scripts, CI/CD |
| OAuth Access Token | probeya_oat_ | Apps acting on behalf of a user |
See Authentication for token creation, scopes, and OAuth 2.0 flows.
Never expose API keys in client-side code, public repositories, or browser-visible source. Rotate compromised keys immediately from the dashboard.
Response Format
All successful responses are wrapped in a standard JSON envelope containing a data field and an optional meta field for pagination metadata:
Single Resource
{
"data": {
"id": "itm_clx9abc123",
"name": "Improve OEE on Line 3",
"boardId": "brd_clx9xyz789",
"status": "in_progress",
"priority": "high",
"createdAt": "2026-03-19T14:30:00.000Z",
"updatedAt": "2026-03-25T09:15:00.000Z"
}
}
Collection (List)
{
"data": [
{
"id": "itm_clx9abc123",
"name": "Improve OEE on Line 3",
"status": "in_progress"
},
{
"id": "itm_clx9def456",
"name": "Root cause analysis — batch deviation",
"status": "open"
}
],
"meta": {
"cursor": "itm_clx9def456",
"has_more": true,
"limit": 50
}
}
Error Response
Error responses use the same envelope with an error field instead of data:
{
"error": {
"code": "VALIDATION_ERROR",
"status": 422,
"message": "Validation failed",
"details": [
{
"field": "name",
"message": "Name is required"
},
{
"field": "boardId",
"message": "Invalid board ID format"
}
]
}
}
See Errors for the full error code reference.
Content Type
All request bodies must be sent as JSON with the Content-Type: application/json header:
curl -X POST https://acme.probeya.com/api/v1/items \
-H "Authorization: Bearer probeya_sk_live_abc123..." \
-H "Content-Type: application/json" \
-d '{
"boardId": "brd_clx9xyz789",
"groupId": "grp_clx9abc123",
"name": "New corrective action",
"priority": "high"
}'
Versioning
The API is versioned via the URL path (/api/v1). When breaking changes are introduced, a new version will be released (e.g., /api/v2). The previous version remains available for a minimum of 12 months after deprecation notice.
Non-breaking changes — such as new optional fields, new endpoints, or new enum values — are added to the current version without a version bump.
What’s Next
Was this page helpful?