Enterprise FE API (1.0)

Download OpenAPI specification:OpenAPI (JSON)OpenAPI (YAML)

The Enterprise Front End API.

Health

Health check.

Health check.

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
{
  • "status": "string",
  • "entries": { }
}

Customers

Partially update customer details

Applies a partial update to the customer record identified by the supplied external identifier, using JSON Merge Patch semantics (RFC 7396).

Only the fields present in the request body are updated. Omitted fields are left unchanged. Fields outside the documented allowlist are rejected with a validation error; attempts to modify system or unmanaged fields (for example, externalId, email, or state flags) are not permitted.

Fields fall into two tiers. Immediately applicable fields (title, address) are written straight away and the updated record is returned with 200. Verification-gated fields (firstName, middleName, lastName, dateOfBirth) are not applied directly: submitting any of them creates a change request that is verified by an external service — which may approve or reject it — and the response is 202 Accepted with the change request. Some verifications also require supporting documents (for example a marriage certificate for a surname change); the change request indicates whether evidence is required and which document types. Where a single request mixes both tiers, the immediately applicable fields are written and a change request is created for the rest.

Authorisation follows the same role-scoped model as the GET endpoint. A Customer may update only their own record; broader roles may update records within their scope.

All successful updates are captured in the audit trail with before-and-after values. The API application log records only request metadata — which fields were updated, when, and by whom — not the values themselves, in line with UK GDPR data minimisation.

Inactive customer records cannot be updated; attempts return 410 Gone.

Authorizations:
OAuth2
path Parameters
externalId
required
string

The external customer identifier (for example, PER00000001).

Request Body schema: application/json
title
string
firstName
string
middleName
string
lastName
string
dateOfBirth
string
email
string
object (updateFeCustomerAddressRequest)

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "firstName": "string",
  • "middleName": "string",
  • "lastName": "string",
  • "dateOfBirth": "string",
  • "email": "string",
  • "address": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

Retrieve customer details by external identifier

Returns a curated payload of personal details for the customer identified by the supplied external identifier. The response is a shaped data transfer object — internal system fields are not exposed.

Authorisation is role-scoped. A caller with the Customer role may retrieve only their own record. Callers with broader roles (SchemeAdministrator, ClaimsAssessor) may retrieve records within their scope. Requests outside the caller's scope return 403 Forbidden.

Inactive customer records return 410 Gone with a body indicating the record exists but is no longer active.

Authorizations:
OAuth2
path Parameters
externalId
required
string

The external customer identifier (for example, PER00000001).

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

List the policies a customer holds

Returns a list of policies for a given customer identified by their reference. The customer is the policy holder.

The response is a paged collection per the Sovereign Health Care API Design Standards: the data array carries the policy summaries, the pagination block carries navigation state, and meta carries correlation metadata. A customer with no qualifying policies receives 200 OK with data: [] — an empty collection is not an error.

Authorizations:
OAuth2
path Parameters
externalId
required
string

The external customer identifier (for example, PER00000001).

query Parameters
pageSize
integer <int32>

Number of policies to return per page, between 1 and 5000. Optional on the first request, where it defaults to 25. Required whenever 'nextPage' is supplied, and must repeat the value used for the first request - the page size cannot change part-way through a paging sequence.

nextPage
string

Opaque cursor taken from 'pagination.nextPage' of the previous response. Omit to retrieve the first page; echo the value verbatim and do not parse it.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    },
  • "meta": {
    }
}

Organisations

Create an organisation

Register a new organisation in the downstream Core system.

Authorizations:
OAuth2
Request Body schema: application/json
name
string

Legal entity name (typically as registered with Companies House).

email
string
phone
string
object (createFeOrganisationAddressRequest)
object (createFeOrganisationDirectorRequest)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "email": "string",
  • "phone": "string",
  • "address": {
    },
  • "director": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

Update an organisation

Applies a partial update to the organisation identified by the supplied external identifier.

Only the fields present in the request body are updated; omitted fields are left unchanged. Fields outside the documented set are rejected with a validation error, as are the platform-generated externalId, createdAt and modifiedAt.

