Skip to content
Docs

API reference

Invoices

Your monthly invoices to customers and from HoundSat, their device-level lines, previews and totals.

Each month two kinds of invoices are generated from the month's final usage: retail invoices from you to each customer, and a wholesale invoice from HoundSat to you. You issue your retail invoices (finalize, void, mark paid); the billed organization's Owner can pay an open invoice with its saved payment method. Owners and Admins only.

The invoice object

A monthly invoice, its status and totals.

Attributes

  • iduuidRequired

    Unique identifier.

  • basisenumRequired

    The usage billed: cdr.

    One ofcdr

  • billed_iduuidRequired
  • billed_namestringRequired

    The billed organization's name when the invoice was generated.

  • currencystringRequired

    Always USD.

  • customer_iduuid· nullable

    Scope: the billed customer (retail only).

  • due_attimestamp· nullable

    issued_at + payment terms (14 days).

  • inserted_attimestampRequired
  • invoice_run_iduuid· nullable
  • issued_attimestamp· nullable

    When it was finalized.

  • issuer_iduuidRequired
  • issuer_namestringRequired

    The issuer's name when the invoice was generated.

  • kindenumRequired

    wholesale (platform -> reseller) | retail (reseller -> customer).

    One ofwholesaleretail

  • last_payment_errorstring· nullable

    Why the last payment attempt failed, in words for the user (null once paid).

  • last_payment_error_codestring· nullable

    The payment processor's code for the last failure (e.g. card_declined).

  • numberstring· nullable

    INV-YYYY-NNNNNN, assigned on finalize (null while draft).

  • overdueboolean· nullable

    Open and past due (derived, not a status).

  • paid_attimestamp· nullable
  • payment_referencestring· nullable

    The payment processor's reference of the charge (a PaymentIntent id).

  • perioddateRequired

    The month billed (first of the month, UTC).

  • reseller_iduuid· nullable

    Scope: the billed reseller (wholesale) or the issuing reseller (retail).

  • statusenumRequired

    draft | open | processing | paid | void.

    One ofdraftopenprocessingpaidvoid

  • subtotal_centsintegerRequired

    Sum of the lines, US cents.

  • total_centsintegerRequired

    Amount due, US cents (no tax: equals subtotal_cents).

  • updated_attimestampRequired
  • voided_attimestamp· nullable
The invoice object
{
  "type": "invoice",
  "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
  "attributes": {
    "basis": "cdr",
    "billed_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
    "billed_name": "…",
    "currency": "usd",
    "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
    "due_at": "2026-10-12T14:03:21Z",
    "inserted_at": "2026-10-12T14:03:21Z",
    "invoice_run_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
    "issued_at": "2026-10-12T14:03:21Z",
    "issuer_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
    "issuer_name": "…",
    "kind": "wholesale",
    "last_payment_error": null,
    "last_payment_error_code": null,
    "number": "INV-2026-000042",
    "overdue": false,
    "paid_at": null,
    "payment_reference": "…",
    "period": "2026-10-01",
    "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
    "status": "open",
    "subtotal_cents": 1250,
    "total_cents": 1250,
    "updated_at": "2026-10-12T14:03:21Z",
    "voided_at": null
  }
}

The invoice line object

One device's charge, or a pool line, on an invoice.

