curl --request GET \
--url https://api.meetcampfire.com/ca/api/custom-reports/{id}/dataimport requests
url = "https://api.meetcampfire.com/ca/api/custom-reports/{id}/data"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.meetcampfire.com/ca/api/custom-reports/{id}/data', 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://api.meetcampfire.com/ca/api/custom-reports/{id}/data",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://api.meetcampfire.com/ca/api/custom-reports/{id}/data"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.meetcampfire.com/ca/api/custom-reports/{id}/data")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meetcampfire.com/ca/api/custom-reports/{id}/data")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"count": 123,
"next": "<string>",
"previous": "<string>",
"results": [
{}
],
"engine_used": "postgres",
"totals_row": {},
"pivot_result_fields": [
"<string>"
],
"pivot_value_mappings": {}
}Execute Custom Report
Execute custom report and return DataTable-compatible response.
:param request: HTTP request with query params :param pk: Custom report ID :return: Paginated, sparse-formatted response
curl --request GET \
--url https://api.meetcampfire.com/ca/api/custom-reports/{id}/dataimport requests
url = "https://api.meetcampfire.com/ca/api/custom-reports/{id}/data"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.meetcampfire.com/ca/api/custom-reports/{id}/data', 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://api.meetcampfire.com/ca/api/custom-reports/{id}/data",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://api.meetcampfire.com/ca/api/custom-reports/{id}/data"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.meetcampfire.com/ca/api/custom-reports/{id}/data")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meetcampfire.com/ca/api/custom-reports/{id}/data")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"count": 123,
"next": "<string>",
"previous": "<string>",
"results": [
{}
],
"engine_used": "postgres",
"totals_row": {},
"pivot_result_fields": [
"<string>"
],
"pivot_value_mappings": {}
}Path Parameters
Query Parameters
Account ID(s), comma-separated
Account subtype(s)
Account type(s), comma-separated (e.g. REVENUE,EXPENSE)
Override saved aggregates: comma-separated fn:field pairs (e.g. sum:net_debit,sum:net_credit)
Bank account ID(s), comma-separated
Currency code(s), comma-separated
Department ID(s), comma-separated
End date (YYYY-MM-DD)
Entity ID(s), comma-separated
Override saved row dimensions, comma-separated (e.g. vendor_id,account_id)
Drilldown parent keys
Include grand totals row
Journal type(s), comma-separated
Page size (max 10000)
paginated | full | csv. full returns unpaginated JSON for grouped reports; reports without groupings/aggregations stay paginated in JSON — use csv, which streams the complete report as a CSV attachment, for a full flat export.
Only rows without a department
Only rows without tags
Only rows without a vendor
Pagination offset
Override saved column dimensions, comma-separated (e.g. date_month)
Enable pivot columns
Include zero-balance rows (defaults to the saved report's setting)
Sort by column id; prefix with '-' for descending
Start date (YYYY-MM-DD)
Tag ID(s), comma-separated
Tag group ID(s), comma-separated
Vendor ID(s), comma-separated
Response
Output schema for custom report data responses.
Total rows before pagination
Next page URL (null for datatable pagination)
Previous page URL
Result rows: group field values plus one key per aggregate/pivot column (sparse — zero pivot values omitted)
Show child attributes
Show child attributes
Execution engine used (absent on flat responses from reports without groupings/aggregations)
postgres- postgrespandas_pivot- pandas_pivot
postgres, pandas_pivot Grand totals across all rows (include_totals=true)
Show child attributes
Show child attributes
Sorted list of pivot column names
Mapping of pivot field -> {display_name: id} for drilldown
Show child attributes
Show child attributes