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.
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
| Method | Path | Description |
|---|
POST | /api/v1/builds | Create a new build job |
GET | /api/v1/builds/:id | Get build status and details |
GET | /api/v1/builds | List all your builds |
POST | /api/v1/deploys | Deploy 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.
| Code | Meaning |
|---|
400 | Bad request — missing or invalid parameters |
401 | Unauthorized — missing or invalid API key |
404 | Not found — the requested resource does not exist |
429 | Rate limited — you have exceeded your request quota |
500 | Server 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."
}