Attributes

  • iduuidRequired

    Unique identifier.

  • amount_centsintegerRequired

    quantity x unit_price, rounded half-up (US cents).

  • billed_iduuidRequired

    The invoice's billed organization.

  • customer_iduuid· nullable

    The customer the line was billed under (wholesale: null for inventory, pool lines or a device that changed customer).

  • customer_namestring· nullable

    The customer's name when the invoice was generated.

  • descriptionstringRequired
  • device_iduuid· nullable

    The device; null on a pooled plan's pool line.

  • iccidstring· nullable

    The device's ICCID (snapshot).

  • inserted_attimestampRequired
  • invoice_iduuidRequired
  • issuer_iduuidRequired

    The invoice's issuer.

  • kindenumRequired

    The invoice's kind.

    One ofwholesaleretail

  • perioddateRequired

    The invoice's month.

  • plan_iduuid· nullable

    The plan priced: retail plan (retail) or wholesale plan (wholesale).

  • plan_namestringRequired

    The plan's name when the invoice was generated.

  • positionintegerRequired

    Order within the invoice (1-based).

  • quantitystringRequired

    Devices (fees) or MB (data), exact.

  • unit_pricestringRequired

    US cents per unit, exact.

  • usage_bytesintegerRequired

    The device's usage in the month (repeated on each of its lines); 0 on a pool line.

The invoice line item object
{
  "type": "invoice_line_item",
  "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
  "attributes": {
    "amount_cents": 1250,
    "billed_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
    "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
    "customer_name": "…",
    "description": "Fleet telemetry",
    "device_id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "iccid": "8999001234000020718",
    "inserted_at": "2026-10-12T14:03:21Z",
    "invoice_id": "6c0a8e2d-9f4b-4b17-a3c6-2e7d5f1b9a04",
    "issuer_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
    "kind": "wholesale",
    "period": "2026-10-01",
    "plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
    "plan_name": "…",
    "position": 1,
    "quantity": "…",
    "unit_price": "…",
    "usage_bytes": 48213
  }
}

Endpoints

List invoices

get/api/json/invoices

Invoices you issue or are billed, newest period first. Filter by kind, period, status, issuer_id and billed_id.

Who
Resellers and Customers
Roles
Owner, Admin

Query parameters

  • filter[<field>]object

    Narrows the list: filter[status]=active, or with an operator: filter[inserted_at][greater_than_or_equal]=2026-10-01T00:00:00Z. Operators: in, is_nil, greater_than, greater_than_or_equal, less_than, less_than_or_equal.

    One ofbasisbilled_idbilled_namecurrencycustomer_iddue_atidinserted_atinvoice_run_idissued_atissuer_idissuer_namekindlast_payment_errorlast_payment_error_codenumberoverduepaid_atpayment_referenceperiodreseller_idstatussubtotal_centstotal_centsupdated_atvoided_at

  • sortstring

    A field to sort by; prefix it with - for descending, e.g. sort=-inserted_at. Separate several with commas.

  • page[limit]integer

    Page size: 50 by default, at most 200.

  • page[after]string

    The cursor from links.next of the previous page. page[offset] works too.

  • page[count]boolean

    true adds the total number of matches in meta.page.total.

Request
curl https://api.houndsat.com/api/json/invoices \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN"
Response200 OK
{
  "data": [
    {
      "type": "invoice",
      "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
      "attributes": {
        "basis": "cdr",
        "billed_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
        "billed_name": "…",
        "currency": "usd",
        "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
        "due_at": "2026-10-12T14:03:21Z",
        "inserted_at": "2026-10-12T14:03:21Z",
        "invoice_run_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
        "issued_at": "2026-10-12T14:03:21Z",
        "issuer_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
        "issuer_name": "…",
        "kind": "wholesale",
        "last_payment_error": null,
        "last_payment_error_code": null,
        "number": "INV-2026-000042",
        "overdue": false,
        "paid_at": null,
        "payment_reference": "…",
        "period": "2026-10-01",
        "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
        "status": "open",
        "subtotal_cents": 1250,
        "total_cents": 1250,
        "updated_at": "2026-10-12T14:03:21Z",
        "voided_at": null
      }
    }
  ],
  "links": {
    "next": "/api/json/invoices?page[after]=g2wAAAABbQAAACQ1ZjBj…"
  }
}

Get an invoice

get/api/json/invoices/{id}

One invoice you issue or are billed.

Who
Resellers and Customers
Roles
Owner, Admin

