curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/google-ads/billing/invoices \
--header 'api_key: <api-key>'import requests
url = "https://app.base44.com/api/apps/{app_id}/google-ads/billing/invoices"
headers = {"api_key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {api_key: '<api-key>'}};
fetch('https://app.base44.com/api/apps/{app_id}/google-ads/billing/invoices', 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.base44.com/api/apps/{app_id}/google-ads/billing/invoices",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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://app.base44.com/api/apps/{app_id}/google-ads/billing/invoices"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("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://app.base44.com/api/apps/{app_id}/google-ads/billing/invoices")
.header("api_key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/google-ads/billing/invoices")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["api_key"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"id": "68b1c0d4e7b91d003c45a1f6",
"invoice_date": "2026-08-25",
"period_start": "2026-08-18",
"period_end": "2026-08-24",
"status": "PAID",
"currency_code": "EUR",
"ad_spend_micros": 248000000,
"service_fee_micros": 24800000,
"tax_micros": 51870000,
"total_micros": 324670000,
"is_refund": false,
"signed_total_micros": 324670000,
"billing_type": "weekly"
}
]List Google Ads invoices
Returns the billing invoices for the app’s Google Ads account, newest first.
Each invoice covers a period and carries the ad spend, the service fee, the tax and the total, all in micros of the invoice currency. billing_type says why it was raised: on the weekly cycle, because spend crossed the account’s threshold, or as a reconciliation of an earlier period.
is_refund: true, and its total_micros is a positive magnitude like any other row. Use signed_total_micros, which is negative on a refund, whenever you total an account’s billing. Summing total_micros counts a refund as a charge.An invoice Base44 is still reconciling locally is left out until it settles, so a period can be missing for a short while after it ends.
curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/google-ads/billing/invoices \
--header 'api_key: <api-key>'import requests
url = "https://app.base44.com/api/apps/{app_id}/google-ads/billing/invoices"
headers = {"api_key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {api_key: '<api-key>'}};
fetch('https://app.base44.com/api/apps/{app_id}/google-ads/billing/invoices', 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.base44.com/api/apps/{app_id}/google-ads/billing/invoices",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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://app.base44.com/api/apps/{app_id}/google-ads/billing/invoices"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("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://app.base44.com/api/apps/{app_id}/google-ads/billing/invoices")
.header("api_key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/google-ads/billing/invoices")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["api_key"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"id": "68b1c0d4e7b91d003c45a1f6",
"invoice_date": "2026-08-25",
"period_start": "2026-08-18",
"period_end": "2026-08-24",
"status": "PAID",
"currency_code": "EUR",
"ad_spend_micros": 248000000,
"service_fee_micros": 24800000,
"tax_micros": 51870000,
"total_micros": 324670000,
"is_refund": false,
"signed_total_micros": 324670000,
"billing_type": "weekly"
}
]Authorizations
Personal API key.
Path Parameters
ID of the app whose Google Ads campaigns to manage.
Response
Successful Response
ID of the invoice.
"68b1c0d4e7b91d003c45a1f6"
Date the invoice was issued, as YYYY-MM-DD.
"2026-08-25"
First day the invoice covers, as YYYY-MM-DD.
"2026-08-18"
Last day the invoice covers, as YYYY-MM-DD.
"2026-08-24"
State of the invoice. Either PENDING, PAID, FAILED, or VOID.
"PAID"
Currency of every amount on the invoice, as an ISO 4217 code.
"EUR"
Ad spend for the period in micros, so 248000000 is 248.00.
248000000
Base44's service fee for the period, in micros.
24800000
Tax charged on the invoice, in micros.
51870000
Size of the invoice in micros, always positive. On a refund this is the magnitude refunded rather than an amount charged, so read signed_total_micros or is_refund before treating it as money owed.
324670000
Whether the row is a refund rather than a charge.
false
The invoice total with its direction applied: positive on a charge, negative on a refund. Sum this rather than total_micros when you total an account's billing.
324670000
Why the invoice was raised: weekly on the billing cycle, threshold when spend crossed the cap, reconciliation to true up an earlier period.
"weekly"
Was this page helpful?