Company
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 company 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
incorporationDetails- Type
- Company.IncorporationDetails
- Description
Company incorporation details, like legal name and registered office
- Name
businessDetails- Type
- Company.BusinessDetails
- Optional
- Optional
- Description
Description, business activities and licensing information
- Name
taxDetails- Type
- Company.TaxDetails
- Optional
- Optional
- Description
VAT number, Tax ID and returns documents
- Name
bankAccounts- Type
- Company.BankAccounts
- Optional
- Optional
- Description
List of bank accounts that the company controls
- Name
emails- Type
- Company.EmailAddresses
- Optional
- Optional
- Description
Email address claims, with verification attestations.
- Name
phoneNumbers- Type
- Company.PhoneNumbers
- Optional
- Optional
- Description
Phone number claims, with verification attestations.
- Name
walletAddresses- Type
- Company.WalletAddresses
- Optional
- Optional
- Description
Wallet address claims, with verification attestations.
- Name
partnershipExtension- Type
- Company.PartnershipExtension
- Optional
- Optional
- Description
Fields specific to partnership entities
- Name
trustExtension- Type
- Company.TrustExtension
- Optional
- Optional
- Description
Fields specific to trust company entities
- Name
fundExtension- Type
- Company.FundExtension
- Optional
- Optional
- Description
Fields specific to funds company entities
- Name
llcExtension- Type
- Company.LLCExtension
- Optional
- Optional
- Description
Fields specific to LLC/LLP entities
- Name
scCorpExtension- Type
- Company.SCCorpExtension
- Optional
- Optional
- Description
Fields specific to S-Corp and C-Corp entities
Creating a company
You can create a company entity directly as shown here, or you can initialise each of the fields seperately.
import { Company, CompanyStatus, CompanyType, CompanyPurpose, IndustryClassificationStandard } from '@checkmateid/sdk'
const company = new Company({
incorporationDetails: {
name: 'Certi Holdings Limited',
status: CompanyStatus.Active,
type: CompanyType.PrivateLimitedByShares,
country: 'GB',
companyNumber: '12345678',
incorporationDate: '2022-04-01',
registeredOffice: {
streetAddress: '3590 Williams Avenue',
locality: 'Los Angeles',
region: 'California',
postalCode: '90017',
country: 'US',
},
},
businessDetails: {
description: 'Certi Holdings is the parent co for Checkmate...',
purpose: CompanyPurpose.Generic,
industryClassification: {
standard: IndustryClassificationStandard.SIC_GB,
codes: ['46180', '90030']
},
dunsNumber: '123456789',
},
taxDetails: {
taxId: '12345678',
vatNumber: '12345678'
},
bankAccounts: [{
label: 'Primary Deposit',
currencies: ['GBP', 'USD', 'EUR'],
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',
}]
})
Incorporation Details
Stores all the information related to the companies incorporation.
Properties
- Name
name- Type
- string
- Field ID
- ID: 1
- Description
Registered name of the company
- Name
status- Type
- CompanyStatus
- Field ID
- ID: 2
- Description
Status of the company
ActiveDissolved
- Name
type- Type
- CompanyType
- Field ID
- ID: 3
- Description
Type of company
PublicLimitedCompanyPrivateLimitedByGuaranteePrivateLimitedBySharesPrivateUnlimitedCompanyLimitedLiabilityCompanyLimitedLiabilityPartnershipPartnershipCorporationSCorporationSoleProprietorshipCooperative
- Name
country- Type
- string
- Field ID
- ID: 4
- Description
Registration jurisdiction, as an ISO 3166-1 (alpha-2) country code
- Name
companyNumber- Type
- string
- Field ID
- ID: 5
- Description
Company number, as provided by the registration jurisdiction. This field is optional if type is:
PartnershipSoleProprietorship
- Name
incorporationDate- Type
- string
- Field ID
- ID: 6
- Description
Date the company was incorporated, as an ISO 8601 date. This field is optional if type is:
PartnershipSoleProprietorship
- Name
dissolutionDate- Type
- string
- Optional
- Optional
- Field ID
- ID: 7
- Description
Date the company was dissolved, as an ISO 8601 date
- Name
address- Type
- PostalAddress
- Field ID
- ID: 8
- Description
Current office or registered business address.
- 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
evidence- Type
- Evidence[]
- Optional
- Optional
- Field ID
- ID: 4094
- Description
Array of evidence objects supporting this claim. Supports the following document types:
MemorandumOfAssocArticlesOfAssocIncorporationCert
Usage
import { Company, CompanyStatus, CompanyType } from '@checkmateid/sdk'
const incorporationDetails = new Company.IncorporationDetails({
name: 'Certi Holdings Limited',
status: CompanyStatus.Active,
type: CompanyType.PrivateLimitedByShares,
country: 'GB',
companyNumber: '12345678',
incorporationDate: '2022-04-01',
address: {
streetAddress: '3590 Williams Avenue',
locality: 'Los Angeles',
region: 'California',
postalCode: '90017',
country: 'US',
},
evidence: [],
})
Business Details
Stores all the information related to the companies business activities, purpose and description.
Properties
- Name
description- Type
- string
- Optional
- Optional
- Field ID
- ID: 1
- Description
Description of the business and any activities. Supports markdown formatting.
- Name
purpose- Type
- CompanyPurpose
- Optional
- Optional
- Field ID
- ID: 2
- Description
What this company will be used for. Used to inform the UI on the various extensions that should be required.
GenericFoundation- marksfoundationExtensionas requiredFund- marksfundExtensionas requiredTrust- markstrustExtensionas requiredUnitTrust- markstrustExtensionas requiredBareTrust- markstrustExtensionas requiredPTC- markstrustExtensionas required
- Name
industryClassification- Type
- CompanyIndustry
- Optional
- Optional
- Field ID
- ID: 3
- Description
Standard classification codes for business activities
- Name
standard- Type
- IndustryClassificationStandard
- Description
The jurisdiction-dependant standard used for classification
SIC_USSIC_GBNAICS
- Name
codes- Type
- string[]
- Description
Array of classification codes
- Name
dunsNumber- Type
- string
- Optional
- Optional
- Field ID
- ID: 4
- Description
D-U-N-S® number, issued by Dun & Bradstreet
- Name
structureChart- Type
- Attachment
- Optional
- Optional
- Field ID
- ID: 5
- Description
Attachment containing a graphic structure chart of the company
- Name
businessLicense- Type
- Attachment
- Optional
- Optional
- Field ID
- ID: 6
- Description
Attachment containing the business license
Usage
import { Company, CompanyPurpose, IndustryClassificationStandard } from '@checkmateid/sdk'
const businessDetails = new Company.BusinessDetails({
description: 'Certi Holdings is the parent co for Checkmate...',
purpose: CompanyPurpose.Generic,
industryClassification: {
standard: IndustryClassificationStandard.SIC_GB,
codes: ['46180', '90030']
},
dunsNumber: '123456789',
})
Tax Details
Stores all the information related to the companies tax registration and requirements.
Properties
- Name
taxId- Type
- string
- Field ID
- ID: 1
- Description
Tax identification number or ID
- Name
vatNumber- Type
- string
- Optional
- Optional
- Field ID
- ID: 2
- Description
VAT number
Usage
import { Company } from '@checkmateid/sdk'
const taxDetails = new Company.TaxDetails({
taxId: '12345678',
vatNumber: '12345678'
})
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 incorporation details.
- 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 { Company, BankAccountType } from '@checkmateid/sdk'
const bankAccounts = new Company.BankAccounts([
{
label: 'Primary Deposit',
currencies: ['GBP', 'USD', 'EUR'],
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',
}
])
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
- Name
person- Type
- EmailAddress.Person
- Optional
- Optional
- Description
Details about the email receipient
- Name
name- Type
- string
- Description
The recipients name
- Name
role- Type
- string
- Optional
- Optional
- Description
Their role at the company
Usage
import { Company, EmailAddress } from '@checkmateid/sdk'
const technicalContact = new EmailAddress({
label: 'Technical Contact',
value: 'richard@piedpiper.com',
person: {
name: 'Richard Hendricks',
role: 'CTO',
},
})
// Request a verification code (optional)
await technicalContact.requestOTP();
// Exchange verification code for an attestation
await technicalContact.confirmOTP('123456');
const emails = new Company.EmailAddresses([
technicalContact,
])
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
- Name
person- Type
- PhoneNumber.Person
- Optional
- Optional
- Description
Details about the phone numbers contact person
- Name
name- Type
- string
- Description
The recipients name
- Name
role- Type
- string
- Optional
- Optional
- Description
Their role at the company
Usage
import { Company, PhoneNumber } from '@checkmateid/sdk'
const technicalContact = new PhoneNumber({
label: 'Technical Contact',
value: '+16613063363',
person: {
name: 'Richard Hendricks',
role: 'CTO',
},
})
// Request a verification SMS (optional)
await technicalContact.requestOTP();
// Exchange verification SMS for an attestation
await technicalContact.confirmOTP('123456');
const phoneNumbers = new Company.PhoneNumbers([
technicalContact,
// Or add an unverified phone number
{
label: 'Front Office',
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 { Company, 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 Company.WalletAddresses([
trezor
])
Partnership Extension
Fields specific to partnership entities.
This extension is recommended if the company type is Partnership. Note that this is distinct from a LimitedLiabilityPartnership, which requires the LLC & LLP Extension.
- Name
type- Type
- string
- Description
The type of partnership
GeneralLimited
- Name
agreement- Type
- Attachment
- Description
Partnership agreement document
- Name
profitShares- Type
- ProfitShare[]
- Optional
- Optional
- Description
Represents the share of profits between entities in the partnership. The total shares must add up to 100%.
- Name
name- Type
- string
- Description
The name of the entity entitled to the share
- Name
share- Type
- number
- Description
Their percentage share
Usage
import { Company, Attachment, AttachmentType, PartnershipType } from '@checkmateid/sdk'
const agreement = await Attachment.create({
file,
type: AttachmentType.PartnershipAgreement,
})
const partnershipExtension = new Company.PartnershipExtension({
type: PartnershipType.General,
agreement,
profitShares: [
{
name: 'John Doe',
share: 60,
},
{
name: 'Peter Parker',
share: 40,
}
]
})
Trust Extension
Fields specific to trust fund entities.
This extension is recommended if the company purpose is Trust, UnitTrust, BareTrust or PTC.
- Name
type- Type
- string
- Description
The type of partnership
GeneralLimited
- Name
agreement- Type
- Attachment
- Description
Trust agreement document
- Name
low- Type
- Attachment
- Description
Letter of Wishes document
- Name
principles- Type
- Attachment
- Description
Principles document
- Name
declaration- Type
- Attachment
- Description
Declaration of trust document
Usage
import { Company, Attachment, AttachmentType, PartnershipType } from '@checkmateid/sdk'
const agreement = await Attachment.create({
file,
type: AttachmentType.PartnershipAgreement,
})
const trustExtension = new Company.TrustExtension({
type: PartnershipType.General,
agreement,
profitShares: [
{
name: 'John Doe',
share: 60,
},
{
name: 'Peter Parker',
share: 40,
}
]
})
Fund Extension
todo
LLC & LLP Extension
todo
S-Corp & C-Corp Extension
todo