- Path, method, required scope
- Path / query / body parameters with types
- Example requests in curl, Node, Python, Go, Ruby
- Example success and error responses
- A live “Try it” playground (paste your key, hit run)
Conventions
Base URL
Authentication
Every endpoint exceptGET /v1/health and GET /v1/openapi.json requires the Authorization: Bearer cap_inv_live_... header. See Authentication for key format, scopes, and rotation.
Response shape
Success - bare resource (no envelope):request_id when contacting support.
Status codes
We deliberately return
404 rather than 403 when you query a resource you can see structurally but don’t own - this prevents enumeration of other teams’ data.Pagination
Endpoints that return lists support cursor-based pagination:next_cursor:
cursor to fetch the next page. Default limit is 25, max is 100.
OpenAPI spec
The machine-readable spec lives at:Endpoints by category
Companies
List, get, create, search companies in your pipeline.
Scores & metrics
CRI scores, thesis matches, traction metrics, key metrics.
Data rooms
List folders, documents; get signed download URLs; upload new documents.
Deck intake
Submit pitch decks; target one or more pipelines; poll job status; receive enriched results.
Pipelines
Discover the pipelines your key can submit into, including the default landing pipeline.
Theses & views
Your team’s investment theses and pipeline view configurations.
Health & meta
Liveness check and machine-readable OpenAPI spec.
Submitting into a specific pipeline
Teams can run several pipelines at once — for example one per award in an awards programme, where an entrant may enter two or three awards. Submissions target pipelines with thepipeline_ids field:
- Discover the pipelines your key can submit into with
GET /v1/pipelines. The response lists each pipeline’sid,name, and whether it is the default landing pipeline (where submissions go when you omitpipeline_ids). - Submit with
pipeline_idsonPOST /v1/decks(as a JSON array or comma-separated multipart field) orPOST /v1/companies(as a JSON array). One deal is created per pipeline, so a company entering two awards appears on both. - Ids outside your key’s scope are rejected with a
400before anything is created.
GET /v1/properties and answer them via the properties field on either endpoint.
Store your own reference, query it back
Store your system’s reference (an application ID, a CRM id) as a reference property on submission, and you can always find the company again — even if you never captured thecompany_id from the intake job. Reference properties are made for identifiers: they never display as application answers, and they can carry a validation_pattern (a full-match regex returned by GET /v1/properties) — validate your value against it before sending, because non-matching values are not stored:
GET /v1/companies/{id} echoes every submitted property back, so both sides of the reconciliation are covered. Reference and text values match exactly (case-sensitive); select values accept an option label or id.
Worked example: submit an application
A full application — deck, applicant contact, award targeting, and question answers — is one discovery pass and onePOST.
1
Discover the questions
text questions take a freeform string. select takes ONE option label or id; multi_select takes an array of them. Option ids are rename-proof, so prefer them over labels. Build your form from this response — it is the source of truth for what the team is asking.2
Discover the pipelines
id, name, and is_default (where submissions land when you omit pipeline_ids).3
Submit the application
202 with a job_id and a poll_url — poll GET /v1/jobs/{job_id} until status is completed. One deal is created per pipeline; founder_name and founder_email become the company’s primary contact (deck analysis fills in role and LinkedIn where the deck reveals them, but never overwrites what you submitted); the properties answers appear on the deal and in the team’s pipeline columns.