Retrieving customers
https://app.iteras.dk/api/customers/
This endpoint is the entry point for retrieving information about one or
more customers. Besides the fields directly on the customer, it can return
subscriptions, assigned products, invoices, payments,
temporary overrides, complaints and various computed values.
Pick exactly what you want with the fields
parameter.
Basic usage:
GET /api/customers/?id=12345&fields=data{
"customers": [
{
"id": "12345",
"data": {
"name": "Test Person",
"email": "someone@example.com"
}
}
]
}Note that Iteras internally maintains more processing information about the customers and subscriptions than documented below - subscription management can be relatively complex. If you need more than what's currently available, please ask us.
Parameters
All parameters are optional.
-
id stringA comma-separated list of customer IDs, e.g.
?id=12345,42312. If left out, information on all customers is returned. -
max_results integer Defaults to
10000How many customers to retrieve at most, e.g.max_results=1000(example). If there are more results available, anext_urlis returned which you can use to grab the next page. "max_results" is currently clipped to be between 1-10000. -
fields string Defaults to
data,active_subscriptionsA comma-separated list of fields to return in the JSON, e.g.?fields=data,subscriptions, see below for the list. -
filter array
A list of conditions to filter the returned customers by, e.g.
?filter=[{ "condition_type": "customer:field", "field": ":Custom field", "operator": "filledin" }]. See conditions. The evaluation context is a customer, so subscription conditions go in asubscription:existscondition.Note that this does not constrain the subscriptions returned with
fields=subscriptions, usefilter_subscriptionsfor that. -
filter_from dateFilter the various extra entries returned for a customer, omitting data older than this date, e.g.
?filter_from=2026-07-30- you can also specify a relative date with-3mfor "3 months ago". If this filter is used when fetching invoices, payments or history entries for customers, only invoices, payments or history entries created after the date is returned. -
filter_subscriptions array with
fields=subscriptionsA list of conditions that narrow which subscriptions are returned on each customer, e.g.[{ "condition_type": "subscription:state", "states": ["active"] }]to return only active subscriptions. If you don't filter the subscriptions, all subscriptions are returned by default (subscription constraints in thefilterparameter only constrain which customers are returned). See conditions - the evaluation context is a subscription. -
extrafield stringCan be repeated to get additional computed fields, e.g.
?extrafield=delivered_to:formatted&extrafield=delivered_to:address:postcode. -
iframe boolSet if returned URLs are intended to go in an iframe, e.g.
iframe=1. -
preauthseconds integerIf set, URLs that go to the self-service get a pre-auth token valid for this many seconds so that the customer does not have to login to view that page, e.g.
preauthseconds=3600makes the URLs valid for an hour. -
estimated_invoicings_until dateExtends the simulation in
estimated_invoicingsuntil this date, e.g.?estimated_invoicings_until=2027-01-30(max is currently 2 years in the future) - you can also specify a relative date with+3mfor "3 months from now".
Some parameters, e.g. filter and extrafield,
contain special characters - remember to URL encode them.
Available fields
-
dataAll fields directly on the customer, such as name and email address.
-
active_subscriptionsSummary of currently active subscriptions.
-
subscriptionsAll subscriptions with data on each subscription and also information about periods, begin/end dates and products received (example).
-
subscriptions.current_periodInclude
current_periodwhich contains the currently active period, the value isnullif there is no active period, e.g. a stopped subscription or a subscription starting in the future. -
subscriptions.beginInclude
subscription_begintimestamp for each subscription. -
subscriptions.cancelledInclude
cancelledbool on each subscription,cancelledis true if a request has been made to stop the subscription. -
subscriptions.stop_requestedInclude
stop_requestedtimestamp on each subscription with the time a request was made to stop the subscription, if any. -
subscriptions.endInclude
subscription_endtimestamp on each subscription, if any can be deduced and it is to stop or has stopped. -
subscriptions.invoice_lines_calculated_for_current_campaignInclude list of invoice lines that would be invoiced on the current campaign for a full period on the subscription (the format is the same as for invoices, but with an additional
campaign_idof the current campaign). -
subscriptions.priceInclude the
pricefield on each subscription, if filled in (this can only be done if dynamic pricing is enabled on the current campaign). -
subscriptions.payment_agreementInclude a
payment_agreementon each subscription, if set. -
subscriptions.allowed_complaintsInclude an
allowed_complaint_dateslist and anallowed_complaint_reason_codeslist on each subscription, if set. -
subscriptions.policyInclude
policyid and external_id on each subscription if any. -
subscriptions.invoiced_byInclude
invoiced_bydescription on each subscription if any. -
productsProducts that are assigned to the customer (example).
-
invoicesInvoices, reminders and credit notes for the customer (example).
-
invoices.download_urlInclude a
download_urlon each invoice. -
invoices.payment_urlInclude a
payment_urlon invoices that can be paid. -
invoices.linesInclude
lineson each invoice with information on what is invoiced. -
paymentsPayments made by the customer (example).
-
balanceA list of the customer balance amount (paid - invoiced) for each business entity.
-
overridesOverrides for the customer, e.g. vacations or future changes (example).
-
complaintsDistribution complaints by the customer (example).
-
segmentsSegments the customer is part of (example).
-
estimated_invoicingsSimulate future processing of the subscriptions for the customer and estimate the invoice lines that would result in (example).
-
historyHuman readable log of history related to the customer (this should not be used for analytics, instead retrieve events directly).
-
password with
dataAdds the hashed customer password to the data returned. -
password_url with
dataFor customers without a password, adds a URL where the customer can set their password. -
preauth_token with
dataAdds a pre-auth token to each customer, making it possible to automatically log them into embedded Iteras components.
Return value
The response is an object with a customers array, possibly empty. When a query
finds more customers than fit in the page, the object also has a next_url you
call to get the next page — see pagination.
-
customers array
One object per customer, in order of customer number, e.g.
[{ "id": "41325", "data": { ... } }, { "id": "41326", ... }]The customer attributes included depend on what you request, but there's always an
idattribute:-
id stringThe customer number, e.g.
"41325".
-
-
next_url stringURL of the next page of results, e.g.
"/api/customers/?max_results=10000&fields=data". Present only when there are more results.
Note that if you have a lot of customers and need to get their data synchronized to another system, you should not use this API endpoint only. Instead check our guide on synchronizing data.
Data
Data contains the basic fields of the customer, including any custom fields defined, and may also contain computed fields if you request them. Fields not filled in on the customer are generally excluded.
-
created datetimeWhen the customer was created, as
YYYY-MM-DDTHH:MM:SS, e.g.2026-07-30T23:57:57. -
email stringThe email address, e.g.
"anna@example.com". -
name stringThe name, e.g.
"Anna Hansen". -
company stringThe company, e.g.
"Hansen & Co.". -
address string deprecatedThe address with name and country, e.g.
"Anna Hansen\nRådhuspladsen 2\n1550 København V\nDenmark". Deprecated, useformatted_address. -
formatted_address stringThe address with name and country, e.g.
"Anna Hansen\nRådhuspladsen 2\n1550 København V\nDenmark". -
location stringThe address without name or country, e.g.
"Rådhuspladsen 2, 3. th.\n1550 København V". -
country string deprecatedThe country, e.g.
"Denmark". Deprecated, usecountry_nameandcountry_code. -
country_name stringThe country name, e.g.
"Denmark". -
country_code stringThe country code, e.g.
"DK". -
billing_email stringA separate billing email, if set, e.g.
"accounts@example.com". -
billing_address string deprecatedThe billing address with name and country, e.g.
"Hansen & Co.\nRådhuspladsen 2\n1550 København V\nDenmark". Deprecated, usebilling_formatted_address. -
billing_formatted_address stringThe billing address with name and country, e.g.
"Hansen & Co.\nRådhuspladsen 2\n1550 København V\nDenmark". -
billing_location stringThe billing address without name or country, e.g.
"Rådhuspladsen 2\n1550 København V". -
billing_country string deprecatedThe billing country, e.g.
"Denmark". Deprecated, usebilling_country_nameandbilling_country_code. -
billing_country_name stringThe billing country name, e.g.
"Denmark". -
billing_country_code stringThe billing country code, e.g.
"DK". -
password string with
fields=passwordThe hashed customer password. -
password_url string with
fields=password_urlFor customers without a password, a URL where the customer can set their password. -
preauth_token string with
fields=preauth_tokenA pre-auth token that can log the customer into embedded Iteras components.
You can set any custom customer field, using its field id (the field name with a colon prepended, or its external identifier).
Log in, or send your API key as a bearer token, to see the custom customer fields set up for your account.
A yes/no field (type bool) is true or false, and has no value when it isn't set. Set it with true or false, and clear it with null.
A date and time field (type datetime) can be set up to follow other fields, so it is set to the time one of them changes. If the same update changes the date and time field itself, that value is kept.
GET /api/customers/?id=12345,12346&fields=data{
"customers": [
{
"id": "12345",
"data": {
"name": "Anna Hansen",
"email": "anna@example.com",
"formatted_address": "Anna Hansen\nRådhuspladsen 2, 3. th.\n1550 København V\nDenmark",
"location": "Rådhuspladsen 2, 3. th.\n1550 København V",
"country_name": "Denmark",
"country_code": "DK",
"created": "2026-07-30T23:57:57",
":Custom field": "Example text",
":Custom date field": "2026-09-30"
}
},
// ...
]
}Active subscriptions
-
active_subscriptions array with
fields=active_subscriptionsActive subscriptions is a short-hand if you just need to know a few basic facts about the subscriptions:
-
period_id stringThe ID of the active period, e.g.
"8723465". -
subscription_id stringThe ID of the subscription, e.g.
"7612471". -
campaign stringThe Iteras ID of the campaign.
-
campaign_id stringThe campaign's self-chosen ID, e.g.
"3i". -
campaign_name stringThe internal campaign name, e.g.
"3 issues". -
campaign_customer_facing_name stringThe campaign name shown to customers, e.g.
"Beautiful 3 issues". -
data objectThe subscription's data.
-
subscribed_to arrayProducts the subscription is subscribed to.
-
quantity integerThe quantity, if not one, e.g.
2. -
group string deprecated
recipient,adminoradmin+recipient, for a group subscription. -
group_customer_id stringThe customer number of the group owner, for a recipient subscription, e.g.
"123456". -
group_subscription_id stringThe ID of the group subscription, for a recipient subscription, e.g.
"654321". -
addon_base_subscription_id stringThe ID of the base subscription, for an add-on subscription, e.g.
"654322".
-
GET /api/customers/?id=12345,12346&fields=active_subscriptions{
"customers": [
{
"id": "12345",
"active_subscriptions": [
{
"period_id": "8723465",
"subscription_id": "7612471",
"campaign_name": "3 issues",
"campaign_customer_facing_name": "Beautiful 3 issues",
"campaign_id": "3i",
"group_customer_id": "123456", // filled in if it's a recipient subscription
"group_subscription_id": "654321" // points to the group subscription
},
{
"period_id": "8723465",
"subscription_id": "7612472",
"campaign_name": "6 months",
"campaign_customer_facing_name": "6 months of bliss",
"campaign_id": "6m",
"addon_base_subscription_id": "7612471" // filled in with base subscription if this is an add-on subscription to the base
}
]
},
// ...
]
}Subscriptions
-
subscriptions array with
fields=subscriptionsAll subscriptions with data on each subscription and information about periods, begin/end dates and products received.
-
id stringThe ID of the subscription, e.g.
"7612471". -
created datetimeWhen the subscription was created, as
YYYY-MM-DDTHH:MM:SS, e.g.2026-08-30T23:57:57. -
data objectThe subscription's data, including the custom subscription fields.
You can set any custom subscription field, using its field id (the field name with a colon prepended, or its external identifier).
Log in, or send your API key as a bearer token, to see the custom subscription fields set up for your account.
A yes/no field (type
bool) istrueorfalse, and has no value when it isn't set. Set it withtrueorfalse, and clear it withnull.-
state stringThe subscription state:
awaiting,active,suspended,endedorstopped. -
business_entity stringThe external ID of the business entity, if it has one, e.g.
"DKbusiness". -
periods array
One object per period, in order of
begin, earliest first.-
id stringThe ID of the period, e.g.
"835270". -
campaign stringThe Iteras ID of the campaign, e.g.
"12345". -
campaign_id stringThe campaign's self-chosen ID, e.g.
"3i". -
campaign_name stringThe internal campaign name, e.g.
"3 issues". -
campaign_customer_facing_name stringThe campaign name shown to customers, e.g.
"Beautiful 3 issues". -
begin datetimeWhen the period begins, as
YYYY-MM-DDTHH:MM:SS, e.g.2026-08-30T23:57:57. -
end datetimeWhen the period ends, as
YYYY-MM-DDTHH:MM:SS,nullif it is ongoing. -
current boolWhether the period is currently active, e.g.
true. -
subscribed_to arrayProducts the subscription is subscribed to in this period.
-
products arrayProducts assigned to the period, e.g. issues contained in it.
-
group_customer_id stringThe customer number of the group owner, for a recipient subscription.
-
group_subscription_id stringThe ID of the group subscription, for a recipient subscription.
-
addon_base_subscription_id stringThe ID of the base subscription, for an add-on subscription.
-
quantity integerThe quantity, if not one, e.g.
2.
-
-
current_period object with
fields=subscriptions.current_periodThe currently active period, in the same format as a period inperiods.nullwhen there is no active period. -
subscription_begin datetime with
fields=subscriptions.beginWhen the subscription began, asYYYY-MM-DDTHH:MM:SS, e.g.2026-08-30T23:57:57. -
cancelled bool with
fields=subscriptions.cancelledWhether a stop has been requested. -
stop_requested datetime with
fields=subscriptions.stop_requestedWhen a stop was requested, if any, asYYYY-MM-DDTHH:MM:SS, e.g.2026-09-30T23:57:57. -
subscription_end datetime with
fields=subscriptions.endWhen the subscription ends or has ended, if it can be deduced, asYYYY-MM-DDTHH:MM:SS, e.g.2026-12-30T23:57:57. -
invoice_lines_calculated_for_current_campaign array with
fields=subscriptions.invoice_lines_calculated_for_current_campaignThe invoice lines a full period on the current campaign would be invoiced, in the same format as lines on invoices, with an additionalcampaign_id, e.g.[{ "text": "3 months", "amount": 24950, "tax_rate": 0.25, "campaign_id": "3m" }]. -
price decimal with
fields=subscriptions.priceThe price of the subscription, if filled in, e.g.99.95. -
currency string with
fields=subscriptions.priceThe currency of the price, e.g."EUR". -
payment_agreement object with
fields=subscriptions.payment_agreementThe payment agreement of the subscription.
-
id stringThe ID of the payment agreement.
-
text stringA human-readable description of the payment agreement.
-
created datetimeWhen the payment agreement was created, as
YYYY-MM-DDTHH:MM:SS.
-
-
policy object with
fields=subscriptions.policyAn overriding business policy, if set on the subscription.
-
id stringThe ID of the policy.
-
external_id stringThe external ID of the policy.
-
-
invoiced_by string with
fields=subscriptions.invoiced_byHow the subscription is invoiced, e.g."E-mail". -
allowed_complaint_dates array with
fields=subscriptions.allowed_complaintsThe dates a complaint can be filed, if any, e.g.["2026-10-27", "2026-10-29"]. -
allowed_complaint_reason_codes array with
fields=subscriptions.allowed_complaintsThe reason codes that can be used for a complaint, if any, e.g.["20", "25"]. -
products arrayProducts assigned directly to the subscription, if any, e.g.
[{"id": "9976483", "name": "Name"}]. -
group string deprecated
recipient,adminoradmin+recipient, for a group subscription. -
group_customer_id stringThe customer number of the group owner, for a recipient subscription, e.g.
"123456". -
group_subscription_id stringThe ID of the group subscription, for a recipient subscription, e.g.
"654321". -
addon_base_subscription_id stringThe ID of the base subscription, for an add-on subscription, e.g.
"654322". -
quantity integerThe quantity, if not one, e.g.
2.
-
Here's an example where subscriptions are requested:
GET /api/customers/?id=12345,12346&fields=subscriptions,subscriptions.price,subscriptions.payment_agreement,subscriptions.allowed_complaints,subscriptions.invoiced_by{
"customers": [
{
"id": "12345",
"subscriptions": [
{
"id": "32134123",
"state": "active", // or suspended/awaiting/ended/stopped
"business_entity": "DKbusiness", // included if the business entity has an external ID
"data": {
"created": "2026-08-30T23:57:57",
":Custom subscription field": "Example text"
},
"price": 99.95, // included if "subscriptions.price" specified
"currency": "EUR", // included if "subscriptions.price" specified
"invoiced_by": "E-mail", // included if "subscriptions.invoiced_by" specified
"products": [ // only filled in if there are individual products assigned to the subscription itself
{
"id": "9976483", // id of product assignment
"name": "Name",
"external_id": "External ID",
":Custom product field": "Some value",
"data": {
":Custom product assignemnt field": "Product value",
}
}
],
"periods": [
{
"id": "835270",
"campaign_name": "3 issues",
"campaign_customer_facing_name": "Beautiful 3 issues",
"campaign_id": "3i",
"begin": "2026-08-30T23:57:57",
"end": null,
"current": true, // if the period is currently active
"subscribed_to": [
{
"name": "Subscription Product Name",
"external_id": "External ID",
}
],
"products": [ // products assigned to the period, e.g. issues contained in the subscription
{
"id": "19976483", // id of product assignment
"name": "Name",
"date": "2026-09-30",
"external_id": "External ID",
}
]
}
],
"payment_agreement": { // included if "subscriptions.payment_agreement" specified
"id": "75493106",
"text": "Mastercard: XX...XX2451 (10/2028)",
"created": "2024-10-30T23:57:57"
},
"group_customer_id": "123456", // filled in if it's a recipient subscription
"group_subscription_id": "654321", // points to the group subscription
"addon_base_subscription_id": "654322", // filled in with base subscription if this is an add-on subscription to the base
"allowed_complaint_dates": [
"2026-10-27",
"2026-10-29"
],
"allowed_complaint_reason_codes": [
"20",
"25"
]
}
]
},
// ...
]
}Products
-
products array with
fields=productsProducts that are assigned directly to the customer, i.e. not via a subscription. Products the customer receives through a subscription are listed under the subscription, see subscriptions.
-
id stringThe ID of the product assignment, e.g.
"66388". -
name stringThe product name, e.g.
"Voucher product". -
customer_facing_name stringThe product name shown to customers, e.g.
"13 issues of interesting stuff". Included if set. -
external_id stringThe external ID of the product, e.g.
"voucher24". Included if set. -
created datetimeWhen the product was assigned to the customer, as
YYYY-MM-DDTHH:MM:SS, e.g.2026-09-30T23:57:57. -
distribution_integration stringThe ID of the distribution integration the product is assigned to, if any.
-
data objectThe data of the product assignment, if any, including the custom product assignment fields. Product fields are at the top-level, product assignment fields are in
data. -
business_entity stringThe external ID of the business entity, if it has one, e.g.
"DKbusiness". -
redeemed datetimeWhen the voucher was redeemed, as
YYYY-MM-DDTHH:MM:SS, e.g.2026-10-29T23:57:57. Present only for a redeemed voucher product. -
redeemed_by stringThe customer number of the redeeming customer, e.g.
"352". Present only for a redeemed voucher product. -
redeemed_subscriptions arrayThe IDs of the subscriptions created with the voucher, e.g.
["73652"]. Present only for a redeemed voucher product.
You can set any custom product field, using its field id (the field name with a colon prepended, or its external identifier).
Log in, or send your API key as a bearer token, to see the custom product fields set up for your account.
A yes/no field (type
bool) istrueorfalse, and has no value when it isn't set. Set it withtrueorfalse, and clear it withnull.You can set any custom product assignment field, using its field id (the field name with a colon prepended, or its external identifier).
Log in, or send your API key as a bearer token, to see the custom product assignment fields set up for your account.
A yes/no field (type
bool) istrueorfalse, and has no value when it isn't set. Set it withtrueorfalse, and clear it withnull. -
Here's an example:
GET /api/customers/?id=12346&fields=products{
"customers": [
{
"id": "123456",
"products": [
{
"id": "66388",
"external_id": "voucher24",
"name": "Voucher product",
"created": "2026-09-30T23:57:57",
":Custom product field": "Example text",
// ... more product fields, and if the voucher has been redeemed also redeemed/redeemed_by/redeemed_subscriptions
}
]
}
]
}Invoices
-
invoices array with
fields=invoicesInvoices, reminders and credit notes for the customer.
-
invoice_number stringThe invoice number, e.g.
"1001". -
invoice_type string
invoice,reminderorcreditnote. -
invoice_date dateWhen the invoice was issued, as
YYYY-MM-DD, e.g.2026-07-30. -
due dateWhen the invoice is due, as
YYYY-MM-DD. Included if a due date is set. -
to_pay decimal
The amount not yet paid, e.g.
120.95,0if it has been paid.You might think that you can just check
to_payto determine if the invoice is to be paid. But if an invoice goes unpaid and a reminder is sent, you usually want to show the reminder instead of the invoice, since it may carry a reminder fee still to be paid. So instead inspectto_be_paidto figure out whether an invoice or reminder should be presented for payment. -
to_be_paid boolWhether the invoice should be presented for payment, e.g.
true. Set for the most recent due invoices and reminders. -
reminder integerThe reminder counter, e.g.
1. Present only on reminders. -
currency stringThe currency of the amounts, e.g.
"EUR". -
invoiced_by stringHow the invoice was invoiced, e.g.
"Payment card". -
business_entity stringThe external ID of the business entity, if it has one, e.g.
"DKbusiness". -
download_url string with
fields=invoices.download_urlA URL for the invoice PDF, e.g.
"https://app.iteras.dk/example/invoice/1001/pdf/?...".When you request this, pass
preauthsecondsto append a token to the download links so they work without logging in for as long as specified. -
payment_url string with
fields=invoices.payment_urlA URL to pay the invoice, if the invoice is payable. -
lines array with
fields=invoices.linesA line on the invoice, describing part of what was invoiced.
-
text stringThe description of the line, e.g.
"Subscription 1 year". -
amount decimalThe amount with tax, e.g.
120.95. -
tax_rate decimalThe tax rate as a fraction, e.g.
0.25for 25%. -
tax_amount decimalThe tax amount, e.g.
24.19. -
quantity decimalThe quantity, if not one, e.g.
2. -
category string
The line category:
subscriptionproductproductvouchernonediscountfeepostagereminderfee
-
period_campaign_id stringThe campaign's self-chosen ID, e.g.
"1y". Included for lines tied to a subscription period. -
period_begin datetimeWhen the period begins, as
YYYY-MM-DDTHH:MM:SS, e.g.2026-07-30T23:57:57. Included for lines tied to a subscription period. -
period_end datetimeWhen the period ends, as
YYYY-MM-DDTHH:MM:SS,nullif ongoing. Included for lines tied to a subscription period. -
period_id stringThe ID of the period, e.g.
"7632784". Included for lines tied to a subscription period. -
subscription_id stringThe ID of the subscription, e.g.
"275498". Included for lines tied to a subscription. -
product_assignment stringThe ID of the product assignment, if any, e.g.
"73529". -
products array
The products the line is for, if any, e.g.
[{ "id": "12", "name": "Weekend paper" }].
-
-
Here's an example where invoices are requested:
GET /api/customers/?id=12345,12346&fields=invoices,invoices.download_url,invoices.payment_url,invoices.lines&iframe=1&preauthseconds=3600{
"customers": [
{
"id": "12345",
// ...
"invoices": [
{
"invoice_number": "1001",
"invoice_type": "invoice",
"invoice_date": "2026-07-30",
"due": "2026-08-13",
"invoiced_by": "Payment card",
"to_pay": 120.95, // amount not yet paid (0 if it has been paid)
"business_entity": "DKbusiness", // included if the business entity has an external ID
"download_url": "https://app.iteras.dk/example/iframe/invoice/1001/pdf/?...",
"payment_url": "https://app.iteras.dk/example/iframe/ordering/summary/?invoice=...",
"lines": [
{
"text": "Subscription 1 year",
"amount": 120.95, // amount with tax
"tax_rate": 0.25,
"tax_amount": 24.19,
"quantity": 2,
"category": "subscription",
"period_campaign_id": "1y",
"period_begin": "2026-07-30T23:57:57",
"period_end": null,
"period_id": "7632784",
"subscription_id": "275498",
"products": [ // only if the line is associated with specific products
{
"id": "7365",
"name": "My product",
"customer_facing_name": "The best product",
"external_id": "my_prod"
}
]
},
{
"text": "Extra book",
"amount": 550.00, // amount with tax
"tax_rate": 0.25,
"tax_amount": 110.00,
"category": "product",
"product_assignment": "73529" // ID of the product assignment (if any)
}
]
},
{
"invoice_number": "1005",
"invoice_type": "reminder",
"invoice_date": "2026-08-20",
"reminder": 1,
"due": "2026-09-03",
"invoiced_by": "Payment card",
"to_pay": 170.95,
"to_be_paid": true, // whether to show this as an invoice to pay, see below
"business_entity": "DKbusiness", // included if the business entity has an external ID
"download_url": "https://app.iteras.dk/example/iframe/invoice/1004/pdf/?...",
"payment_url": "https://app.iteras.dk/example/iframe/ordering/summary/?invoice=...",
"lines": [
{
"text": "Reminder fee",
"amount": 50.0,
"tax_rate": 0,
"tax_amount": 0,
"category": "reminderfee"
}
]
},
{
"invoice_number": "4",
"invoice_type": "creditnote",
"invoice_date": "2026-08-27",
"to_pay": -20.75, // as this is a credit note the amount is negative
"business_entity": "DKbusiness", // included if the business entity has an external ID
"download_url": "https://app.iteras.dk/example/invoice/4/pdf/?...",
"lines": [
{
"text": "Credited due to circumstances",
"amount": -20.75,
"tax_rate": 0.25,
"tax_amount": -4.15,
"quantity": 0.5,
"category": "subscription",
"period_campaign_id": "1y",
"period_begin": "2026-07-30T23:57:57",
"period_end": null
}
]
}
]
},
// ...
]
}Balance
-
balance array with
fields=balanceThe customer's balance, paid minus invoiced, per business entity.
-
amount decimalThe balance, paid minus invoiced, e.g.
-99.95. Negative means the customer still owes money; positive means the customer is ahead of what they've been invoiced. -
currency stringThe currency of the amount, e.g.
"EUR". -
business_entity stringThe external ID of the business entity, if it has one, e.g.
"DKbusiness".
-
GET /api/customers/?id=12345,12346&fields=balance{
"customers": [
{
"id": "12345",
"balance": [
{
"amount": -99.95,
"currency": "EUR",
"business_entity": "DKbusiness" // included if the business entity has an external ID
}
]
},
// ...
]
}Estimated invoicings
-
estimated_invoicings array with
fields=estimated_invoicingsYou can ask the system to run a simulation of how it would invoice in the future for the customer and get back an estimate of that as an approximate timestamp and the associated invoice lines. You'll usually want to set
estimated_invoicings_untilto your time horizon (e.g. 3 months).-
at datetimeAn estimate of when the invoicing happens, as
YYYY-MM-DDTHH:MM:SS. -
lines array
The invoice lines that would result.
-
text stringThe description of the line, e.g.
"Subscription 1 year". -
amount decimalThe amount with tax, e.g.
120.95. -
tax_rate decimalThe tax rate, e.g.
0.25. -
subscription_id stringThe ID of the subscription, if any, e.g.
"4321". -
period_campaign_id stringThe campaign's self-chosen ID, if the line is tied to a subscription, e.g.
"1y". -
quantity decimalThe quantity, if not one, e.g.
2.
-
-
Here's an example:
GET /api/customers/?id=12345,12346&fields=estimated_invoicings&estimated_invoicings_until=2027-01-30{
"customers": [
{
"id": "12345",
"estimated_invoicings": [
{
"at": "2026-12-03T23:57:57",
"lines": [
{
"text": "Subscription 1 year",
"amount": 120.95, // amount with tax
"tax_rate": 0.25,
"tax_amount": 24.19,
"category": "subscription",
"subscription_id": "4321",
"period_campaign_id": "1y"
}
]
}
]
},
// ...
]
}The estimated_invoicings is
left out if the estimation does not find any future invoicings for the customer.
Payments
-
payments array with
fields=paymentsThe payments from the customer (not refunds).
-
id stringThe ID of the payment, e.g.
"824731". -
amount decimalThe amount paid, e.g.
175.95. -
currency stringThe currency of the amount, e.g.
"EUR". -
method stringThe payment method, e.g.
"manual". -
account_date dateThe date the payment is accounted for, as
YYYY-MM-DD, e.g.2026-10-27. -
registered_date dateWhen the payment was registered, as
YYYY-MM-DD, e.g.2026-10-27. -
business_entity stringThe external ID of the business entity, if it has one, e.g.
"DKbusiness". -
allocated_to array
What the payment was allocated to, if anything.
-
amount decimalThe amount allocated, e.g.
100.00. -
invoice_number stringThe invoice the amount was allocated to, e.g.
"73527".
-
-
GET /api/customers/?id=12345,12346&fields=payments{
"customers": [
{
"id": "12345",
"payments": [
{
"amount": 175.95,
"currency": "DDK",
"registered_date": "2026-10-27T23:57:57",
"account_date": "2026-10-27",
"method": "manual",
"business_entity": "DKbusiness", // included if the business entity has an external ID
"allocated_to": [
{
"amount": 100.00,
"invoice_number": "73527"
},
]
}
]
},
// ...
]
}Overrides
-
overrides array with
fields=overridesOverrides for the customer, e.g. vacations registered for subscriptions or future changes. You should use the filter
filter_fromto only fetch overrides beginning after that date, e.g.?filter_from=2026-04-30- you can also specify a relative date with-6mfor "6 months ago"-
override_id stringThe ID of the override, e.g.
"77642". -
type stringThe type of override, e.g.
alternative-deliveryorpause-delivery-donate. See the available override types. -
begin datetimeWhen the override begins, as
YYYY-MM-DDTHH:MM:SS, e.g.2026-10-16T23:57:57. -
end datetimeWhen the override ends, as
YYYY-MM-DDTHH:MM:SS, e.g.2026-10-23T23:57:57. -
subscription_id stringThe ID of the subscription the override applies to, if any, e.g.
"1". -
data objectOverride-specific data, if any, e.g. an alternative delivery address or a donation amount.
-
GET /api/customers/?id=12345,12346&fields=overrides&filter_from=2025-10-30 {
"customers": [
{
"id": "12345",
"overrides": [
{
"override_id": "77642",
"type": "alternative-delivery",
"begin": "2026-10-16T23:57:57",
"end": "2026-10-23T23:57:57",
"subscription_id": "1",
"data": {
"address": {
"name": "Some Test",
"address": "Somewhere Else\n2412 Northpole",
"country": "DK"
}
}
},
{
"override_id": "77643",
"type": "pause-delivery-donate",
"begin": "2026-10-02T23:57:57",
"end": "2026-10-09T23:57:57",
"subscription_id": "1",
"data": {
"donate_amount": 8.28,
"credit_percentage": 50,
"donation_recipient_name": "Private Fund"
}
}
]
},
// ...
]
}Complaints
-
complaints array with
fields=complaintsDistribution complaints by the customer. You should use the filter
filter_fromto only fetch complaints made on or after that date, e.g.?filter_from=2026-04-30- you can also specify a relative date with-6mfor "6 months ago"-
subscription_id stringThe ID of the subscription the complaint is about, if any, e.g.
"1". -
status stringThe status of the complaint, e.g.
awaiting. -
complaint_date dateWhen the complaint was made, as
YYYY-MM-DD, e.g.2026-10-29. -
reason_code stringThe reason code of the complaint, e.g.
"20". -
reason_text stringA description of the reason, e.g.
"Wet newspaper". -
compensation_action stringThe compensation, e.g.
creditorextend. Empty if there is no compensation. -
compensation_amount decimalThe credited amount, e.g.
10.25. Included when the compensation is a credit and the complaint is not cancelled. -
extend_subscription_by integerHow many issues the subscription is extended by, e.g.
1. Included when the compensation is an extension.
-
GET /api/customers/?id=12345,12346&fields=complaints&filter_from=2025-10-30{
"customers": [
{
"id": "12345",
"complaints": [
{
"subscription_id": "1",
"status": "awaiting",
"complaint_date": "2026-10-29",
"reason_code": "20",
"reason_text": "Wet newspaper",
"compensation_action": "credit", // empty if no compensation
"compensation_amount": 10.25, // for 'credit' compensation
"extend_subscription_by": 1 // for 'extend' compensation
},
]
},
]
}Segments
-
segments array with
fields=segmentsThe segments that the customer is in. Segments in Iteras are computed from conditions and are set up inside Iteras.
-
name stringThe name of the segment, e.g.
"Blue segment". -
external_id stringThe external ID of the segment, e.g.
"blue".
-
GET /api/customers/?id=12345&fields=segments {
"customers": [
{
"id": "12345",
"segments": [
{
"name": "Blue segment",
"external_id": "blue"
}
]
}
]
}History
-
history array with
fields=historyA human readable log of history related to the customer. Use this only when a human-readable version is needed, not for analysis work — for that, retrieve machine-readable events directly.
-
text stringA human-readable description of what happened, e.g.
"Something happened". -
timestamp datetimeWhen it happened, as
YYYY-MM-DDTHH:MM:SS, e.g.2026-07-30T23:57:58. -
by stringWho did it, e.g.
"somebody@example.com".
-
GET /api/customers/?id=12345,12346&fields=history&filter_from=2026-04-30{
"customers": [
{
"id": "12345",
// ...
"history": [
{
"text": "Something else happened",
"timestamp": "2026-06-30T23:57:58",
"by": "System"
},
{
"text": "Something happened",
"timestamp": "2026-07-30T23:57:58",
"by": "somebody@example.com"
}
]
},
// ...
]
}Extra fields
Some fields have extra formatting options you can use. You
request them with an extrafield parameter. The format
is field_name:formattingoption. In case you want to
avoid having a field with a ":" in it, you can name the resulting
field with "=" like
field_name:formattingoption=formatted_field_name. You
can specify extrafield multiple times to add more fields.
Here's an example:
GET /api/customers/?id=12345&extrafield=delivered_to%3Aformatted&extrafield=delivered_to%3Apostcode%3Dpostcode{
"customers": [
{
"id": "12345",
"data": {
"delivered_to:formatted": "John Doe\nSome Road 123\n1000 København K\nDanmark",
"postcode": "1000",
// ...
}
}
]
}Currently address fields support the following formatting options:
- "formatted" - multi-line textual representation of name, company, address and country
- "postcode" - use the address parser in Iteras to try to extract the postcode
- "address:split" - use the address parser in Iteras to try to split the address itself into components
Pagination
To avoid having to handle a too large JSON document both in the
sending and receiving end, the results are divided into pages. You
can set the page size with max_results. If a query
finds more results than what fits into the first page, the returned
result contains a next_url where you can retrieve the
next page, which may in turn have a next_url. Here's
an example with 103 customers and a page size of 100:
GET /api/customers/?max_results=100{
"customers": [ /* customer 1 to customer 100 */ ],
"next_url": "https://app.iteras.dk/api/customers/?max_results=100&from=101"
}Then when you query next_url, you get the next page of
customers - in this example this is the last page of results, so there
is no next_url:
GET /api/customers/?max_results=100&from=101{
"customers": [ /* customer 101 to customer 103 */ ]
}If you write code that may return a lot of customers, you should set max_results to
a low value while you test your code to make sure you can handle
the pagination correctly.
The from parameter is an internal parameter used for
the pagination. Currently it's just the customer number to start
at.
Errors
An invalid filter, filter_subscriptions or extrafield, or a missing preauthseconds
when requesting preauth_token, returns a plain text HTTP 400 error.