curl --request GET \
--url https://api.meetcampfire.com/coa/api/v1/invoice/report/{id}/dataimport requests
url = "https://api.meetcampfire.com/coa/api/v1/invoice/report/{id}/data"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.meetcampfire.com/coa/api/v1/invoice/report/{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/coa/api/v1/invoice/report/{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/coa/api/v1/invoice/report/{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/coa/api/v1/invoice/report/{id}/data")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meetcampfire.com/coa/api/v1/invoice/report/{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": 5,
"results": [
{
"client_id": 42,
"client_name": "Acme Corp",
"amount": 50000,
"amount_paid": 30000,
"Widget A::::amount": 25000,
"Widget B::::amount": 25000,
"filter_params": {
"invoice__client_id": 42
},
"group_id": 123456,
"id": 123456
}
],
"engine_used": "postgres",
"pivot_result_fields": [
"Widget A::::amount",
"Widget B::::amount"
],
"pivot_value_mappings": {
"product_id": {
"Widget A": 1,
"Widget B": 2
}
}
}Execute invoice report
Execute saved invoice 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/coa/api/v1/invoice/report/{id}/dataimport requests
url = "https://api.meetcampfire.com/coa/api/v1/invoice/report/{id}/data"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.meetcampfire.com/coa/api/v1/invoice/report/{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/coa/api/v1/invoice/report/{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/coa/api/v1/invoice/report/{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/coa/api/v1/invoice/report/{id}/data")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meetcampfire.com/coa/api/v1/invoice/report/{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": 5,
"results": [
{
"client_id": 42,
"client_name": "Acme Corp",
"amount": 50000,
"amount_paid": 30000,
"Widget A::::amount": 25000,
"Widget B::::amount": 25000,
"filter_params": {
"invoice__client_id": 42
},
"group_id": 123456,
"id": 123456
}
],
"engine_used": "postgres",
"pivot_result_fields": [
"Widget A::::amount",
"Widget B::::amount"
],
"pivot_value_mappings": {
"product_id": {
"Widget A": 1,
"Widget B": 2
}
}
}Path Parameters
Query Parameters
Aggregates: sum:amount, sum:amount_paid, sum:amount_due, etc.
Filter by client ID(s)
Filter by contract ID(s)
Filter by currency code
Filter by department ID(s)
End date (YYYY-MM-DD)
Entity ID(s), comma-separated
Row dimensions: client_id, invoice_id, invoice_date_month, product_id, etc.
Drilldown parent keys
Include grand totals row
Page size (max 10000)
paginated | full | csv
Pagination offset
Filter by status: draft,open,sent,partial,paid,uncollectible
Column dimensions: product_id, client_id, etc.
Filter by product ID(s)
Enable pivot columns
Start date (YYYY-MM-DD)
Response
Output schema for invoice report responses.
Total rows before pagination
Next page URL (null for datatable pagination)
Previous page URL
Paginated result rows
Show child attributes
Show child attributes
Execution engine: 'postgres'
postgres- postgres
postgres Sorted list of pivot column names
Grand totals across all rows
Show child attributes
Show child attributes
Mapping of pivot field -> {display_name: id} for drilldown
Show child attributes
Show child attributes