Reference · Tools
Beeminder
Manage goals, datapoints, charges, and user data in Beeminder
The Beeminder node connects your BusyBot workflows to your Beeminder commitment contracts, letting you read and write goals, log datapoints, create charges, and fetch user info. You could, for example, automatically post a datapoint every time you close a GitHub issue or complete a Todoist task. It covers the full Beeminder REST API v1, including operations most users never touch manually, like short-circuiting a goal or stepping down its pledge level.
- Node type
- Action
- Parameters
- 28
- Outputs
- Output, Error
- Credentials
- Beeminder API
Beeminder
Manage goals, datapoints, charges, and user data in Beeminder
Overview
Beeminder is a commitment contract and goal-tracking service. This tool provides full CRUD operations for datapoints (create, create all, get, get many, update, delete), goals (create, get, get many, get archived, update, refresh, short circuit, step down, cancel step down, uncle/derail), charges (create), and user info (get). Uses the Beeminder REST API v1.
Category: Productivity
Tool Name: beeminder
Version: 1
Appearance: Icon: lucide-Target | Color: #FFD301
Node Type
Action — processes input items and produces output
Input / Output
| Direction | Port(s) |
|---|---|
| Input | Input |
| Output | Output, Error |
Credentials
This tool requires Beeminder API credentials. See the Credentials Guide for setup instructions.
Resources
| Resource | Value |
|---|---|
| Charge | charge |
| Datapoint | datapoint |
| Goal | goal |
| User | user |
Operations
Each resource has its own Operation list. Pick the resource first, then the operation.
| Resource | Operation | Value | Description |
|---|---|---|---|
| Charge | Create | create | Create a charge |
| Datapoint | Create | create | Create datapoint for goal |
| Datapoint | Create All | createAll | Create multiple datapoints at once |
| Datapoint | Delete | delete | Delete a datapoint |
| Datapoint | Get | get | Get a single datapoint |
| Datapoint | Get Many | getAll | Get many datapoints for a goal |
| Datapoint | Update | update | Update a datapoint |
| Goal | Create | create | Create a new goal |
| Goal | Get | get | Get a specific goal |
| Goal | Get Many | getAll | Get many goals |
| Goal | Get Archived | getArchived | Get archived goals |
| Goal | Update | update | Update a goal |
| Goal | Refresh | refresh | Refresh goal data |
| Goal | Short Circuit | shortCircuit | Short circuit pledge |
| Goal | Step Down | stepDown | Step down pledge |
| Goal | Cancel Step Down | cancelStepDown | Cancel step down |
| Goal | Uncle | uncle | Derail a goal and charge the pledge amount |
| User | Get | get | Get user information |
Parameters
Charge: Create
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Amount | number | Yes | 0 | Charge amount in USD. |
| Additional Fields | collection | No | {} | Optional fields for the charge. |
| — Note | string | No | — | Charge explanation. |
| — Dry Run | boolean | No | false | Whether to test charge creation without actually charging. |
Datapoint: Create
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Goal Name | string | Yes | — | The slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname. |
| Value | number | Yes | 1 | Datapoint value to send. |
| Additional Fields | collection | No | {} | Optional fields for the datapoint. |
| — Comment | string | No | — | Comment for the datapoint. |
| — Timestamp | string | No | — | Timestamp for the datapoint (ISO 8601 or any parseable date string). Defaults to “now” if omitted. |
| — Request ID | string | No | — | String to uniquely identify a datapoint (for idempotency). |
Datapoint: Create All
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Goal Name | string | Yes | — | The slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname. |
| Datapoints | json | Yes | [] | Array of datapoint objects to create. Each object should contain “value” and optionally “timestamp”, “comment”, etc. |
Datapoint: Delete
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Goal Name | string | Yes | — | The slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname. |
| Datapoint ID | string | Yes | — | The ID of the datapoint. |
Datapoint: Get
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Goal Name | string | Yes | — | The slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname. |
| Datapoint ID | string | Yes | — | The ID of the datapoint. |
Datapoint: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Goal Name | string | Yes | — | The slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname. |
| Return All | boolean | No | false | Whether to return all results or only up to a given limit. |
| Limit | number | No | 30 | Max number of results to return. (shown when Return All is false) |
| Options | collection | No | {} | Sorting and paging options for the query. |
| — Sort | string | No | id | Attribute to sort on. |
| — Page | number | No | 1 | Page number (1-indexed). Used only when Return All is false. (shown when Return All is false) |
| — Per Page | number | No | 25 | Number of results per page. Default 25. Ignored without page parameter. (shown when Return All is false) |
Datapoint: Update
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Goal Name | string | Yes | — | The slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname. |
| Datapoint ID | string | Yes | — | The ID of the datapoint. |
| Update Fields | collection | No | {} | Datapoint fields to change. |
| — Value | number | No | 1 | Datapoint value to send. |
| — Comment | string | No | — | Comment for the datapoint. |
| — Timestamp | string | No | — | Timestamp for the datapoint (ISO 8601 or any parseable date string). Defaults to the existing timestamp if not provided. |
Goal: Create
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Goal Slug | string | Yes | — | Unique URL-safe identifier for the goal. |
| Goal Title | string | Yes | — | Human-readable title for the goal. |
| Goal Type | options | Yes | hustler | Type of goal. Hustler = “Do More”, Biker = “Odometer”, Fatloser = “Do Less / weight loss”, Gainer = “Gain weight”, Inboxer = “Inbox Fewer”, Drinker = “Do Less”. |
Options: hustler, biker, fatloser, gainer, inboxer, drinker, custom | ||||
| Goal Units | string | Yes | — | Units for the goal (e.g., “hours”, “pages”, “pounds”). |
| Additional Fields | collection | No | {} | Optional fields for the new goal. |
| — Goal Date | string | No | — | Target date for the goal (ISO 8601 or any parseable date string). Converted to Unix timestamp. |
| — Goal Value | number | No | — | Target value for the goal. |
| — Rate | number | No | — | Rate of progress (units per day). |
| — Initial Value | number | No | 0 | Initial value for today’s date. |
| — Secret | boolean | No | false | Whether the goal is secret. |
| — Data Public | boolean | No | false | Whether the data is public. |
| — Data Source | options | No | manual | Data source for the goal. |
Options: api, ifttt, zapier, manual | ||||
| — Dry Run | boolean | No | false | Whether to test the endpoint without actually creating a goal. |
| — Tags | json | No | [] | JSON array of alphanumeric tags for the goal. Replaces existing tags. |
Goal: Get
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Goal Name | string | Yes | — | The slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname. |
| Additional Fields | collection | No | {} | Optional query settings for the goal. |
| — Include Datapoints | boolean | No | false | Whether to include datapoints in the response. |
| — Emaciated | boolean | No | false | Whether the goal attributes road, roadall, and fullroad will be stripped from the goal object. |
Goal: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Additional Fields | collection | No | {} | Optional query settings for the goal list. |
| — Emaciated | boolean | No | false | Whether the goal attributes road, roadall, and fullroad will be stripped from the goal objects. |
Goal: Get Archived
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Additional Fields | collection | No | {} | Optional query settings for the archived goal list. |
| — Emaciated | boolean | No | false | Whether the goal attributes road, roadall, and fullroad will be stripped from the goal objects. |
Goal: Update
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Goal Name | string | Yes | — | The slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname. |
| Update Fields | collection | No | {} | Goal fields to change. |
| — Title | string | No | — | Human-readable title for the goal. |
| — Y-Axis | string | No | — | Y-axis label for the goal graph. |
| — Tmin | string | No | — | Minimum date for the goal in format yyyy-mm-dd. |
| — Tmax | string | No | — | Maximum date for the goal in format yyyy-mm-dd. |
| — Secret | boolean | No | false | Whether the goal is secret. |
| — Data Public | boolean | No | false | Whether the data is public. |
| — Road All | json | No | [] | Array of arrays defining the bright red line. Each sub-array contains [date, value, rate] with exactly one field null. |
| — Data Source | options | No | — | Data source for the goal. Use empty string for manual entry. |
Options: api, ifttt, zapier, or an empty string for manual entry | ||||
| — Tags | json | No | [] | JSON array of alphanumeric tags for the goal. Replaces existing tags. |
Goal: Refresh
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Goal Name | string | Yes | — | The slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname. |
Goal: Short Circuit
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Goal Name | string | Yes | — | The slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname. |
Goal: Step Down
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Goal Name | string | Yes | — | The slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname. |
Goal: Cancel Step Down
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Goal Name | string | Yes | — | The slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname. |
Goal: Uncle
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Goal Name | string | Yes | — | The slug (URL-safe name) of the goal. Find in your Beeminder dashboard URL: beeminder.com/username/goalname. |
User: Get
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Additional Fields | collection | No | {} | Optional query settings for the user record. |
| — Associations | boolean | No | false | Whether to include associations in the response. |
| — Diff Since | string | No | — | Only goals and datapoints that have been created or updated since this timestamp will be returned (ISO 8601 or any parseable date string). |
| — Skinny | boolean | No | false | Whether to return minimal user data. |
| — Emaciated | boolean | No | false | Whether the goal attributes road, roadall, and fullroad will be stripped from any goal objects returned with the user. |
| — Datapoints Count | number | No | — | Number of datapoints to include. |
All Operations
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Max Concurrency | number | No | 10 | Maximum number of items to process concurrently. |
Output Data
The object Beeminder returns is merged onto the item JSON at the top level — there is no wrapper property, so returned fields sit next to (and overwrite same-named) fields from the incoming item. The rest of the input JSON passes through and binary data is forwarded unchanged.
Every operation returns at least one output item. Operations that return a list fan out to one output item per element:
| Operation | Output items |
|---|---|
| Datapoint: Create All | One item per datapoint created |
| Datapoint: Get Many | One item per datapoint |
| Goal: Get Many | One item per goal |
| Goal: Get Archived | One item per archived goal |
| All other operations | One item, carrying the single object returned |
Reference the returned fields directly by expression — for a datapoint, {{ $json.value }} and {{ $json.comment }}.
Two parameters shape how much comes back and are worth setting deliberately: Emaciated strips the road, roadall and fullroad attributes from goal objects, and Include Datapoints (Goal: Get) adds the goal’s datapoints to the returned goal.
Usage Examples
- Add a datapoint to a Beeminder goal
- Create a new Beeminder goal with a target rate
- Get all datapoints for a goal
- Update a goal’s settings
- Derail a goal (uncle) to trigger the pledge charge
- Create a charge against your Beeminder account
- Get authenticated user information
- Batch create multiple datapoints at once
Example Configuration
Add a single datapoint to a goal, with a comment and an explicit timestamp:
{
"type": "beeminder",
"parameters": {
"resource": "datapoint",
"operation": "create",
"goalName": "exercise",
"value": 30,
"additionalFields": {
"comment": "{{ $json.workoutName }}",
"timestamp": "2024-01-15T10:00:00Z",
"requestid": "{{ $json.sessionId }}"
}
}
}
Read back the most recent datapoints for a goal, newest page first:
{
"type": "beeminder",
"parameters": {
"resource": "datapoint",
"operation": "getAll",
"goalName": "weight",
"returnAll": false,
"limit": 50,
"options": {
"sort": "timestamp",
"page": 1,
"per": 50
}
}
}
Create a Do More goal with a daily rate:
{
"type": "beeminder",
"parameters": {
"resource": "goal",
"operation": "create",
"slug": "daily-steps",
"title": "Daily Steps Goal",
"goal_type": "hustler",
"gunits": "steps",
"additionalFields": {
"goaldate": "2025-12-31",
"goalval": 10000,
"rate": 100,
"initval": 0,
"datapublic": true,
"datasource": "api"
}
}
}
Derail a goal on purpose so the pledge is charged:
{
"type": "beeminder",
"parameters": {
"resource": "goal",
"operation": "uncle",
"goalName": "{{ $json.goalSlug }}"
}
}
Test a charge without actually taking the money:
{
"type": "beeminder",
"parameters": {
"resource": "charge",
"operation": "create",
"amount": 25,
"additionalFields": {
"note": "Missed workout goal",
"dryrun": true
}
}
}
Error Handling
| Mode | Behavior |
|---|---|
| stop | Halts workflow on first error |
| continue | Skips failed items, passes successful ones through |
| errorPort | Routes failed items to Error output port |
Tips
Track goals and add datapoints to Beeminder commitment contracts via the Beeminder API.
Frequently asked questions
What credentials do I need to use this node?
You need a Beeminder API credential, configured in BusyBot as the 'beeminderApi' credential type. You can find your Beeminder API token in your Beeminder account settings. Without this credential set up, the node will not authenticate and all operations will fail.
What happens when a goal operation fails — does the whole workflow stop?
The node has two separate outputs: Output and Error. A failed operation routes to the Error output rather than stopping your workflow dead. This lets you wire up fallback logic — for instance, sending yourself a notification if a datapoint fails to post — without needing a separate error-handling node wrapping everything.
Can I log multiple datapoints at once, or do I have to post them one at a time?
Both options are available. The node exposes a 'create' operation for a single datapoint and a 'create all' operation for posting multiple datapoints in one call. Use 'create all' when you're syncing a batch of historical data or aggregating results from another source to avoid making a separate API call per entry.
What does 'uncle/derail' actually do to a goal?
The uncle/derail operation forces an immediate derailment on a goal, triggering the pledge charge as if you had genuinely gone off the road. This is a destructive action — it charges your card and resets the goal. It's exposed here for edge-case automation (like a penalty triggered by an external system), but treat it carefully; there is no confirmation step inside the workflow.
Does this node cover archived goals, or only active ones?
Both. Under the goal resource there is a dedicated 'get archived' operation separate from the standard 'get many'. If your workflow needs to audit or restore archived goals, you'll need to use that specific operation — 'get many' will not return archived goals.
Build with the Beeminder node
Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Beeminder API credentials first.
Open BusyBotLast updated . Spotted something wrong? Tell us.