Plan Manager API
Overview
The following documentation details the Plan Manager API for LanternPay Integration Partners servicing NDIS Plan Managers. This will allow plan managers, via our Integration Partners, to submit invoices to the NDIS on behalf of their participants for approval and funding which LanternPay will disburse to the relevant service provider. Additionally, the Plan Manager API will also allow Plan Managers the ability to review and approve/reject claims submitted directly to LanternPay by registered service providers.
Invoices and Claims
An invoice is a representation of the invoice data submitted by a plan manager. The invoice contains a collection of claims, which represent the line items on the invoice. The NDIS processes claims, not invoices, so an invoice can contain claims which have individual funding decisions.
Claims can have a number of statuses which are described below and are applied to each claim individually. Through the Plan Manager API, a plan manager can lookup an invoice and see an invoice-level status as well as claim-level statuses, as defined below.
Invoice and Claim Statuses
Level | Status | Description |
---|---|---|
Invoice | Draft | This is a draft invoice state which has not been submitted for processing. Used to validate claims before submitting an invoice for processing. |
Invoice | Submitted | This is the state of an invoice submitted directly to LanternPay by a Provider and at least one claim is awaiting Authorization by a Plan Manager. See claim states for further detail. |
Invoice | Processed | This is the state of an invoice submitted via the Plan Manager API and has been processed successfully by LanternPay. See claim states for further detail. |
Claim | AuthorizationRequired | This claim was submitted directly to LanternPay by a provider and is awaiting plan manager approval before further processing of the claim will occur. |
Claim | Authorized | This claim has been authorized by LanternPay or a plan manager, but not yet by the NDIS. |
Claim | AuthorizedByProgram | This claim has been authorized by the NDIS and will be paid. See Invoice and Claim Funding below for further detail. |
Claim | Rejected | This claim has been rejected by LanternPay upon initial validation or by a plan manager. See insufficientContributionReason on the claim for the rejection reason. |
Claim | RejectedByProgram | This claim has been rejected by the NDIS and will not be paid. See insufficientContributionReason on the claim for the rejection reason. |
Claim | Cancelled | This claim has been cancelled and will not be processed further. |
Invoice and Claim Funding
As the NDIS will sometimes pay above or below a claimed amount (e.g. a rounding discrepancy) we provide the below funding information at the invoice and claim level via the Plan Manager API to enable reconciliation of NDIS payments.
At the invoice level:
- the
totalClaimAmount
field is the total value of all claims on the invoice and represents the total amount of funds requested from the NDIS. - the
funded
field is the total value of all claims where the NDIS has provided funding. If all claims are paid in full then thetotalClaimAmount
will equal thefunded
amount.
At the claim level:
- the
totalClaimAmount
field is the amount of funding requested from the NDIS for an individual claim. - the
funded
field is the amount the NDIS actually paid, which could be equal to, above or under thetotalClaimAmount
.
See the Get an Invoice section for an example of these fields.
NDIS References
When a claim has been submitted to the NDIS, the claims unique ndisReference
field will be populated in the Get an Invoice API response. This reference matches what is shown in the NDIS portal for that claim and is useful when searching for a LanternPay submitted claim (for cancellations, for example)
Additionally, the ndisReference
is also shown on the Get a List of Payments API response.
Authentication
All Plan Manager API requests to LanternPay require authentication using basicAuth
. LanternPay will provide Sandbox and Production credentials, an API_Key
and API_Secret
, during onboarding.
Each Plan Manager is considered a unique user of the API and will have thier own API credentials which should not be shared.
Additionally, LanternPay will post webhooks on some events which must be configured with authentication via a custom HTTP
header. This header contains a webhook header name and value - for example: x-api-key
= 123456789
. This allows you to verify that the webhook came from LanternPay - you will need to provide this webhook header name and value to LanternPay during onboarding of each plan manager.
Webhooks
Webhooks allow LanternPay to signal to the user that an event has occurred within the LanternPay platform. During onboarding, you will define API endpoints that LanternPay will deliver webhooks to for various events. The following webhooks are currently implemented by LanternPay, you can find more detailed information about these webhooks in the the relevant API resources section:
Webhook | Purpose |
---|---|
onPlanChanged | This webhook is used to flag that a member has been onboarded or a plan has been updated. |
Invoice Webhooks | Multiple webhooks that convey the state of an invoice as it travels through it’s lifecycle. |
onPaymentScheduled | This webhook is triggered once per day, per planamanager, when a payment file is generated and sent to the bank. |
onStatementGenerated | This webhook is used when LanternPay generates a statement for a participant. |
All LanternPay webhooks follow a consistent pattern and will generally contain:
Field | Description |
---|---|
id | A unique ID per event. This allows the program to perform de-duplication in the event that the same event is signalled more than once. LanternPay may send the same event multiple times if it fails to get positive acknowledgement of a request. |
created | The date and time in Unix Epoch Time of the event. |
data | A block of data relevant to the event. The schema of the data block will vary for given webhook types. Typically, the data block will contain both data properties and action properties, which will contain the URI of the possible LanternPay resource actions that may be carried out as a next step of processing the webhook. |
type | A string defining the type of the webhook |
Webhook Standard Payload
Each webhook will have the following standard payload:
{
"id": "{uuid}",
"created": "{unix epoch time}",
"data": "{data object}",
"type": "{event type name}",
}
Webhook Authentication
LanternPay webhooks use Custom Http Header for aithentication. The webhook subscriber can configure a Header Name and Value for a custom HTTP Header to be included in each webhook call back, e.g. X-API-Key: 1234
Asynchronous Webhook Handlers
When handling a webhook, the webhook handler should handle the request asynchronously.
This means responding very quickly with a success status code (202 Accepted
is preferred). This style ensures that in the event of heavy load, networking resources are not ‘held open’ for the duration of the delay. It encourages the use of internal queueing mechanisms to ensure robust, reliable & scalable handling of requests even when under load.
Webhook Response Codes
The webhook handler may respond with one of the following HTTP status codes when LanternPay attempts to deliver a webhook. LanternPay actions for each status code are as below.
Status Code | LanternPay Action |
---|---|
200 OK |
|
202 Accepted (Preferred) |
|
4xx Client Error |
|
5xx Server Error |
|
Retry Policy
If a webhook fails to deliver, the retry policy will trigger as described below. In total there will be 24 attempts to deliver a webhook (the initial attempt + 23 retries) and if all webhooks fail this will trigger an alert to LanternPay support staff for investigation.
All 24 webhook delivery attempts will occur over a ~5.5 minute period, with half the retries delivered within the first ~40 seconds to cover intermittent failures with the receiver. The formula used for each retry is [(number of webhooks already sent)2 x 0.08] where 0.08 represents an 80ms delay.
Each retry will have the same value in the webhook id
field. Due to the use of retries, it is strongly recommended that the webhook id
field is used to prevent duplicate handling, particularly in the case where LanternPay is retrying due to a timeout, but internal program systems have successfully handled the webhook.
Webhook | Delay (s) | Time (s) |
---|---|---|
1 | 0 | 0 |
2 | 0.08 | 0.08 |
3 | 0.32 | 0.4 |
4 | 0.72 | 1.12 |
5 | 1.25 | 2.4 |
6 | 2 | 4.4 |
… | … | … |
23 | 38.72 | 303.6 |
24 | 42.32 | 345.92 |
API Resources
This section below details out all the Plan Manager API endpoints and the various functionality of each.
Base URIs
All URIs in the API Resources section below are relative to these base URIs:
Environment | URI | Description |
---|---|---|
Sandbox | https://api.planmanagers.sandbox.lanternpay.com |
This is a pre-production environment you can use for testing. |
Production | https://api.planmanagers.lanternpay.com |
This is the production environment. |
Root
The root resource is the starting point for all API operations when using HATEAOS
hypermedia to navigate the API. The first step is to follow the lp:get-planmanager
link relation to retrieve your plan manager resource. This resource can also be used to ensure the Plan Manager API is online.
Get the API Root
GET /
The root API resource. No credentials, path, query or body parameters are required for this request.
Example Get Root Response
{
"_links": {
"self": {
"href": "https://api.sandbox.lanternpay.com/"
},
"lp:get-planmanager": {
"href": "https://api.sandbox.lanternpay.com/planmanagers/{planManagerKey}",
"templated": true
},
"curies": {
"name": "lp",
"href": "https://docs.lanternpay.com/reference#{rel}",
"templated": true
}
}
}
Plan Managers
Plan managers are provided a unique planManagerKey
when onboarding with LanternPay allowing them to uniquely manage their participants. Integration partners will be provided with a template for onboarding new plan managers during initial integration.
Get a Plan Manager
GET /planmanagers/{planManagerKey}
The Plan Manager resource contains information about the Plan Manager’s organisation. The _links
property contains a list of hypermedia operations available to the plan manager, including lp:add-member
and lp:get-member
.
Path Parameters
Field | Format | Required? | Description |
---|---|---|---|
planManagerKey | UUID | Mandatory | This will be given to you by LanternPay. |
Example Get Plan Manager Response
{
"_links": {
"self": {
"href": "https://api.sandbox.lanternpay.com/planmanagers/430b0abf-18ac-0205-3ad5-4bb4dc9659d5"
},
"lp:add-member": {
"href": "https://api.sandbox.lanternpay.com/planmanagers/430b0abf-18ac-0205-3ad5-4bb4dc9659d5/members"
},
"lp:get-member": {
"href": "https://api.sandbox.lanternpay.com/planmanagers/430b0abf-18ac-0205-3ad5-4bb4dc9659d5/members/{membershipNumber}{?programCode}",
"templated": true
},
"lp:add-biller": {
"href": "https://api.sandbox.lanternpay.com/affiliates/430b0abf-18ac-0205-3ad5-4bb4dc9659d5/billers"
},
"curies": {
"name": "lp",
"href": "https://docs.lanternpay.com/reference#{rel}",
"templated": true
}
},
"name": "Plan Manager Inc",
"planManagerKey": "430b0abf-18ac-0205-3ad5-4bb4dc9659d5",
"programs": [
{
"code": "ndis",
"shortName": "NDIS",
"longName": "National Disability Insurance Scheme",
"membershipNumber": "123456789"
}
]
}
Members
Members (i.e. participants) of the NDIS are managed by plan managers and registered with LanternPay to allow the plan manager to request funding from the NDIS on behalf of the participant. Each member has a unique memberKey
and each of the member’s plans has a unique planKey
which is used for various functions described below.
Add a Member
POST /planmanagers/{planManagerKey}/members
This resource can be used to create a member (i.e. participant) against the NDIS program. This is an async
task and LanternPay will trigger a webhook to the URI provided in the _webhooks
object when the member creation is complete. This webhook will also be triggered if the member’s details change in the future, such as plan balances, allowing you to keep your system in sync with LanternPay.
Path Parameters
Field | Format | Required? | Description |
---|---|---|---|
planManagerKey | UUID | Mandatory | This will be given to you by LanternPay. |
Body Parameters
Field | Format | Required? | Description |
---|---|---|---|
membershipNumber | string | Mandatory | The membership number of the member with the program. For example, with an NDIS participant this would be the NDIS number. |
programCode | string | Mandatory | The LanternPay code for the program. For example, NDIS . |
dateOfBirth | YYYY-MM-DD | Mandatory | The member’s date of birth. |
name | object | Mandatory | The container object for the member’s name. See table below. |
plan | object | Mandatory | The container object for the member’s plan. See table below. |
_webhooks | object | Mandatory | The container object for URIs to POST events to. See table below. |
Name Object Parameters
Field | Format | Required? | Description |
---|---|---|---|
first | string | Mandatory | The member’s first name. |
last | string | Mandatory | The member’s last name. |
Plan Object Parameters
Field | Format | Required? | Description |
---|---|---|---|
priceGuideCode | string | Mandatory | The price guide code for the NDIS member. Valid price guide codes are: ACT_NSW_QLD_VIC NT_SA_TAS_WA Remote VeryRemote |
_webhooks Object Parameters
Field | Format | Required? | Description |
---|---|---|---|
onPlanChangedUri | URI | Mandatory | The URI for LanternPay post to on a member created or changed event. This URI can include query parameters. |
Example Add Member Request
{
"membershipNumber":"123456789",
"programCode":"ndis",
"dateOfBirth":"1950-10-01",
"name":{
"first":"Sam",
"last":"Smith"
},
"plan":{
"priceGuideCode":"Remote"
},
"_webhooks":{
"onPlanChanged":"https://webhook.site/0171a369-4934-4fd0-bbd1-f6f26d2a0619"
}
}
Example Add Member Response
This is a HTTP 202
response verifying that LanternPay has received your request. The onPlanChanged
webhook will be triggered once the member setup is complete.
{
"_links": {
"self": {
"href": "https://api.sandbox.lanternpay.com/planmanagers/430b0abf-18ac-0205-3ad5-4bb4dc9659d5/members/232282425?programCode=ndis"
},
"curies": {
"name": "lp",
"href": "https://docs.lanternpay.com/reference#{rel}",
"templated": true
}
}
}
onPlanChanged Webhook
WEBHOOK {onPlanChangedUri}
This webhook will trigger when a member is activated or when the member’s details change, such as name changes or plan changes. This action tells you something has changed and you should do a GET on the member using the URI in the webhook. The URI we trigger the webhook to is the URI you provided in the Add Member request.
Path Parameters
Field | Format | Required? | Description |
---|---|---|---|
onPlanChangedUri | URI | Mandatory | The URI you provided for the _webhooks.onPlanChanged field when you created the member. |
Body Parameters
Field | Format | Required? | Description |
---|---|---|---|
id | UUID | Mandatory | A unique ID for the event. |
created | Unix Epoch Time | Mandatory | The date and time in Unix Epoch Time of the event. |
data | object | Mandatory | The container object for the webhook data. See table below. |
type | string | Mandatory | The event type that triggered the webhook. |
Data Object Parameters
Field | Format | Required? | Description |
---|---|---|---|
membershipNumber | string | Mandatory | The NDIS membership number of the member. |
programCode | string | Mandatory | The LanternPay code for the program. For example, NDIS . |
memberUri | URI | Mandatory | The link to the member resource. |
planUri | URI | Mandatory | The link to the member’s plan resource. |
Example onPlanChanged Webhook
{
"id": "437ec6ab-cda3-465b-90f2-3865d992440b",
"created": 1518405650.882,
"data": {
"membershipNumber": "988028707",
"programCode": "ndis",
"memberUri": "https://api.sandbox.lanternpay.com/planmanagers/430b0abf-18ac-0205-3ad5-4bb4dc9659d5/members/988028707?programCode=ndis",
"planUri": "https://api.sandbox.lanternpay.com/plans/89b8bf06-2bc6-4e98-9f6e-845e5dded24a"
},
"type": "planmanagement.member.planchanged"
}
Get a Member
GET /planmanagers/{planManagerKey}/members/{membershipNumber}?programCode={programCode}
This resource can be used to query a member, including summary of their plan information. Links are included in the response to query all the details of the member’s plan(s).
Path Parameters
Field | Format | Required? | Description |
---|---|---|---|
planManagerKey | UUID | Mandatory | This will be given to you by LanternPay |
membershipNumber | string | Mandatory | The membership number of the member with the program. For example, with an NDIS participant this would be the NDIS number. |
Query Parameters
Field | Format | Required? | Description |
---|---|---|---|
programCode | string | Mandatory | The LanternPay code for the program. For example, NDIS . |
Example Get a Member Response
The plan key (UUID) in the response can be used for other queries - see Plans section for more detail.
"_links": {
"self": {
"href": "https://api.sandbox.lanternpay.com/planmanagers/711fd7a1-357e-04e4-03f2-b0d5bfe68562/members/420459861?programCode=ndis"
},
"lp:add-biller": {
"href": "https://api.sandbox.lanternpay.com/members/0460d6cc-637b-4641-b9aa-089510451740/billers"
},
"lp:create-invoice": {
"href": "https://api.sandbox.lanternpay.com/members/0460d6cc-637b-4641-b9aa-089510451740/invoices"
},
"lp:create-payee-invoice": {
"href": "https://api.sandbox.lanternpay.com/planmanagers/711fd7a1-357e-04e4-03f2-b0d5bfe68562/members/0460d6cc-637b-4641-b9aa-089510451740/invoices"
},
"lp:validate-contract": {
"href": "https://api.sandbox.lanternpay.com/members/0460d6cc-637b-4641-b9aa-089510451740/contracts/validate"
},
"lp:list-contracts": {
"href": "https://api.sandbox.lanternpay.com/members/0460d6cc-637b-4641-b9aa-089510451740/contracts"
},
"lp:list-billers": {
"href": "https://api.sandbox.lanternpay.com/members/0460d6cc-637b-4641-b9aa-089510451740/billers"
},
"lp:most-used-items": {
"href": "https://api.sandbox.lanternpay.com/members/0460d6cc-637b-4641-b9aa-089510451740/itemusages"
},
"curies": {
"name": "lp",
"href": "https://docs.lanternpay.com/reference#{rel}",
"templated": true
}
},
"_embedded": {
"lp:plans": [
{
"_links": {
"self": {
"href": "https://api.sandbox.lanternpay.com/plans/a7958bd5-d2c0-4e5d-9b91-e16f55f38f19"
},
"lp:transaction-history": {
"href": "https://api.sandbox.lanternpay.com/plans/a7958bd5-d2c0-4e5d-9b91-e16f55f38f19/transactions{?fromDate,toDate}",
"templated": true
},
"lp:search-items": {
"href": "https://api.sandbox.lanternpay.com/plans/a7958bd5-d2c0-4e5d-9b91-e16f55f38f19/items{?query,page}",
"templated": true
},
"lp:invoice-history": {
"href": "https://api.sandbox.lanternpay.com/plans/a7958bd5-d2c0-4e5d-9b91-e16f55f38f19/invoices{?fromDate,toDate}",
"templated": true
}
},
"endDate": "2022-12-31",
"startDate": "2020-01-01",
"isActive": true,
"programCode": "ndis",
"totalBudget": {
"total": 12000,
"spent": 0,
"unspent": 12000,
"assigned": {
"total": 0,
"spent": 0,
"unspent": 0
},
"unassigned": 12000
}
}
]
},
"programs": [
{
"code": "ndis",
"shortName": "NDIS",
"longName": "National Disability Insurance Scheme"
}
],
"memberKey": "0460d6cc-637b-4641-b9aa-089510451740",
"name": {
"first": "NDIS-416-S3",
"last": "420459861"
},
"membershipNumber": "420459861",
"dateOfBirth": "1990-01-01"
}
Billers
A biller is an entity that will be receiving funds for services provided to a member. The service provider may be the same entity or a different entity. For example, a medical centre (i.e. the biller) might be an entity collecting funds on behalf of a pharmacist (i.e. the service provider)
LanternPay has two types of billers: a registered biller and an unregistered biller (known as a payee):
- A registered biller is a biller that has registered directly with LanternPay and has had all their details verified by LanternPay. Registered billers can submit their invoices directly to LanternPay for any program we support (e.g. NDIS, TAC, etc) and LanternPay will route and process their invoices appropriately. Plan Managers cannot submit invoices on behalf of a registered biller, however, they can refer a biller to LanternPay via the Plan Manager API who would like to register. See Add a Registered Biller, below.
- An unregistered biller, or a payee, is a biller that does not have a direct relationship with LanternPay. These billers have a relationship with a plan manager/participant and LanternPay will make payments to these billers by instruction from the plan manager. When the plan manager submits an invoice to LanternPay for a payee the payee details are contained within each invoice. See Create an Invoice, below.
Add a Registered Biller
POST /affiliates/{affiliateKey}/billers
Use this resource to refer an unregistered biller to LanternPay for registration. This will allow them to submit invoices directly to LanternPay for processing to any program LanternPay supports. This is an a-synchronous process as LanternPay must verify the biller’s details to complete registration. See onBillerRegistered
webhook below for more detail.
Path Parameters
Field | Format | Required? | Description |
---|---|---|---|
affiliateKey | UUID | Mandatory | This is the same as your plan manager key, provided by LanternPay. |
Body Parameters
Field | Format | Required? | Description |
---|---|---|---|
affiliateBillerNumber | string | Optional | An optional affiliate reference for the biller being referred to LanternPay. |
user | object | Mandatory | The container object for the biller’s personal details. See table below. |
organization | object | Mandatory | The container object for the biller’s organisational details. See table below. |
payment | object | Mandatory | The container object for the biller’s payment details. See table below. |
billingAddress | object | Mandatory | The container object for the biller’s billing address. See table below. |
_webhooks | object | Mandatory | The container object for URIs to POST events to. See table below. |
User Object Parameters
Field | Format | Required? | Description |
---|---|---|---|
string | Mandatory | The biller’s email. | |
firstName | string | Mandatory | The biller’s first name. |
lastName | string | Mandatory | The biller’s last name. |
phoneNumber | 10 digits | Mandatory | The biller’s phone number. |
Organization Object Parameters
Field | Format | Required? | Description |
---|---|---|---|
abn | string | Mandatory | The biller’s ABN. |
tradingName | string | Mandatory | The biller’s trading name. |
registeredName | string | Mandatory | The biller’s registered business name. |
Payment Object Parameters
Field | Format | Required? | Description |
---|---|---|---|
bsb | 6 digits | Mandatory | The 6 digit BSB for the biller’s bank account. |
accountNumber | 6 to 9 digits | Mandatory | The biller’s bank account number. |
accountName | string | Mandatory | The biller’s bank account name. |
emailForRemittance | string | Mandatory | The biller’s email that remittance advices will be sent to. |
billingAddress Object Parameters
Field | Format | Required? | Description |
---|---|---|---|
unit | string | Optional | The unit or apartment number. |
street | string | Mandatory | The street name. |
postcode | 4 digits | Mandatory | The post code. |
state | string | Mandatory | The state or territory code. For example, valid Australian codes are: QLD ,NSW ,ACT ,VIC ,TAS ,NT ,SA ,WA |
country | string | Mandatory | The country name. |
_webhooks Object Parameters
Field | Format | Required? | Description |
---|---|---|---|
onBillerRegistered | URI | Mandatory | The URI for LanternPay post to on the biller registered event. This URI can include query parameters. |
Example Add a Registered Biller Request
{
"affiliateBillerNumber":"123456789",
"user":{
"email":"some@email.com",
"firstName":"Sam",
"lastName":"Smith",
"phoneNumber":"0412345678"
},
"organization":{
"abn":"12345678901",
"tradingName":"Sam's Trucks",
"registeredName":"Sam's Trucks"
},
"payment":{
"bsb":"012345",
"accountNumber":"123456789",
"accountName":"My Bank Account",
"emailForRemittance":"Sam.Smith@lanternpay.com"
},
"billingAddress":{
"unit":"Unit 1",
"street":"742 Evergreen Terrace",
"postcode":"2000",
"state":"NSW",
"country":"Australia"
},
"_webhooks":{
"onBillerRegistered":"https://somedomain.com/biller-registered"
}
}
Example Add a Registered Biller Response
This is a HTTP 202
response verifying that LanternPay has received your request. The onBillerRegistered
webhook will be triggered once the registered biller setup is complete.
Accepted
onBillerRegistered Webhook
WEBHOOK {onBillerRegisteredUri}
This webhook will trigger when a biller has completed registration.
Path Parameters
Field | Format | Required? | Description |
---|---|---|---|
onBillerRegisteredUri | URI | Mandatory | The URI you provided for the _webhooks.onBillerRegistered field when you created the registered biller. |
Body Parameters
Field | Format | Required? | Description |
---|---|---|---|
id | UUID | Mandatory | A unique ID for the event. |
created | Unix Epoch Time | Mandatory | The date and time in Unix Epoch Time the webhook was triggered. |
data | object | Mandatory | The container object for the webhook data. See table below. |
type | string | Mandatory | The event type that triggered the webhook. |
Data Object Parameters
Field | Format | Required? | Description |
---|---|---|---|
affiliateBillerNumber | string | Mandatory | The affiliate reference for the biller if provided during the Add a Registered Biller API request. |
programCode | string | Mandatory | The LanternPay code for the program. For example, NDIS . |
billerKey | UUID | Mandatory | The LanternPay unique key for the biller. |
Example onBillerRegistered Webhook
{
"id": "437ec6ab-cda3-456b-90f2-3865d992440b",
"created": 1518405650.883,
"data": {
"affiliateBillerNumber": "123456789",
"programCode": "ndis",
"billerKey": "486ec6ab-csc3-495b-90z2-3865d775440b"
},
"type": "billers.biller.registered",
}
Get a Registered Biller
GET /billers/{billerKey}
Use this resource to query a biller you have referred for registration to LanternPay.
Field | Format | Required? | Description |
---|---|---|---|
billerKey | UUID | Mandatory | The LanternPay unique key for the biller provided in the onBillerRegistered webhook. |
Example Get a Biller Response
{
"_links": {
"self": {
"href": "https://api.sandbox.lanternpay.com/billers/48cf5266-3ea3-040e-3b3a-f2d355c28a87"
},
"curies": {
"name": "lp",
"href": "https://docs.lanternpay.com/reference#{rel}",
"templated": true
}
},
"billerKey": "48cf5266-3ea3-040e-3b3a-f2d355c28a87",
"name": "Sam's Physio",
"email": "some@email.com",
"abn": "12345678901",
"billingAddress": null,
"isRegistered": false
}
Plans
A plan is a collection of service bookings containing items, budgets and date ranges for a member. Each plan has a unique planKey
which can be queried via the API to view a detailed breakdown of the plan.
Get a Plan
GET /plans/{planKey}
Use this resource to query a member’s plan details. This contains individual plan coverages, dates and budgets which can be updated periodically. If you receive the onPlanChanged
member webhook, detailed above, you should query the member’s details as well as the plan details for that member.
Path Parameters
Field | Format | Required? | Description |
---|---|---|---|
planKey | UUID | Mandatory | The plan key for the member returned in the lp:links _links:self section of the Get a Member response. |
Example Get a Plan Response
Note: under budget
the assigned
field represents funds that are reserved (including total, spent and unspent) under a contract - see Contracts for more information.
{
"_links": {
"self": {
"href": "https://api.sandbox.lanternpay.com/plans/a7958bd5-d2c0-4e5d-9b91-e16f55f38f19"
},
"curies": {
"name": "lp",
"href": "https://docs.lanternpay.com/reference#{rel}",
"templated": true
}
},
"membershipNumber": "420459861",
"programName": "NDIS",
"coverages": [
{
"category": {
"name": "Assistance with Daily Life (CORE)",
"code": "0001"
},
"statedItem": null,
"startDate": "2020-01-01",
"endDate": "2022-12-31",
"initialBudget": 9000,
"budget": {
"total": 9000,
"spent": 0,
"unspent": 9000,
"assigned": {
"total": 0,
"spent": 0,
"unspent": 0
},
"unassigned": 9000
},
"programCoverageNumber": "92001000"
},
{
"category": {
"name": "Assistance with Daily Life (CORE)",
"code": "0001"
},
"statedItem": {
"code": "01_001_0101_1_1",
"name": "Transitional Support"
},
"startDate": "2020-01-20",
"endDate": "2022-02-20",
"initialBudget": 3000,
"budget": {
"total": 3000,
"spent": 0,
"unspent": 3000,
"assigned": {
"total": 0,
"spent": 0,
"unspent": 0
},
"unassigned": 3000
},
"programCoverageNumber": "92001000"
}
],
"totalFlexBudget": {
"total": 0,
"spent": 0,
"unspent": 0,
"assigned": {
"total": 0,
"spent": 0,
"unspent": 0
},
"unassigned": 0
},
"totalBudget": {
"total": 12000,
"spent": 0,
"unspent": 12000,
"assigned": {
"total": 0,
"spent": 0,
"unspent": 0
},
"unassigned": 12000
},
"totalStatedBudget": {
"total": 12000,
"spent": 0,
"unspent": 12000,
"assigned": {
"total": 0,
"spent": 0,
"unspent": 0
},
"unassigned": 12000
}
}
Get Plan Invoice History
GET /plans/{planKey}/invoices?fromDate={fromDate}&toDate={toDate}
Use this API endpoint to retrieve a list of all invoices within a specific plan’s date range. Note, this API will not return draft invoices.
Path Parameters
Field | Format | Required? | Description |
---|---|---|---|
planKey | UUID | Mandatory | The plan key returned in the Get a Member response in the lp:links _links:self section. |
Query Parameters
Field | Format | Required? | Description |
---|---|---|---|
fromDate | YYYY-MM-DD | Mandatory | The first date in the search range. |
toDate | YYYY-MM-DD | Mandatory | The last date in the search range. |
Example Get Plan Invoice History Response
{
"_links": {
"self": {
"href": "https://api.sandbox.lanternpay.com/plans/7810d904-1bce-41a9-9090-4cbca40b65d4/invoices?fromDate=2019-01-01&toDate=2019-03-01"
},
"curies": {
"name": "lp",
"href": "https://docs.lanternpay.com/reference#{rel}",
"templated": true
}
},
"_embedded": {
"lp:invoices": [
{
"_links": {
"self": {
"href": "https://api.sandbox.lanternpay.com/invoices/31724c23-e780-4632-b98f-16b10312ab40"
}
},
"invoiceKey": "31724c23-e780-4632-b98f-16b10312ab40",
"submittedDate": "2019-02-06T00:00:00",
"invoiceDate": "2019-02-06T00:00:00",
"invoiceNumber": "227609015",
"total": 50,
"totalFunded": 50,
"biller": {
"billerKey": "48cf5266-3ea3-040e-3b3a-f2d355c28a87",
"name": "Sam's Physio"
}
},
{
"_links": {
"self": {
"href": "https://api.sandbox.lanternpay.com/invoices/13926cb0-d712-4896-9576-cfb4b9254468"
}
},
"invoiceKey": "13926cb0-d712-4896-9576-cfb4b9254468",
"submittedDate": "2019-02-06T00:00:00",
"invoiceDate": "2019-02-06T00:00:00",
"invoiceNumber": "233805794",
"total": 50,
"totalFunded": 50,
"biller": {
"billerKey": "48cf5266-3ea3-040e-3b3a-f2d355c28a87",
"name": "Sam's Physio"
}
}
]
}
}
Plan Statements
A plan statement is a monthly record of activity on a given participant’s plan - similar to a bank statement. LanternPay will generate a PDF plan statement for any active plan for a participant at the start of every month for the previous month’s activity. This means that a given participant may get multiple statements generated per month, if there was activity on multiple plans in that month.
The most common examples of this are:
- the participant’s plan expires mid-month and a new plan is created and there is activity (claiming) on both during the month
- a claim is raised against an expired plan that is still eligible for claiming
LanternPay will then securely deliver this statement via the Plan Manager API to the integration partner. From there, the integration partner can choose how they share the plan statement with their plan managers and participants.
onStatementGenerated
WEBHOOK {onStatementGeneratedUri}
This webhook indicates that the PDF generation process has completed and the plan statement resource is ready for download via the API.
This webhook will trigger once per active plan, per participant, per month. This means that any given participant may receive multiple webhooks if multiple statements are generated for that participant, as described above.
Path Parameters
Field | Format | Required? | Description |
---|---|---|---|
onStatementGeneratedUri | URI | Mandatory | The URI, per plan manager, you provided to LanternPay during onboarding. |
Body Parameters
Field | Format | Required? | Description |
---|---|---|---|
id | UUID | Mandatory | A unqiue ID for the event. |
created | Unix Epoch Time | Mandatory | The date and time in Unix Epoch Time the webhook was triggered. |
data | object | Mandatory | The container object for the webhook data. See table below. |
type | string | Mandatory | The event that triggered the webhook. |
Data Object Parameters
Field | Format | Required? | Description |
---|---|---|---|
membershipNumber | Member Number | Mandatory | The NDIS member number. |
planManagerKey | UUID | Mandatory | The plan manager this member belongs to. |
planKey | UUID | Mandatory | The plan key this statement is for. |
statementKey | UUID | Mandatory | The unique key for this statement. |
planUri | URI | Mandatory | The link to the plan this statement is for. |
statementUri | URI | Mandatory | The link to the plan statement resource. Performing a GET on this resource will generated a download link with a very short expiry that will allow you to download the statement PDF. See below. |
statementPeriod | Object | Mandatory | This object contains the plan statement startDate and endDate in YYYY-MM-DD format. |
Example onStatementGenerated Webhook
{
"id": "7363d2d4-0999-401a-8d31-3b9d96bba404",
"created": 1583219144,
"data": {
"membershipNumber": "123456789",
"planManagerKey": "e0217e84-58ba-4294-a1cf-c86d287c8de1",
"planKey": "08029b72-2db3-4b8a-9210-e4fb227e95b0",
"statementKey": "d3291120-2604-429b-b66b-950e55bf52e8",
"planUri": "https://api.sandbox.lanternpay.com/plans/08029b72-2db3-4b8a-9210-e4fb227e95b0",
"statementUri": "https://api.sandbox.lanternpay.com/plans/08029b72-2db3-4b8a-9210-e4fb227e95b0/statements/d3291120-2604-429b-b66b-950e55bf52e8",
"statementPeriod": {
"startDate": "2020-01-01",
"endDate": "2020-01-31"
},
},
"type": "planmanagement.member.statementgenerated"
}
Get a Plan Statement
GET /plans/{planKey}/statement/{statementKey}
This resource URI will return the lp:download-statement
link relation which contains a temporary download link to a specific plan statement PDF. This resource URI can be stored and used at any time to generate a new lp:download-statement
temporary download link.
Note: The temporary download link contained in the lp:download-statement
link relation will expire in 30 seconds and can be up to 2,000 characters in length.
Path Parameters
Field | Format | Required? | Description |
---|---|---|---|
planKey | UUID | Mandatory | The plan key for the member included in the onStatementGenerated webhook. |
statementKey | UUID | Mandatory | The plan statement key provided in the onStatementGenerated webhook. |
Example Get a Plan Statement Request
{
"_links": {
"self": {
"href": "https://api.sandbox.lanternpay.com/plans/08029b72-2db3-4b8a-9210-e4fb227e95b0/statements/d3291120-2604-429b-b66b-950e55bf52e8"
},
"lp:download-statement": {
"href": "{the temporary download link}"
},
"lp:plan": {
"href": "https://api.sandbox.lanternpay.com/plans/08029b72-2db3-4b8a-9210-e4fb227e95b0"
},
"curies": {
"name": "lp",
"href": "https://docs.lanternpay.com/reference#{rel}",
"templated": true
}
},
"planKey": "08029b72-2db3-4b8a-9210-e4fb227e95b0"
}
Items
Items are individual services for a coverage that can be claimed for funding by the NDIS. Each member’s plan contains coverages that is made up of items that the member is eligible to claim against, including a price for each item.
Search Claimable Items
GET /plans/{planKey}/items?query={query}&page={page}
Use this resource to search for claimable items against a member’s plan.
Path Parameters
Field | Format | Required? | Description |
---|---|---|---|
planKey | UUID | Mandatory | The plan key for the member returned in the lp:links _links:self section of the Get a Member response. |
Query Parameters
Field | Format | Required? | Description |
---|---|---|---|
query | string | Mandatory | The search term to find an item. Will match against item code, item name, item description or item price. For example, items?query="gel" to find all items with gel in the description. |
page | integer | Mandatory | The page number of results to return. The first page is 0 and each page will show 50 results. The response will identify how many pages of results there are from the query - see example. |
Example Search Claimable Items Request
{
"_links": {
"self": {
"href": "https://api.sandbox.lanternpay.com/plans/7810d904-1bce-41a9-9090-4cbca40b65d4/items?page=0&query=%22gel%22"
},
"lp:first": {
"href": "https://api.sandbox.lanternpay.com/plans/7810d904-1bce-41a9-9090-4cbca40b65d4/items?page=0&query=%22gel%22"
},
"lp:last": {
"href": "https://api.sandbox.lanternpay.com/plans/7810d904-1bce-41a9-9090-4cbca40b65d4/items?page=1&query=%22gel%22"
},
"lp:next": {
"href": "https://api.sandbox.lanternpay.com/plans/7810d904-1bce-41a9-9090-4cbca40b65d4/items?page=1&query=%22gel%22"
},
"curies": {
"name": "lp",
"href": "https://docs.lanternpay.com/reference#{rel}",
"templated": true
}
},
"resultsPerPage": 50,
"pageNumber": 0,
"pageCount": 1,
"results": [
{
"key": "bc98f13e-0b19-4a5f-98c2-fc5e689cde5e",
"code": "03_092406057_0103_1_1",
"name": "Continence Package B - Intermittent Mild - Annual Amount",
"description": "3 per day intermittent catheters with gel and lubricant - annual amount.",
"price": null,
"priceIncludesTax": true,
"unitOfMeasure": "Hours",
"type": "item",
"statePricing": {
"act": null,
"nsw": null,
"nt": null,
"qld": null,
"sa": null,
"tas": null,
"vic": null,
"wa": null
}
},
{
"key": "8b2ce849-f6c4-4c4b-90e8-bc0ca15ad458",
"code": "03_092406059_0103_1_1",
"name": "Continence Package D - Intermittent Higher Needs - Annual Amount",
"description": "6 per day intermittent catheters with gel and lubricant - annual amount.",
"price": null,
"priceIncludesTax": true,
"unitOfMeasure": "Hours",
"type": "item",
"statePricing": {
"act": null,
"nsw": null,
"nt": null,
"qld": null,
"sa": null,
"tas": null,
"vic": null,
"wa": null
}
},
{
"key": "034e806b-6020-4fb5-a227-8aa539b97a07",
"code": "03_092406058_0103_1_1",
"name": "Continence Package C - Intermittent Moderate - Annual Amount",
"description": "4 per day intermittent catheters with gel and lubricant - annual amount.",
"price": null,
"priceIncludesTax": true,
"unitOfMeasure": "Hours",
"type": "item",
"statePricing": {
"act": null,
"nsw": null,
"nt": null,
"qld": null,
"sa": null,
"tas": null,
"vic": null,
"wa": null
}
}
]
}
Get a Member’s Most Used Items
GET /members/{memberKey}/itemusages
Use this resource to pull a list of the most frequently used items for a member. This can be a useful resource to speed up the process of plan managers creating invoices for their members by showing, or pre-populating, a list of frequently used items for that member.
Path Parameters
Field | Format | Required? | Description |
---|---|---|---|
memberKey | UUID | Mandatory | The memberKey provided after a member is created. |
Example Get a Member’s Most Used Items Response
{
"_links": {
"self": {
"href": "https://api.sandbox.lanternpay.com/members/35161601-6821-41fa-8fc6-64975f0d58e4/itemusages"
},
"curies": {
"name": "lp",
"href": "https://docs.lanternpay.com/reference#{rel}",
"templated": true
}
},
"_embedded": {
"lp:items": [
{
"name": "Transitional Support",
"description": "Transition to NDIS funding – payment of rent and utility accounts. Short term payment as per participant plan.",
"popularity": 34,
"code": "01_001_0101_1_1",
"itemKey": "fc48c1e3-eab7-4989-88e4-2e12148f9113",
"count": 5
}
]
}
}
Invoices
Service providers (for example, a Physiotherapist) issue invoices which can be submitted to LanternPay by plan managers for processing and then funding by the NDIS. As the NDIS only supports funding for individual claims (i.e. line items on an invoice) LanternPay manages the link between invoices for providers or plan managers and claims for the NDIS. Furthermore, LanternPay can route invoices to a plan manager for authorization which were submitted directly to LanternPay by a registered service provider.
See here for an explanation of the difference between registered biller invoices and a unregistered biller invoices (i.e. payee invoices)
See here for a full list of all invoice and claim statuses.
Create a Payee Invoice
POST /planmanagers/{planManagerKey}/members/{memberKey}/invoices
Use this resource to create payee invoices for plan managed members. This creates a draft of the invoice with LanternPay which is pre-processed to advise of any issues or errors with the invoice. A unique invoiceKey
is issued when a draft invoice is created and this is used to submit the invoice (with no expiration time) - if no errors were found with the draft invoice, the lp:submit-invoice
link can be used to submit the draft invoice for processing and payment.
Path Parameters
Field | Format | Required? | Description |
---|---|---|---|
planManagerKey | UUID | Mandatory | The unique identifier for the plan manager submitting the invoice. |
memberKey | UUID | Mandatory | The memberKey provided after a member is created. |
Body Parameters
Field | Format | Required? | Description |
---|---|---|---|
payee | object | Mandatory | The payee details for the biller being paid by this invoice. See Payee Object below. |
invoiceDate | YYYY-MM-DD | Mandatory | The date of shown on the invoice. |
invoiceNumber | string | Mandatory | The invoice number or reference shown on the invoice. |
claims | array of objects | Mandatory | The container object for an array of claims on the invoice. See Claims Object Parameters below. |
Payee Object Parameters
Some of these details (see below) will be used on the remittance advice issued to the biller.
Field | Format | Required? | Description |
---|---|---|---|
name | string | Mandatory | The payee’s full name or business name - used on the remittance advice. |
abn | 11 digits or a valid NDIS mnemonic | Optional | The payee’s ABN, this is submitted with the claim to the NDIA. This field is mandatory when the payee possesses a valid ABN. If the payee does not possess a valid ABN then a valid NDIA omission reason mnemonic should be included. If the ABN is omitted or the ABN does not conform to the defined ABN format, then a defult value of REIMB will be used. |
string | Mandatory | The payee’s email - used on the remittance advice. | |
reference | string | Mandatory | The integration partner’s unique reference for the payee. |
bankAccount | object | Mandatory | The payee’s bank account - used for settlement of funds. See Payee Bank Account Object Parameters below. |
Payee Bank Account Object Parameters
These details will be used for settlement of funds to the biller.
Note: no validation is done by LanternPay on the bank account details for a payee (unregistered biller), so it is up to the plan manager to ensure that the details entered for the invoice are correct at the time the invoice is submitted.
Field | Format | Required? | Description |
---|---|---|---|
bsb | 6 digits | Mandatory | The BSB of the payee’s bank account. |
accountNumber | 1 to 9 digits | Mandatory | The account number of the payee’s bank account. |
accountHolder | string | Mandatory | The personal/business name of the bank account holder. |
Payee ABN Values
The NDIS requires that a valid ABN be provided whenever one is present. If a valid ABN is not present, then an ABN omission reason will need to be supplied. If no omission reason is provided, then LanternPay will default the claim to provide the “Reimbursment” reason mnemonic, REIMB
. The below table lists accepted values for this field:
Value | Description |
---|---|
11 digit ABN | A valid ABN for the payee. Note that this must meet the defined ABN format, if the value provided does not meet this check, then the invoice will default to REIMB |
REIMB | Participant Reimbursement – You are declaring that this payment request is a reimbursement to a participant for services and goods purchased in accordance with the funded supports outlined in the participants NDIS plan. By selecting this, you must be able to provide the tax invoice and other relevant documentation should the NDIA request it. |
EXCLS | ATO Excluded Supply – You are declaring that this payment request is being made to a supplier in connection with a supply that is excluded from the withholding tax rules. By selecting this, you are declaring that the supplier has provided you with the completed ATO form ‘Statement by Supplier’ and you are able to provide the completed form on request. |
Claims Object Parameters
Field | Format | Required? | Description |
---|---|---|---|
lineItemId | string | Optional | Your unique identifier for the claim line item. These are returned in the GET Payment File response to aid financial reconciliation. |
itemCode | string | Mandatory | The unique identifer for the item to be claimed. |
unitPriceIncTax | currency | Mandatory | The unit price, including tax, of the item to be claimed to two decimal places. For example, $12.76 would be "unitPriceIncTax":"12.76" |
startDate | YYYY-MM-DD | Mandatory | The date the claimable service started. |
endDate | YYYY-MM-DD | Mandatory | The date the claimable service ended. |
quantity | object - see description | Mandatory | The quantity units to be billed. For a time duration, you should convert this to a value of the unit price rounded to 2 decimal places. For example, for an item that is billed hourly, and the service time was 20 minutes, you should enter quanty as: "quantity":{"units":"0.33"} |
gstCode | NDIS GST Codes | Optional | A valid NDIS Gst Code, if omitted the claim will be submitted with a value of "P2" . |
claimType | NDIS Claim Type | Optional | The type of claim that that is being submitted, must be a valid NDIS Claim Type. |
cancellationReason | Cancellation Claim Reason | Conditional | The cancellation claim reason code, this should only be provided when the NDIS Claim Type is "CANC" , a valid Cancellation Claim Reason must be provided when the claimType is "CANC" . |
NDIS GST Codes
The NDIS GST Codes are reporting fields defined by the NDIS to communicate the tax status of the claim. The NDIS accepts three values in this field, these are defined by the NDIS as follows:
Value | Description |
---|---|
P1 | Tax Claimable (10%) |
P2 | GST Free |
P5 | GST Out of Scope |
NDIS Claim Types
The NDIS has defined a number of claim types that can be submitted to the NDIS. These mostly are used for reporting functions. It should be noted that a claim type of "CANC"
is not used to cancel a previously submitted claim and is defined as a type of claim. For standard claims, this field should be left blank or omitted. The NDIS accepts the following claim types:
Value | Description |
---|---|
CANC | Cancellation. If cancellation is selected then a valid Cancellation Reason value must be provided. |
REPW | NDIA Required Report. |
TRAN | Provider Travel. |
NF2F | Non-Face-to-Face Services. |
THLT | Telehealth Supports. |
IRSS | Irregular SIL Supports. |
Cancellation Claim Reasons
Cancellation claims reasons are required for NDIS claims when a Cancellation claim is submitted. The NDIS accepts the following cancellation reason codes:
Value | Description |
---|---|
NSDH | No show due to health reason. |
NSDF | No show due to family issues. |
NSDT | No show due to unavailability of transport. |
NSDO | Other |
Example Create Payee Invoice Request
{
"payee": {
"name": "Test Payee 55",
"abn": "51824753556",
"email": "test.payee.55@lanternpay.com",
"reference": "prov1092673",
"bankAccount": {
"bsb": "123453",
"accountNumber": "541234",
"accountHolder": "Test Payee 55"
}
},
"invoiceDate": "2021-01-01",
"invoiceNumber": "FF_ON_Test_3",
"claims": [
{
"lineItemId": "321_001",
"itemCode": "01_001_0101_1_1",
"unitPriceIncTax": 3,
"startDate": "2021-01-01",
"endDate": "2021-01-01",
"gstCode": "P1",
"quantity": {
"units": 1
}
},
{
"lineItemId": "321_002",
"itemCode": "01_001_0101_1_1",
"unitPriceIncTax": 3,
"startDate": "2021-01-01",
"endDate": "2021-01-01",
"gstCode": "P2",
"claimType": "IRSS",
"quantity": {
"units": 1
}
},
{
"lineItemId": "321_003",
"itemCode": "01_001_0101_1_1",
"unitPriceIncTax": 3,
"startDate": "2021-01-01",
"endDate": "2021-01-01",
"gstCode": "P5",
"claimType": "CANC",
"cancellationReason": "NSDH",
"quantity": {
"units": 1
}
},
{
"lineItemId": "321_004",
"itemCode": "01_001_0101_1_1",
"unitPriceIncTax": 3,
"startDate": "2021-01-01",
"endDate": "2021-01-01",
"quantity": {
"units": 1
}
}
]
}
Example Create Payee Invoice Response
{
"_links": {
"self": {
"href": "https://api.sandbox.lanternpay.com/invoices/a3566e07-8715-43ff-baad-a516661e8b8c"
},
"lp:submit-invoice": {
"href": "https://api.sandbox.lanternpay.com/invoices/a3566e07-8715-43ff-baad-a516661e8b8c/submit"
},
"curies": {
"name": "lp",
"href": "https://docs.lanternpay.com/reference#{rel}",
"templated": true
}
},
"invoiceKey": "a3566e07-8715-43ff-baad-a516661e8b8c",
"invoiceDate": "2021-01-01",
"invoiceNumber": "FF_ON_Test_3",
"totalClaimAmount": 12,
"claims": [
{
"claimKey": "9e0831f3-83a6-47a8-9ff4-390959f26711",
"itemCode": "01_001_0101_1_1",
"itemName": "Transitional Support",
"lineItemId": "321_001",
"unitPriceIncTax": 3,
"unitTax": 0,
"quantity": {
"units": 1,
"duration": ""
},
"totalPrice": 3,
"totalClaimAmount": 3,
"funded": 0,
"taxCode": "FRE",
"state": {
"value": 5,
"displayName": "Authorized"
},
"fundingSources": [
{
"name": "NDIS",
"insufficientContributionReasons": [],
"contribution": 3,
"requiresAuthorization": false
}
],
"serviceStartTime": "2021-01-01",
"serviceEndTime": "2021-01-01",
"gstCode": "P1",
"validationErrors": []
},
{
"claimKey": "cb9c211a-7d5c-47bc-b15f-f44cb6b497a8",
"itemCode": "01_001_0101_1_1",
"itemName": "Transitional Support",
"lineItemId": "321_002",
"unitPriceIncTax": 3,
"unitTax": 0,
"quantity": {
"units": 1,
"duration": ""
},
"totalPrice": 3,
"totalClaimAmount": 3,
"funded": 0,
"taxCode": "FRE",
"state": {
"value": 5,
"displayName": "Authorized"
},
"fundingSources": [
{
"name": "NDIS",
"insufficientContributionReasons": [],
"contribution": 3,
"requiresAuthorization": false
}
],
"serviceStartTime": "2021-01-01",
"serviceEndTime": "2021-01-01",
"gstCode": "P2",
"claimType": "IRSS",
"validationErrors": []
},
{
"claimKey": "ee4050b1-febc-48e2-93f8-215f10326a6d",
"itemCode": "01_001_0101_1_1",
"itemName": "Transitional Support",
"lineItemId": "321_003",
"unitPriceIncTax": 3,
"unitTax": 0,
"quantity": {
"units": 1,
"duration": ""
},
"totalPrice": 3,
"totalClaimAmount": 3,
"funded": 0,
"taxCode": "FRE",
"state": {
"value": 5,
"displayName": "Authorized"
},
"fundingSources": [
{
"name": "NDIS",
"insufficientContributionReasons": [],
"contribution": 3,
"requiresAuthorization": false
}
],
"serviceStartTime": "2021-01-01",
"serviceEndTime": "2021-01-01",
"gstCode": "P5",
"claimType": "CANC",
"cancellationReason": "NSDH",
"validationErrors": []
},
{
"claimKey": "38b1a052-8f7f-430d-adbd-8e85c862b8ce",
"itemCode": "01_001_0101_1_1",
"itemName": "Transitional Support",
"lineItemId": "321_004",
"unitPriceIncTax": 3,
"unitTax": 0,
"quantity": {
"units": 1,
"duration": ""
},
"totalPrice": 3,
"totalClaimAmount": 3,
"funded": 0,
"taxCode": "FRE",
"state": {
"value": 5,
"displayName": "Authorized"
},
"fundingSources": [
{
"name": "NDIS",
"insufficientContributionReasons": [],
"contribution": 3,
"requiresAuthorization": false
}
],
"serviceStartTime": "2021-01-01",
"serviceEndTime": "2021-01-01",
"validationErrors": []
}
],
"payee": {
"name": "Test Payee 55",
"abn": "51824753556",
"email": "test.payee.55@lanternpay.com",
"reference": "prov1092673",
"bankAccount": {
"bsb": "123453",
"accountNumber": "541234",
"accountHolder": "Test Payee 55"
}
},
"funded": 0,
"state": {
"value": 1,
"displayName": "Draft"
}
}
Submit a Payee Invoice
POST /invoices/{invoiceKey}/submit
This resources allows draft invoices, via their invoiceKey
to be submitted for processing by the NDIS. Any valid invoice submitted via the API will be sent to the NDIS for funding.
Path Parameters
Field | Format | Required? | Description |
---|---|---|---|
invoiceKey | UUID | Mandatory | The invoiceKey provided after an invoice is created. |
Example Submit Payee Invoice Response
{
"_links": {
"self": {
"href": "https://api.sandbox.lanternpay.com/invoices/a3566e07-8715-43ff-baad-a516661e8b8c/submit"
},
"curies": {
"name": "lp",
"href": "https://docs.lanternpay.com/reference#{rel}",
"templated": true
}
},
"biller": null,
"invoiceKey": "a3566e07-8715-43ff-baad-a516661e8b8c",
"invoiceDate": "2021-01-01",
"invoiceNumber": "FF_ON_Test_3",
"totalClaimAmount": 12,
"claims": [
{
"claimKey": "9e0831f3-83a6-47a8-9ff4-390959f26711",
"itemCode": "01_001_0101_1_1",
"itemName": "Transitional Support",
"lineItemId": "321_001",
"unitPriceIncTax": 3,
"unitTax": 0,
"quantity": {
"units": 1,
"duration": "0:00"
},
"totalPrice": 3,
"totalClaimAmount": 3,
"funded": 0,
"taxCode": "FRE",
"state": {
"value": 5,
"displayName": "Authorized"
},
"fundingSources": [
{
"name": "NDIS",
"insufficientContributionReasons": [],
"contribution": 3,
"requiresAuthorization": false
}
],
"serviceStartTime": "2021-01-01",
"serviceEndTime": "2021-01-01",
"gstCode": "P1",
"claimType": "",
"cancellationReason": "",
"validationErrors": []
},
{
"claimKey": "cb9c211a-7d5c-47bc-b15f-f44cb6b497a8",
"itemCode": "01_001_0101_1_1",
"itemName": "Transitional Support",
"lineItemId": "321_002",
"unitPriceIncTax": 3,
"unitTax": 0,
"quantity": {
"units": 1,
"duration": "0:00"
},
"totalPrice": 3,
"totalClaimAmount": 3,
"funded": 0,
"taxCode": "FRE",
"state": {
"value": 5,
"displayName": "Authorized"
},
"fundingSources": [
{
"name": "NDIS",
"insufficientContributionReasons": [],
"contribution": 3,
"requiresAuthorization": false
}
],
"serviceStartTime": "2021-01-01",
"serviceEndTime": "2021-01-01",
"gstCode": "P2",
"claimType": "IRSS",
"cancellationReason": "",
"validationErrors": []
},
{
"claimKey": "ee4050b1-febc-48e2-93f8-215f10326a6d",
"itemCode": "01_001_0101_1_1",
"itemName": "Transitional Support",
"lineItemId": "321_003",
"unitPriceIncTax": 3,
"unitTax": 0,
"quantity": {
"units": 1,
"duration": "0:00"
},
"totalPrice": 3,
"totalClaimAmount": 3,
"funded": 0,
"taxCode": "FRE",
"state": {
"value": 5,
"displayName": "Authorized"
},
"fundingSources": [
{
"name": "NDIS",
"insufficientContributionReasons": [],
"contribution": 3,
"requiresAuthorization": false
}
],
"serviceStartTime": "2021-01-01",
"serviceEndTime": "2021-01-01",
"gstCode": "P5",
"claimType": "CANC",
"cancellationReason": "NSDH",
"validationErrors": []
},
{
"claimKey": "38b1a052-8f7f-430d-adbd-8e85c862b8ce",
"itemCode": "01_001_0101_1_1",
"itemName": "Transitional Support",
"lineItemId": "321_004",
"unitPriceIncTax": 3,
"unitTax": 0,
"quantity": {
"units": 1,
"duration": "0:00"
},
"totalPrice": 3,
"totalClaimAmount": 3,
"funded": 0,
"taxCode": "FRE",
"state": {
"value": 5,
"displayName": "Authorized"
},
"fundingSources": [
{
"name": "NDIS",
"insufficientContributionReasons": [],
"contribution": 3,
"requiresAuthorization": false
}
],
"serviceStartTime": "2021-01-01",
"serviceEndTime": "2021-01-01",
"gstCode": "P2",
"claimType": "",
"cancellationReason": "",
"validationErrors": []
}
],
"submittedAtUtc": "2021-04-22T02:47:05.459Z",
"payee": {
"reference": "prov1092673",
"name": "Test Payee 55",
"email": "test.payee.55@lanternpay.com",
"abn": "51824753556",
"bankAccount": {
"bsb": "123453",
"accountNumber": "541234",
"accountHolder": "Test Payee 55"
}
},
"funded": 0,
"programCode": "NDIS",
"state": {
"value": 3,
"displayName": "Processed"
}
}
Get an Invoice
GET /invoices/{invoiceKey}
Use this resource to retrieve the full details of a specific invoice, via the invoiceKey
.
This API can be used to retrieve payee invoices (which are submitted by the plan manager on behalf of an unregistered biller) and registered biller invoices (which are submitted directly to LanternPay by the registered biller).
- If the invoice being retrived is a payee invoice, the
payee
node will be populated and thebiller
node will benull
. - If the invoice being retrieved was submitted by a registered biller the
biller
node will be populated and thepayee
node will benull
.
See here for a full list of all invoice and claim statuses.
Additionally, we have a number of invoice webhooks which trigger on certain events to provide updates of the processing and/or payment status of the claim(s) on the invoice. See Invoice Webhooks section for more information
When an invoice has been submitted to the NDIS, the ndisReference
field will be populated, per claim, showing the unique claim reference visible in the NDIS portal.
Path Parameters
Field | Format | Required? | Description |
---|---|---|---|
invoiceKey | UUID | Mandatory | The invoiceKey provided after an invoice is created. |
Example Get an Invoice Response
{
"_links": {
"self": {
"href": "https://api.sandbox.lanternpay.com/invoices/a3566e07-8715-43ff-baad-a516661e8b8c"
},
"curies": {
"name": "lp",
"href": "https://docs.lanternpay.com/reference#{rel}",
"templated": true
}
},
"invoiceKey": "a3566e07-8715-43ff-baad-a516661e8b8c",
"invoiceDate": "2021-01-01",
"invoiceNumber": "FF_ON_Test_3",
"submittedAtUtc": "2021-04-22T00:00:00",
"state": {
"value": 3,
"displayName": "Processed"
},
"biller": null,
"totalClaimAmount": 12,
"funded": 12,
"claims": [
{
"claimKey": "cb9c211a-7d5c-47bc-b15f-f44cb6b497a8",
"itemCode": "01_001_0101_1_1",
"itemName": "transitional support",
"unitPriceIncTax": 3,
"unitTax": 0,
"quantity": {
"units": 1,
"duration": "0:00"
},
"totalPrice": 3,
"totalClaimAmount": 3,
"funded": 3,
"taxCode": "FRE",
"state": {
"value": 13,
"displayName": "AuthorizedByProgram"
},
"lineItemId": "321_002",
"fundingSources": [
{
"insufficientContributionReasons": [],
"contribution": 3,
"requiresAuthorization": false,
"name": "NDIS",
"contractNumber": null,
"preauthorizationNumber": null
}
],
"serviceStartTime": "2021-01-01",
"serviceEndTime": "2021-01-01",
"gstCode": "P2",
"claimType": "IRSS",
"cancellationReason": "",
"validationErrors": [],
"ndisReference": "0dc75918-c8fb-4142-b763-b28886e2a89d"
},
{
"claimKey": "38b1a052-8f7f-430d-adbd-8e85c862b8ce",
"itemCode": "01_001_0101_1_1",
"itemName": "transitional support",
"unitPriceIncTax": 3,
"unitTax": 0,
"quantity": {
"units": 1,
"duration": "0:00"
},
"totalPrice": 3,
"totalClaimAmount": 3,
"funded": 3,
"taxCode": "FRE",
"state": {
"value": 13,
"displayName": "AuthorizedByProgram"
},
"lineItemId": "321_004",
"fundingSources": [
{
"insufficientContributionReasons": [],
"contribution": 3,
"requiresAuthorization": false,
"name": "NDIS",
"contractNumber": null,
"preauthorizationNumber": null
}
],
"serviceStartTime": "2021-01-01",
"serviceEndTime": "2021-01-01",
"gstCode": "P2",
"claimType": "",
"cancellationReason": "",
"validationErrors": [],
"ndisReference": "c757fb3d-9347-457d-aa30-f2e0af55fcf2"
},
{
"claimKey": "ee4050b1-febc-48e2-93f8-215f10326a6d",
"itemCode": "01_001_0101_1_1",
"itemName": "transitional support",
"unitPriceIncTax": 3,
"unitTax": 0,
"quantity": {
"units": 1,
"duration": "0:00"
},
"totalPrice": 3,
"totalClaimAmount": 3,
"funded": 3,
"taxCode": "FRE",
"state": {
"value": 13,
"displayName": "AuthorizedByProgram"
},
"lineItemId": "321_003",
"fundingSources": [
{
"insufficientContributionReasons": [],
"contribution": 3,
"requiresAuthorization": false,
"name": "NDIS",
"contractNumber": null,
"preauthorizationNumber": null
}
],
"serviceStartTime": "2021-01-01",
"serviceEndTime": "2021-01-01",
"gstCode": "P5",
"claimType": "CANC",
"cancellationReason": "NSDH",
"validationErrors": [],
"ndisReference": "a16d1842-de07-4584-bd1e-224d4becbfa7"
},
{
"claimKey": "9e0831f3-83a6-47a8-9ff4-390959f26711",
"itemCode": "01_001_0101_1_1",
"itemName": "transitional support",
"unitPriceIncTax": 3,
"unitTax": 0,
"quantity": {
"units": 1,
"duration": "0:00"
},
"totalPrice": 3,
"totalClaimAmount": 3,
"funded": 3,
"taxCode": "FRE",
"state": {
"value": 13,
"displayName": "AuthorizedByProgram"
},
"lineItemId": "321_001",
"fundingSources": [
{
"insufficientContributionReasons": [],
"contribution": 3,
"requiresAuthorization": false,
"name": "NDIS",
"contractNumber": null,
"preauthorizationNumber": null
}
],
"serviceStartTime": "2021-01-01",
"serviceEndTime": "2021-01-01",
"gstCode": "P1",
"claimType": "",
"cancellationReason": "",
"validationErrors": [],
"ndisReference": "1ead51d0-24ac-4138-ad75-653eae54738d"
}
],
"programCode": "ndis",
"payee": {
"reference": "prov1092673",
"name": "Test Payee 55",
"email": "test.payee.55@lanternpay.com",
"abn": "51824753556",
"bankAccount": {
"bsb": "123453",
"accountNumber": "541234",
"accountHolder": "Test Payee 55"
}
}
}
Authorize an Invoice
POST /invoices/{invoiceKey}/authorize
This resources allows a plan manager to authorize or reject individual claims on an invoice submitted by a registered service provider directly to LanternPay. If a service provider submits an invoice for a member with claims that are not covered under a contract (see Contracts) then it must be authorized by the member’s plan manager before LanternPay will process the claim to the NDIS.
Note: claims on an invoice can be authorized individually, and hence, can be processed and sent to the NDIS for funding individually which can result in an invoice being funded for all claims over multiple funding cycles by the NDIS.
Path Parameters
Field | Format | Required? | Description |
---|---|---|---|
invoiceKey | UUID | Mandatory | The invoiceKey provided after an invoice is created. |
Body Parameters
Field | Format | Required? | Description |
---|---|---|---|
claims | array of objects | Mandatory | The container object for an array of claims to reject or authorize. All claims on a given invoice must have an authorization action performed on them before the invoice will be processed for payment. See table below. |
Claims Object Parameters
Field | Format | Required? | Description |
---|---|---|---|
claimKey | UUID | Mandatory | The UUID for the individual claim shown in the Get Invoice API response. |
action | string | Mandatory | The authorization action for the individual claim. Can be either authorize or reject . |
Example Authorize an Invoice Request
{
"claims": [
{
"claimKey": "51837a68-1e76-083d-155a-b3185126cebf",
"action": "authorize"
},
{
"claimKey": "ef0e8a85-5dbe-0a7b-39fd-249a36f007d0",
"action": "authorize"
},
{
"claimKey": "723347b6-3806-0792-0f9f-56a3d2fb8997",
"action": "reject"
}
]
}
Example Authorize an Invoice Response
{
"_links": {
"self": {
"href": "https://api.sandbox.lanternpay.com/invoices/ba47e124-7810-0c51-023b-c2f6af7ceca1/authorize"
},
"lp:get-invoice": {
"href": "https://api.sandbox.lanternpay.com/invoices/ba47e124-7810-0c51-023b-c2f6af7ceca1"
},
"curies": {
"name": "lp",
"href": "https://docs.lanternpay.com/reference#{rel}",
"templated": true
}
}
}
Invoice Webhooks
WEBHOOK {invoiceWebhookUri}
We have a number of invoice webhook types which will fire on certain events that indicate that some data has changed on an invoice. The different invoice webhook types are intended to give integration partners more context when doing a lookup on an invoice to determine what data might have changed and what actions may follow those changes.
The strucutre of the invoice payload, see examples to the right, is the same for each invoice webhook - the only difference is the value of the type
field, described below, which indicates the event that triggered the webhook.
Path Parameters
Field | Format | Required | Description |
---|---|---|---|
invoiceWebhookUri | URI | Mandatory | The URI, per plan manager, you provided to LanternPay during onboarding. |
Body Parameters
Field | Format | Required | Description |
---|---|---|---|
id | UUID | Mandatory | A unqiue ID for the event. |
created | Unix Epoch Time | Mandatory | The date and time in Unix Epoch Time the webhook was triggered. |
data | object | Mandatory | The container object for the webhook data. See table below. |
type | string | Mandatory | The event that triggered the webhook. Valid webhook types are described below. |
Data Object Parameters
Field | Format | Required | Description |
---|---|---|---|
membershipNumber | string | Mandatory | The NDIS membership number for the participant the invoice was raised against. |
programCode | string | Mandatory | The LanternPay program code for NDIS which is: ndis |
invoiceUri | URI | Mandatory | The link to the invoice resource. Use the Get an Invoice API operation to view the invoice and its claims. |
Webhook Types
Type | Event Description |
---|---|
claiming.invoice.processed | An invoice is submitted by a plan manager via the Plan Manager API and LanternPay has completed processing of the invoice. |
claiming.invoice.received | An invoice is submitted by a provider directly to LanternPay and LanternPay has completed processing of the invoice. |
claiming.invoice.fundingDecision | The NDIS has responded to at least one claim submission on an invoice and LanternPay has processed the NDIS response for the invoice. |
claiming.invoice.cancelled | LanternPay has received a request to cancel one or more claims on an invoice and has completed the cancellation. |
claiming.invoice.adjusted | This is reserved for future use. |
Example Invoice Processed Webhook
{
"id": "c3042c70-29ce-4c86-8e1b-310e48t8932a",
"created": 1559604212,
"data": {
"membershipNumber": "123456789",
"programCode": "ndis",
"invoiceUri": "https://api.sandbox.lanternpay.com/invoices/44333588-2da3-487c-952e-54dd373zgd1f"
},
"type": "claiming.invoice.processed"
}
Example Invoice Received Webhook
{
"id": "c3042c70-29ce-4c86-8e1b-310e48t8932a",
"created": 1559604212,
"data": {
"membershipNumber": "123456789",
"programCode": "ndis",
"invoiceUri": "https://api.sandbox.lanternpay.com/invoices/44333588-2da3-487c-952e-54dd373zgd1f"
},
"type": "claiming.invoice.received"
}
Example Invoice Funding Decision Webhook
{
"id": "c3042c70-29ce-4c86-8e1b-310e48t8932a",
"created": 1559604212,
"data": {
"membershipNumber": "123456789",
"programCode": "ndis",
"invoiceUri": "https://api.sandbox.lanternpay.com/invoices/44333588-2da3-487c-952e-54dd373zgd1f"
},
"type": "claiming.invoice.fundingDecision"
}
Example Invoice Cancelled Webhook
{
"id": "c3042c70-29ce-4c86-8e1b-310e48t8932a",
"created": 1559604212,
"data": {
"membershipNumber": "123456789",
"programCode": "ndis",
"invoiceUri": "https://api.sandbox.lanternpay.com/invoices/44333588-2da3-487c-952e-54dd373zgd1f"
},
"type": "claiming.invoice.cancelled"
}
Contracts
A contract is an agreement between a member and a LanternPay registered service provider that a portion of funds from the member’s plan is reserved for that service provider. This could be a general amount which can be used for a number of different coverages or a specific amount per coverage.
This means that when a service provider submits an invoice directly to LanternPay and one or more of the claims on the invoice are covered under a contract for the member then those claims will be automatically approved for processing to the NDIS.
If you are interested in more information regarding contracts, please contact integrations@lanternpay.com
Payments
Payments are funds disbursed by LanternPay to a biller for a service provided to a member. For NDIS, LanternPay requests funds from the NDIS on behalf of a plan manager and then once those funds are paid by the NDIS, LanternPay will disburse those funds to the billers as a rolled up (NET) payment.
LanternPay will also issue a remittance advice to the biller advising of the payment and a breakdown of all the invoices/claims for a particiular plan manager that made up the payment for that day.
onPaymentScheduled Webhook
WEBHOOK {onPaymentScheduledUri}
This webhook will trigger once per day per plan manager when a payment file is generated and sent to the bank for processing. The webhook body contains a paymentUri
which can be used to retrieve a list of payments - see Get a List of Payments below.
Path Parameters
Field | Format | Required? | Description |
---|---|---|---|
onPaymentScheduledUri | URI | Mandatory | The URI, per plan manager, you provided to LanternPay during onboarding. |
Body Parameters
Field | Format | Required? | Description |
---|---|---|---|
id | UUID | Mandatory | A unqiue ID for the event. |
created | Unix Epoch Time | Mandatory | The date and time in Unix Epoch Time the webhook was triggered. |
data | object | Mandatory | The container object for the webhook data. See table below. |
type | string | Mandatory | The event type that triggered the webhook. |
Data Object Parameters
Field | Format | Required? | Description |
---|---|---|---|
paymentUri | URI | Mandatory | The link to be used for the Get a List of Payments API request shown below. You may wish to store the directEntryFileUKey value in the URI to query the file at a later date. |
Example onPaymentScheduled Webhook
{
"id": "ff8ab070-0821-4e73-bbe9-fa4df9f58e84",
"created": 1549415502,
"data": {
"paymentUri": "https://api.sandbox.lanternpay.com/payments?directEntryFileUKey=60c27986-0208-48ab-a3b0-0edcbac0b1bf"
},
"type": "settlements.payments.scheduled"
}
Get a List of Payments
GET /payments?directEntryFileUKey={directEntryFileUKey}
This resource will return a list of all payments that makes up a specific payment file. It contains a breakdown of all invoices and claims that the payment relates to, including full and part funded claims. This can be used to aid financial reconciliation for the plan manager for funds going in and out of their bank account.
Query Parameters
Field | Format | Required? | Description |
---|---|---|---|
directEntryFileUKey | UUID | Mandatory | The UUID provided in the onPaymentScheduled webhook. |
Example Get a List of Payments Response
{
"_links": {
"self": {
"href": "https://api.sandbox.lanternpay.com/payments?directEntryFileUKey=60c27986-0208-48ab-a3b0-0edcbac0b1bf"
},
"curies": {
"name": "lp",
"href": "https://docs.lanternpay.com/reference#{rel}",
"templated": true
}
},
"amount": 100,
"date": "2019-02-06",
"payments": [
{
"billerKey": "48cf5266-3ea3-040e-3b3a-f2d355c28a87",
"amount": 100,
"requestedDate": "2019-02-06",
"paymentReference": "ndis20190206BZELNK",
"contributions": [
{
"invoiceNumber": "903512621",
"claimKey": "15149be3-cd41-46f7-a69b-d781bfa96507",
"amount": 50,
"memberKey": "35161601-6821-41fa-8fc6-64975f0d58e4",
"lineItemId": "06a3e612-e9c0-40ad-99d0-a9b40ac816db",
"ndisReference": "ce0ccf08-b879-474b-9d12-c72cb0291570"
},
{
"invoiceNumber": "903512622",
"claimKey": "d0683a31-fcee-4ee7-8c25-ea77b366b235",
"amount": 50,
"memberKey": "16ae911b-ef96-43b6-a693-389585e180c7",
"lineItemId": "10d55f41-2ad9-4a78-b4c8-53e0b8660a41",
"ndisReference": "b5169058-c858-4044-b28d-ef615de8cb96"
}
]
}
]
}