# Get all categories via API including subcategories

**URL:** https://meta.discourse.org/t/get-all-categories-via-api-including-subcategories/154683
**Category:** Development
**Tags:** rest-api
**Created:** [June 12, 2020, 5:40pm UTC](https://meta.discourse.org/t/get-all-categories-via-api-including-subcategories/154683 "2020-06-12T17:40:04Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![gar1t](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gar1t/32/380142_2.png) [@gar1t](https://meta.discourse.org/u/gar1t)
#### Post date: [June 12, 2020, 5:40pm UTC](https://meta.discourse.org/t/get-all-categories-via-api-including-subcategories/154683/1 "2020-06-12T17:40:04Z")

</div>

The `/categories.json` API call returns only top-level categories, at least on my server. I can read subcategories using `/c/<id>.json` but I don’t know how to discover those IDs.

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [June 12, 2020, 5:48pm UTC](https://meta.discourse.org/t/get-all-categories-via-api-including-subcategories/154683/2 "2020-06-12T17:48:20Z")

</div>

To get all categories and subcategories from the API, you need to make a request to `/site.json`. If you don’t mind looking at PHP/WordPress code, there’s an example API request to get all categories here: [wp-discourse/lib/plugin-utilities.php at main · discourse/wp-discourse · GitHub](https://github.com/discourse/wp-discourse/blob/master/lib/plugin-utilities.php#L104).

---

<div class="post-metadata">

### Author: ![gar1t](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gar1t/32/380142_2.png) [@gar1t](https://meta.discourse.org/u/gar1t)
#### Post date: [June 12, 2020, 5:53pm UTC](https://meta.discourse.org/t/get-all-categories-via-api-including-subcategories/154683/3 "2020-06-12T17:53:50Z")

</div>

Terrific, thank you!

I notice that the category record returned doesn’t have a parent category. If it did, a flattened list from `/catgories.json` of all categories would be I think a less-surprising result, as opposed to only the root level.

---

<div class="post-metadata">

### Author: ![gar1t](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gar1t/32/380142_2.png) [@gar1t](https://meta.discourse.org/u/gar1t)
#### Post date: [June 12, 2020, 5:58pm UTC](https://meta.discourse.org/t/get-all-categories-via-api-including-subcategories/154683/4 "2020-06-12T17:58:03Z")

</div>

I see that subs have `parent_category_id` from `sites.json`. I wonder why then `categories.json` is only root level.

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [September 29, 2023, 5:05am UTC](https://meta.discourse.org/t/get-all-categories-via-api-including-subcategories/154683/5 "2023-09-29T05:05:07Z")

</div>

> [@simon](#):
>
> To get all categories and subcategories from the API, you need to make a request to `/site.json`.

Note, you can [now](https://meta.discourse.org/t/categories-and-latest-json-and-subcategory-ids/260220/2) get all categories and sub-categories from `categories.json` with  
`/categories.json?include_subcategories=true`
