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

FieldRequiredDescription
titleYesShort title for the request or feedback
descriptionNoDetails from the client or user
dueDateNoISO 8601 datetime (with offset)
pointsNoNumber of points
statusId / statusNameNoStatus by ID or name
priorityId / priorityNameNoPriority by ID or name
tagIds / tagNamesNoTags by ID or name
assigneeIds / assigneeEmailsNoAssignees by participant ID or email
parentChoreIdNoParent chore ID for sub-requests
externalIdNoYour 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

StatusMeaning
401Missing or invalid API key
403Key lacks permission or is not allowed on this list
409externalId already used on this list
429Rate 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

  1. Create a list (or use a workspace list) for inbound client and user requests.
  2. Create an API key with Create chore permission.
  3. When a client or user submits feedback or a request in your app, POST a chore with a stable externalId (for example your ticket or feedback ID).
  4. Optionally set status, tags, and assignees so the item shows up correctly in ChoreBuddy.
  5. 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.