Two deliberate divergences from RFC 7396 JSON Merge Patch, both platform conventions rather than quirks of this operation:

  1. An explicit null is a no-op, not a removal. Sending {"email": null} leaves the stored email untouched rather than clearing it. There is currently no way to clear an optional field through this endpoint.

  2. director cannot be changed here; it is accepted on create only.

A body that changes nothing is rejected with 400 rather than silently succeeding. An address may be partial: supplying address with only city set changes the city and leaves the rest of the stored address intact.

If-Match is accepted with the value *, which requires the organisation to exist. A concrete ETag is not supported - no endpoint on this platform issues an ETag, so no caller can hold a valid one, and any other value is rejected with 409 rather than silently ignored.

The response is 200 with an empty body: the stored record is not read back. Re-read with GET if the current record is needed.

Authorizations:
OAuth2
path Parameters
externalId
required
string

The external organisation identifier (for example, ORG00001234).

header Parameters
If-Match
string

Optimistic concurrency control. Only * is supported, requiring the organisation to exist. A concrete ETag is rejected with 409 because this API does not issue ETags.

Request Body schema: application/json
name
string
email
string
phone
string
object (updateFeOrganisationAddressRequest)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "email": "string",
  • "phone": "string",
  • "address": {
    }
}

Response samples

Content type
application/json
{
  • "type": "string",
  • "title": "string",
  • "status": 0,
  • "detail": "string",
  • "instance": "string",
  • "code": "string",
  • "errors": [
    ]
}

Locations

Create a location

Register a new location for an organisation in the downstream Core system.

Authorizations:
OAuth2
Request Body schema: application/json
name
string
organisationExternalId
string

External ID of the organisation this location belongs to.

addressLine1
string
addressLine2
string
addressLine3
string
city
string
county
string
postalCode
string
country
string
locationCategory
string
latitude
number or null <double>
longitude
number or null <double>
emailAddress
string
phoneNumber
string
notes
string

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "organisationExternalId": "string",
  • "addressLine1": "string",
  • "addressLine2": "string",
  • "addressLine3": "string",
  • "city": "string",
  • "county": "string",
  • "postalCode": "string",
  • "country": "string",
  • "locationCategory": "string",
  • "latitude": 0,
  • "longitude": 0,
  • "emailAddress": "string",
  • "phoneNumber": "string",
  • "notes": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

ReferenceData

Get the values of a named choice list

Returns the choices (code + label pairs) for the named choice list. Internal numeric identifiers and platform-specific field names are implementation details and are intentionally omitted from the response.

Authorizations:
OAuth2
path Parameters
listName
required
string

camelCase identifier of the choice list. Case-sensitive exact match against the catalogue.

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

List available choice lists (manifest)

Returns a lightweight manifest of every choice list available in the catalogue. Clients call GET /v1/reference-data/{listName} to retrieve the choices themselves.

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

Products

Retrieve a product by its external product reference

Returns a fully expanded product payload — provider, provider settings, all versions, and for each version the benefits, benefit coverages, levels, level benefits and level pricing.

Authorizations:
OAuth2
path Parameters
externalId
required
string

External product reference, example - PRD0000010006.

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

List the benefits defined on a product version

Returns the benefits configured on a product version - the selectable benefits for a claim line item. Used to populate the benefit picker when adding a claim line item: the caller selects a benefit and its reference is sent as the line item's benefitReference.

productVersionReference is the product version's external reference, obtained from the policy's product version.

Authorizations:
OAuth2
path Parameters
productVersionReference
required
string

External reference of the product version, used as an alternate key.

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

Policies

Retrieve a policy by its public reference

Returns a fully expanded policy payload - policy details, the resolved product / version / cover level references, pricing, policy holder (person, contact, consents), payer and Direct Debit details, additional adults, dependants, referral data, and recorded audit events.

The response mirrors the structure of the create-policy request body and adds system-generated identifiers (policyId, policyReference, contactId, contactExternalId), the policy status, and audit metadata.

The response also carries the provider that underwrites the policy (identifier, reference and name), and a coveredEntityReference (CVE...) on the policy holder, on each additional adult and on each dependant. Use a coveredEntityReference with GET /v1/policies/{policyReference}/covered-entities/{coveredEntityReference} to read the details of that covered entity.

