List invoices
curl --request GET \
--url https://sandboxapi.kelviq.com/api/v1/invoices/ \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandboxapi.kelviq.com/api/v1/invoices/"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandboxapi.kelviq.com/api/v1/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://sandboxapi.kelviq.com/api/v1/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 => [
"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://sandboxapi.kelviq.com/api/v1/invoices/"
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://sandboxapi.kelviq.com/api/v1/invoices/")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandboxapi.kelviq.com/api/v1/invoices/")
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{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": "INV-20260801101420-Q7M2P",
"customer": {
"customerId": "geo-jacob",
"name": "Geo Jacob",
"email": "geojacob@example.com"
},
"product": {
"id": "df398021-477b-4e67-972d-c763a2f2ba7b",
"name": "ParityDeals"
},
"status": "PAID",
"paidAt": "2026-08-01T10:14:22Z",
"amountSubtotal": "40.00",
"amountDiscount": "0.00",
"amountTax": "0.00",
"amountTotal": "40.00",
"currency": "USD",
"amountSubtotalUnits": 4000,
"amountDiscountUnits": 0,
"amountTaxUnits": 0,
"amountTotalUnits": 4000,
"currencySymbol": "$",
"billingAddress": {
"line1": null,
"line2": null,
"city": null,
"state": null,
"postalCode": "680121",
"country": "IN"
},
"plan": {
"name": "Premium",
"identifier": "premium1"
},
"billingType": "SUBSCRIPTION",
"license": [],
"subscription": {
"id": "a2951973-aca5-408d-bd9c-1d86827ed463",
"status": "active",
"amount": "40.00",
"currency": "usd",
"interval": "month",
"currencySymbol": "$",
"nextInvoiceDate": "2026-09-01T10:14:22Z"
},
"paymentId": null,
"paymentLink": "https://portal.kelviq.com/acme-inc/pay/aW5fMVJwb1pvU0JzdEN6eW9jUzdpUG1pdGgz",
"createdOn": "2026-08-01T10:14:20Z",
"modifiedOn": "2026-08-01T10:14:22Z",
"dueDate": null,
"attemptCount": 1,
"nextPaymentAttempt": null,
"failureDetails": null,
"customFieldsData": {},
"details": {
"lines": [
{
"name": "Premium",
"description": "Premium plan - monthly",
"quantity": 1,
"unitPrice": "40.00",
"subTotal": "40.00"
}
],
"amountDue": "0",
"appliedBalance": "0",
"startingBalance": "0",
"endingBalance": "0"
},
"paymentMethod": {
"paymentMethodType": "card",
"paymentMethodName": "visa",
"last4": "4242"
}
}
]
}Invoices
List invoices
Returns a paginated list of invoices for the authenticated organization, newest first. Optionally filter by subscription or customer.
GET
/
invoices
/
List invoices
curl --request GET \
--url https://sandboxapi.kelviq.com/api/v1/invoices/ \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandboxapi.kelviq.com/api/v1/invoices/"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandboxapi.kelviq.com/api/v1/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://sandboxapi.kelviq.com/api/v1/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 => [
"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://sandboxapi.kelviq.com/api/v1/invoices/"
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://sandboxapi.kelviq.com/api/v1/invoices/")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandboxapi.kelviq.com/api/v1/invoices/")
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{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": "INV-20260801101420-Q7M2P",
"customer": {
"customerId": "geo-jacob",
"name": "Geo Jacob",
"email": "geojacob@example.com"
},
"product": {
"id": "df398021-477b-4e67-972d-c763a2f2ba7b",
"name": "ParityDeals"
},
"status": "PAID",
"paidAt": "2026-08-01T10:14:22Z",
"amountSubtotal": "40.00",
"amountDiscount": "0.00",
"amountTax": "0.00",
"amountTotal": "40.00",
"currency": "USD",
"amountSubtotalUnits": 4000,
"amountDiscountUnits": 0,
"amountTaxUnits": 0,
"amountTotalUnits": 4000,
"currencySymbol": "$",
"billingAddress": {
"line1": null,
"line2": null,
"city": null,
"state": null,
"postalCode": "680121",
"country": "IN"
},
"plan": {
"name": "Premium",
"identifier": "premium1"
},
"billingType": "SUBSCRIPTION",
"license": [],
"subscription": {
"id": "a2951973-aca5-408d-bd9c-1d86827ed463",
"status": "active",
"amount": "40.00",
"currency": "usd",
"interval": "month",
"currencySymbol": "$",
"nextInvoiceDate": "2026-09-01T10:14:22Z"
},
"paymentId": null,
"paymentLink": "https://portal.kelviq.com/acme-inc/pay/aW5fMVJwb1pvU0JzdEN6eW9jUzdpUG1pdGgz",
"createdOn": "2026-08-01T10:14:20Z",
"modifiedOn": "2026-08-01T10:14:22Z",
"dueDate": null,
"attemptCount": 1,
"nextPaymentAttempt": null,
"failureDetails": null,
"customFieldsData": {},
"details": {
"lines": [
{
"name": "Premium",
"description": "Premium plan - monthly",
"quantity": 1,
"unitPrice": "40.00",
"subTotal": "40.00"
}
],
"amountDue": "0",
"appliedBalance": "0",
"startingBalance": "0",
"endingBalance": "0"
},
"paymentMethod": {
"paymentMethodType": "card",
"paymentMethodName": "visa",
"last4": "4242"
}
}
]
}Click the base URL in the API playground and select the Sandbox host for test data or the Production host for live data. Use credentials from the same environment.
Authorizations
The Server API Key obtained from the kelviq application. Pass as a Bearer token in the Authorization header. Example: 'Authorization: Bearer YOUR_API_KEY'
Query Parameters
Filter by the internal Kelviq subscription ID.
Filter by the client-defined unique identifier of the customer.
Number of results per page. Defaults to 10, maximum 100.
Required range:
1 <= x <= 100Page number to return.
Required range:
x >= 1⌘I