Developers · REST API
The Hypotize REST API
Hypotize is the agent-native Growth OS for growth, product and marketing teams: idea backlog, experiment tracker and learning library in one place. The REST API opens the same experiment record to your automations and scripts.
Read projects, experiments and learnings, add ideas, move tests through the pipeline and record outcomes from n8n, Make, Zapier, Pipedream or your own code. Every write follows the rules of the app: no skipped stages, no test closed without a measured result and a written learning.
Quick start
From API key to your projects in one call
- 1. Create an API key. In Hypotize, open Settings, API keys. Choose Read only to read, or Read and write to also create and update. You see the key once: store it in a secret manager.
- 2. List your projects. Every other call needs a project ID from this list.
curl https://api.hypotize.ai/v1/projects \ -H "Authorization: Bearer $HYPOTIZE_API_KEY" - 3. Add an idea. Needs a Read and write key and the editor or owner role in the project.
curl -X POST https://api.hypotize.ai/v1/projects/$PROJECT_ID/ideas \ -H "Authorization: Bearer $HYPOTIZE_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: idea-2026-11-05-pricing-page" \ -d '{"title": "Annual plan toggle on the pricing page", "short_idea": "Show the annual price by default", "funnel": "Revenue"}'
Base URL: https://api.hypotize.ai/v1. The OpenAPI 3.1 document describes every endpoint, parameter and field: https://api.hypotize.ai/v1/openapi.json. Import it into Postman, an HTTP node or a code generator.
Endpoints
What you can read and write
An idea is an experiment in the Idea status: the ID returned when you add an idea works with every experiment endpoint.
GET /projects
Projects you can access, with your role
Key: Read only or Read and write
GET /projects/{project_id}
One project with its framework and settings
Key: Read only or Read and write
GET /projects/{project_id}/experiments
Ideas and tests, newest updates at the top
Key: Read only or Read and write
GET /experiments/{experiment_id}
One experiment with scores, outcome and comments
Key: Read only or Read and write
GET /projects/{project_id}/learnings
Results and learnings of closed tests
Key: Read only or Read and write
POST /projects/{project_id}/ideas
Add an idea to the backlog
Key: Read and write
POST /projects/{project_id}/experiments/import
Import up to 50 experiments at any stage
Key: Read and write
PATCH /experiments/{experiment_id}
Change hypothesis, metrics, dates and other fields
Key: Read and write
POST /experiments/{experiment_id}/transition
Move a test to another pipeline stage
Key: Read and write
POST /experiments/{experiment_id}/outcome
Record the result and the learning, and close the test
Key: Read and write
POST /experiments/{experiment_id}/comments
Add a dated comment
Key: Read and write
Safe writes
Retries, conflicts and polling
Idempotency-Key
Send an Idempotency-Key header on every write. A retry with the same key and body within 24 hours returns the original response, with the header Idempotent-Replayed: true, and writes nothing new. The same key with a different body returns 409.
expected_updated_at
Updates, stage moves and outcomes take the experiment's current updated_at. If someone changed the experiment in the meantime, the call returns 409 STALE_EXPERIMENT: read it again and retry.
Pagination
Lists return items and next_cursor. Pass next_cursor as cursor to get the next page, until it is null. limit goes up to 100.
Polling triggers
For new or changed experiments, pass updated_after with the time of your last poll and dedupe on id plus updated_at. For new learnings, read the newest page and dedupe on experiment_id plus updated_at.
Errors and limits
Real status codes, one error shape
Every error has a code and a message. Some add fields that help you fix the call, such as the roles a write needs or the import row that failed.
{
"error": {
"code": "INSUFFICIENT_ROLE",
"message": "This operation requires the editor or owner role; your role in this project is viewer",
"current_role": "viewer",
"required_roles": ["editor", "owner"]
}
}- 400
- INVALID_REQUEST, INVALID_JSON, INVALID_CURSOR, or a lifecycle rule such as EXPERIMENT_NOT_READY and OUTCOME_REQUIRED
- 401
- UNAUTHORIZED: the key is missing, wrong, revoked or expired
- 403
- FORBIDDEN: a Read only key tried to write. INSUFFICIENT_ROLE: your project role is too low, with required_roles
- 404
- NOT_FOUND: the project or experiment does not exist, or you cannot see it
- 409
- STALE_EXPERIMENT: someone changed the experiment after you read it. IDEMPOTENCY_KEY_REUSED: same key, different body
- 429
- RATE_LIMITED: wait for the Retry-After seconds and try again
Limits per API key, shared with the MCP server: 300 requests per minute and 500 writes every 5 minutes. An import counts one write per row.
For AI agents
Same record, same rules, over MCP
Claude, ChatGPT, Grok Bot, Cursor and other AI agents connect to the MCP server at https://api.hypotize.ai/mcp with OAuth or the same API key. The MCP server also covers projects, tags, frameworks, votes and action plans, which the REST API does not have yet.