Create Chores via API
Use the API to turn inbound requests and feedback from clients and users into chores your team can triage in ChoreBuddy — without opening the UI for each submission.
Typical sources: in-app feedback, support forms, customer tickets, or product requests from another system.
You need an API key with Create chore permission before calling this endpoint.
Endpoint
POST https://chorebuddy.fimidara.com/api/v1/lists/{listId}/chores
Replace {listId} with the target list ID. You can find workspace and list IDs on their respective settings pages. The API key must be allowed to create chores on that list.
Request body
| Field | Required | Description |
|---|---|---|
title | Yes | Short title for the request or feedback |
description | No | Details from the client or user |
dueDate | No | ISO 8601 datetime (with offset) |
points | No | Number of points |
statusId / statusName | No | Status by ID or name |
priorityId / priorityName | No | Priority by ID or name |
tagIds / tagNames | No | Tags by ID or name |
assigneeIds / assigneeEmails | No | Assignees by participant ID or email |
parentChoreId | No | Parent chore ID for sub-requests |
externalId | No | Your own idempotency key (for example a ticket or feedback ID). Reusing the same externalId on the same list returns 409 |
Name and email fields are resolved on the server against the list’s statuses, priorities, tags, and members.
Example: curl
curl -X POST "https://chorebuddy.fimidara.com/api/v1/lists/YOUR_LIST_ID/chores" \
-H "Authorization: Bearer cb_YOUR_SECRET" \
-H "Content-Type: application/json" \
-d '{
"title": "Client feedback: export is slow",
"description": "Acme asked for faster CSV export after onboarding.",
"tagNames": ["feedback"],
"externalId": "feedback-123"
}'
Example: JavaScript
const response = await fetch(
"https://chorebuddy.fimidara.com/api/v1/lists/YOUR_LIST_ID/chores",
{
method: "POST",
headers: {
Authorization: "Bearer cb_YOUR_SECRET",
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "User request: dark mode",
description: "Submitted from the in-app feedback form.",
statusName: "Open",
tagNames: ["feedback", "request"],
assigneeEmails: ["[email protected]"],
externalId: "feedback-123",
}),
}
);
if (!response.ok) {
throw new Error(`Request failed: ${response.status}`);
}
const chore = await response.json();
console.log(chore.id);
Response
A successful create returns JSON like:
{
"id": "…",
"title": "Client feedback: export is slow",
"description": "Acme asked for faster CSV export after onboarding.",
"listId": "…",
"points": 0,
"dueDate": null,
"statusId": null,
"priorityId": null,
"tagIds": [],
"assigneeIds": [],
"parentChoreId": null,
"externalId": "feedback-123",
"createdAt": "2026-08-06T12:00:00.000Z",
"updatedAt": "2026-08-06T12:00:00.000Z"
}
Common errors
| Status | Meaning |
|---|---|
401 | Missing or invalid API key |
403 | Key lacks permission or is not allowed on this list |
409 | externalId already used on this list |
429 | Rate limit exceeded |
CORS
Browser clients can call the endpoint cross-origin. Preflight (OPTIONS) is supported. Allowed request headers include Authorization, Content-Type, and X-API-Key.
Track requests and feedback from your product
- Create a list (or use a workspace list) for inbound client and user requests.
- Create an API key with Create chore permission.
- When a client or user submits feedback or a request in your app,
POSTa chore with a stableexternalId(for example your ticket or feedback ID). - Optionally set status, tags, and assignees so the item shows up correctly in ChoreBuddy.
- Your team triages and completes the work in ChoreBuddy as usual.
Created items appear as chores on that list and are attributed to the API key actor.