# List the portfolio feed Source: https://docs.cura.inc/api-reference/feed/list-the-portfolio-feed /openapi.json get /feed Feed entries across the whole portfolio, newest first. Includes both public (social, news) and private (forwarded email/document) entries — each carries a `private` flag. # Get a meeting Source: https://docs.cura.inc/api-reference/meetings/get-a-meeting /openapi.json get /meetings/{id} Returns a single meeting. Pass `?include=notes` to attach the meeting's notes (and transcripts) as a `notes` sibling of `attributes`. # Get a note Source: https://docs.cura.inc/api-reference/notes/get-a-note /openapi.json get /notes/{id} # Get a company's emails Source: https://docs.cura.inc/api-reference/portfolio/get-a-companys-emails /openapi.json get /portfolio/{id}/emails Forwarded email updates for a single company, newest first. Cursor-paginated over the email's sent date. # Get a company's feed Source: https://docs.cura.inc/api-reference/portfolio/get-a-companys-feed /openapi.json get /portfolio/{id}/feed Feed entries for a single company, newest first. Same shape as `GET /feed`. # Get a company's latest metrics Source: https://docs.cura.inc/api-reference/portfolio/get-a-companys-latest-metrics /openapi.json get /portfolio/{id}/metrics Returns the latest reported value of each of the company's metrics (standard + custom). # Get a company's meetings Source: https://docs.cura.inc/api-reference/portfolio/get-a-companys-meetings /openapi.json get /portfolio/{id}/meetings Meetings for a single company, newest first. Cursor-paginated over the meeting's start time. For a single meeting (and its notes), use `GET /meetings/:id`. # Get a company's notes Source: https://docs.cura.inc/api-reference/portfolio/get-a-companys-notes /openapi.json get /portfolio/{id}/notes Notes for a single company, newest first. # Get a company's open roles Source: https://docs.cura.inc/api-reference/portfolio/get-a-companys-open-roles /openapi.json get /portfolio/{id}/roles Open roles for a single company. Same shape as `GET /roles`, scoped to one company. # Get a company's tasks Source: https://docs.cura.inc/api-reference/portfolio/get-a-companys-tasks /openapi.json get /portfolio/{id}/tasks Tasks for a single company, newest first. Same shape as `GET /tasks`, scoped to one company. # Get a portfolio company Source: https://docs.cura.inc/api-reference/portfolio/get-a-portfolio-company /openapi.json get /portfolio/{id} # List portfolio companies Source: https://docs.cura.inc/api-reference/portfolio/list-portfolio-companies /openapi.json get /portfolio # List open roles Source: https://docs.cura.inc/api-reference/roles/list-open-roles /openapi.json get /roles Open roles across the whole portfolio, each grouped with its company via `company_id`. For a single company's roles, use `GET /portfolio/:id/roles`. # Get a task Source: https://docs.cura.inc/api-reference/tasks/get-a-task /openapi.json get /tasks/{id} # List tasks Source: https://docs.cura.inc/api-reference/tasks/list-tasks /openapi.json get /tasks Tasks across the whole workspace, newest first. Supports optional `filter[status]` and `filter[priority]`. For a single company's tasks, use `GET /portfolio/:id/tasks`. # Authentication Source: https://docs.cura.inc/authentication Authenticate requests with a workspace API key. The Cura API authenticates every request with a workspace API key. A key looks like `cura_` followed by a random suffix, and it resolves to exactly one workspace — all data you read is scoped to that workspace. ## Get a key Create an API key from [Settings → API keys](https://app.cura.inc/settings/api-keys) in the dashboard. Treat the key like a password: it grants read access to your portfolio, so store it in a secret manager and never commit it to source control. > [!WARNING] > > A key is shown in full only once, when you create it. If you lose it, revoke it and create a new > one. ## Authenticate a request Send the key in the `Authorization` header as a bearer token: ```bash theme={null} curl https://api.cura.inc/portfolio \ -H "Authorization: Bearer cura_your_key_here" ``` A missing or invalid key returns `401`: ```json theme={null} { "error": "Invalid or missing API key" } ``` ## Rotate a key To rotate a key, create a new one, update your integration to use it, then revoke the old key. Revoking takes effect immediately, so deploy the new key before removing the old one. # Introduction Source: https://docs.cura.inc/introduction Read-only access to your Cura portfolio over HTTP. The Cura API gives you read-only access to the portfolio data in your workspace: your companies, their feed, and their metrics. Every request is authenticated with a workspace API key, and every response is scoped to the workspace that key belongs to. ## Base URL All endpoints are served under a single base URL: ``` https://api.cura.inc ``` ## What you can access > **Portfolio** > > List your portfolio companies or fetch one by id. > **Feed** > > Activity across the portfolio, or scoped to a single company. > **Metrics** > > The latest reported value of each company metric. Browse the full endpoint list in the **API reference** tab. ## Response shape Responses follow a consistent envelope. A single resource is returned under `data`: ```json theme={null} { "data": { "id": "c1f2…", "attributes": { "domain": "acme.com", "name": "Acme" } } } ``` Collections return an array under `data` alongside a `pagination` object: ```json theme={null} { "data": [{ "id": "c1f2…", "attributes": { "domain": "acme.com" } }], "pagination": { "limit": 50, "offset": 0, "hasMore": true } } ``` Each resource carries a stable `id` and an `attributes` object holding its fields. See [Pagination](/pagination) for how to page through collections. ## Errors Errors use standard HTTP status codes and return a JSON body with an `error` message: ```json theme={null} { "error": "Portfolio company not found" } ``` | Status | Meaning | | - | - | | `400` | Invalid query parameters. | | `401` | Missing or invalid API key. | | `404` | The resource does not exist in your workspace. | > **[Authenticate your first request](/authentication)** > > Create a key and make a call. # Pagination Source: https://docs.cura.inc/pagination Page through collections with offset or cursor pagination. Collection endpoints return a page of results plus a `pagination` object describing how to fetch the next one. The Cura API uses two pagination styles depending on the endpoint. ## Offset pagination The portfolio list uses offset pagination. Pass `limit` (1–100, default 50) and `offset` (default 0). The response reports `hasMore`, derived without a separate count query, so you keep paging while it is `true`. ```bash theme={null} curl "https://api.cura.inc/portfolio?limit=50&offset=50" \ -H "Authorization: Bearer cura_your_key_here" ``` ```json theme={null} { "data": [{ "id": "c1f2…", "attributes": { "domain": "acme.com" } }], "pagination": { "limit": 50, "offset": 50, "hasMore": true } } ``` ## Cursor pagination Feed endpoints use a time-based cursor, since entries are ordered newest first and new entries arrive continuously. Pass `limit` (1–50, default 20). Each response returns `nextCursor`; pass it back as `cursor` to fetch the next, older page. When there are no more entries, `nextCursor` is `null`. ```bash theme={null} curl "https://api.cura.inc/feed?limit=20&cursor=2026-05-01T00:00:00.000Z" \ -H "Authorization: Bearer cura_your_key_here" ``` ```json theme={null} { "data": [{ "id": "f9a1…", "attributes": { "type": "fundraise-announcement" } }], "pagination": { "limit": 20, "nextCursor": "2026-04-12T09:30:00.000Z" } } ``` > [!TIP] > > A cursor points at a moment in time, so it is stable as new entries arrive — paging forward never > skips or repeats older entries. ## Filtering Both list styles accept filters under the `filter` key, using bracket syntax in the query string: ```bash Portfolio by priority theme={null} curl "https://api.cura.inc/portfolio?filter[priority]=high" \ -H "Authorization: Bearer cura_your_key_here" ``` ```bash Feed by type theme={null} curl "https://api.cura.inc/feed?filter[type]=fundraise-announcement" \ -H "Authorization: Bearer cura_your_key_here" ``` Filters combine with pagination — apply a filter and page through the matching results the same way.