O
RESTful API for programmatic access to all Oftisoft platform features.
All API requests require a valid API key. Include it in the Authorization header.
curl -H "Authorization: Bearer oft_sk_live_abc123def456" \
https://api.oftisoft.com/v1/projectsBase URL: https://api.oftisoft.com/v1
# List all projects
curl https://api.oftisoft.com/v1/projects \
-H "Authorization: Bearer oft_sk_live_abc123def456"
# Get a single project
curl https://api.oftisoft.com/v1/projects/{id} \
-H "Authorization: Bearer oft_sk_live_abc123def456"
# Create a new deployment
curl -X POST https://api.oftisoft.com/v1/deployments \
-H "Authorization: Bearer oft_sk_live_abc123def456" \
-H "Content-Type: application/json" \
-d '{"projectId": "proj_xyz", "branch": "main"}'Rate limits protect the API from abuse and ensure fair usage across all clients.
# Rate limit headers in every response
HTTP/1.1 200 OK
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 987
X-RateLimit-Reset: 1684256400
# When exceeded, you'll receive 429 Too Many Requests
curl https://api.oftisoft.com/v1/projects \
-H "Authorization: Bearer oft_sk_live_abc123def456"
# → 429 { "error": "rate_limit_exceeded", "retryAfter": 30 }The API uses conventional HTTP response codes and returns structured error objects.
# 400 Bad Request — invalid input
{ "error": "validation_error", "message": "projectId is required", "field": "projectId" }
# 401 Unauthorized — missing or invalid API key
{ "error": "unauthorized", "message": "Invalid or expired API key" }
# 404 Not Found — resource doesn't exist
{ "error": "not_found", "message": "Project not found" }
# 500 Internal Server Error — something went wrong
{ "error": "internal_error", "message": "An unexpected error occurred" }