Access is subject to object-level authorization (see Authentication and authorization in the API description): the caller must hold an active role on the requested policy. A caller with no active role receives 404, indistinguishable from an unknown reference.

Authorizations:
OAuth2
path Parameters
policyReference
required
string

External policy reference, example - POL-0000010014.

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

Create a new policy from a direct application (no previous quote)

Creates a new policy at Draft status and the supporting customer, policy holder role, covered entity, and audit event records in a single atomic transaction.

Business rules executed during the call:

  • Existing customer match - the platform searches for an existing customer using surname + date of birth + email address. A match reuses the existing record; no match creates a new one.
  • Banned customer rejection - if the matched customer's bannedCustomer flag is true, the application is rejected with HTTP 400 / CUSTOMER_BANNED.
  • Similar policy detection - if the matched customer already holds a policy on the same product and product version, the create proceeds and a non-blocking SIMILAR_POLICY_EXISTS warning is returned in meta.warnings.

Atomicity guarantee: if any inner write fails, all writes for the application are rolled back so the caller can cleanly retry.

Authorizations:
OAuth2
Request Body schema: application/json
startDate
string

Requested policy live date. Recorded as the policy's live date and used as the effective-from date for the policy holder role, covered entity, and audit event.

fundingType
string
object (createFePolicyProductRequest)
object (createFePolicyPricingRequest)
object (createFePolicyHolderRequest)

Responses

Request samples

Content type
application/json
{
  • "startDate": "string",
  • "fundingType": "string",
  • "product": {
    },
  • "pricing": {
    },
  • "policyHolder": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

Record a new audit event against a policy

Appends a new audit / lifecycle event to an existing policy, identified by its public reference. Events provide an immutable, append-only history of what happened to a policy and when - policy creation, cover-level changes, premium changes, cancellations, renewals, and so on - supporting servicing visibility, audit, and FCA record-keeping.

The event is written as a single record linked to the parent policy. Optional before / after detail (status, funding type, member type, cover level, premium) may be supplied through the change object for transition-type events (for example COVER_LEVEL_CHANGE or PREMIUM_CHANGE).

This operation is append-only: it creates a new event and never mutates the policy header or any existing event. The authenticated principal is recorded against the event as the performer.

Responses follow the Sovereign Health Care API Design Standards: a successful create returns the created event inside a data + meta envelope; errors use RFC 9457 application/problem+json.

Authorizations:
OAuth2
path Parameters
policyReference
required
string

External policy reference, example - POL-0000010014.

Request Body schema: application/json
eventType
string
eventDate
string

Timestamp the event occurred (ISO 8601 UTC).

effectiveDate
string

Business-effective date of the event (YYYY-MM-DD). Persisted at midnight UTC.

name
string
description
string
status
string
externalId
string
object (createFePolicyEventChangeRequest)

Responses

Request samples

Content type
application/json
{
  • "eventType": "string",
  • "eventDate": "string",
  • "effectiveDate": "string",
  • "name": "string",
  • "description": "string",
  • "status": "string",
  • "externalId": "string",
  • "change": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

List the policies the authenticated caller holds a role on

Returns the policies on which the authenticated caller currently holds an active policy role.

The caller is resolved from the bearer token's identity to the linked person, and the response lists the policies on which that person holds an active role - a current, active role whose effective period includes today's date.

Each policy appears once; where the caller holds more than one role on the same policy (for example both Policy Holder and Payer), all such roles are listed in policyRoleTypes. The policies are returned in the standard collection envelope data array; callers with no active policy roles receive an empty data array.

Authorizations:
OAuth2
query Parameters
pageSize
integer <int32>

Number of policies to return per page, between 1 and 5000. Optional on the first request, where it defaults to 25. Required whenever 'nextPage' is supplied, and must repeat the value used for the first request - the page size cannot change part-way through a paging sequence.

nextPage
string

Opaque cursor taken from 'pagination.nextPage' of the previous response. Omit to retrieve the first page; echo the value verbatim and do not parse it.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    },
  • "meta": {
    }
}

List the covered entities (people/animals) on a policy

