Backlog API
Customers
Customers of the workspace and the requests they made.
Base URLhttps://backlog.polder.work
A customer is a client of the workspace. A customer request is what that client asked for, in their own words, filed against the issue that answers it. Filing a request also links the customer to the issue.
Every member can read customers. Creating, changing and deleting customers needs a workspace owner or admin, the same bar as the settings screen.
The customer object
{
"id": 9,
"name": "De Vries Bouw",
"slug": "de-vries-bouw",
"color": "#f59e0b",
"phone": "+31 20 123 4567",
"email": "info@devriesbouw.example",
"website": "https://devriesbouw.example",
"sla_policy_id": null,
"created_at": "2026-05-04T10:00:00+00:00"
}
phone, email and website are left out entirely (not null) for guests. The customer's ingest token is never
returned.
List customers
/api/v1/workspaces/{workspace}/customersCustomers ordered by name. Paged with page and per_page (50 by default, at most 200).
curl https://backlog.polder.work/api/v1/workspaces/7/customers \
-H "Authorization: Bearer $POLDER_TOKEN"
Create a customer
/api/v1/workspaces/{workspace}/customersCreates a customer and answers 201. 403 when you are not an owner or admin.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | yes | Up to 255 characters. The slug is made from it. |
color |
string or null | no | Up to 20 characters. |
phone |
string or null | no | Up to 50 characters. |
email |
string or null | no | A valid address, up to 255 characters. |
website |
string or null | no | Up to 255 characters. https:// is added when you leave out the scheme; only http and https are accepted. |
sla_policy_id |
integer or null | no | An SLA policy of this workspace. |
Blank phone, email and website are stored as null.
curl https://backlog.polder.work/api/v1/workspaces/7/customers \
-H "Authorization: Bearer $POLDER_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "De Vries Bouw", "website": "devriesbouw.example"}'
Get a customer
/api/v1/customers/{customer}One customer. 403 when it is in a workspace you are not a member of.
Change a customer
/api/v1/customers/{customer}Changes the fields you send, with the rules of Create a customer except that name is optional.
Answers 200 with the customer. Owner or admin only.
Delete a customer
/api/v1/customers/{customer}Deletes the customer. Answers 204. Owner or admin only.
The customer request object
{
"id": 140,
"customer_id": 9,
"issue_id": 2210,
"project_id": null,
"body": "We cannot export the invoice list since Monday.",
"requester_name": "Jan de Vries",
"source": "api",
"created_at": "2026-10-20T13:05:00+00:00"
}
project_id is only set for a request that is filed on a project instead of an issue; it is null for requests made
through this API.
List the requests of a customer
/api/v1/customers/{customer}/requestsRequests of a customer, newest first. Paged with page and per_page.
File a customer request
/api/v1/issues/{issue}/customer-requestsFiles a request against an issue and links the customer to that issue (if it was not linked yet). You need to be able
to change the issue; otherwise 403. Answers 201.
| Field | Type | Required | Description |
|---|---|---|---|
customer_id |
integer | yes | A customer of the issue's workspace. |
body |
string | yes | What the customer asked, as plain text. Up to 20000 characters. |
source |
string or null | no | Where it came from, up to 40 characters. Defaults to api. |
requester_name |
string or null | no | Who at the customer asked, up to 255 characters. |
curl https://backlog.polder.work/api/v1/issues/2210/customer-requests \
-H "Authorization: Bearer $POLDER_TOKEN" \
-H "Content-Type: application/json" \
-d '{"customer_id": 9, "body": "We cannot export the invoice list since Monday.", "requester_name": "Jan de Vries"}'
Tip: for something nobody has looked at yet, use the triage ingest instead of this endpoint.