Skip to main content
The Capwrapper REST API lets you trigger builds and deployments programmatically — without touching the dashboard. Use it to integrate app packaging into your CI/CD pipeline, automate releases on every merge, or build internal tooling on top of the same infrastructure that powers the dashboard. All API requests go to:
https://api.capwrapper.com/v1

Authentication

Every request requires your API key passed as a Bearer token in the Authorization header.
Authorization: Bearer YOUR_API_KEY
You can find your API keys in the Capwrapper dashboard under Settings > API Keys. Generate a new key there if you don’t have one yet.
Treat your API key like a password. Do not commit it to version control or expose it in client-side code.

Request and response format

All request bodies must be JSON. All responses are JSON. Set the Content-Type header on every request that sends a body.
Content-Type: application/json

Available endpoints

MethodPathDescription
POST/api/v1/buildsCreate a new build job
GET/api/v1/builds/:idGet build status and details
GET/api/v1/buildsList all your builds
POST/api/v1/deploysDeploy a completed build to an app store
See the Builds API and Deploys API pages for full parameter and response documentation.

Example authenticated request

curl -X GET https://api.capwrapper.com/v1/builds \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json"

Rate limiting

The API enforces rate limits per API key. If you exceed your limit, you will receive a 429 Too Many Requests response. Check your current limits and usage in the Settings > API Keys section of the dashboard.

Error responses

The API uses standard HTTP status codes to indicate success or failure.
CodeMeaning
400Bad request — missing or invalid parameters
401Unauthorized — missing or invalid API key
404Not found — the requested resource does not exist
429Rate limited — you have exceeded your request quota
500Server error — something went wrong on Capwrapper’s end
Error responses include a JSON body with a message field describing the problem:
{
  "error": "unauthorized",
  "message": "Invalid or missing API key."
}