Importing CSV
- Import a CSV into any worksheet; the first row is treated as headers and matched to your columns.
- Values are validated by column type — currency accepts decimal amounts, dates are parsed, select values must exist in the option list.
- Imported rows fire row-created events, so automations react to imports exactly as they do to hand-entered rows.
- Imports respect your plan's rows-per-worksheet limit; an import that would exceed it is rejected up front rather than partially applied.
Exporting
- Worksheet export — the current sheet as CSV, with formula results included and currency written as decimal amounts.
- Workbook export — every worksheet in the workbook at once.
Exports are always available on every plan. It's your data.
API tokens
Create tokens under Settings → API tokens. The token value (it starts with wbk_) is shown once, at creation — store it in your secrets manager; Workbooks keeps only a hash and can never show it again.
- Scopes: read (GET only), write (mutations only), or read-write.
- Workbook restriction: optionally confine a token to a single workbook — the right shape for a third-party integration that should see one dataset, not your whole workspace.
- Rate limit: 300 requests per minute per token, reported in
X-Rate-Limit-*response headers; over the limit returns HTTP 429. - Safety rules: tokens cannot create or manage other tokens, and revoking a token cuts it off immediately.
Using the API
Send the token as a bearer header. Endpoints live under https://app.cashsheet.com/v1/ and cover workspaces, workbooks, worksheets, rows (with the same filter and sort parameters the grid uses), columns, views, comments, automations, dashboards, and import/export.
# List rows, filtered server-side
curl -H "Authorization: Bearer wbk_..." \
"https://app.cashsheet.com/v1/worksheets/<id>/rows?filters=[{\"columnId\":\"...\",\"op\":\"gt\",\"value\":100}]"
# Create a row
curl -X POST -H "Authorization: Bearer wbk_..." -H "Content-Type: application/json" \
-d '{"rows":[{"cells":{"<columnId>":"Coffee run"}}]}' \
"https://app.cashsheet.com/v1/worksheets/<id>/rows"Errors return a stable JSON shape with an errorCode — for example 1020 means the request was blocked by a plan limit.
Realtime WebSocket
The same live updates the grid uses are available to integrations: connect to /v1/ws with a worksheet id and a token that has readaccess, and you'll receive row and cell events as they happen. Workbook-restricted tokens can only watch worksheets inside their workbook.