List expenses
curl --request GET \
--url https://api.sellfern.com/expenses \
--header 'x-api-key: <api-key>'import requests
url = "https://api.sellfern.com/expenses"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.sellfern.com/expenses', 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.sellfern.com/expenses",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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.sellfern.com/expenses"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
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.sellfern.com/expenses")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sellfern.com/expenses")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": [
{
"id": 42,
"store_id": "<string>",
"store_name": "<string>",
"category": "Payroll",
"amount": 123,
"original_amount": 123,
"original_currency": "USD",
"date": "2023-12-25",
"description": "<string>",
"base_amount": 123,
"bhxh_amount": 123,
"bhxh_rate": 123,
"bhxh_type": "<string>",
"employee_name": "<string>",
"created_at": "2023-11-07T05:31:56Z"
}
],
"meta": {
"request_id": "<string>",
"pagination": {
"page": 1,
"page_size": 50,
"total": 125,
"total_pages": 3
}
}
}{
"success": false,
"error": {
"code": "unauthorized",
"message": "Missing or invalid API key."
},
"meta": {
"request_id": "<string>"
}
}{
"success": false,
"error": {
"code": "missing_scope",
"message": "Missing required scope."
},
"meta": {
"request_id": "<string>"
}
}{
"success": false,
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded."
},
"meta": {
"request_id": "<string>"
}
}Expenses
List expenses
Lists operating and payroll expenses for the authenticated organization. Requires expenses:read.
GET
/
expenses
List expenses
curl --request GET \
--url https://api.sellfern.com/expenses \
--header 'x-api-key: <api-key>'import requests
url = "https://api.sellfern.com/expenses"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.sellfern.com/expenses', 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.sellfern.com/expenses",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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.sellfern.com/expenses"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
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.sellfern.com/expenses")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sellfern.com/expenses")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": [
{
"id": 42,
"store_id": "<string>",
"store_name": "<string>",
"category": "Payroll",
"amount": 123,
"original_amount": 123,
"original_currency": "USD",
"date": "2023-12-25",
"description": "<string>",
"base_amount": 123,
"bhxh_amount": 123,
"bhxh_rate": 123,
"bhxh_type": "<string>",
"employee_name": "<string>",
"created_at": "2023-11-07T05:31:56Z"
}
],
"meta": {
"request_id": "<string>",
"pagination": {
"page": 1,
"page_size": 50,
"total": 125,
"total_pages": 3
}
}
}{
"success": false,
"error": {
"code": "unauthorized",
"message": "Missing or invalid API key."
},
"meta": {
"request_id": "<string>"
}
}{
"success": false,
"error": {
"code": "missing_scope",
"message": "Missing required scope."
},
"meta": {
"request_id": "<string>"
}
}{
"success": false,
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded."
},
"meta": {
"request_id": "<string>"
}
}Authorizations
Sellfern public API key scoped to the authenticated organization. Do not use user JWTs for public integrations.
Query Parameters
Only include expenses on or after this date.
Only include expenses on or before this date.
Filter by store ID. Use consolidated for unassigned overhead expenses.
Filter by one or more comma-separated expense categories.
When true, return only payroll expenses.
When true, exclude payroll expenses.
Page number, 1-indexed.
Required range:
x >= 1Number of expenses per page.
Required range:
1 <= x <= 1000