Skip to main content

Clients

Tasks

Your team's to-dos: list, add, change and complete them, about a client or not.

Your team's to-dos, the same tasks as on the Tasks page in the app. A task can be about a client, and only your team sees it; the client is never told. A workspace has at most 250 open tasks.

Attributes

  • idstring

    Its unique ID.

  • titlestring
  • statusenum
    One ofopencompleted
  • dueDatedatenullable

    The day it's due, in your own calendar. null if it has none.

  • clientobjectnullable

    The client it's about. null if it's about no one, or about a client you can't reach (not assigned to you, archived or deleted).

    Show 2 child attributes
    • idstring

      Its unique ID.

    • namestring
  • assigneeobjectnullable

    The coach it's assigned to. null if it's unassigned.

    Show 2 child attributes
    • idstring

      Its unique ID.

    • namestringnullable

      The coach's name. null if their account no longer exists.

  • createdByobjectnullable

    The coach who added it.

    Show 2 child attributes
    • idstring

      Its unique ID.

    • namestringnullable

      The coach's name. null if their account no longer exists.

  • createdAttimestamp

    When it was created.

  • updatedAttimestamp

    When the task last changed. A change to its client or coaches, such as a new name, doesn't count.

  • completedAttimestampnullable
  • completedByobjectnullable

    The coach who completed it. null while it's open.

    Show 2 child attributes
    • idstring

      Its unique ID.

    • namestringnullable

      The coach's name. null if their account no longer exists.

Task object
{
  "id": "6ad6af8764ce168864cfa985",
  "title": "Call Jordan about their new program",
  "status": "open",
  "dueDate": "2026-10-30",
  "client": {
    "id": "6ad6af41d3199442d31b2743",
    "name": "Jordan Miller"
  },
  "assignee": {
    "id": "6ad6af42386c5341386ac044",
    "name": "Alex Carter"
  },
  "createdBy": {
    "id": "6ad6af42386c5341386ac044",
    "name": "Alex Carter"
  },
  "createdAt": "2026-03-02T15:04:11.000Z",
  "updatedAt": "2026-10-26T09:12:40.000Z",
  "completedAt": null,
  "completedBy": null
}

List tasks

GET/v1/tasks

Your team's tasks, as you see them in the app: an owner or admin sees every task in the workspace, a team member the tasks assigned to them or that they added. Open tasks come newest first; completed ones newest completed first. A task about a client you can't reach (not assigned to you, archived or deleted) shows client: null. Requires tasks:write.

Query parameters

  • statusenum

    open (the default) or completed.

    One ofopencompletedDefault open
  • clientIdstring

    Only tasks about this client.

  • Only tasks assigned to this coach (an assignee.id).

  • limitinteger

    How many results to return, from 1 to 100.

    Default 25
  • cursorstring

    The nextCursor from the previous page.

Returns

A page of tasks.

GET /v1/tasks
curl -G https://api.hubfit.com/v1/tasks \
  -H "Authorization: Bearer $HUBFIT_API_KEY" \
  -d status=open
Response200 OK
{
  "data": [
    {
      "id": "6ad6af8764ce168864cfa985",
      "title": "Call Jordan about their new program",
      "status": "open",
      "dueDate": "2026-10-30",
      "client": {
        "id": "6ad6af41d3199442d31b2743",
        "name": "Jordan Miller"
      },
      "assignee": {
        "id": "6ad6af42386c5341386ac044",
        "name": "Alex Carter"
      },
      "createdBy": {
        "id": "6ad6af42386c5341386ac044",
        "name": "Alex Carter"
      },
      "createdAt": "2026-03-02T15:04:11.000Z",
      "updatedAt": "2026-10-26T09:12:40.000Z",
      "completedAt": null,
      "completedBy": null
    }
  ],
  "nextCursor": "eyJpZCI6IjZhZDZhZjNmMjljNTk3ZjE1In0",
  "totalCount": 48
}

Add a task

POST/v1/tasks

Adds a task, as adding one in the app does. It's assigned to you unless you choose a team member. A workspace has at most 250 open tasks; past that it's 409 open_task_limit_reached. Each call adds another task, so send an Idempotency-Key to retry safely. Requires tasks:write.

Headers

  • Any unique string, such as a UUID, up to 255 characters. Retrying with the same key within 24 hours returns the first response instead of repeating the write. See Idempotency.

