Version: 1.1.0 Base URL: https://api.bitscale.ai/api/v1 Last Updated: March 2026
Table of Contents
Overview
The BitScale API allows enterprise customers to programmatically interact with their BitScale workspaces, grids, and AI enrichment pipelines. All API interactions are performed over HTTPS and return JSON-encoded responses. This reference covers authentication, request formats, error handling, and all available endpoints. If you have questions or need support, contact your dedicated BitScale account manager or reach out at team@bitscale.ai.Versioning
The BitScale API is versioned via the URL path. The current stable version is v1.| Version | Status | Base URL |
|---|---|---|
v1 | ✅ Current | https://api.bitscale.ai/api/v1 |
Stability guarantee: Within a given version, BitScale will not introduce breaking changes. New optional fields may be added to responses at any time and should be handled gracefully by your integration.
Authentication
All API requests must include two headers:| Header | Type | Required | Description |
|---|---|---|---|
api_key | string | ✅ Yes | Your personal API key, available from your BitScale account settings |
workspace-id | string | ✅ Yes | The ID of the workspace context for the request |
Note: Some endpoints (such as Get Current User and List Workspaces) do not require workspace-id, as they operate at the account level.
Example headers:
⚠️ Security: Never expose your API key in client-side code or public repositories. Rotate your key immediately if you suspect it has been compromised.
Request & Response Format
- All request bodies must be sent as JSON with the header
Content-Type: application/json - All responses are returned as JSON
- Timestamps are returned in ISO 8601 format (
YYYY-MM-DDTHH:mm:ssZ) - Boolean values are represented as
true/false
Rate Limiting
| Plan | Requests per minute |
|---|---|
| Enterprise | Contact your account manager |
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests allowed per window |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp when the window resets |
Error Handling
BitScale uses standard HTTP status codes. All error responses follow this structure:HTTP Status Codes
| Status Code | Meaning |
|---|---|
200 OK | Request succeeded |
201 Created | Resource created successfully |
400 Bad Request | Invalid request body or missing required parameters |
401 Unauthorized | Missing or invalid api_key |
403 Forbidden | Valid key, but insufficient permissions for the requested resource |
404 Not Found | The requested resource does not exist |
422 Unprocessable Entity | Request is well-formed but contains semantic errors |
429 Too Many Requests | Rate limit exceeded |
500 Internal Server Error | Unexpected server error — contact support if this persists |
Common Error Codes
error.code | Description |
|---|---|
INVALID_API_KEY | The provided api_key is invalid or expired |
WORKSPACE_NOT_FOUND | No workspace found for the given ID |
GRID_NOT_FOUND | No grid found for the given ID |
MISSING_REQUIRED_FIELD | A required field was not provided in the request |
INVALID_COLUMN_TYPE | An input column value does not match the expected type |
RUN_LIMIT_EXCEEDED | Grid run quota has been reached for your plan |
INSUFFICIENT_CREDITS | The workspace does not have enough credits to complete this run |
WEBHOOK_DELIVERY_FAILED | The provided webhook_url was unreachable or returned a non-2xx response |
Endpoints
1. Get Current User
Retrieves profile and account information for the authenticated user associated with the providedAiKey.
| Header | Required |
|---|---|
api_key | ✅ Yes |
workspace-id | ❌ No |
| Field | Type | Description |
|---|---|---|
id | string | Unique identifier for the user |
name | string | Full display name |
email | string | Email address associated with the account |
avatar_url | string | URL to the user’s profile image |
created_at | string | ISO 8601 timestamp of account creation |
plan | string | Current subscription plan |
2. List Workspaces
Returns a list of all workspaces the authenticated user is a member of.| Header | Required |
|---|---|
api_key | ✅ Yes |
workspace-id | ❌ No |
| Field | Type | Description |
|---|---|---|
workspaces | array | List of workspace objects |
workspaces[].id | string | Unique workspace identifier |
workspaces[].name | string | Display name of the workspace |
workspaces[].role | string | Authenticated user’s role in this workspace (admin, member, etc.) |
workspaces[].member_count | integer | Total number of members in the workspace |
workspaces[].created_at | string | ISO 8601 creation timestamp |
total | integer | Total number of workspaces returned |
3. Get Workspace Details
Returns full details for a specific workspace, including its plan, credit balance, member information, and metadata.| Header | Required |
|---|---|
api_key | ✅ Yes |
workspace-id | ❌ No |
| Parameter | Type | Required | Description |
|---|---|---|---|
workspaceId | string | ✅ Yes | The unique identifier of the workspace |
| Field | Type | Description |
|---|---|---|
id | string | Unique workspace identifier |
name | string | Display name of the workspace |
created_at | string | ISO 8601 timestamp of workspace creation |
created_by | object | Details of the user who created the workspace |
created_by.id | string | User ID of the workspace creator |
created_by.name | string | Full name of the workspace creator |
created_by.email | string | Email address of the workspace creator |
plan | object | Current subscription plan details |
plan.name | string | Plan tier name (e.g., Starter, Growth, Enterprise) |
plan.credits_included | integer | Total credits included in the current billing cycle |
plan.renewal_date | string | ISO 8601 timestamp of the next billing renewal |
credits | object | Credit usage summary for the current billing cycle |
credits.total | integer | Total credits allocated to this workspace |
credits.used | integer | Credits consumed so far in this billing cycle |
credits.remaining | integer | Credits available for use |
members | object | Membership summary |
members.total | integer | Total number of members in the workspace |
members.admins | integer | Number of members with admin role |
Tip: Use this endpoint to proactively checkExample cURLcredits.remainingbefore submitting large grid runs to avoidINSUFFICIENT_CREDITSerrors.
4. List Grids in a Workspace
Returns all grids within a specified workspace. Supports optional filtering by grid name.| Header | Required |
|---|---|
api_key | ✅ Yes |
workspace-id | ✅ Yes |
| Parameter | Type | Required | Description |
|---|---|---|---|
workspaceId | string | ✅ Yes | The unique identifier of the workspace |
| Parameter | Type | Required | Description |
|---|---|---|---|
search | string | ❌ No | Filter grids by name (case-insensitive, partial match supported) |
| Field | Type | Description |
|---|---|---|
grids | array | List of grid objects |
grids[].id | string | Unique grid identifier |
grids[].name | string | Display name of the grid |
grids[].description | string | Optional description of the grid’s purpose |
grids[].row_count | integer | Total number of rows in the grid |
grids[].column_count | integer | Total number of columns in the grid |
grids[].created_at | string | ISO 8601 creation timestamp |
grids[].updated_at | string | ISO 8601 timestamp of last modification |
total | integer | Total number of matching grids |
5. Get Grid Details
Returns full metadata for a specific grid, including all column definitions, their types, and grid-level settings.| Header | Required |
|---|---|
api_key | ✅ Yes |
workspace-id | ✅ Yes |
| Parameter | Type | Required | Description |
|---|---|---|---|
gridId | string | ✅ Yes | The unique identifier of the grid |
| Field | Type | Description |
|---|---|---|
id | string | Unique grid identifier |
name | string | Display name of the grid |
description | string | Description of the grid’s purpose |
settings | object | Grid-level configuration (see below) |
settings.row_limit | integer | Maximum number of rows the grid can hold |
settings.auto_run | boolean | Whether the grid runs automatically on new row insertion |
settings.visibility | string | Access scope: workspace, private, or public |
columns | array | Ordered list of column definitions |
columns[].id | string | Unique column UUID — use this as the key in inputs and output_columns when calling Run a Grid |
columns[].name | string | Human-readable column name |
columns[].type | string | Column data type (see Column Types below) |
columns[].is_input | boolean | Whether this column accepts input when running the grid |
columns[].is_output | boolean | Whether this column produces AI-enriched output |
columns[].required | boolean | Whether this column must be provided when running the grid |
row_count | integer | Total number of rows currently in the grid |
created_at | string | ISO 8601 creation timestamp |
updated_at | string | ISO 8601 timestamp of last modification |
| Type | Description |
|---|---|
text | Plain text string |
number | Numeric value (integer or float) |
url | A valid URL string |
email | An email address string |
date | ISO 8601 date string |
boolean | true or false |
ai_enrichment | Output column populated by a BitScale AI agent |
formula | Computed column derived from other column values |
6. Run a Grid
Executes a grid with the provided input column values and returns enriched output. Supports both synchronous and asynchronous execution modes.| Header | Required |
|---|---|
api_key | ✅ Yes |
workspace-id | ✅ Yes |
Content-Type | ✅ Yes — must be application/json |
| Parameter | Type | Required | Description |
|---|---|---|---|
gridId | string | ✅ Yes | The unique identifier of the grid to run |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | ❌ No | Execution mode: sync (default) or async |
inputs | object | ✅ Yes | Key-value pairs mapping column UUIDs to their input values. Column UUIDs can be found in the columns[].id field via Get Grid Details |
output_columns | array of strings | ❌ No | List of column UUIDs to include in the response. If omitted, all columns are returned as key-value pairs |
webhook_url | string | ❌ No | (async only) A publicly accessible HTTPS URL. BitScale will POST the completed run result to this URL when execution finishes. Ignored in sync mode |
Synchronous Response (mode: "sync")
The API processes the row and returns the result directly.
Asynchronous Response (mode: "async")
The API immediately returns a run ID. Use the run ID to poll for results, or provide a webhook_url to receive a callback when the run completes.
poll_url until status is completed or failed.
| Status | Description |
|---|---|
queued | Run has been accepted and is waiting to be processed |
running | Run is currently being executed |
completed | Run finished successfully — outputs are available |
failed | Run encountered an error — check error field for details |
Webhook Delivery If a
webhook_url was provided in the request, BitScale will send an HTTP POST request to that URL upon run completion (whether completed or failed). The webhook payload is identical to the poll response.
⚠️ Requirements: TheYour endpoint must respond with awebhook_urlmust be a publicly accessiblehttps://endpoint. BitScale does not supporthttp://or localhost URLs for webhook delivery.
2xx status code within 10 seconds to acknowledge receipt. If delivery fails, BitScale will retry up to 3 times with exponential backoff.
Webhook Payload Example
| Header | Description |
|---|---|
Content-Type | application/json |
X-BitScale-Run-Id | The run_id of the completed run |
X-BitScale-Signature | HMAC-SHA256 signature of the payload, for verifying authenticity |
Response Fields
| Field | Type | Description |
|---|---|---|
mode | string | Execution mode used: sync or async |
status | string | Current run status |
run_id | string | (async only) Unique identifier for the run |
poll_url | string | (async only) URL to poll for run status and results |
outputs | object | Key-value pairs of column IDs and their values (present when status is completed) |
credits | object | Credit usage for this run (present when status is completed) |
credits.consumed | integer | Number of credits deducted for this run |
credits.remaining | integer | Credits remaining in the workspace after this run |
started_at | string | (async only) ISO 8601 timestamp when execution began |
completed_at | string | (async only) ISO 8601 timestamp when execution finished |
Example cURL — Synchronous
Changelog
| Version | Date | Notes |
|---|---|---|
| 1.1.0 | March 2026 | Added Get Workspace Details endpoint; added webhook_url support for async grid runs; added credits object to run responses; introduced URL-based API versioning (/v1) |
| 1.0.0 | March 2026 | Initial release |
For enterprise support, contact your BitScale account manager or email team@bitscale.ai.