Get category
curl --request GET \
--url https://firespark.cloud/api/storefront/v1/menus/categories/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://firespark.cloud/api/storefront/v1/menus/categories/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://firespark.cloud/api/storefront/v1/menus/categories/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://firespark.cloud/api/storefront/v1/menus/categories/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://firespark.cloud/api/storefront/v1/menus/categories/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://firespark.cloud/api/storefront/v1/menus/categories/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://firespark.cloud/api/storefront/v1/menus/categories/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"id": "burgers",
"uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"brand_id": "0001",
"organization_id": "11111111-1111-1111-1111-111111111111",
"merchant_id": "22222222-2222-2222-2222-222222222222",
"name": "Burgers",
"description": "Hand-crafted burgers",
"channels": {
"APP": {
"id": "app",
"uid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"name": "Mobile app",
"stores": {
"downtown": {
"id": "downtown",
"uid": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"name": "Downtown",
"fulfillment": {
"DELIVERY": {
"uid": "d4e5f6a7-b8c9-0123-def4-567890abcdef",
"id": "delivery",
"type": "DELIVERY",
"name": "Delivery",
"availability": {
"status": "ACTIVE",
"schedules": [
{ "day_of_week": "monday", "periods": [{ "start_time": "11:00:00", "end_time": "22:00:00" }] }
],
"inactive_until": null
},
"items": [{ "type": "PRODUCT", "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" }]
}
}
}
}
}
},
"cms_template_id": null,
"cms": null,
"status": "ACTIVE"
}
}
Menus
Get category
Load a category from a composed menu with per-context availability.
GET
/
menus
/
categories
/
{id}
Get category
curl --request GET \
--url https://firespark.cloud/api/storefront/v1/menus/categories/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://firespark.cloud/api/storefront/v1/menus/categories/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://firespark.cloud/api/storefront/v1/menus/categories/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://firespark.cloud/api/storefront/v1/menus/categories/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://firespark.cloud/api/storefront/v1/menus/categories/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://firespark.cloud/api/storefront/v1/menus/categories/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://firespark.cloud/api/storefront/v1/menus/categories/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"id": "burgers",
"uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"brand_id": "0001",
"organization_id": "11111111-1111-1111-1111-111111111111",
"merchant_id": "22222222-2222-2222-2222-222222222222",
"name": "Burgers",
"description": "Hand-crafted burgers",
"channels": {
"APP": {
"id": "app",
"uid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"name": "Mobile app",
"stores": {
"downtown": {
"id": "downtown",
"uid": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"name": "Downtown",
"fulfillment": {
"DELIVERY": {
"uid": "d4e5f6a7-b8c9-0123-def4-567890abcdef",
"id": "delivery",
"type": "DELIVERY",
"name": "Delivery",
"availability": {
"status": "ACTIVE",
"schedules": [
{ "day_of_week": "monday", "periods": [{ "start_time": "11:00:00", "end_time": "22:00:00" }] }
],
"inactive_until": null
},
"items": [{ "type": "PRODUCT", "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" }]
}
}
}
}
}
},
"cms_template_id": null,
"cms": null,
"status": "ACTIVE"
}
}
Returns a single category from the active menu, including how it appears across channels, stores, and fulfillment types. Use this endpoint to render category headers, descriptions, and availability badges in your ordering UI.
Each schedule entry contains
Requires a Fire spark access token obtained through token
exchange.
Path parameters
| Parameter | Description |
|---|---|
id | External category identifier. Alphanumeric characters, _, and - only. 1–64 characters. |
Query parameters
| Parameter | Required | Description |
|---|---|---|
fulfillment_id | No | External fulfillment identifier. |
store_id | No | External store identifier. |
channel_id | No | External channel identifier. |
brand_id | No | External brand identifier. |
Request
curl "https://firespark.cloud/api/storefront/v1/menus/categories/burgers?fulfillment_id=delivery&store_id=downtown&channel_id=app&brand_id=0001" \
-H "Authorization: Bearer ACCESS_TOKEN"
Response
{
"data": {
"id": "burgers",
"uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"brand_id": "0001",
"organization_id": "11111111-1111-1111-1111-111111111111",
"merchant_id": "22222222-2222-2222-2222-222222222222",
"name": "Burgers",
"description": "Hand-crafted burgers",
"channels": {
"APP": {
"id": "app",
"uid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"name": "Mobile app",
"stores": {
"downtown": {
"id": "downtown",
"uid": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"name": "Downtown",
"fulfillment": {
"DELIVERY": {
"uid": "d4e5f6a7-b8c9-0123-def4-567890abcdef",
"id": "delivery",
"type": "DELIVERY",
"name": "Delivery",
"availability": {
"status": "ACTIVE",
"schedules": [
{ "day_of_week": "monday", "periods": [{ "start_time": "11:00:00", "end_time": "22:00:00" }] }
],
"inactive_until": null
},
"items": [{ "type": "PRODUCT", "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" }]
}
}
}
}
}
},
"cms_template_id": null,
"cms": null,
"status": "ACTIVE"
}
}
Category object
| Field | Type | Description |
|---|---|---|
id | string | External category identifier. |
uid | string (UUID) | Fire spark internal identifier. |
brand_id | string | null | External brand identifier. null when the resource is not brand-scoped. |
organization_id | string (UUID) | Fire spark organization identifier. |
merchant_id | string (UUID) | Fire spark merchant identifier. |
name | string | Display name. 1–100 characters. |
description | string | Optional category description. Up to 500 characters. null when omitted. |
channels | object | Per-channel visibility and availability keyed by channel code. |
cms_template_id | string (UUID) | CMS template linked to this category. null when no template is assigned. |
cms | object | Read-only. Resolved CMS template when assigned. |
status | string | ACTIVE or INACTIVE. |
channels
channels
Map of channel codes. Each entry contains:
Each store entry:
Each fulfillment entry:
Each entry in
| Field | Required | Type | Description |
|---|---|---|---|
id | Yes | string | External channel identifier. |
uid | Yes | string (UUID) | Fire spark channel identifier. |
name | Yes | string | Display name. |
stores | Yes | object | Map of store codes to store configuration. |
| Field | Required | Type | Description |
|---|---|---|---|
id | Yes | string | External store identifier. |
uid | Yes | string (UUID) | Fire spark store identifier. |
name | Yes | string | Display name. |
fulfillment | Yes | object | Map of fulfillment type codes to fulfillment configuration. |
| Field | Required | Type | Description |
|---|---|---|---|
uid | Yes | string (UUID) | Fire spark fulfillment identifier. |
id | Yes | string | External fulfillment identifier. |
type | Yes | string | Fulfillment type code (for example DELIVERY). |
name | Yes | string | Display name. |
availability | Yes | object | Category availability for this context. See availability. |
items | No | array | Ordered category entries. Defaults to []. |
items:| Field | Required | Type | Description |
|---|---|---|---|
type | Yes | string | CATEGORY or PRODUCT. |
id | Yes | string | External category or product identifier. |
availability
availability
| Field | Required | Type | Description |
|---|---|---|---|
status | Yes | string | ACTIVE, INACTIVE, or HIDDEN. |
schedules | No | array | null | Schedule entries with day_of_week and periods. null when there is no schedule restriction. |
inactive_until | No | string | Optional ISO 8601 datetime when a temporary inactive state ends. |
day_of_week (monday through sunday) and a periods array. Each period has optional closed (default false), start_time, end_time, and optional start_date / end_date bounds.Error responses
| Status | Description |
|---|---|
401 | Missing or invalid access token. |
403 | Token does not have access to this category. |
404 | Category not found in the active menu for this context. |
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
External category identifier.
Required string length:
1 - 64Pattern:
^[a-zA-Z0-9_-]+$Query Parameters
External fulfillment identifier.
Required string length:
1 - 64Pattern:
^[a-zA-Z0-9_-]+$External store identifier.
Required string length:
1 - 64Pattern:
^[a-zA-Z0-9_-]+$External channel identifier.
Required string length:
1 - 64Pattern:
^[a-zA-Z0-9_-]+$External brand identifier.
Required string length:
1 - 64Pattern:
^[a-zA-Z0-9_-]+$Response
200 - application/json
Ok
Show child attributes
Show child attributes
⌘I