Categories

Updated 11 Oct, 2026 08:40 PM in API

Categories sort your discussions by topic, such as Problems, Questions and Billing. Every discussion is in one category, and that's where you create discussions through the API. Categories are set up in Tender; the API reads them.

Listing categories

GET /yoursite/categories
curl -H "Accept: application/vnd.tender-v1+json" \
     -H "Authorization: Bearer $TENDER_TOKEN" \
     https://api.tenderapp.com/yoursite/categories
{
  "offset": 0,
  "total": 5,
  "per_page": 30,
  "categories": [
    {
      "name": "Problems",
      "permalink": "problems",
      "public": true,
      "visible": true,
      "open_discussions_count": 3,
      "href": "https://api.tenderapp.com/yoursite/categories/8",
      "discussions_href": "https://api.tenderapp.com/yoursite/categories/8/discussions{/state}{?page,user_email}",
      "html_href": "https://yoursite.tenderapp.com/discussions/problems"
    },
    {
      "name": "Billing",
      "permalink": "billing",
      "public": false,
      "visible": true,
      "open_discussions_count": 1,
      "href": "https://api.tenderapp.com/yoursite/categories/11",
      "discussions_href": "https://api.tenderapp.com/yoursite/categories/11/discussions{/state}{?page,user_email}",
      "html_href": "https://yoursite.tenderapp.com/discussions/billing"
    }
  ]
}

You get every category, the private and hidden ones included, with all the category fields (trimmed here). More than 30 come in pages: ?page=2.

A single category

GET /yoursite/categories/{category}

{category} is the category's id or its permalink:

curl -H "Accept: application/vnd.tender-v1+json" \
     -H "Authorization: Bearer $TENDER_TOKEN" \
     https://api.tenderapp.com/yoursite/categories/questions
{
  "name": "Questions",
  "permalink": "questions",
  "summary": "How do I…? Ask away.",
  "formatted_summary": "<div><p>How do I&#8230;? Ask away.</p></div>",
  "public": true,
  "visible": true,
  "beta": false,
  "important": false,
  "force_readonly": false,
  "code": "6df2b39a5",
  "accept_email": null,
  "heartbeat_on": "2026-10-09T06:47:09Z",
  "autoresponder_id": null,
  "mail_template_id": null,
  "tracker_id": null,
  "redirection_id": null,
  "created_at": "2026-10-09T06:47:09Z",
  "updated_at": "2026-10-09T06:47:24Z",
  "last_updated_at": "2026-10-09T05:17:13Z",
  "last_discussion_id": 18,
  "last_discussion_permalink": "8-where-did-the-archive-button-go",
  "last_comment_id": 40,
  "last_user_id": 18,
  "last_user_name": null,
  "last_user_email": null,
  "open_discussions_count": 2,
  "assigned_discussions_count": 0,
  "resolved_discussions_count": 2,
  "href": "https://api.tenderapp.com/yoursite/categories/9",
  "discussions_href": "https://api.tenderapp.com/yoursite/categories/9/discussions{/state}{?page,user_email}",
  "html_href": "https://yoursite.tenderapp.com/discussions/questions"
}

An unknown category gets 404.

Category fields

Field
name The category's name.
permalink The name in the category's address: questions in yoursite.tenderapp.com/discussions/questions.
summary The description customers see under the name.
formatted_summary The summary as HTML.
public true for a public category. In a private one (false) every discussion is private: only the customer who started it and your staff can read it.
visible false hides the category from customers: they can't see it or start discussions in it.
beta true: only customers marked as beta users see it.
important true: only customers marked as important see it.
force_readonly true: customers can't start discussions in it.
code The code in the category's own email address; mail sent there becomes a discussion in this category.
accept_email The support addresses that forward mail into this category, or null.
heartbeat_on When Tender next checks that mail forwarded from accept_email is still arriving.
autoresponder_id The autoresponder set for this category, or null.
mail_template_id The mail template set for this category, or null.
tracker_id The issue tracker offered first when linking a ticket to one of its discussions, or null.
redirection_id Set when this entry only points at another category, after a permalink change; otherwise null.
created_at, updated_at When the category was made and last changed.
last_updated_at When its latest comment was posted, or null if it has none.
last_discussion_id The id of the discussion with that comment.
last_discussion_permalink That discussion's number and permalink.
last_comment_id, last_user_id The latest comment and its author.
last_user_name, last_user_email The latest comment's author, when they have no account; otherwise null.
open_discussions_count Its open discussions, without a ticket.
assigned_discussions_count Its open discussions with a ticket linked.
resolved_discussions_count Its resolved discussions.
href This category. The last part is its id.
discussions_href Its discussions.
html_href The category in Tender.

Discussions in a category

GET /yoursite/categories/{category}/discussions
GET /yoursite/categories/{category}/discussions/{state}

The category's discussions, with the same states and parameters as listing discussions:

curl -H "Accept: application/vnd.tender-v1+json" \
     -H "Authorization: Bearer $TENDER_TOKEN" \
     https://api.tenderapp.com/yoursite/categories/questions/discussions/resolved
{
  "offset": 0,
  "total": 2,
  "per_page": 30,
  "discussions": [
    {
      "title": "How do I invite a contractor without giving access to everything?",
      "number": 4,
      "state": "resolved",
      "public": true,
      "author_name": "Sam Whitfield",
      "href": "https://api.tenderapp.com/yoursite/discussions/12",
      "html_href": "https://yoursite.tenderapp.com/discussions/questions/4"
    },
    {
      "title": "Can I export a project timeline to PDF?",
      "number": 2,
      "state": "resolved",
      "public": true,
      "author_name": "Aiko Tanaka",
      "href": "https://api.tenderapp.com/yoursite/discussions/8",
      "html_href": "https://yoursite.tenderapp.com/discussions/questions/2"
    }
  ]
}

One discussion by its number in the category:

GET /yoursite/categories/{category}/discussions/{number}
curl -H "Accept: application/vnd.tender-v1+json" \
     -H "Authorization: Bearer $TENDER_TOKEN" \
     https://api.tenderapp.com/yoursite/categories/questions/discussions/4

The answer is the discussion with its comments, as in a single discussion.

To start a discussion in a category, see Creating a discussion. To move one, use its change_category action.

More from the knowledge base