curl --request GET \
--url https://app.equated.co/api/documents \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.equated.co/api/documents"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.equated.co/api/documents', 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://app.equated.co/api/documents",
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://app.equated.co/api/documents"
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://app.equated.co/api/documents")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.equated.co/api/documents")
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{
"documents": [
{
"id": 1,
"documentType": "<string>",
"lifecycle": "<string>",
"amount": "<string>",
"currency": "<string>",
"displayTitle": "<string>",
"documentNumber": "<string>",
"dueDate": "<string>",
"createdAt": "<string>",
"orgMerchantId": 1,
"orgMerchant": {
"id": 1,
"name": "<string>",
"website": "<string>",
"imageUrl": "<string>",
"logo": "<string>",
"logoUrl": "<string>"
},
"amountBase": "<string>",
"baseCurrency": "<string>",
"derivedSettlementStatus": "open",
"derivedOutstandingAmount": "<string>",
"payerAccountId": 1,
"resolution": "unresolved",
"stage": "inbox",
"parentDocumentId": 1,
"archivedAt": "<string>"
}
],
"total": 1,
"counts": {
"inbox": 1,
"outstanding": 1,
"done": 1,
"all": 1
},
"countsByKind": {},
"stageCountsByKind": {}
}List documents
List documents across all types (BILL, INVOICE, RECEIPT, PAYROLL_REPORT, etc.). Filter by type (one kind) or types (several, repeated or comma-separated), plus lifecycle, counterparty, integration details, or date range. search matches free text against the row’s title, its number, the counterparty it names and, for an estimate or quote, the customer and the job address; every word must appear. Add stage — inbox, outstanding, or done, read per kind — to page one stage of them; omit it for every stage, and rows come inbox first, then outstanding, then done, each carrying its stage. The kinds named mix within a stage. Within a stage rows come newest first; sort orders them by amount (largest first) or title (A to Z, by the name the row shows) instead, and order reverses any of these. Stage order stays either way. counts tallies all three stages whichever one is read; countsByKind counts the rows this list holds per kind — within stage when one is given, over every stage when none is. stageCountsByKind counts each kind at each stage, whichever one is read. POSTED bills and invoices include derivedSettlementStatus and derivedOutstandingAmount; use those fields to find documents still awaiting payment. Paper somebody set aside is left out of the rows and every count until include_archived asks for it, and it is at no stage, so it comes back only when no stage is named; archived_only lists nothing else.
curl --request GET \
--url https://app.equated.co/api/documents \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.equated.co/api/documents"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.equated.co/api/documents', 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://app.equated.co/api/documents",
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://app.equated.co/api/documents"
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://app.equated.co/api/documents")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.equated.co/api/documents")
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{
"documents": [
{
"id": 1,
"documentType": "<string>",
"lifecycle": "<string>",
"amount": "<string>",
"currency": "<string>",
"displayTitle": "<string>",
"documentNumber": "<string>",
"dueDate": "<string>",
"createdAt": "<string>",
"orgMerchantId": 1,
"orgMerchant": {
"id": 1,
"name": "<string>",
"website": "<string>",
"imageUrl": "<string>",
"logo": "<string>",
"logoUrl": "<string>"
},
"amountBase": "<string>",
"baseCurrency": "<string>",
"derivedSettlementStatus": "open",
"derivedOutstandingAmount": "<string>",
"payerAccountId": 1,
"resolution": "unresolved",
"stage": "inbox",
"parentDocumentId": 1,
"archivedAt": "<string>"
}
],
"total": 1,
"counts": {
"inbox": 1,
"outstanding": 1,
"done": 1,
"all": 1
},
"countsByKind": {},
"stageCountsByKind": {}
}Authorizations
API token issued from the Equated app under Settings → API Keys and MCP.
Query Parameters
One kind. Shorthand for a types naming it alone.
UNKNOWN, RECEIPT, REIMBURSEMENT, BILL, INVOICE, PAYROLL_REPORT, SETTLEMENT_REPORT, SHOPIFY_TRANSACTION, SHOPIFY_ORDER, SQUARE_PAYMENT, ESTIMATE_SENT, ESTIMATE_RECEIVED Document kinds to list together, repeated or comma-separated. Replaces type.
inbox (awaiting work), outstanding (confirmed, still owed or owing), or done, read per kind. Omit for every stage.
inbox, outstanding, done true, false Receipts: unresolved (inbox — not linked to a transaction) or matched (linked to one).
unresolved, matched Free text. Every word must appear in the row's title, its number, the file it arrived as, an extracted counterparty name, an email subject, the counterparty it names, or, for an estimate or quote, the customer and the job address.
1 - 120Include archived paper, which every list leaves out by default.
true, false List nothing but archived paper. It is at no stage, so name no stage with it.
true, false x > 0What rows sort on within each stage: date (default, the date the row shows), amount, or title (the name the row shows). A row with no amount or name yet sorts last. Stage order stays.
date, amount, title Direction of sort. Omit for the sort's own: newest first, largest first, or A to Z.
asc, desc 1 <= x <= 200x >= 0