Returns the entities covered by the policy - the people (and, for some products, animals) that claims can be made for. Used to populate the claimant picker when adding a claim line item: the caller selects a covered entity and its coveredEntityReference (CVE...) is sent as the line item's claimantReference.

Only active covered entities are returned.

Access is subject to object-level authorization: the caller must hold an active role on the policy. A caller with no active role receives 404, indistinguishable from an unknown reference.

Authorizations:
OAuth2
path Parameters
policyReference
required
string

External policy reference, example - POL-0000010014.

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

Retrieve the details of one covered entity on a policy

Returns the details of one covered entity on the policy, identified by its external reference (CVE...). Used to drill into a covered entity from the policy view, and by processes such as claims evaluation that need the cover details of a claimant.

The covered entity is a policy administration (PAS) record. The response holds the PAS detail - entity type, member type, status, effective dates and the active exclusions - together with references to the related Core records:

  • person.personReference (PER...) - the covered person. Use it with GET /v1/customers/{externalId} in the Customer API.
  • organisations[].organisationReference (ORG...) - the organisations associated with the covered entity. In this version that is the employer of the scheme the policy belongs to. Use it with GET /v1/organisations/{externalId} in the Organisation API.

Person and organisation detail (names, contact details, addresses) is deliberately not returned here: it is Core data and is read from the Core APIs with the references above.

Active and inactive covered entities are both returned; status says which. Only active exclusions are returned.

Access is subject to object-level authorization: the caller must hold an active role on the policy. The API responds 404 when the policy is unknown, when the caller holds no active role on it, and when the covered entity is unknown or belongs to a different policy. The three cases are indistinguishable.

Authorizations:
OAuth2
path Parameters
policyReference
required
string

External policy reference, example - POL-0000010014.

coveredEntityReference
required
string

External reference of the covered entity, example - CVE0000010037. As returned by GET /v1/policies/{policyReference}/covered-entities.

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

List the benefit pots on a policy

Returns the benefit pots on the policy. A benefit pot is the allowance for one benefit over one benefit period: the amount allocated at the start of the period (initialAllocation), the amount claimed against it to date (claimedAmount), and what is left (remainingBalance), together with the period start and end dates.

Pots are held at benefit level. A benefit may have more than one pot on the same policy: an Individual pot for each covered entity, or a pooled Dependants / Family pot shared across the household. potScope says which, and coveredEntity is present only on Individual pots.

By default only pots for the current benefit period are returned (periodStatus = Active). Pass includeHistoricPeriods=true to also return Expired and Carried Over periods.

Pass coveredEntityReference to return only the pots that apply to one covered entity - for example to show one person's remaining cover. The result holds that covered entity's Individual pots plus the pooled pots the covered entity shares: every Family pot, and the Dependants pots when the covered entity's member type is Dependant. Individual pots of other covered entities are left out. The covered entity must be on this policy; an unknown reference, or one that belongs to a different policy, gives 400.

Items are ordered by periodStart descending (current period first), then benefit.name ascending, then potScope (Individual, Dependants, Family), then coveredEntity.coveredEntityReference.

Access is subject to object-level authorization: the caller must hold an active role on the policy. A caller with no active role receives 404, indistinguishable from an unknown reference.

Authorizations:
OAuth2
path Parameters
policyReference
required
string

External policy reference, example - POL-0000010014.

query Parameters
coveredEntityReference
string

External reference of a covered entity on this policy (CVE...), as returned by GET /v1/policies/{policyReference}/covered-entities. When supplied, only the pots that apply to that covered entity are returned. When omitted, all pots on the policy are returned.

includeHistoricPeriods
boolean

When false (the default) only pots whose periodStatus is Active

  • the current benefit period - are returned. When true, pots for Expired and Carried Over periods are returned as well.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

PortalRoles

List portal role assignments for the customer

Returns the list of active portal role assignments held by the customer. The API derives the Entra object identifier (oid) from the bearer token and resolves the matching PortalUser records, filtering to those marked active.

A single Entra identity may hold multiple portal role assignments (for example, a Customer who is also a SchemeAdministrator on a corporate scheme). Each assignment is returned as a discrete PortalRole entry.

An authenticated caller with no active portal role assignments receives a 200 OK response with data: []. This is not an error condition — it indicates a recognised identity that has not yet been onboarded to any portal role.

