The Breeze API is a REST style API that enables your application or script to access Breeze resources. It is designed to have predictable resource URLs and to use HTTP response codes for errors. JSON is used for all requests and responses from the API.
Accessing the API uses the following URL schema:
https://api.breeze.pm/<resource>
Where resource is the resource you want to access (e.g. projects, cards, todos etc)
For example, getting a list of projects would result in the URL:
curl -u user:pass https://api.breeze.pm/projects.json
To create or update something you also have to include the Content-Type header and the JSON data.
curl -u user:pass \ -H 'Content-Type: application/json' \ -d '{ "name": "New project" }' \ https://api.breeze.pm/projects.json
Breeze API supports HTTP Basic auth and token based authentication.
To get you started with Breeze API you can just use HTTP Basic authentication with your login info.
curl -u username:password https://api.breeze.pm/projects.json
You can also authenticate by providing your API token in the request. The token has to be sent for each request your application makes to the Breeze API. Remember that anyone who has your api token can see and change everything you have access to. Keep it safe! You can manage your API token from your profile.
curl -u 6dasdg782: https://api.breeze.pm/projects.json
You can also pass the api token as a query parameter in the url.
curl https://api.breeze.pm/projects.json?api_token=6dasdg782
If the user is part of multiple teams/organizations then you must add the team ID to every call. You can append it to every call with team_id or add it to the HTTP header HTTP_X_TEAM_ID. You can get all the team IDs from the user endpoint.
curl https://api.breeze.pm/projects.json?api_token=6dasdg782&team_id=5612
We plan to extend and adapt the API to allow access to more resources in the future. If you have special needs for an API, let us know. Write to support@breeze.pm.
GET /projects.json
get all active projects
Response
[ { "id": 1, "name": "Testing Breeze", "description": "testing api", "budget_amount": "13322.0", "budget_hours": 111, "hourly_rate": 12, "currency_symbol": "$", "total_planned": 480, "total_tracked": 182, "star": false, "workspace_id": 189, "created_at": "2022-12-13T10:41:28Z", "users": [ { "id": 5, "email": "john@breeze.pm", "name": "John Doe" }, { "id": 6, "email": "jake@breeze.pm", "name": null } ] }, { "id": 2, "name": "Personal tasks", "description": "", "budget_amount": "0.0", "budget_hours": null, "hourly_rate": 0, "currency_symbol": "$", "total_planned": 0, "total_tracked": 0, "star": false, "created_at": "2022-01-11T09:13:29Z", "users": [ { "id": 2, "email": "rene@breeze.pm", "name": "Rene" } ] } ]
GET /projects/1.json
get specific project
Response
{ "id": 1, "name": "Testing Breeze", "description": "testing api", "budget_amount": "13322.0", "budget_hours": 111, "hourly_rate": 12, "currency_symbol": "$", "total_planned": 480, "total_tracked": 182, "star": false, "workspace_id": 189, "created_at": "2022-12-13T10:41:28Z", "users": [ { "id": 5, "email": "john@breeze.pm", "name": "John Doe" }, { "id": 6, "email": "jake@breeze.pm", "name": null } ] }
POST /projects.json
create a new project
Request
{ "name": "New project", "description": "nww project from api", "budget_amount": "10000.0", "budget_hours": 100, "hourly_rate": 59, "currency_symbol": "$", "workspace_id": 189, "invitees": ["john@breeze.pm","jake@breeze.pm"] }
PUT /projects/:project_id.json
update a specific project
Request
{ "name": "New project", "description": "nww project from api", "budget_amount": "10000.0", "budget_hours": 100, "hourly_rate": 59, "currency_symbol": "$", "workspace_id": 189, }
DELETE /projects/:project_id.json
delete a specific project
GET /projects/:project_id/archive.json
archive a specific project
GET /projects/:project_id/reactivate.json
reactivate a specific project
GET /projects/:project_id/people.json
get all the project users
Response
[ { "id": 5, "email": "john@breeze.pm", "name": "John Doe" }, { "id": 6, "email": "jake@breeze.pm", "name": null } ]
POST /projects/:project_id/people.json
add people to project
Request
{ "invitees": ["john@breeze.pm","jake@breeze.pm"] }
DELETE /projects/:project_id/people/:user_id.json
delete a person from project
Projects can belong to one workspace.
GET /workspaces
get a list of all workspaces
[ { "id": 1, "name": "Workspace name 1", "position": 1, "created_at": "2022-12-13T10:41:28Z", }, { "id": 2, "name": "Workspace name 2", "position": 2, "created_at": "2022-12-12T10:41:28Z", } ]
GET /workspaces/1.json
get a workspace
{ "id": 1, "name": "Workspace name", "position": 1, "created_at": "2022-12-13T10:41:28Z", "projects": [ { "id": 7, "name": "Project 3" }, { "id": 8, "name": "Project 4" } ] }
POST /workspaces.json
create a new workspace
Request
{ "name": "Workspace name", }
PUT /workspaces/:workspace_id.json
update a specific workspace
{ "name": "Workspace name", }
DELETE /workspaces/:workspace_id.json
delete a specific workspace
GET /projects/:project_id/cards.json
get all the cards(tasks) for a specific project
{ "archived": false }
Response
[ { "id": 995, "name": "Todo list", "cards": [ { "id": 2742, "name": "This is a task", "description": "Task description", "position": 1, "stage_id": 995, "swimlane_id": 2, "color": "", "duedate": null, "startdate": null, "planned_time": 0, "total_tracked": 2, "todos_count": 5, "done_todos": 1, "created_at": "2022-11-05T06:04:35Z", "updated_at": "2022-02-23T16:39:06Z", "tags": ["tag1","tag2"], "user": { "id": 5, "email": "john@breeze.pm", "name": "John Doe" "avatar": "https://avatarurl.com/avatar.jpg" }, "users": [ { "id": 5, "email": "john@breeze.pm", "name": "John Doe" }, { "id": 6, "email": "jake@breeze.pm", "name": null } ], "todos": [ { "id": 372, "name": "first todo", "done": false }, { "id": 6, "name": "second todo", "done": false } ] , "time_entries": [ { "user_id": 5, "user_email": "rene@breeze.pm", "user_name": Rene, "tracked": 120 } ] }, { "id": 4105, "name": "Update API", "description": null, "position": 2, "stage_id": 995, "color": null, "duedate": null, "startdate": null, "planned_time": 0, "total_tracked": 0, "todos_count": 0, "done_todos": 0, "created_at": "2022-02-23T16:38:54Z", "updated_at": "2022-02-23T16:39:05Z", "users": [], "todos": [], "time_entries": [] "custom_fields": [] }] }, { "id": 993, "name": "Done list", "cards": [ { "id": 3532, "name": "Try out our API", "description": "API is still beta", "position": 1, "stage_id": 993, "color": "", "duedate": "2024-02-22T16:00:00Z", "startdate": "2024-02-20T16:00:00Z", "planned_time": 120, "total_tracked": 60, "todos_count": 1, "done_todos": 0, "created_at": "2022-12-13T10:52:53Z", "updated_at": "2022-02-25T10:12:23Z", "tags": ["tag1","tag2"], "users": [ { "id": 5, "email": "john@breeze.pm", "name": "John Doe" } ], "todos": [], "time_entries": [ { "user_id": 5, "user_email": "rene@breeze.pm", "user_name": "Rene", "tracked": 120 } ], "custom_fields": [ { "name": "Rating", "value": "***" } ] }] } ]
GET /V2/projects/:project_id/cards.json
get all the cards(tasks) for a specific project
The respons is paginated 100 items per page. To get the next page append ?page=XX
to the query.
{ "archived": false, "only_archived": false, "status": "status name", "hidden": true, "done": true }
Response
Same as V1 except it's a plain array and not grouped by stages.
GET /projects/:project_id/stages/:stage_id/cards.json
get all the cards(tasks) for a specific stage
{ "archived": false, "only_archived": false }
Response
Same as "Get cards V2"
GET /projects/:project_id/swimlanes/:swimlane_id/cards.json
get all the cards(tasks) for a specific swimlane
{ "archived": false, "only_archived": false }
Response
Same as "Get cards V2"
GET /v2/projects/:project_id/cards.json
get all the cards(tasks) created by user
GET /v2/cards.json
get all the cards(tasks) created by user in all projects
{ "creator_id": 2 }
Response
Same as "Get cards V2"
GET /v2/projects/:project_id/cards.json
get all the cards(tasks) assigned to a user
GET /v2/cards.json
get all the cards(tasks) assigned to a user in all projects
{ "assigned_id": 2 }
Response
Same as "Get cards V2"
GET /projects/:project_id/cards/:card_id.json
get a specific card(task)
Response
{ "id": 3532, "name": "Try out our API", "description": "API is still beta", "position": 1, "stage_id": 993, "color": "", "duedate": "2024-02-22T16:00:00Z", "startdate": "2024-02-20T16:00:00Z", "planned_time": 120, "total_tracked": 60, "todos_count": 1, "done_todos": 0, "created_at": "2022-12-13T10:52:53Z", "updated_at": "2022-02-25T10:12:23Z", "tags": ["tag1","tag2"], "users": [ { "id": 5, "email": "john@breeze.pm", "name": "John Doe" }, { "id": 6, "email": "jake@breeze.pm", "name": null } ], "todos": [ { "id": 372, "name": "first todo", "done": false }, { "id": 6, "name": "second todo", "done": false } ] , "time_entries": [ { "user_id": 5, "user_email": "rene@breeze.pm", "user_name": Rene, "tracked": 120 } ] }
POST /projects/:project_id/cards.json
create a new card
Request
{ "name": "new task from API", "description": "no description", "duedate": "2024-02-22T16:00:00Z", "startdate": "2024-02-20T16:00:00Z", "planned_time": 120, "stage_id": 9, "swimlane_id": 1, "invitees": ["john@breeze.pm","jake@breeze.pm"], "tags": ["tag1","tag2"], "custom_fields": [ { "name": "Rating", "value": "***" } ] }
PUT /projects/:project_id/cards/:card_id.json
update a specific card
Request
{ "name": "new task from API", "description": "no description", "duedate": "2024-02-22T16:00:00Z", "startdate": "2024-02-20T16:00:00Z", "planned_time": 120, "stage_id": 9, "new_project_id": 19, "tags": ["tag1","tag2"], "custom_fields": [ { "name": "Rating", "value": "***" } ] }
GET /projects/:project_id/cards/:card_id.json
archive a specific card
Request
{ "deleted_at": "2022-05-06" }
DELETE /projects/:project_id/cards/:card_id.json
delete a specific card
POST /projects/:project_id/cards/:card_id/move.json
move a card
Request
{ "stage_id": 9, "prev_id": 9 }
POST /projects/:project_id/cards/:card_id/people.json
assign people to card
Request
{ "invitees": ["john@breeze.pm","jake@breeze.pm"] }
DELETE /projects/:project_id/cards/:card_id/people/:user_id.json
remove person from card
GET /projects/:project_id/stages.json
get all lists in the project
Response
[ { "id": 31, "name": "Todo", "position": "1", "created_at": "2022-12-12T10:41:28Z", }, { "id": 42, "name": "Doing", "position": "2", "created_at": "2022-12-13T10:41:28Z", } ]
POST /projects/:project_id/stages.json
create a new list for the project
{ "name": "todo list" }
PUT /projects/:project_id/stages/:stage_id.json
update specific stage for a project
{ "name": "new name text" }
DELETE /projects/:project_id/stages/:stage_id.json
delete list from project
PUT /projects/:project_id/stages/:stage_id/move.json
move list after previous list
{ "prev_id": 1285 }
Time entries are included in the card get responses, see Cards documentation.
GET /projects/:project_id/cards/:card_id/time_entry.json
get all the time entries for the task
Response
[ { "id": 31, "card_id": 23764, "desc": "description", "logged_date": 2022-12-21, "tracked": 120 "user_id": 2, "created_at": "2022-12-12T10:41:28Z", }, { "id": 32, "card_id": 23764, "desc": "description", "logged_date": 2022-12-22, "tracked": 120 "user_id": 2, "created_at": "2022-12-13T10:41:28Z", } ]
Time entries are also included in the card get responses, see Cards documentation.
POST /projects/:project_id/cards/:card_id/time_entry.json
create a new time entry for a card, time entry will be added to the current user
{ "tracked": 120 "logged_date": "2022-01-05" "desc": "Description here" }
PUT /projects/:project_id/cards/:card_id/time_entry/:timeentry_id.json
update a time entry for a card, time entry will be updated for the current user
{ "tracked": 60 "logged_date": "2022-01-05" "desc": "Description here" }
DELETE /projects/:project_id/cards/:card_id/time_entry/:timeentry_id.json
delete time entry from specific card and user
GET /projects/:project_id/swimlanes.json
get all swimlanes for a project
[ { "id": 3, "name": "swimlane name", "project_id": 23, "position": 5, "updated_at": "2022-03-01T09:07:43Z", "created_at": "2022-03-01T09:07:43Z" }, { "id": 4, "name": "swimlane name two", "project_id": 23, "position": 5, "updated_at": "2022-03-01T09:07:43Z", "created_at": "2022-03-01T09:07:43Z" } ]
POST /projects/:project_id/swimlanes.json
create a new swimlane for a project
{ "name": "swimlane name", "position": 2 }
PUT /projects/:project_id/swimlanes/:swimlane_id.json
update specific swimlane for a project
{ "name": "swimlane namespan", "position": 2 }
DELETE /projects/:project_id/swimlanes/:swimlane_id.json
delete a swimlane from project
GET /projects/:project_id/cards/:card_id/comments.json
get all comments for a card
[ { "card_id": 4160, "comment": "comment text", "created_at": "2022-03-01T09:07:43Z", "id": 466, "updated_at": "2022-03-01T09:07:43Z", "user_id": 5, "user": { "id": 5, "email": "john@breeze.pm", "name": "John Doe" "avatar": "https://avatarurl.com/avatar.jpg" } }, { "card_id": 4160, "comment": "second comment text", "created_at": "2022-02-01T08:07:13Z", "id": 467, "updated_at": "2022-02-01T08:07:13Z", "user_id": 5, "user": { "id": 5, "email": "john@breeze.pm", "name": "John Doe" "avatar": "https://avatarurl.com/avatar.jpg" } } ]
POST /projects/:project_id/cards/:card_id/comments.json
create a new comment for a card
{ "comment": "comment text" }
PUT /projects/:project_id/cards/:card_id/comments/:comment_id.json
update specific comments for a card
{ "comment": "comment text" }
DELETE /projects/:project_id/cards/:card_id/comments/:comment_id.json
delete comment from card
GET /projects/:project_id/cards/:card_id/todo_lists.json
get all todo lists for a card
[ { "card_id": 4160, "name": "Todo list 1", "created_at": "2022-03-01T09:07:43Z", "id": 369, "updated_at": "2022-03-01T09:07:43Z", "todos": [ { "card_id": 4160, "name": "Todo 1", "done": false, "created_at": "2022-03-01T09:07:43Z", "id": 369, "updated_at": "2022-03-01T09:07:43Z", }, { "card_id": 4160, "done": true, "name": "Todo 2", "created_at": "2022-02-01T08:07:13Z", "id": 370, "updated_at": "2022-02-01T08:07:13Z", } ] }, { "card_id": 4160, "name": "Todo list 2", "created_at": "2022-02-01T08:07:13Z", "id": 370, "updated_at": "2022-02-01T08:07:13Z", "todos": [] } ]
POST /projects/:project_id/cards/:card_id/todo_lists.json
create a new todo list for a card
{ "name": "todo list name" }
PUT /projects/:project_id/cards/:card_id/todo_lists/:todo_list_id.json
update specific todo list for a card
{ "name": "todo list name" }
DELETE /projects/:project_id/cards/:card_id/todo_lists/:todo_list_id.json
delete todo list from a card
GET /projects/:project_id/cards/:card_id/todo_lists/:todo_list_id/todos.json
get all todos for a todo list
[ { "card_id": 4160, "name": "Todo 1", "done": false, "created_at": "2022-03-01T09:07:43Z", "id": 369, "updated_at": "2022-03-01T09:07:43Z", }, { "card_id": 4160, "done": true, "name": "Todo 2", "created_at": "2022-02-01T08:07:13Z", "id": 370, "updated_at": "2022-02-01T08:07:13Z", } ]
POST /projects/:project_id/cards/:card_id/todo_lists/:todo_list_id/todos.json
create a new todo for a todo list
{ "name": "todo item text", "done": false }
PUT /projects/:project_id/cards/:card_id/todo_lists/:todo_list_id/todos/:todo_id.json
update specific todo for a todo list
{ "name": "todo item text", "done": true }
DELETE /projects/:project_id/cards/:card_id/todo_lists/:todo_list_id/todos/:todo_id.json
delete todo from todo list
All activity responses are paginated 50 items per page. To get the next page append ?page=XX
to the query.
GET /activities.json
get all activity entries
[ { "id": 4160, "created_at": "2022-03-01T09:07:43Z", "user": "Jake", "project_id": 1723, "card_id": 324785, "message": "logged <b>9h</b> of work for <a href="https://app.breeze.pm/projects/4186-name-the-project/cards/71399-asd-asd">Task name</a>", }, { "id": 1040, "created_at": "2022-03-01T02:07:43Z", "user": "John", "project_id": 123, "card_id": 16485, "message": "<b>tagged</b> <a href="https://app.breeze.pm/projects/4186-aaaaaname-the-project/cards/70327-asdasd">Task name</a> with <b> bugs</b>", } ]
GET /activities/:user_id.json
get activity entries
GET /projects/:project_id/activities.json
get all activity entries
GET /projects/:project_id/activities/:user_id.json
get activity entries
All responses are paginated 50 items per page. To get the next page append ?page=XX
to the query.
GET /notifications.json
get all unread notifications
[ { "id": 4160, "created_at": "2022-03-01T09:07:43Z", "project_id": 1723, "card_id": 324785, "comment_id": null, "marked": false, "description": "notifications from task description @Rene", "created_by": { "id": 5, "email": "john@breeze.pm", "name": "John Doe" } }, { "id": 2040, "created_at": "2022-03-01T02:07:43Z", "project_id": 123, "card_id": 16485, "comment_id": 236622, "marked": false, "description": "notification from a comment @Rene", "created_by": { "id": 5, "email": "john@breeze.pm", "name": "John Doe" } } ]
PUT /notifications/:id.json
mark notification read/unread
{ "marked": true }
All activity responses are paginated 50 items per page. To get the next page append ?page=XX
to the query.
POST /reports.json
generate time tracking report
To use relative time in the reports set the parameter start_date
to last_month,last_week, yesterday, today, this_week, this_month .
{ "report_type": "timetracking", "start_date": "2015-06-01", "end_date": "2015-07-01", "projects": [1,2,3], "users": [9,8,7], "stages": ["todo","done"], "tags": ["bugs","features"] }Response
[ { "id": 4160, "created_at": "2022-03-01T09:07:43Z", "logged_date": "2022-03-01", "notbillable": false, "tracked": 120, "user_id": "Jake", "project_id": 1723, "card_id": 324785, "desc": "backend developement", }, { "id": 1040, "created_at": "2022-03-01T02:07:43Z", "logged_date": "2022-03-01", "notbillable": false, "tracked": 60, "user_id": 2, "project_id": 123, "card_id": 16485, "desc": "testing", } ]
GET /me.json
shows info about yourself, includes also the API key
{ "id": 2, "name": "Robert, "avatar": "https://s3.amazonaws.com/x22h82gcqu/a7e2c39b721235f17cb4a0e2a90b/CORQ.jpg", "authentication_token": "28734uhjasdb8223", "created_at": "2022-03-01T09:07:43Z", "timezone": "UTC" }, "teams": [ { "team_id": 129, "owner_email": "rene@breeze.pm" }, { "card_id": 234, "owner_email": "jake@breeze.pm" } ]
GET /users.json
lists all your team users
[ { "id": 2, "name": "Robert, "avatar":"https://s3.amazonaws.com/x22h82gcqu/a7e2c39b7b4a0e06cb52a90b/CORQ.jpg" } , { "id": 3, "name": "Jake, "avatar":"https://s3.amazonaws.com/x22h82gcqu/a7e2c39b7212350b/avatar.jpg" } ]