Body parameters

  • titlestringRequired

    What needs doing. Can't be blank.

  • The day it's due, as YYYY-MM-DD, in your own calendar.

  • The team member to give it to (a coach who has joined your workspace). Defaults to you.

  • clientIdstring

    The client the task is about. Only your team sees the task; the client isn't told.

Returns

The new task.

POST /v1/tasks
curl -X POST https://api.hubfit.com/v1/tasks \
  -H "Authorization: Bearer $HUBFIT_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Call Jordan about their new program",
    "dueDate": "2026-10-30",
    "clientId": "6ad6af41d3199442d31b2743"
  }'
Response201 Created
{
  "data": {
    "id": "6ad6af8764ce168864cfa985",
    "title": "Call Jordan about their new program",
    "status": "open",
    "dueDate": "2026-10-30",
    "client": {
      "id": "6ad6af41d3199442d31b2743",
      "name": "Jordan Miller"
    },
    "assignee": {
      "id": "6ad6af42386c5341386ac044",
      "name": "Alex Carter"
    },
    "createdBy": {
      "id": "6ad6af42386c5341386ac044",
      "name": "Alex Carter"
    },
    "createdAt": "2026-03-02T15:04:11.000Z",
    "updatedAt": "2026-10-26T09:12:40.000Z",
    "completedAt": null,
    "completedBy": null
  }
}

Get a task

GET/v1/tasks/{taskId}

One task you can see. Requires tasks:write.

Path parameters

  • taskIdstringRequired

    A task id from GET /tasks.

Returns

The task.

GET /v1/tasks/{taskId}
curl https://api.hubfit.com/v1/tasks/6ad6af8764ce168864cfa985 \
  -H "Authorization: Bearer $HUBFIT_API_KEY"
Response200 OK
{
  "data": {
    "id": "6ad6af8764ce168864cfa985",
    "title": "Call Jordan about their new program",
    "status": "open",
    "dueDate": "2026-10-30",
    "client": {
      "id": "6ad6af41d3199442d31b2743",
      "name": "Jordan Miller"
    },
    "assignee": {
      "id": "6ad6af42386c5341386ac044",
      "name": "Alex Carter"
    },
    "createdBy": {
      "id": "6ad6af42386c5341386ac044",
      "name": "Alex Carter"
    },
    "createdAt": "2026-03-02T15:04:11.000Z",
    "updatedAt": "2026-10-26T09:12:40.000Z",
    "completedAt": null,
    "completedBy": null
  }
}

Change a task

PATCH/v1/tasks/{taskId}

Changes only the fields you send. null clears the due date or the client, or unassigns the task. status completes a task, as ticking it in the app does, or reopens it; a task that already has that status is left as it is. Reopening counts toward the workspace's 250 open tasks; past that it's 409 open_task_limit_reached and nothing changes. Requires tasks:write.

Path parameters

  • taskIdstringRequired

    A task id from GET /tasks.

Body parameters

  • titlestring
  • dueDatedatenullable

    YYYY-MM-DD in your own calendar, or null for no due date.

  • assigneeIdstringnullable

    A coach who has joined your workspace, or null to unassign it.

  • clientIdstringnullable

    The client it's about, or null for none.

  • statusenum
    One ofopencompleted

Returns

The task as it is now.

PATCH /v1/tasks/{taskId}
curl -X PATCH https://api.hubfit.com/v1/tasks/6ad6af8764ce168864cfa985 \
  -H "Authorization: Bearer $HUBFIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "dueDate": "2026-10-30"
  }'
Response200 OK
{
  "data": {
    "id": "6ad6af8764ce168864cfa985",
    "title": "Call Jordan about their new program",
    "status": "open",
    "dueDate": "2026-10-30",
    "client": {
      "id": "6ad6af41d3199442d31b2743",
      "name": "Jordan Miller"
    },
    "assignee": {
      "id": "6ad6af42386c5341386ac044",
      "name": "Alex Carter"
    },
    "createdBy": {
      "id": "6ad6af42386c5341386ac044",
      "name": "Alex Carter"
    },
    "createdAt": "2026-03-02T15:04:11.000Z",
    "updatedAt": "2026-10-26T09:12:40.000Z",
    "completedAt": null,
    "completedBy": null
  }
}