This endpoint is the canonical mechanism for portals and broker integrations to discover the caller's available contexts after sign-in. It does not require a path parameter; identity is taken from the bearer token alone.

Authorizations:
OAuth2
query Parameters
pageSize
integer <int32>

Number of portal role assignments to return per page, between 1 and 5000. Optional on the first request, where it defaults to 25. Required whenever 'nextPage' is supplied, and must repeat the value used for the first request - the page size cannot change part-way through a paging sequence.

nextPage
string

Opaque cursor taken from 'pagination.nextPage' of the previous response. Omit to retrieve the first page; echo the value verbatim and do not parse it.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    },
  • "meta": {
    }
}

Schemes

List schemes the caller has access to

Returns the schemes the authenticated caller has access to. Access is granted via the caller's portal-role scheme assignments. The caller's Entra object identifier (oid) is resolved from the bearer token; no path parameter is required. An authenticated caller with no scheme grants receives 200 with an empty list.

Authorizations:
OAuth2
query Parameters
pageSize
integer <int32>

Number of schemes to return per page, between 1 and 5000. Optional on the first request, where it defaults to 25. Required whenever 'nextPage' is supplied, and must repeat the value used for the first request - the page size cannot change part-way through a paging sequence.

nextPage
string

Opaque cursor taken from 'pagination.nextPage' of the previous response. Omit to retrieve the first page; echo the value verbatim and do not parse it.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    },
  • "meta": {
    }
}

Get a scheme collection

Returns a single collection belonging to the scheme, addressed by its collection reference. Provides the header detail (due date, status, member count and totals) for the collection drill-down.

Authorizations:
OAuth2
path Parameters
schemeReference
required
string

Scheme reference (e.g. SCH000000000).

schemeCollectionReference
required
string

External identifier of the scheme collection. Obtain it from schemeCollectionReference in the list-collections response. Treat as an opaque string; the reference format is not yet finalised.

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

List the scheme policies making up a collection

Returns the per-policy breakdown of a single scheme collection: the policies the collection is (or will be) applied to, and the amount attributed to each. The collection must belong to the scheme in the path; otherwise 404 is returned so a caller cannot read another scheme's breakdown.

Authorizations:
OAuth2
path Parameters
schemeReference
required
string

Scheme reference (e.g. SCH000000000).

schemeCollectionReference
required
string

External identifier of the scheme collection. Obtain it from schemeCollectionReference in the list-collections response. Treat as an opaque string; the reference format is not yet finalised.

query Parameters
pageSize
integer <int32>

Number of breakdown lines to return per page, between 1 and 5000. Optional on the first request, where it defaults to 25. Required whenever 'nextPage' is supplied, and must repeat the value used for the first request.

nextPage
string

Opaque cursor taken from 'pagination.nextPage' of the previous response. Omit to retrieve the first page; echo the value verbatim and do not parse it.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    },
  • "meta": {
    }
}

List scheme collection schedules

Retrieve a page of the collection schedules of a scheme the caller administers - the plan behind the scheme premium collection. Ordered by start date, most recent first. Authorisation: 403 when the caller holds no grant on the scheme - or the scheme is unknown or soft-deleted, which are indistinguishable so scheme references cannot be enumerated; 404 when the caller does not resolve to a portal identity; 410 when that identity is inactive.

Authorizations:
OAuth2
path Parameters
schemeReference
required
string

Scheme reference (e.g. SCH000000000).

query Parameters
pageSize
integer <int32>

Number of schedules to return per page, between 1 and 5000. Optional on the first request, where it defaults to 25. Required whenever 'nextPage' is supplied, and must repeat the value used for the first request.

nextPage
string

Opaque cursor taken from 'pagination.nextPage' of the previous response. Omit to retrieve the first page; echo the value verbatim and do not parse it.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    },
  • "meta": {
    }
}

List scheme collections

Returns the collection history for the scheme, most recent due date first. Both past and forthcoming collections are included; a forthcoming collection has no collectedDate. Optionally narrowed by due-date range and status.

Authorizations:
OAuth2
path Parameters
schemeReference
required
string

Scheme reference (e.g. SCH000000000).

