Person
People are a core part of the Checkmate system - the very reason Checkmate exists is so you can securely view, share and edit personal identity documents. On this page, we'll dive into the fields available on the Person model and how you can use them to create entities programatically.
The person entity
The person entity contains all the information about an individual, such as their legal identity, address, contact information and bank accounts. Each structure is individually encrypted, allowing fine-grained access and sharing. Many of the fields applicable to people are also applicable to companies, (e.g bank accounts). For details on these models you can refer to their individual docs.
Properties
- Name
identity- Type
- Person.Identity
- Description
The identity claims for the person represented by this token
- Name
address- Type
- Person.ResidentialAddress
- Optional
- Optional
- Description
The current and previous address claims of the person
- Name
emails- Type
- Person.EmailAddresses
- Optional
- Optional
- Description
Email address claims, with verification attestations.
- Name
phoneNumbers- Type
- Person.PhoneNumbers
- Optional
- Optional
- Description
Phone number claims, with verification attestations.
- Name
walletAddresses- Type
- Person.WalletAddresses
- Optional
- Optional
- Description
Wallet address claims, with verification attestations.
- Name
sourceOfWealth- Type
- Person.WealthSource
- Optional
- Optional
- Description
Evidence for the person's source of wealth
- Name
bankAccounts- Type
- Person.BankAccounts
- Optional
- Optional
- Description
List of bank accounts that the person owns
- Name
estate- Type
- Person.Estate
- Optional
- Optional
- Description
Will, power of attorney and estate plans
Creating a person
You can create a person entity directly as shown here, or you can initialise each of the fields seperately.
import { Person, FundingSourceType, WealthSourceType, BankAccountType } from '@checkmateid/sdk'
const person = new Person({
identity: {
name: {
familyName: 'Griffin',
middleName: '',
givenName: 'Elizabeth',
},
otherNames: [{
type: 'previous',
familyName: 'Ferreira',
middleName: '',
givenName: 'Elizabeth',
}],
dateOfBirth: '1990-01-01',
placeOfBirth: {
country: 'GB',
},
nationalities: ['GB'],
},
address: {
current: {
streetAddress: '3590 Williams Avenue',
locality: 'Los Angeles',
region: 'California',
postalCode: '90017',
country: 'US',
},
history: [{
streetAddress: '1600 Pennsylvania Avenue',
locality: 'Washington, DC',
region: '',
postalCode: '20500',
country: 'US',
startDate: '2009-01-20',
endDate: '2017-01-20',
}]
},
emails: [{
label: 'Work',
value: 'richard@piedpiper.com',
}],
phoneNumbers: [{
label: 'Work',
value: '+16613063363',
}],
walletAddresses: [{
address: '0x0c4006807b19387211f6fd07B98157FfBD8C9415',
label: 'Trezor',
chains: [1, 137],
}],
sourceOfWealth: {
fundingSource: FundingSourceType.PersonalSavings,
wealthSource: WealthSourceType.Investments,
},
bankAccounts: [{
type: BankAccountType.SWIFT,
iban: 'GB55REVO00996904854211',
bic: 'REVOGB21',
intermediaryBic: 'CHASGB2L',
}]
})
Attaching evidence to claims
Evidence allows each of the claims about a person to be verified. Evidence must be created through the static create method, which automatically attaches file metadata.
import { Evidence, DocumentType } from '@checkmateid/sdk'
const passport = await Evidence.Document.create({
file: passportFile,
type: DocumentType.Passport,
details: {
documentNumber: '12345678',
issuanceDate: '2010-01-01',
expirationDate: '2017-01-01',
}
})
const bankStatement = await Evidence.Document.create({
file: bankStatementFile,
type: DocumentType.BankStatement,
details: {
documentNumber: '12345678',
issuanceDate: '2023-01-01',
}
})
person.identity.addEvidence(passport)
person.address.addEvidence(bankStatement)
Identity
This endpoint allows you to retrieve a paginated list of all your contacts. By default, a maximum of ten contacts are shown per page.
Properties
- Name
name- Type
- Name
- Field ID
- ID: 1
- Description
Current name of the person
- Name
familyName- Type
- string
- Description
As per OpenID Connect Core 5.1
- Name
middleName- Type
- string
- Optional
- Optional
- Description
As per OpenID Connect Core 5.1
- Name
givenName- Type
- string
- Description
As per OpenID Connect Core 5.1
- Name
otherNames- Type
- OtherName[]
- Optional
- Optional
- Field ID
- ID: 2
- Description
Previous names if available
- Name
type- Type
- "previous" | "alias"
- Description
Whether this is a previous name or an alias
- Name
familyName- Type
- string
- Description
As per OpenID Connect Core 5.1
- Name
middleName- Type
- string
- Optional
- Optional
- Description
As per OpenID Connect Core 5.1
- Name
givenName- Type
- string
- Description
As per OpenID Connect Core 5.1
- Name
startDate- Type
- string
- Optional
- Optional
- Description
Date from which this name came into effect, as an ISO 8601 date
- Name
endDate- Type
- string
- Optional
- Optional
- Description
Date when this name was superseded, as an ISO 8601 date
- Name
dateOfBirth- Type
- string
- Field ID
- ID: 3
- Description
Date of birth, as an ISO 8601 date
- Name
placeOfBirth- Type
- BirthPlace
- Field ID
- ID: 4
- Description
The person's birthplace
- Name
country- Type
- string
- Description
Country of birth, as ISO 3166-1 (alpha-2) country code
- Name
region- Type
- string
- Optional
- Optional
- Description
Optional region field
- Name
locality- Type
- string
- Optional
- Optional
- Description
Optional city or locality field
- Name
nationalities- Type
- string[]
- Field ID
- ID: 5
- Description
Array of nationalities, as ISO 3166-1 (alpha-2) country codes
- Name
evidence- Type
- Evidence[]
- Optional
- Optional
- Field ID
- ID: 4094
- Description
Array of evidence objects supporting this claim. Supports the following document types:
PassportDrivingLicenseNationalIDMilitaryID
Usage
import { Person, Evidence, DocumentType } from '@checkmateid/sdk'
const passport = await Evidence.Document.create({
file,
type: DocumentType.Passport,
details: {
documentNumber: '12345678',
issuanceDate: '2010-01-01',
expirationDate: '2017-01-01',
}
})
const identity = new Person.Identity({
name: {
familyName: 'Griffin',
middleName: '',
givenName: 'Elizabeth',
},
otherNames: [{
type: 'previous',
familyName: 'Ferreira',
middleName: '',
givenName: 'Elizabeth',
}],
dateOfBirth: '1990-01-01',
placeOfBirth: {
country: 'GB',
},
nationalities: ['GB'],
evidence: [passport],
})
Residential Address
Current and historical residential addresses of a person. Based on OpenID Connect Core 5.1.
- Name
current- Type
- PostalAddress
- Field ID
- ID: 1
- Description
Current residential address of the person
- Name
streetAddress- Type
- string
- Description
Full street address, including house number
- Name
locality- Type
- string
- Description
City or locality component
- Name
region- Type
- string
- Optional
- Optional
- Description
State, province, prefecture or region component
- Name
postalCode- Type
- string
- Description
ZIP code or postal code component
- Name
country- Type
- string
- Description
ISO 3166-1 (alpha-2) country code
- Name
history- Type
- PostalAddressHistorical[]
- Field ID
- ID: 2
- Description
Historical addresses, if available
- Name
streetAddress- Type
- string
- Description
Full street address, including house number
- Name
locality- Type
- string
- Description
City or locality component
- Name
region- Type
- string
- Optional
- Optional
- Description
State, province, prefecture or region component
- Name
postalCode- Type
- string
- Description
ZIP code or postal code component
- Name
country- Type
- string
- Description
ISO 3166-1 (alpha-2) country code
- Name
startDate- Type
- string
- Optional
- Optional
- Description
Start date of the persons residency, as an ISO 8601 date
- Name
endDate- Type
- string
- Optional
- Optional
- Description
End date of the persons residency, as an ISO 8601 date
- Name
evidence- Type
- Evidence[]
- Optional
- Optional
- Field ID
- ID: 4094
- Description
Array of evidence objects supporting this claim. Supports the following document types:
BankStatementCreditCardStatementUtilityBillGovernmentCorrespondenceLeaseAgreementMortgageStatement
Usage
import { Person, Evidence, DocumentType } from '@checkmateid/sdk'
const bankStatement = await Evidence.Document.create({
file,
type: DocumentType.BankStatement,
details: {
documentNumber: '12345678',
issuanceDate: '2023-01-01',
}
})
const address = new Person.Address({
current: {
streetAddress: '3590 Williams Avenue',
locality: 'Los Angeles',
region: 'California',
postalCode: '90017',
country: 'US',
},
history: [{
streetAddress: '1600 Pennsylvania Avenue',
locality: 'Washington, DC',
region: '',
postalCode: '20500',
country: 'US',
startDate: '2009-01-20',
endDate: '2017-01-20',
}],
evidence: [bankStatement],
})
Email Addresses
Attach email addresses to a profile. You can request verification, which will send a single-use code that can be exchanged for a verification attestation signed by Checkmate.
- Name
value- Type
- string
- Description
Email address
- Name
label- Type
- string
- Optional
- Optional
- Description
Human-readable label for this email
Usage
import { Person, EmailAddress } from '@checkmateid/sdk'
const workEmail = new EmailAddress({
label: 'Work',
value: 'richard@piedpiper.com',
})
// Request a verification code (optional)
await workEmail.requestOTP();
// Exchange verification code for an attestation
await workEmail.confirmOTP('123456');
const emails = new Person.EmailAddresses([
workEmail,
])
Phone Numbers
Attach phone numbers to a profile. You can request verification, which will send a single-use code that can be exchanged for a verification attestation signed by Checkmate.
- Name
value- Type
- string
- Description
Phone number, as an E.164 string
- Name
label- Type
- string
- Optional
- Optional
- Description
Human-readable label for this phone number
Usage
import { Person, PhoneNumber } from '@checkmateid/sdk'
const workNumber = new PhoneNumber({
label: 'Work',
value: '+16613063363',
})
// Request a verification code (optional)
await workNumber.requestOTP();
// Exchange verification code for an attestation
await workNumber.confirmOTP('123456');
const phoneNumbers = new Person.PhoneNumbers([
workNumber,
// Or add an unverified phone number
{
label: 'Personal',
value: '+12134706240',
}
])
Wallet Addresses
Attach wallet addresses to a profile. Ownership can be verified by signing each entry with the corresponding wallet.
- Name
address- Type
- string
- Description
Wallet address
- Name
label- Type
- string
- Optional
- Optional
- Description
Human-readable label for this wallet address
- Name
chains- Type
- string[]
- Optional
- Optional
- Description
Array of chain IDs that this wallet can transact in
- Name
publicKey- Type
- string
- Optional
- Optional
- Description
Hex-encoded public key of the wallet
Usage
import { Person, WalletAddress } from '@checkmateid/sdk'
const trezor = new WalletAddress({
address: '0x0c4006807b19387211f6fd07B98157FfBD8C9415',
label: 'Trezor',
chains: ['1', '137'], // supports Ethereum & Polygon
})
// Request a challenge
const message = await trezor.requestChallenge()
// Sign the message, then request verification
await trezor.verifyChallengeResponse({ message, signature })
const walletAddresses = new Person.WalletAddresses([
trezor
])
Wealth Source
Attach information about the person's source of wealth.
- Name
fundingSource- Type
- FundingSourceType[]
- Field ID
- ID: 1
- Description
The origins of money that the person uses to finance their operations.
PersonalSavingsPensionShareDividendsRealEstateGamblingInheritanceLegalCompensationEmploymentIncome
- Name
wealthSource- Type
- WealthSourceType[]
- Field ID
- ID: 2
- Description
Origins of the person's entire body of wealth (ie. total assets).
InheritanceInvestmentsBusinessInterestsEmploymentIncome
- Name
evidence- Type
- Evidence[]
- Optional
- Optional
- Field ID
- ID: 4094
- Description
Array of evidence objects supporting this claim
Usage
import { Person, Evidence, DocumentType, FundingSourceType, WealthSourceType } from '@checkmateid/sdk'
const proofOfFunds = await Evidence.Document.create({
file,
type: DocumentType.BankStatement,
details: {
documentNumber: '12345678',
issuanceDate: '2023-01-01',
}
})
const wealthSource = new Person.WealthSource({
fundingSource: FundingSourceType.PersonalSavings,
wealthSource: WealthSourceType.Investments,
evidence: [proofOfFunds],
})
Bank Accounts
Attach a list of bank accounts that are controlled by the person.
- Name
label- Type
- string
- Optional
- Optional
- Description
Human-readable label for the account
- Name
currencies- Type
- string[]
- Optional
- Optional
- Description
Array of ISO 4217 currency codes that this account accepts
- Name
beneficiary- Type
- BankAccountBeneficiary
- Optional
- Optional
- Description
The account beneficiary. This should usually be the same as the person's identity.
- Name
name- Type
- string
- Description
Full name of the beneficiary
- Name
address- Type
- PostalAddress
- Description
Address of the beneficiary
- Name
institution- Type
- BankAccountInstitution
- Optional
- Optional
- Description
Name and address of the bank.
- Name
name- Type
- string
- Description
Legal name of the bank
- Name
address- Type
- PostalAddress
- Description
Address of the bank
- Name
type- Type
- BankAccountType
- Description
Type of transfer supported by this account
FasterPaymentsSWIFTACHWire
- Name
accountNumber- Type
- string
- Description
Account number. Required if type is
FasterPayments,ACHorWire.
- Name
achRoutingNumber- Type
- string
- Description
ACH routing number. Required if type
ACH.
- Name
wireRoutingNumber- Type
- string
- Description
Wire routing number. Required if type
Wire.
- Name
sortCode- Type
- string
- Description
Sort code. Required if type
FasterPayments.
- Name
iban- Type
- string
- Description
IBAN (International Bank Account Number). Required if type
SWIFT.
- Name
bic- Type
- string
- Description
BIC (Bank Identification Code). Required if type
SWIFT.
- Name
intermediaryBic- Type
- string
- Optional
- Optional
- Description
Intermediary BIC, if required. Only used if type
SWIFT.
Usage
import { Person, BankAccountType } from '@checkmateid/sdk'
const bankAccounts = new Person.BankAccounts([
{
label: 'Primary Deposit',
currencies: ['GBP', 'USD', 'EUR'],
beneficiary: {
name: 'Elizabeth Griffin',
address: {
streetAddress: '3590 Williams Avenue',
locality: 'Los Angeles',
region: 'California',
postalCode: '90017',
country: 'US',
}
},
institution: {
name: 'Revolut Ltd',
address: {
streetAddress: '7 Westferry Circus',
locality: 'London',
region: '',
postalCode: 'E14 4HD',
country: 'GB',
}
},
type: BankAccountType.SWIFT,
iban: 'GB55REVO00996904854211',
bic: 'REVOGB21',
intermediaryBic: 'CHASGB2L',
}
])
Estate
Information about the person's estate, will and power of attorney documents.
- Name
will- Type
- Document
- Optional
- Optional
- Field ID
- ID: 1
- Description
The person's will document
- Name
poa- Type
- Document
- Optional
- Optional
- Field ID
- ID: 2
- Description
Power of attorney document
- Name
estatePlan- Type
- Document
- Optional
- Optional
- Field ID
- ID: 3
- Description
Plan for the person's estate
Usage
import { Person, Document, DocumentType } from '@checkmateid/sdk'
const will = await Document.create({
file,
type: DocumentType.Will,
})
const poa = await Document.create({
file,
type: DocumentType.POA,
})
const estatePlan = await Document.create({
file,
type: DocumentType.EstatePlan,
})
const estate = new Person.Estate({
will,
poa,
estatePlan,
})