List Purchases
curl --request POST \
--url https://api.example.com/api/public/tools/list_purchases \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"fromUtc": null,
"toUtc": null,
"limit": null,
"cursor": null
}
'import requests
url = "https://api.example.com/api/public/tools/list_purchases"
payload = {
"fromUtc": None,
"toUtc": None,
"limit": None,
"cursor": None
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({fromUtc: null, toUtc: null, limit: null, cursor: null})
};
fetch('https://api.example.com/api/public/tools/list_purchases', 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.example.com/api/public/tools/list_purchases",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'fromUtc' => null,
'toUtc' => null,
'limit' => null,
'cursor' => null
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/public/tools/list_purchases"
payload := strings.NewReader("{\n \"fromUtc\": null,\n \"toUtc\": null,\n \"limit\": null,\n \"cursor\": null\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/api/public/tools/list_purchases")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"fromUtc\": null,\n \"toUtc\": null,\n \"limit\": null,\n \"cursor\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/public/tools/list_purchases")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"fromUtc\": null,\n \"toUtc\": null,\n \"limit\": null,\n \"cursor\": null\n}"
response = http.request(request)
puts response.read_body{
"summary": "<string>",
"teamId": "<string>",
"effectiveFilters": {
"fromUtc": "2023-11-07T05:31:56Z",
"toUtc": "2023-11-07T05:31:56Z"
},
"items": [
{
"id": "<string>",
"created": "2023-11-07T05:31:56Z",
"amount": 123,
"currency": "<string>",
"source": "subscription",
"stripeInvoiceId": "<string>",
"stripeSessionId": "<string>",
"stripeCustomerId": "<string>",
"description": "<string>"
}
],
"cursor": "<string>",
"totalCount": 123
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}FirstTouch tools
List Purchases
Lists the current team’s purchase history from the same billing source and with the same UTC date filters as the charge/cursor Billing UI endpoint.
Usage notes
- Requires team billing access.
- Results include subscription, additional-credits, and manual charges.
- Follow cursor pages to read the complete history.
POST
/
api
/
public
/
tools
/
list_purchases
List Purchases
curl --request POST \
--url https://api.example.com/api/public/tools/list_purchases \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"fromUtc": null,
"toUtc": null,
"limit": null,
"cursor": null
}
'import requests
url = "https://api.example.com/api/public/tools/list_purchases"
payload = {
"fromUtc": None,
"toUtc": None,
"limit": None,
"cursor": None
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({fromUtc: null, toUtc: null, limit: null, cursor: null})
};
fetch('https://api.example.com/api/public/tools/list_purchases', 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.example.com/api/public/tools/list_purchases",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'fromUtc' => null,
'toUtc' => null,
'limit' => null,
'cursor' => null
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/public/tools/list_purchases"
payload := strings.NewReader("{\n \"fromUtc\": null,\n \"toUtc\": null,\n \"limit\": null,\n \"cursor\": null\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/api/public/tools/list_purchases")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"fromUtc\": null,\n \"toUtc\": null,\n \"limit\": null,\n \"cursor\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/public/tools/list_purchases")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"fromUtc\": null,\n \"toUtc\": null,\n \"limit\": null,\n \"cursor\": null\n}"
response = http.request(request)
puts response.read_body{
"summary": "<string>",
"teamId": "<string>",
"effectiveFilters": {
"fromUtc": "2023-11-07T05:31:56Z",
"toUtc": "2023-11-07T05:31:56Z"
},
"items": [
{
"id": "<string>",
"created": "2023-11-07T05:31:56Z",
"amount": 123,
"currency": "<string>",
"source": "subscription",
"stripeInvoiceId": "<string>",
"stripeSessionId": "<string>",
"stripeCustomerId": "<string>",
"description": "<string>"
}
],
"cursor": "<string>",
"totalCount": 123
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}Authorizations
Body
application/json
Optional inclusive UTC lower bound for purchase creation time.
Optional inclusive UTC upper bound for purchase creation time.
Maximum purchases to return. Defaults to 10 and is capped at 50.
Cursor returned by a previous list_purchases call.