query Parameters
dueDateFrom
string

Include only collections whose dueDate falls on or after this date (inclusive).

dueDateTo
string

Include only collections whose dueDate falls on or before this date (inclusive).

collectionStatus
string

Include only collections with this status.

pageSize
integer <int32>

Number of collections to return per page, between 1 and 5000. Optional on the first request, where it defaults to 25. Required whenever 'nextPage' is supplied, and must repeat the value used for the first request.

nextPage
string

Opaque cursor taken from 'pagination.nextPage' of the previous response. Omit to retrieve the first page; echo the value verbatim and do not parse it. The filters must be repeated unchanged alongside it.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    },
  • "meta": {
    }
}

Get a scheme invoice

Returns a single invoice raised against the scheme, addressed by its invoice reference. Provides the header detail (invoice number, dates, status and amounts) for the invoice drill-down.

Authorizations:
OAuth2
path Parameters
schemeReference
required
string

Scheme reference (e.g. SCH000000000).

invoiceReference
required
string

External identifier of the invoice. Obtain it from invoiceReference in the list-invoices response. Treat as an opaque string; the reference format is not yet finalised. This is not the same as invoiceNumber, which is the finance-facing number shown to the administrator.

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

List the scheme policies making up an invoice

Returns the per-policy breakdown of a single invoice: the policies the invoice covers, and the amount attributed to each. The breakdown is resolved through the collection the invoice was raised for. The invoice must belong to the scheme in the path; otherwise 404 is returned. An invoice that is not linked to a collection returns an empty list.

Authorizations:
OAuth2
path Parameters
schemeReference
required
string

Scheme reference (e.g. SCH000000000).

invoiceReference
required
string

External identifier of the invoice. Obtain it from invoiceReference in the list-invoices response. Treat as an opaque string; the reference format is not yet finalised. This is not the same as invoiceNumber, which is the finance-facing number shown to the administrator.

query Parameters
pageSize
integer <int32>

Number of breakdown lines to return per page, between 1 and 5000. Optional on the first request, where it defaults to 25. Required whenever 'nextPage' is supplied, and must repeat the value used for the first request.

nextPage
string

Opaque cursor taken from 'pagination.nextPage' of the previous response. Omit to retrieve the first page; echo the value verbatim and do not parse it.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    },
  • "meta": {
    }
}

List scheme invoices

Returns the invoices raised against the scheme, most recent invoice date first. Optionally narrowed by invoice-date range and status.

Authorizations:
OAuth2
path Parameters
schemeReference
required
string

Scheme reference (e.g. SCH000000000).

query Parameters
invoiceDateFrom
string

Include only invoices whose invoiceDate falls on or after this date (inclusive).

invoiceDateTo
string

Include only invoices whose invoiceDate falls on or before this date (inclusive).

invoiceStatus
string

Include only invoices with this status.

pageSize
integer <int32>

Number of invoices to return per page, between 1 and 5000. Optional on the first request, where it defaults to 25. Required whenever 'nextPage' is supplied, and must repeat the value used for the first request.

nextPage
string

Opaque cursor taken from 'pagination.nextPage' of the previous response. Omit to retrieve the first page; echo the value verbatim and do not parse it. The filters must be repeated unchanged alongside it.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    },
  • "meta": {
    }
}

SchemeMembers

Add a scheme member

Adds a member to the scheme. firstName, lastName, employeeNumber and email are all required so the member can be matched against existing Person records (a Person is created if none matches). enrolmentDate is set from effectiveDate; the member starts pending.

Authorizations:
OAuth2
path Parameters
externalId
required
string

Scheme reference (^SCH\d{9}$, e.g. SCH000000000).

Request Body schema: application/json
firstName
string
lastName
string
employeeNumber
string
email
string
effectiveDate
string

The enrolment (effective) date for the member.

memberType
string

Responses

Request samples

