Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.veri.studio/llms.txt

Use this file to discover all available pages before exploring further.

Base URL

https://api.veri.studio/v1

Authentication

All API requests require a Bearer token. Create an API key from the dashboard or via the API keys endpoint.
curl https://api.veri.studio/v1/training_jobs \
  -H "Authorization: Bearer vk_your_api_key"
API keys use the vk_ prefix and are hashed server-side. See API Keys for key management.

Endpoints

Datasets

MethodEndpointDescription
POST/v1/datasetsUpload a JSONL dataset
POST/v1/datasets/connectRegister an external dataset source
POST/v1/datasets/connect/validateValidate a source connection
GET/v1/datasetsList datasets
GET/v1/datasets/{id}Get dataset info

Reward Functions

MethodEndpointDescription
POST/v1/reward_functionsUpload a reward function
GET/v1/reward_functionsList reward functions
GET/v1/reward_functions/{id}Get reward function info

Training Jobs

MethodEndpointDescription
POST/v1/training_jobsCreate a training job
GET/v1/training_jobsList training jobs (filter by status, method)
GET/v1/training_jobs/{id}Get job status
POST/v1/training_jobs/{id}/cancelCancel a job
GET/v1/training_jobs/{id}/logsStream job logs (SSE)
GET/v1/training_jobs/{id}/eventsGet job lifecycle events
GET/v1/training_jobs/{id}/modelGet checkpoint download URL

Deployments

MethodEndpointDescription
POST/v1/deploymentsCreate an inference deployment
GET/v1/deploymentsList deployments (filter by status)
GET/v1/deployments/{id}Get deployment details
POST/v1/deployments/{id}/stopStop a deployment
POST/v1/deployments/{id}/chat/completionsOpenAI-compatible inference
GET/v1/deployments/{id}/requestsList per-request logs
GET/v1/deployments/{id}/metricsGet aggregate metrics

Cost

MethodEndpointDescription
GET/v1/cost/summaryGet spend summary
GET/v1/cost/by_providerBreak down spend by provider
GET/v1/cost/by_gpuBreak down spend by GPU type
GET/v1/cost/estimateEstimate cost from GPU shape and duration
GET/v1/cost/monthly_projectionProject monthly spend
GET/v1/cost/compareCompare provider costs
GET/v1/cost/ratesGet current GPU rates

Billing

MethodEndpointDescription
GET/v1/billing/balanceGet credit balance
GET/v1/billing/transactionsList balance transactions
POST/v1/billing/check_balanceCheck whether a job can be covered by credits
GET/v1/billing/burn_rateGet current credit burn rate from active jobs and deployments

API Keys

MethodEndpointDescription
POST/v1/api_keysCreate a new API key (plaintext returned once)
GET/v1/api_keysList active API keys (prefix only)
DELETE/v1/api_keys/{id}Revoke an API key

SSH Keys

MethodEndpointDescription
POST/v1/ssh_keysUpload an SSH key pair (encrypted at rest)
GET/v1/ssh_keysList SSH keys
DELETE/v1/ssh_keys/{id}Delete an SSH key

Request Format

  • JSON endpoints (POST /v1/training_jobs): Use Content-Type: application/json with a JSON body.
  • Upload endpoints (POST /v1/datasets, POST /v1/reward_functions): Use multipart/form-data.
  • Connector endpoints (POST /v1/datasets/connect, POST /v1/datasets/connect/validate): Send JSON bodies.

Response Format

Responses are standard JSON. Every response object includes an object field that identifies the resource type (e.g., "training_job", "deployment", "dataset", "reward_function", "api_key", "ssh_key"). Single-resource endpoints return one object. List endpoints return cursor-paginated responses:
{
  "object": "list",
  "data": [...],
  "has_more": false
}
Success (2xx)
{
  "id": "job_abc123",
  "object": "training_job",
  "status": "queued",
  "base_model": "Qwen/Qwen3-4B",
  "method": "grpo",
  "output_name": "my-model",
  "gpu_requested": {
    "type": "A100-80GB",
    "count": 1
  },
  "gpu": null,
  "created_at": "2026-04-14T12:00:00Z"
}
Error (4xx/5xx)
{
  "error": {
    "type": "invalid_request_error",
    "code": null,
    "message": "Invalid API key",
    "param": null
  }
}

Common Status Codes

StatusMeaning
400Invalid request or unsupported state transition
401Missing or invalid API key
402Insufficient credit balance
404Resource not found or not owned by the caller
422Request body failed schema validation
500Unexpected server error

Pagination

List endpoints support cursor-based pagination with limit and after query parameters:
curl "https://api.veri.studio/v1/datasets?limit=10&after=ds_abc123" \
  -H "Authorization: Bearer vk_your_api_key"
ParameterTypeDefaultDescription
limitinteger20Maximum number of items to return
afterstringID of the last item from the previous page (cursor)
The response includes a has_more field indicating whether additional pages exist:
{
  "object": "list",
  "data": [...],
  "has_more": true
}
To paginate, pass the id of the last item in data as the after parameter in the next request.