Individuals API
Learn more about how the Individuals API can be used to manage individuals and their government identification documents.
Individual Verification
The following examples show how to use the FrankieOne API to perform functions related to an individual.
Create an individual entity
To create an individual entity eligible for verification, make a request to the POST /v2/individuals
API endpoint.
- To add a name to an individual, use the
name
object in the request body.
"name": {
"givenName": "Johnny",
"middleName": "Tan",
"familyName": "Doe",
"displayName": "Johnny Tan Doe"
}
- To add a date of birth to an individual, use the
dateOfBirth
object in the request body.
...
"dateOfBirth": {
"year": "1990",
"month": "05",
"day": "15"
},
...
- To add an address to an individual, use the addresses array in the request body.
- To add multiple addresses, add a separate address to the addresses array.
...
"addresses":
[
{
"type": "RESIDENTIAL",
"streetName": "King",
"streetNumber": "123",
"streetType": "Street",
"neighborhood": "Melbourne CBD",
"locality": "Melbourne",
"subdivision": "VIC",
"country": "AUS",
"postalCode": "3000",
"status": "CURRENT"
}
]
...
- To acknowledge consent for an individual, use the consents array in the request body.
...
"consents":
[
{
"type": "GENERAL"
},
{
"type": "CREDITHEADER"
},
{
"type": "DOCS"
},
]
}
...
Sample request
curl --location 'http://api.{{env}}.frankie.one/v2/individuals' \
--header 'api_key: {{your_apiKey}}' \
--header 'X-Frankie-CustomerID: {{your_CustomerID}}' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data-raw '{
"individual": {
"name":
{
"givenName": "Johnny",
"middleName": "Tan",
"familyName": "Doe",
"displayName": "Johnny Tan Doe"
},
"dateOfBirth":
{
"year": "1990",
"month": "05",
"day": "15"
},
"addresses":
[
{
"type": "RESIDENTIAL",
"streetName": "King",
"streetNumber": "123",
"streetType": "Street",
"neighborhood": "Melbourne CBD",
"locality": "Melbourne",
"subdivision": "VIC",
"country": "AUS",
"postalCode": "3000",
"status": "CURRENT"
}
],
"consents":
[
{
"type": "GENERAL"
},
{
"type": "CREDITHEADER"
},
{
"type": "DOCS"
}
]
}
}'
Sample response
Collect the
entityId
in the response as it will be used in subsequent API calls for this individual.
Status: 201 Created
{
"individual": {
"entityId": "{entityId}",
"entityType": "INDIVIDUAL",
"createdAt": "2024-01-31T23:21:57.296Z",
"schemaVersion": 2,
"addresses": [
{
"addressId": "{addressId}",
"type": "RESIDENTIAL",
"streetName": "King",
"streetNumber": "123",
"streetType": "Street",
"neighborhood": "Melbourne CBD",
"locality": "Melbourne",
"subdivision": "VIC",
"country": "AUS",
"postalCode": "3000",
"status": "CURRENT"
}
],
"name": {
"nameId": "{nameId}",
"givenName": "Johnny",
"middleName": "Tan",
"familyName": "Doe",
"displayName": "Johnny Tan Doe"
},
"dateOfBirth": {
"dateOfBirthId": "{dateOfBirthId}"
"normalized": "1990-03-31",
"year": "1990",
"month": "03",
"day": "27",
"type": "GREGORIAN"
},
"consents":
[
{
"type": "GENERAL"
},
{
"type": "CREDITHEADER"
},
{
"type": "DOCS"
},
]
}
},
"requestId": "{requestId}"
}
Note: Service Profiles have been intentionally omitted for brevity
Addresses
Don't forget the Address ID.
When updating an address, don’t forget to include the
addressId
field. This would have been in the response message when you first added the address.You can always get the
addressId
(and all other IDs) if you call theGET /v2/{entityType}/{entityId}
API call.
Don't forget the Country
This field is mandatory and must be one of the ISO-3166-alpha-3 codes.
See here: List of ISO 3166 country codes
Address Types
Addresses have a number of available type options. Whilst this is an optional field, it is good practice to include the type to assist with processing and checking. It is recommended that these following types be used:
**RESIDENTIAL **
- This will be the primary address used when trying to determine the country of residence and primary current address. IfRESIDENTIAL
has been used for this, note that this will be deprecated and removed in the next major version of the API.**POSTAL **
- This is a mailing address. It is also used as the current residential address if noRESIDENTIAL
type is found.
Street Address and the use of the streetName
field
streetName
fieldIt can be hard to break down an address and so we’ve made the streetName
field quite flexible.
Whilst it is best to break the address into its constituent parts, you can combine streetNumber
, streetName
and streetType
into the streetName
field if required.
It's better to break down the address fields.
Whilst combining the fields is readily supported, best matching results are found when you break the address down into as many fields as you can.
Structured Addresses
It is always best to use the structured address and map in 1-1 the following fields.
Field name | Description | Type |
---|---|---|
type | The type of address, for example residential , postal | String (enum) |
typeDescription | The description of the address. Used for reference only. | string |
unitNumber | Unit | Apartment | Flat | Suite | others number. | string |
streetNumber | The number on the street. Generally a number, but can also be alphanumeric ( for example, 3A). | string |
streetName | The name of the street. | string |
streetType | The street type - for example, Road, St, Ave, Circuit, and others. | string |
buildingName | The name of the building, apartment block, condo, and others | string |
locality | (formerly town) The locality, town, village, suburb, or city | string |
district | (formerly region) The district, region, county, province, or cantonment of the address | string |
neighborhood | The neighborhood or suburb in the town or city. Note: Only use neighborhood if locality is already captured as part of the address and an additional location is required. Otherwise just use locality. | string |
subdivision | The administrative area, state, or subdivision. Note: Abbreviations (“VIC”) and full names (“Victoria”) are acceptable. | string |
country | The ISO-3166-1 alpha 3 country code of the address. | string |
postalCode | The postal code or zip code of the address. | string |
careOf | Individual or business name at this address if not the same as the name of the entity to which this address belongs. | string |
longForm | The full address details. It is preferable that the address is broken down into its constituent parts however where that is not possible, a longForm can be used. Note: longForm address matching generally produces weaker results due to the complexity involved in breaking down, interpreting and mapping an entire address from a single string. | string |
status | Determines the status of this address in relation to the entity using it. Example: Current or Future Note: “Current” addresses will be treated as primary addresses for verification purposes. | string (enum) |
validTo | When will this entity no longer be using this address? Used for reference only. | date |
validFrom | When did the entity first start using this address? Used for reference only. | date |
Example 1: Full Address Entered as Separate Fields (preferable)
...
"addresses":
[
{
"type": "RESIDENTIAL",
"streetName": "King",
"streetNumber": "123",
"streetType": "Street",
"locality": "Melbourne",
"subdivision": "VIC",
"country": "AUS",
"postalCode": "3000",
"status": "CURRENT"
}
]
...
Example 2: Full Address Entered as Long Form
...
"addresses":
[
{
"type": "RESIDENTIAL",
"longForm": "123 King Street, Melbourne 3000, Victoria, Australia",
"status": "CURRENT"
}
]
...
Consent
Before proceeding with data verification checks, obtaining consent is essential and varies based on the verification type. While general consent encompasses standard verifications against government databases, it may not include credit checks and document validations. Consult with your AML team and the FrankieOne team to determine what consent flags you need to supply.
Consent | Description |
---|---|
GENERAL | This indicates that the entity has given consent for their name, address, or DoB to be checked against our various databases and external services. |
DOCS | This indicates that the entity has given consent to have their identity documents checked against official sources. |
CREDITHEADER | This indicates that the entity has given permission to have their details checked against a credit bureau service. If this check fails, you must inform the user that the check failed and put them in touch with the bureau directly so that they may update their details as necessary. This is not normally available by default, so please see your account manager about making this service available. |
UNDER18 | This indicates that the entity is under the age of 18 and a parent or guardian has provided consent. This is a special case of the consent.general flag (see above). consent.docs would still be required to check their passports or drivers license. |
PAYROLL | This consent is used to allow access to verifying an identity using payroll data. |
INSURANCE | This consent is used to allow access to verifying an identity using workcover data. |
SUPERANNUATION | This consent is used to allow access to verifying an identity using superannuation data. |
Retrieve an individual entity
The individual entity can be retrieved at any time by making a request to the GET /v2/individuals/{entityId}
API endpoint.
Update an individual entity
The individual entity can be updated at any time by making a request to the PATCH /v2/individuals/{entityId} API
endpoint.
To update a specific element of an individual entity, be sure to provide the relevant information you wish to update along with the ID of the object. This does not the case with primary entity elements (name
, dateOfBirth
, placeOfBirth
)
Example 1: update a name
"name":
{
"givenName": "James",
"familyName": "Done"
}
Example 2: update an address
"addresses":
[
{
"addressId": "{addressId}",
"status": "CURRENT"
}
]
Example 3: update alternateDatesOfBirth
"alternateDatesOfBirth":
{
"dateOfBirthId": "{dateOfBirthId}",
"year": "1992",
"month": "12",
"day": "05"
}
Adding entity elements
To add a new object to an existing entity, simply add the new object without an ID.
Example 1: adding an address
"addresses":
[
{
"type": "RESIDENTIAL",
"streetNumber": "123",
"streetName": "King",
"streetType": "Street",
"locality": "Melbourne",
"postalCode": "3000",
"subdivision": "NSW",
"country": "AUS",
"status": "CURRENT"
}
]
Adding consents
Consents will not be duplicated so new consent types will simply be added if not already applied.
Example 2: adding consents
"consents":
[
{
"type": "CREDITHEADER"
}
]
Deleting entity elements
Individual entity objects can be deleted at any time by making a request to the DELETE /v2/individuals/{entityId}/{objectType}/{objectId}
API endpoint.
Example 1: deleting a phoneNumber
DELETE /v2/individuals/{entityId}/phonenumbers/{objectId}
Example 2: deleting a emailAddress
DELETE /v2/individuals/{entityId}/emailaddresses/{objectId}
Deleting documents
Individual document objects can be deleted at any time by making a request to the DELETE /v2/individuals/{entityId}/documents/{documentId}
API endpoint.
DELETE /v2/individuals/{entityId}/documents/{documentId}
Deleting document attachments
Individual document attachment objects can be deleted at any time by making a request to the DELETE /v2/individuals/{entityId}/documents/{documentId}/attachments/{attachmentId}
API endpoint.
DELETE /v2/individuals/{entityId}/documents/{documentId}/attachments/{attachmentId}
Withdrawing consent
Individual consent of a certain type can be withdrawn at any time by making a request to the DELETE /v2/individuals/{entityId}/consents/{consentType}
API endpoint.
DELETE /v2/individuals/{entityId}/consents/CREDITHEADER
Delete an individual entity
The individual entity can be deleted at any time by making a request to the DELETE /v2/individuals/{entityId}
API endpoint.
Individual entities that are deleted can not be recovered by FrankieOne.
Please ensure you only delete entities that are no longer needed for any purpose, including audit or compliance.
Updated 3 days ago