Content type
application/json
{
  • "firstName": "string",
  • "lastName": "string",
  • "employeeNumber": "string",
  • "email": "string",
  • "effectiveDate": "string",
  • "memberType": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

List scheme members

Retrieve a page of the members of a scheme the caller administers. Members of every status are returned, including terminated and opted-out. Ordered by employee number. Authorisation: 403 when the caller holds no grant on the scheme - or the scheme is unknown - which are indistinguishable so scheme references cannot be enumerated; 404 when the caller does not resolve to a portal identity; 410 when that identity is inactive.

Authorizations:
OAuth2
path Parameters
externalId
required
string

Scheme reference (^SCH\d{9}$, e.g. SCH000000000).

query Parameters
pageSize
integer <int32>

Number of members to return per page, between 1 and 5000. Optional on the first request, where it defaults to 25. Required whenever 'nextPage' is supplied, and must repeat the value used for the first request - the page size cannot change part-way through a paging sequence.

nextPage
string

Opaque cursor taken from 'pagination.nextPage' of the previous response. Omit to retrieve the first page; echo the value verbatim and do not parse it.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    },
  • "meta": {
    }
}

Remove a scheme member

Removes (terminates) a member from the scheme, identified by the unique scheme member reference, with the given effective date. Soft termination: sets terminationDate and status=terminated, preserving the record for audit. The reference resolves to exactly one member within the scheme, so removal is unambiguous even when employee numbers are duplicated.

Authorizations:
OAuth2
path Parameters
externalId
required
string

Scheme reference (^SCH\d{9}$).

schemeMemberReference
required
string

Unique external-facing identifier of the scheme member to remove. Obtain it from the list-members or add-member response.

query Parameters
effectiveDate
required
string

Effective (termination) date for removing the member.

header Parameters
If-Match
string

Optimistic concurrency control. Use '*' to require the resource to exist, or provide an ETag from a previous GET.

Responses

Response samples

Content type
application/json
{
  • "type": "string",
  • "title": "string",
  • "status": 0,
  • "detail": "string",
  • "instance": "string",
  • "code": "string",
  • "errors": [
    ]
}

Claims

Quick-create a draft claim

Starts a claim against the policy by returning a draft to work in. Drafts are persistent: if the caller already has an open draft claim for this policy, that existing draft is returned (200); otherwise a new empty draft is created (201). The policy is taken from the path, so no request body is required. Returns only the claim reference.

Authorizations:
OAuth2
path Parameters
policyReference
required
string

Policy Reference Number

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

Create a claim line item

Resolve the caller at the edge, then add a line item to a draft claim the caller may see.

Authorizations:
OAuth2
path Parameters
claimReference
required
string

Claim Reference Number

Request Body schema: application/json
benefitReference
string

Reference of the selected benefit, from the mapped benefit dropdown

claimantReference
string

Reference of the covered entity (claimant) this line item is for, selected from the policy's covered entities.

claimDate
string
benefitDate
string

Date the benefit is claimed for (YYYY-MM-DD). Depending on the benefit this is the treatment date, the discharge date, or the birth / adoption date. benefitDate replaces the earlier "treatment date" (treatmentDate) concept: there is one date field for every benefit type, and no separate treatment date. Different from claimDate, which is the date of the claim line. Used by the duplicate claim check.

totalCost
number <double>

Amount claimed for this line, supplied by the caller. Required, positive money value. Used for the benefit-pot balance check (compared against the pot's remaining balance to accept or reject the claim). This is the amount claimed, not the payable amount — totalAmountCovered (after cover limits/excess/co-pay) is derived server-side in a later iteration and is out of scope. Trusted here because the operation only accepts/rejects and moves no money.

invoiceReference
string

Responses

Request samples

Content type
application/json
{
  • "benefitReference": "string",
  • "claimantReference": "string",
  • "claimDate": "string",
  • "benefitDate": "string",
  • "totalCost": 0,
  • "invoiceReference": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

List claims for a policy

Retrieve the claims raised against a policy the caller may see, as normalised summaries. Optionally narrowed by claim status and by creation-date range.

Authorizations:
OAuth2
path Parameters
policyReference
required
string

Policy Reference Number

query Parameters
status
string

Return only claims in this status. One of: DRAFT, CANCELLED, ABANDONED, SUBMITTED, IN_PROGRESS, FLAGGED_FOR_REVIEW, IN_REVIEW, ON_HOLD, REJECTED, ACCEPTED. Matched case-insensitively.

createdFrom
string

Return only claims created at or after this ISO-8601 date-time, e.g. 2026-01-01T00:00:00Z.

createdTo
string

Return only claims created at or before this ISO-8601 date-time, e.g. 2026-01-31T23:59:59Z. Must not be earlier than 'createdFrom'.

pageSize
integer <int32>

Number of claims to return per page, between 1 and 5000. Optional on the first request, where it defaults to 25. Required whenever 'nextPage' is supplied, and must repeat the value used for the first request - the page size cannot change part-way through a paging sequence.

nextPage
string

Opaque cursor taken from 'pagination.nextPage' of the previous response. Omit to retrieve the first page; echo the value verbatim and do not parse it.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    },
  • "meta": {
    }
}