Path parameters

  • iduuidRequired

    The record's id.

Request
curl https://api.houndsat.com/api/json/invoices/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8 \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN"
Response200 OK
{
  "data": {
    "type": "invoice",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "basis": "cdr",
      "billed_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
      "billed_name": "…",
      "currency": "usd",
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "due_at": "2026-10-12T14:03:21Z",
      "inserted_at": "2026-10-12T14:03:21Z",
      "invoice_run_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
      "issued_at": "2026-10-12T14:03:21Z",
      "issuer_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
      "issuer_name": "…",
      "kind": "wholesale",
      "last_payment_error": null,
      "last_payment_error_code": null,
      "number": "INV-2026-000042",
      "overdue": false,
      "paid_at": null,
      "payment_reference": "…",
      "period": "2026-10-01",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "status": "open",
      "subtotal_cents": 1250,
      "total_cents": 1250,
      "updated_at": "2026-10-12T14:03:21Z",
      "voided_at": null
    }
  }
}

Preview this month

get/api/json/invoices/preview

This month's charges as they would be invoiced now, grouped by customer with one line per device. kind=retail previews what you bill your customers; kind=wholesale what HoundSat bills you.

Who
Resellers and Customers
Roles
Owner, Admin

Query parameters

  • kindenumRequired

    retail | wholesale

    One ofwholesaleretail

  • monthdate

    Any day of the month (default: the current UTC month). Not in the future.

Request
curl https://api.houndsat.com/api/json/invoices/preview?kind=retail \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN"
Response200 OK
{
  "basis": "api",
  "currency": "usd",
  "groups": [
    {
      "customer": {
        "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
        "name": "Northwind Freight"
      },
      "lines": [
        {}
      ],
      "reseller": {
        "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
        "name": "Northwind Freight"
      },
      "running_total_cents": 1250,
      "subtotal_cents": 1250
    }
  ],
  "kind": "retail",
  "month": "2026-10-01",
  "total_cents": 1250,
  "unbilled_device_ids": [
    "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13"
  ]
}

Get a month's total

get/api/json/invoices/totals

The total of your issued invoices (open, processing or paid) of one month and kind.

Who
Resellers and Customers
Roles
Owner, Admin

Query parameters

  • kindenumRequired

    retail | wholesale

    One ofwholesaleretail

  • monthdate

    Any day of the month (default: the previous UTC month).

Request
curl https://api.houndsat.com/api/json/invoices/totals?kind=retail \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN"
Response200 OK
{
  "currency": "usd",
  "invoice_count": 3,
  "kind": "wholesale",
  "month": "2026-10-01",
  "reseller_count": 3,
  "total_cents": 1250
}

Finalize an invoice

patch/api/json/invoices/{id}/finalize

Issues a draft retail invoice: assigns its number and sets issued_at and due_at (14 days later).

Who
Resellers
Roles
Owner, Admin

Path parameters

  • iduuidRequired

    The record's id.

Request
curl -X PATCH https://api.houndsat.com/api/json/invoices/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8/finalize \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"type":"invoice","id":"5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8","attributes":{}}}'
Response200 OK
{
  "data": {
    "type": "invoice",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "basis": "cdr",
      "billed_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
      "billed_name": "…",
      "currency": "usd",
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "due_at": "2026-10-12T14:03:21Z",
      "inserted_at": "2026-10-12T14:03:21Z",
      "invoice_run_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
      "issued_at": "2026-10-12T14:03:21Z",
      "issuer_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
      "issuer_name": "…",
      "kind": "wholesale",
      "last_payment_error": null,
      "last_payment_error_code": null,
      "number": "INV-2026-000042",
      "overdue": false,
      "paid_at": null,
      "payment_reference": "…",
      "period": "2026-10-01",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "status": "open",
      "subtotal_cents": 1250,
      "total_cents": 1250,
      "updated_at": "2026-10-12T14:03:21Z",
      "voided_at": null
    }
  }
}

