Skip to main content

Policies

The policies query returns the policies connected to your account, along with the premium each one pays and the fund units it currently holds. Use it to reconcile your own system against ours, or to show a broker their portfolio.

It requires the POLICY_READ permission on your API key — contact support to have it enabled.

Fetching policies​

Results are ordered by policy number and paginated with cursors. Omit pagination to get the first 50.

query Policies($pagination: PoliciesPaginationInput, $includeSubPartners: Boolean = false) {
policies(pagination: $pagination, includeSubPartners: $includeSubPartners) {
__typename
... on PoliciesConnection {
totalCount
pageInfo {
hasNextPage
endCursor
}
edges {
cursor
node {
id
active
firstPremiumStatus
regularPremium {
amount
currency
frequency
}
fundAllocation {
valuationDate
funds {
isin
units
isLoyaltyFund
}
}
}
}
}
... on UnauthorizedOperationError {
message
}
... on InputValidationError {
invalidInput
message
}
... on UnexpectedError {
message
}
}
}
{
"pagination": { "first": 50 },
"includeSubPartners": false
}

Response

{
"data": {
"policies": {
"__typename": "PoliciesConnection",
"totalCount": 128,
"pageInfo": { "hasNextPage": true, "endCursor": "FL-1234567" },
"edges": [
{
"cursor": "FL-1234567",
"node": {
"id": "FL-1234567",
"active": true,
"firstPremiumStatus": "RECEIVED",
"regularPremium": { "amount": 33000, "currency": "CHF", "frequency": "MONTHLY" },
"fundAllocation": {
"valuationDate": "2026-07-29",
"funds": [
{ "isin": "LU0552385295", "units": 142.8317, "isLoyaltyFund": false },
{ "isin": "LU0552385295", "units": 3.1104, "isLoyaltyFund": true }
]
}
}
}
]
}
}
}

What we provide​

FieldDescription
idThe policy number, e.g. FL-1234567. Identical to the contractID of the offer it was issued from, and to the edge's cursor.
activeWhether the policy is currently in force. false once terminated or otherwise inactive.
firstPremiumStatusWhether the policy's first premium has reached the insurance system, and — where it has not — what the policyholder has said about it.
regularPremium.amountThe size of one payment, in the smallest unit of its currency — 33000 is 330.00. One payment, not a yearly figure and not a total.
regularPremium.currencyThe ISO 4217 code the amount is denominated in, CHF or EUR. Read it before you book the amount.
regularPremium.frequencyHow often the payment falls due: MONTHLY, QUARTERLY, SEMI_ANNUALLY or ANNUALLY. The same four cadences createOffer accepts.
fundAllocation.valuationDateThe day the holdings are as of. The insurance system values per calendar day and typically lags a few business days, so this is normally not today.
fundAllocation.fundsOne entry per (isin, isLoyaltyFund) pair — a fund held both as a regular position and as loyalty units appears twice. Each entry carries the ISIN, the number of units (fractional), and whether it is the insurer's loyalty fund (Treuefonds).

regularPremium is the premium the policy pays today, not the one its offer was written with — premiums are indexed, paused and rewritten over a policy's life. Amount and cadence stay separate rather than combined into a yearly or lifetime figure, so the total your side books is one you defined. It is null when no recurring premium is due: a single-premium contract, a policy that is paid up, or one that has run past its premium-paying term.

fundAllocation is null when we hold no valuation for the policy — usually because there is none to hold (no premium invested yet, or a product with no investment component).

Any nullable field on a policy can also be null because we could not read it, and the response then carries an entry in its errors array naming the policy and the field. Check errors before you treat a null as an empty portfolio, as a policy that pays nothing, or as one the insurer has never valued.

The query names no person. Policy numbers, premiums and fund holdings are still personal data about the policyholder under the GDPR, and must be handled inside your data-processing agreement.

Your own policies or your whole tree​

With includeSubPartners left at false, as in the query above, you get only the policies of the broker in the x-partner-id header. Flip the variable to include every broker below that one in the hierarchy:

{
"pagination": { "first": 50 },
"includeSubPartners": true
}

That widens the result to the whole sub-tree and requires the additional POLICY_TREE_READ permission — without it the query returns UnauthorizedOperationError.

Paging through the book​

Page in one direction at a time: after with first to go forwards, before with last to go backwards. Mixing the two returns an InputValidationError with invalidInput: PAGINATION_CONFLICTING_ARGUMENTS. A page holds at most 100 policies.

The cursor is the policy number itself, so you can resume from an ID you already stored. If that policy is no longer readable — inactive policies are eventually removed — you get PAGINATION_CURSOR_NOT_FOUND rather than an empty page. Restart the walk without a cursor.

Full field-by-field reference: Schema Reference.