Create a claim against a policy

Resolve the caller at the edge, then create and submit a complete claim (header + line items) against a policy the caller may see in a single request.

Authorizations:
OAuth2
path Parameters
policyReference
required
string

Policy Reference Number

Request Body schema: application/json
name
string
totalAmountClaimed
number or null <double>
payoutBasis
string
externalId
string
Array of objects (createClaimLineItemRequest)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "totalAmountClaimed": 0,
  • "payoutBasis": "string",
  • "externalId": "string",
  • "lineItems": [
    ]
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

Update a claim line item

Resolve the caller at the edge, then apply a partial update to a line item on a claim the caller may see. Only the supplied properties change; a property sent as null is cleared.

Authorizations:
OAuth2
path Parameters
claimReference
required
string

Claim Reference Number

claimLineItemReference
required
string

Claim Line Item Reference Number

Request Body schema: application/json
name
string
claimDate
string
benefitDate
string
totalCost
number or null <double>
totalAmountCovered
number or null <double>
excessApplied
number or null <double>
copayApplied
number or null <double>
invoiceReference
string
benefitReference
string
claimantReference
string

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "claimDate": "string",
  • "benefitDate": "string",
  • "totalCost": 0,
  • "totalAmountCovered": 0,
  • "excessApplied": 0,
  • "copayApplied": 0,
  • "invoiceReference": "string",
  • "benefitReference": "string",
  • "claimantReference": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    }
}

Check for duplicate claim line items on a policy

Searches the claims on a policy for line items matching the supplied details, so a duplicate can be found before it is paid. Supply the claimant and at least one of the benefit, claim date, benefit date and cost. Every criterion must match exactly. Line items on claims of every status are returned; the caller decides which matter. Read-only. At most 50 matches are returned, with a RESULT_TRUNCATED warning when more exist.

Authorizations:
OAuth2
path Parameters
policyReference
required
string

Reference of the policy to search, for example POL-0000010031.

query Parameters
claimantReference
required
string

Covered entity reference of the claimant. Must be a covered entity on this policy.

benefitReference
string

Benefit of the line item. Must exist. Exact match.

claimDate
string

Claim date of the line item, as YYYY-MM-DD. Exact match.

benefitDate
string

Date the benefit is claimed for, as YYYY-MM-DD. Exact match.

totalCost
number <double>

Cost of the line item, to at most 2 decimal places. Exact match.

excludeClaimLineItemReference
string

Line item being examined. It is left out of the result so it cannot match itself.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Events

List events for an organisation

Returns the events attached to the organisation, most recent first. An event is a generic record that can be attached to one or more people, organisations or policies through event associations; this endpoint returns the events with an active association to the organisation identified in the path. Use the type query parameter to filter to a single event type.

The caller must hold a current portal-user grant to the organisation. An organisation that does not exist and an organisation the caller is not granted both return 404, so organisation existence is not disclosed.

Authorizations:
OAuth2
path Parameters
externalId
required
string
query Parameters
type
string

Include only events of this type. A value outside the enum gives 400 with the field code INVALID_ENUM_VALUE.

pageSize
integer <int32>

Number of events to return per page, between 1 and 5000. Optional on the first request, where it defaults to 25. Required whenever 'nextPage' is supplied, and must repeat the value used for the first request - the page size cannot change part-way through a paging sequence.

nextPage
string

Opaque cursor taken from 'pagination.nextPage' of the previous response. Omit to retrieve the first page; echo the value verbatim and do not parse it.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    },
  • "meta": {
    }
}