Mark an invoice paid

patch/api/json/invoices/{id}/mark_paid

Records a payment you received outside HoundSat for an open retail invoice.

Who
Resellers
Roles
Owner, Admin

Path parameters

  • iduuidRequired

    The record's id.

Request
curl -X PATCH https://api.houndsat.com/api/json/invoices/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8/mark_paid \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"type":"invoice","id":"5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8","attributes":{}}}'
Response200 OK
{
  "data": {
    "type": "invoice",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "basis": "cdr",
      "billed_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
      "billed_name": "…",
      "currency": "usd",
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "due_at": "2026-10-12T14:03:21Z",
      "inserted_at": "2026-10-12T14:03:21Z",
      "invoice_run_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
      "issued_at": "2026-10-12T14:03:21Z",
      "issuer_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
      "issuer_name": "…",
      "kind": "wholesale",
      "last_payment_error": null,
      "last_payment_error_code": null,
      "number": "INV-2026-000042",
      "overdue": false,
      "paid_at": null,
      "payment_reference": "…",
      "period": "2026-10-01",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "status": "open",
      "subtotal_cents": 1250,
      "total_cents": 1250,
      "updated_at": "2026-10-12T14:03:21Z",
      "voided_at": null
    }
  }
}

Void an invoice

patch/api/json/invoices/{id}/void

Voids a draft or open retail invoice. The next invoice run of the month issues a new one.

Who
Resellers
Roles
Owner, Admin

Path parameters

  • iduuidRequired

    The record's id.

Request
curl -X PATCH https://api.houndsat.com/api/json/invoices/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8/void \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"type":"invoice","id":"5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8","attributes":{}}}'
Response200 OK
{
  "data": {
    "type": "invoice",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "basis": "cdr",
      "billed_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
      "billed_name": "…",
      "currency": "usd",
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "due_at": "2026-10-12T14:03:21Z",
      "inserted_at": "2026-10-12T14:03:21Z",
      "invoice_run_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
      "issued_at": "2026-10-12T14:03:21Z",
      "issuer_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
      "issuer_name": "…",
      "kind": "wholesale",
      "last_payment_error": null,
      "last_payment_error_code": null,
      "number": "INV-2026-000042",
      "overdue": false,
      "paid_at": null,
      "payment_reference": "…",
      "period": "2026-10-01",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "status": "open",
      "subtotal_cents": 1250,
      "total_cents": 1250,
      "updated_at": "2026-10-12T14:03:21Z",
      "voided_at": null
    }
  }
}

Pay an invoice

patch/api/json/invoices/{id}/pay

Charges an open invoice billed to your organization to its default payment method. A card payment ends paid; a US bank payment processing until it settles. A declined payment leaves the invoice open with last_payment_error set.

Who
Resellers and Customers
Roles
Owner

Path parameters

  • iduuidRequired

    The record's id.

Request
curl -X PATCH https://api.houndsat.com/api/json/invoices/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8/pay \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"type":"invoice","id":"5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8","attributes":{}}}'
Response200 OK
{
  "data": {
    "type": "invoice",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "basis": "cdr",
      "billed_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
      "billed_name": "…",
      "currency": "usd",
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "due_at": "2026-10-12T14:03:21Z",
      "inserted_at": "2026-10-12T14:03:21Z",
      "invoice_run_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
      "issued_at": "2026-10-12T14:03:21Z",
      "issuer_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
      "issuer_name": "…",
      "kind": "wholesale",
      "last_payment_error": null,
      "last_payment_error_code": null,
      "number": "INV-2026-000042",
      "overdue": false,
      "paid_at": null,
      "payment_reference": "…",
      "period": "2026-10-01",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "status": "open",
      "subtotal_cents": 1250,
      "total_cents": 1250,
      "updated_at": "2026-10-12T14:03:21Z",
      "voided_at": null
    }
  }
}

