Export open actions

Export open actions

GET /exports/open-actions returns every current task in the workspace (up to 5,000) as one CSV file with a header row. Current means the task is open and is not snoozed into the future, the same as GET /tasks. The columns are the same task fields, in the same order.

Use it when a BI tool or spreadsheet needs the whole table, not a page of it. Power BI, Excel and Google Sheets re-download a table each time they refresh.

curl https://api.twelfth.ai/exports/open-actions \
  --header "Authorization: Bearer $TWELFTH_API_KEY" \
  --output open-actions.csv
A snapshot, refreshed every 15 minutes

Each workspace’s export is rebuilt at most once every 15 minutes, however many reports or people refresh it. The Last-Modified header gives the time the snapshot was taken. A task you close in twelfth leaves the export at the next rebuild.

Power BI

  1. An owner or admin opens Settings → AI & agents and selects Create an API key, named for this report, for example “Power BI – open actions”. See API keys. Anyone who can open the report’s queries can read the key, so do not reuse a key from another integration.
  2. In Power BI Desktop, choose Get data → Web, then Advanced.
  3. Set URL parts to https://api.twelfth.ai/exports/open-actions.
  4. Under HTTP request header parameters, enter Authorization and Bearer <your key>.
  5. Choose OK. If Power BI asks how to sign in, choose Anonymous: the key in the header is the credential.
  6. In Power Query, use the first row as headers and set dueAt to Date/Time/Timezone.

Or paste this into a blank query, with TwelfthApiKey as a text parameter:

let
    Source = Csv.Document(
        Web.Contents(
            "https://api.twelfth.ai/exports/open-actions",
            [Headers = [Authorization = "Bearer " & TwelfthApiKey]]
        ),
        [Delimiter = ",", Encoding = 65001, QuoteStyle = QuoteStyle.Csv]
    ),
    Promoted = Table.PromoteHeaders(Source, [PromoteAllScalars = true])
in
    Promoted

After you publish the report, set the data source credentials to Anonymous in the Power BI service and tick Skip test connection, then schedule a refresh. No gateway is needed. The Power BI guide has the full walkthrough.

Excel works the same way: Data → From Web → Advanced, with the same URL and header.

A deliberately small resource API for server-side twelfth integrations. It starts with workspace identity and current task reads; new resources are added only after their contracts and permissions are ready. **Authentication.** Send a workspace API key as `Authorization: Bearer <key>`. Give each server, script or automation its own labelled key and never expose a key in browser code. **Errors.** Every error is `application/problem+json` (RFC 9457), with a stable machine-readable `code` and a recovery `hint`. **Compatibility.** Paths are stable and unversioned. Published operations evolve additively: existing paths, fields and documented error codes remain supported. **Rate limits.** Responses carry `RateLimit-*` headers; a `429` also carries `Retry-After`.

GET /exports/open-actions

Export open actions as CSV

Returns every current task in the workspace (up to 5,000) as one CSV table, for BI tools such as Power BI, Excel and Google Sheets that re-download a whole table on a schedule. Columns match the `Task` fields of `GET /tasks`, in the same order. The file is a snapshot: each workspace's export is rebuilt at most every 15 minutes, and `Last-Modified` gives the time it was taken. Cells that a spreadsheet would run as a formula are prefixed with an apostrophe.

Responses
StatusDescription
200 The workspace's current tasks, one row each, with a header row.
string
200 body

text/csv

Example
id,title,details,dueAt,bookKey,assigneeName,assigneeEmail,sourceSessionId,sourceTitle,sourceSummary,sourceKind
task_01JABCDEFGHJKMNPQRSTVWXYZ,Review the Nintendo order,,2026-10-21T03:00:00.000Z,dept:toys,Sam Lee,sam@example.com,,,,
401 The workspace API key is missing, invalid or revoked.
Problem
401 body

application/problem+json

FieldTypeDescriptionExample
type * string:uri-reference about:blank
title * string Short, human-readable summary.
status * integer HTTP status code. 401
code * "not_found" | "method_not_allowed" | "rate_limited" | "unauthorized" | "workspace_not_found" | "internal_error" Stable error code for programmatic handling. unauthorized
detail * string Explanation specific to this occurrence.
hint * string How to resolve or work around the error.
405 The resource is read-only.
Problem
405 body

application/problem+json

FieldTypeDescriptionExample
type * string:uri-reference about:blank
title * string Short, human-readable summary.
status * integer HTTP status code. 401
code * "not_found" | "method_not_allowed" | "rate_limited" | "unauthorized" | "workspace_not_found" | "internal_error" Stable error code for programmatic handling. unauthorized
detail * string Explanation specific to this occurrence.
hint * string How to resolve or work around the error.
429 Rate limit exceeded. Retry after the window resets.
Problem
429 body

application/problem+json

FieldTypeDescriptionExample
type * string:uri-reference about:blank
title * string Short, human-readable summary.
status * integer HTTP status code. 401
code * "not_found" | "method_not_allowed" | "rate_limited" | "unauthorized" | "workspace_not_found" | "internal_error" Stable error code for programmatic handling. unauthorized
detail * string Explanation specific to this occurrence.
hint * string How to resolve or work around the error.
500 Unexpected server error.
Problem
500 body

application/problem+json

FieldTypeDescriptionExample
type * string:uri-reference about:blank
title * string Short, human-readable summary.
status * integer HTTP status code. 401
code * "not_found" | "method_not_allowed" | "rate_limited" | "unauthorized" | "workspace_not_found" | "internal_error" Stable error code for programmatic handling. unauthorized
detail * string Explanation specific to this occurrence.
hint * string How to resolve or work around the error.

Need another export?

Tell us which table you report on (projects, price gaps, products, history), the rows you expect, and how often the report refreshes.

Request an export

All endpoints · API compatibility