List channels
curl --request GET \
--url https://firespark.cloud/api/integrations/v1/channels \
--header 'Authorization: Bearer <token>'import requests
url = "https://firespark.cloud/api/integrations/v1/channels"
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/integrations/v1/channels', 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/integrations/v1/channels",
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/integrations/v1/channels"
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/integrations/v1/channels")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://firespark.cloud/api/integrations/v1/channels")
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": "app",
"uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"organization_id": "f1e2d3c4-b5a6-7890-fedc-ba0987654321",
"merchant_id": "c1d2e3f4-a5b6-7890-cdef-123456789abc",
"name": "Mobile app",
"type": "APP",
"status": "ACTIVE",
"cms_template_id": "d4e5f6a7-b8c9-0123-def4-567890abcdef",
"cms": {
"id": "d4e5f6a7-b8c9-0123-def4-567890abcdef",
"name": "App landing page",
"entity": "CHANNELS",
"status": "ACTIVE",
"fields": [
{
"name": "hero_title",
"type": "TEXT",
"label": { "en_us": "Hero title" },
"required": true,
"value": "Order from our app"
}
]
}
},
{
"id": "uber-eats",
"uid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"organization_id": "f1e2d3c4-b5a6-7890-fedc-ba0987654321",
"merchant_id": "c1d2e3f4-a5b6-7890-cdef-123456789abc",
"name": "Uber Eats",
"type": "AGGREGATOR",
"status": "ACTIVE",
"cms_template_id": null,
"cms": null
}
]
}
Channels
List channels
Read sales channel definitions for POS and RMS mapping.
GET
/
channels
List channels
curl --request GET \
--url https://firespark.cloud/api/integrations/v1/channels \
--header 'Authorization: Bearer <token>'import requests
url = "https://firespark.cloud/api/integrations/v1/channels"
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/integrations/v1/channels', 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/integrations/v1/channels",
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/integrations/v1/channels"
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/integrations/v1/channels")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://firespark.cloud/api/integrations/v1/channels")
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": "app",
"uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"organization_id": "f1e2d3c4-b5a6-7890-fedc-ba0987654321",
"merchant_id": "c1d2e3f4-a5b6-7890-cdef-123456789abc",
"name": "Mobile app",
"type": "APP",
"status": "ACTIVE",
"cms_template_id": "d4e5f6a7-b8c9-0123-def4-567890abcdef",
"cms": {
"id": "d4e5f6a7-b8c9-0123-def4-567890abcdef",
"name": "App landing page",
"entity": "CHANNELS",
"status": "ACTIVE",
"fields": [
{
"name": "hero_title",
"type": "TEXT",
"label": { "en_us": "Hero title" },
"required": true,
"value": "Order from our app"
}
]
}
},
{
"id": "uber-eats",
"uid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"organization_id": "f1e2d3c4-b5a6-7890-fedc-ba0987654321",
"merchant_id": "c1d2e3f4-a5b6-7890-cdef-123456789abc",
"name": "Uber Eats",
"type": "AGGREGATOR",
"status": "ACTIVE",
"cms_template_id": null,
"cms": null
}
]
}
Returns all channels configured for the authenticated merchant. Use this endpoint to map Fire spark channels to ordering surfaces in your POS or RMS before syncing menus and routing orders.
Requires an access token with the
channels:read scope. See
Token to obtain a token.Request
curl "https://firespark.cloud/api/integrations/v1/channels" \
-H "Authorization: Bearer ACCESS_TOKEN"
Response
The response wraps an array of channel objects indata. Each channel represents a sales surface — owned channels such as app or web, or aggregators such as Uber Eats.
{
"data": [
{
"id": "app",
"uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"organization_id": "f1e2d3c4-b5a6-7890-fedc-ba0987654321",
"merchant_id": "c1d2e3f4-a5b6-7890-cdef-123456789abc",
"name": "Mobile app",
"type": "APP",
"status": "ACTIVE",
"cms_template_id": "d4e5f6a7-b8c9-0123-def4-567890abcdef",
"cms": {
"id": "d4e5f6a7-b8c9-0123-def4-567890abcdef",
"name": "App landing page",
"entity": "CHANNELS",
"status": "ACTIVE",
"fields": [
{
"name": "hero_title",
"type": "TEXT",
"label": { "en_us": "Hero title" },
"required": true,
"value": "Order from our app"
}
]
}
},
{
"id": "uber-eats",
"uid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"organization_id": "f1e2d3c4-b5a6-7890-fedc-ba0987654321",
"merchant_id": "c1d2e3f4-a5b6-7890-cdef-123456789abc",
"name": "Uber Eats",
"type": "AGGREGATOR",
"status": "ACTIVE",
"cms_template_id": null,
"cms": null
}
]
}
Channel object
| Field | Type | Description |
|---|---|---|
id | string | External channel identifier. Alphanumeric characters, _, and - only. 1–64 characters. Unique per merchant. |
uid | string (UUID) | Fire spark internal identifier. |
organization_id | string (UUID) | Organization that owns the merchant. |
merchant_id | string (UUID) | Merchant the channel belongs to. |
name | string | Display name. 1–100 characters. |
type | string | Channel surface. One of APP, WEB, KIOSK, POS, CALL_CENTER, or AGGREGATOR. Set at creation; cannot change. |
status | string | ACTIVE or INACTIVE. |
cms_template_id | string (UUID) | CMS template linked to this channel. null when no template is assigned. |
cms | object | Read-only. null when cms_template_id is null. When set, the resolved CMS template for this channel. |
cms
cms
Present only when
Each field in
cms_template_id is not null. Contains the resolved CMS template assigned to the channel.| Field | Required | Type | Description |
|---|---|---|---|
id | Yes | string (UUID) | Template identifier. Matches cms_template_id. |
name | Yes | string | Template name. 1–100 characters. |
entity | Yes | string | Always CHANNELS for channel responses. |
status | Yes | string | ACTIVE or INACTIVE. |
fields | Yes | array | Template fields with their current stored values. |
fields:| Field | Required | Type | Description |
|---|---|---|---|
name | Yes | string | Field key. |
type | Yes | string | TEXT, SELECT, IMAGE, or LIST. |
label | No | object | Optional localized label keyed by locale. |
required | No | boolean | Whether the field is required. |
placeholder | No | string | Optional placeholder text. |
options | No | array | For SELECT fields — objects with label and value. |
altText | No | string | For IMAGE fields — alternative text. |
src | No | string | For IMAGE fields — image URL. |
href | No | string | For IMAGE fields — optional link URL. |
value | No | varies | Current stored value for this channel. Omitted when empty. |
Mapping channels to your POS
Match theid field to the channel identifier in your POS or RMS. Fire spark uses this external ID when composing menus and routing orders per surface.
Channel
uid values are stable Fire spark identifiers. Use id for
cross-system mapping and uid when referencing channels in other Fire spark
API calls.Error responses
| Status | Description |
|---|---|
401 | Missing or invalid access token. |
403 | Token does not include the channels:read scope. |
⌘I