List invoice lines

get/api/json/invoice_line_items

Lines of the invoices you issue or are billed. Filter by invoice_id, kind, period, customer_id and device_id.

Who
Resellers and Customers
Roles
Owner, Admin

Query parameters

  • filter[<field>]object

    Narrows the list: filter[status]=active, or with an operator: filter[inserted_at][greater_than_or_equal]=2026-10-01T00:00:00Z. Operators: in, is_nil, greater_than, greater_than_or_equal, less_than, less_than_or_equal.

    One ofamount_centsbilled_idcustomer_idcustomer_namedescriptiondevice_idiccididinserted_atinvoice_idissuer_idkindperiodplan_idplan_namepositionquantityunit_priceusage_bytes

  • sortstring

    A field to sort by; prefix it with - for descending, e.g. sort=-inserted_at. Separate several with commas.

  • page[limit]integer

    Page size: 50 by default, at most 200.

  • page[after]string

    The cursor from links.next of the previous page. page[offset] works too.

  • page[count]boolean

    true adds the total number of matches in meta.page.total.

Request
curl https://api.houndsat.com/api/json/invoice_line_items \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN"
Response200 OK
{
  "data": [
    {
      "type": "invoice_line_item",
      "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
      "attributes": {
        "amount_cents": 1250,
        "billed_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
        "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
        "customer_name": "…",
        "description": "Fleet telemetry",
        "device_id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
        "iccid": "8999001234000020718",
        "inserted_at": "2026-10-12T14:03:21Z",
        "invoice_id": "6c0a8e2d-9f4b-4b17-a3c6-2e7d5f1b9a04",
        "issuer_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
        "kind": "wholesale",
        "period": "2026-10-01",
        "plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
        "plan_name": "…",
        "position": 1,
        "quantity": "…",
        "unit_price": "…",
        "usage_bytes": 48213
      }
    }
  ],
  "links": {
    "next": "/api/json/invoice_line_items?page[after]=g2wAAAABbQAAACQ1ZjBj…"
  }
}

Get an invoice line

get/api/json/invoice_line_items/{id}

One invoice line.

Who
Resellers and Customers
Roles
Owner, Admin

Path parameters

  • iduuidRequired

    The record's id.

Request
curl https://api.houndsat.com/api/json/invoice_line_items/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8 \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN"
Response200 OK
{
  "data": {
    "type": "invoice_line_item",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "amount_cents": 1250,
      "billed_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "customer_name": "…",
      "description": "Fleet telemetry",
      "device_id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
      "iccid": "8999001234000020718",
      "inserted_at": "2026-10-12T14:03:21Z",
      "invoice_id": "6c0a8e2d-9f4b-4b17-a3c6-2e7d5f1b9a04",
      "issuer_id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
      "kind": "wholesale",
      "period": "2026-10-01",
      "plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
      "plan_name": "…",
      "position": 1,
      "quantity": "…",
      "unit_price": "…",
      "usage_bytes": 48213
    }
  }
}

Export invoice lines as CSV

get/api/exports/invoices.csv

The device-level lines of your issued invoices of one month and kind, as a CSV file whose amounts add up to the month's total.

Who
Resellers and Customers
Roles
Owner, Admin

Query parameters

  • monthdateRequired

    YYYY-MM, or any YYYY-MM-DD of the month

  • kindenumRequired

    Invoice kind

    One ofwholesaleretail

Request
curl https://api.houndsat.com/api/exports/invoices.csv?month=2026-09&kind=retail \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN"
Response200 OK
month,invoice_number,invoice_status,issuer,billed_organization,customer,device_iccid,plan,description,quantity,unit_price_cents,usage_bytes,amount_cents
2026-09,INV-2026-000042,open,Acme Connect,Northwind Freight,Northwind Freight,8999001234000020718,Fleet Basic,Monthly fee,1,1500,272000,1500