Onboard a sole trader
This guide covers Verify, our automated onboarding product.
To check the different types of entities you can onboard using Verify, see Entities we onboard.
There are four steps to onboarding a sole trader with Verify.
- Capture the sole trader’s information
- Run the verification
- Send the ID&V request
- View the verification outcome and onboarding decision
1. Capture the sole trader’s information
You will need the following information about the sole trader and their business.
| Information | Claim | Required |
|---|---|---|
| Business name (leave empty if not applicable) | business-name | ✓ |
| Trading name (if different from name) | trading-name | ✓ |
| Business address | business-address | ✓ |
| Trading address (if different from address) | trading-address | ✓ |
| Business owner | business-owner | ✓ |
| Business phone number | business-telephone-number | ✓ |
| Email address | business-email-address | ✓ |
| Website | business-website | ✓ |
| Business start date | business-start-date | ✓ |
| Annual turnover | annual-turnover | ✓ |
| VAT registration | vat-registration | ✓ |
| Business tax residency/ies | tax-residencies | ✓ |
| Tax identifier number/s (optional for UK only if turnover is under £90k) | tax-identification-numbers-by-country | ✓ |
| Business trading name (if different from business name) | trading-name | ✓ |
| Industry | business-industry | ✓ |
| SIC code | sic-codes | ✓ |
| Employee count | number-of-employees | Optional |
| Balance sheet size | balance-sheet-size | Optional |
| International operations | international-operations-countries | ✓ |
| ↓ Individual information ↓ | ||
| Full name | individual-identity | ✓ |
| Date of birth | individual-identity | ✓ |
| Email address | contact-details | ✓ |
| Address | individual-residence | ✓ |
| Phone number | contact-details | ✓ |
| Nationality | nationality | ✓ |
| Tax residency/ies | tax-residencies | ✓ |
| US citizen confirmation | us-citizen | ✓ |
| Tax identifier number/s | tax-identification-numbers-by-country | ✓ |
| ↓ Use of account ↓ | ||
| Purpose(s) of account | purposes-of-account | ✓ |
| Source(s) of funds | individual-sources-of-funds | ✓ |
| Initial deposit value | initial-deposit | ✓ |
| International payment locations | international-payments-countries | ✓ |
| Cash payments | cash-payments | ✓ |
In the API, your customer is represented as a legal person, and each of the data points above represent one claim about them. Create an individual legal person to represent the sole trader and then add claims about them, as shown below.
curl "https://api.griffin.com/v0/organizations/${ORGANIZATION_ID}/legal-persons" \
-H "Authorization: GriffinAPIKey $GRIFFIN_API_KEY" \
-H 'Content-Type: application/json' \
-d \
'{
"display-name": "Floyd Black Photography",
"legal-person-type": "individual",
"claims": [
{
"claim-type": "individual-identity",
"given-name": "Floyd",
"surname": "Black",
"date-of-birth": "1985-12-05"
},
{
"claim-type": "contact-details",
"email-address": "floyd@fbphotography.co.uk"
},
{
"claim-type": "individual-residence",
"street-name": "Lens Avenue",
"city": "Snap City",
"postal-code": "TE1 2ST",
"country-code": "GB",
"building-number": "34"
},
{
"claim-type": "mobile-number",
"mobile-number": "+442012345678"
},
{
"claim-type": "nationality",
"nationality": "GB"
},
{
"claim-type": "tax-residencies",
"tax-residencies": [
"GB",
"US"
]
},
{
"claim-type": "tax-identification-numbers-by-country",
"tins-by-country": {
"GB": [
"1234 5678 901"
],
"US": [
"123-45-6789",
"12-3456789"
]
}
},
{
"claim-type": "us-citizen",
"us-citizen?": false
},
{
"claim-type": "business-industry",
"business-industry": "creative-industries",
"line-of-business": "photography"
},
{
"claim-type": "sic-codes",
"sic-codes": ["74209"]
},
{
"claim-type": "business-name",
"business-name": "Floyd Black Photography"
},
{
"claim-type": "business-address",
"business-address": {
"street-name": "Lens Avenue",
"city": "Snap City",
"postal-code": "TE1 2ST",
"country-code": "GB",
"building-number": "34"
}
},
{
"claim-type": "business-owner",
"business-owner?": true
},
{
"claim-type": "business-telephone-number",
"telephone-number": "+442087654321"
},
{
"claim-type": "business-email-address",
"email-address": "floyd@fbphotography.co.uk"
},
{
"claim-type": "business-website",
"website-url": "https://www.fbphotography.co.uk"
},
{
"claim-type": "business-start-date",
"business-start-date": "2021-03-26"
},
{
"claim-type": "business-description",
"business-description": "Drone photography of outdoor events and concerts"
},
{
"claim-type": "business-size",
"business-size": "small"
},
{
"claim-type": "annual-turnover",
"annual-turnover": {
"value": "66000.00",
"currency": "GBP"
}
},
{
"claim-type": "tax-identification-number",
"tax-identification-number": "01234567"
},
{
"claim-type": "international-operations-countries",
"international-operations-countries": []
},
{
"claim-type": "international-payments-countries",
"international-payments-countries": []
},
{
"claim-type": "individual-purposes-of-account",
"individual-purposes-of-account": ["business-expenses"]
},
{
"claim-type": "individual-sources-of-funds",
"individual-sources-of-funds": ["business-income"]
},
{
"claim-type": "initial-deposit",
"initial-deposit": {
"value": "1000.00",
"currency": "GBP"
}
},
{
"claim-type": "vat-registration",
"vat-registration?": true
},
{
"claim-type": "cash-payments",
"cash-payments?": false
}
]
}'
A successful response will display the URL for the newly created legal person (e.g. /v0/legal-persons/lp.Kfd8_BhpSdCqFKRYXa8d45) in the response's Location header and in the response body. Save this URL for the next step.
In this example, you create the legal person and their claims in one go, but you can also create a legal person first and then add claims individually. For more detail on claims, see the API reference.
1.2 Letting agents
If the sole trader you are onboarding is a letting agent, you will need to include the following information, in addition to the claims listed above.
| Information | Claim | Required |
|---|---|---|
| Number of properties under management | managed-properties | ✓ |
| % of commercial properties managed | commercial-property-ratio | ✓ |
| HMO verification | hmo-license | ✓ |
| HMRC status and registration number | hmrc-register | ✓ |
| CMP registration status and the scheme name/authority | client-money-protection-scheme | ✓ |
2. Run the verification
2.1 Retrieve your workflows
If you're onboarding a customer for the first time, you will need to retrieve your workflows in order to submit the verification. Retrieve and cache your workflow URLs.
2.2 Submit
Submit the individual legal person for verification, as shown below.
curl 'https://api.griffin.com/v0/legal-persons/lp.Kfd8_BhpSdCqFKRYXa8d45/verifications' \
-X 'POST'
-H "Authorization: GriffinAPIKey$GRIFFIN_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"workflow-url": "/v0/workflows/wf.Ul-1r4gRWfOFxHJsHWghcA"}'
A successful response will look like this. Grab the verification-url for monitoring later.
{
"created-at": "2022-08-15T10:47:51.959Z",
"display-name": "Money Technology Ltd.",
"legal-person-type": "individual",
"legal-person-url": "/v0/legal-persons/lp.Kfd8_BhpSdCqFKRYXa8d45",
"updated-at": "2022-08-15T10:47:51.959Z",
"verification-status": "pending",
"verification-url": "/v0/verifications/vn.BhpS_dCqFKRYXa8d457fgA",
"workflow-url": "/v0/workflows/wf.Ul-1r4gRWfOFxHJsHWghcA"
}
3. Send ID&V request
In sandbox, no selfies or ID photos are captured and all ID&V results are mock-ups. Learn more about sandbox vs. live mode.
The sole trader will need to complete an identity and verification (ID&V) check before the verification can be completed. This involves submitting a selfie and a photo of their ID to Veriff, our ID&V partner.
Get the ID&V link from idv-check-url within /verifications/<:verification-id>/resources, as shown below. You will need to share this with your customer so they can complete ID&V.
To find out the ID&V links, you can poll the verification-resources-url until they become available. You can also leverage webhooks and listen for the verification-resource-created|updated events, emitted once the ID&V links are available.
{
"verification-url": "/v0/verifications/vn.BhpS_dCqFKRYXa8d457fgA",
"legal-person-url": "/v0/legal-persons/lp.Kfd8_BhpSdCqFKRYXa8d45",
"organization-url": "/v0/organizations/og.IG9yZ2FuaXphdGlvbi1pZA",
"verification-resources": [
{
"verification-resource-type": "idv-check",
"verification-resource-id": "a87ef592-c300-43f2-84f9-005120592392",
"idv-check-status": "pending",
"idv-check-url": "IDV.check.url",
"idv-check-expires-at": "2024-02-17",
"display-name": "string",
"legal-person-url": "/v0/legal-persons/lp.Kfd8_BhpSdCqFKRYXa8d45"
},
],
"links": {
"prev": "string",
"next": "string"
}
}
The idv-check-status begins in a pending state and transitions to one of three final states: complete, errored, or expired.
Embedding the ID&V flow in your web/mobile app
For a better user experience, you can embed Veriff's ID&V flow directly within your application instead of redirecting users to an external page. Veriff provides SDKs for web, iOS, and Android that accept the session URL (the idv-check-url generated above) and render the verification flow natively in your app.
For detailed integration instructions, code examples, and platform-specific guidance, see Veriff's SDK documentation.
4. View the verification outcome and onboarding decision
Verification status
The verification has successfully completed when verification-status reaches checks-complete. You can track this by:
- Polling the
verification-url - Listening for
verification-updatedwebhook events
Example response:
{
"created-at": "2024-02-10T10:47:51.959Z",
"display-name": "Floyd Black Photography",
"legal-person-type": "individual",
"legal-person-url": "/v0/legal-persons/lp.Kfd8_BhpSdCqFKRYXa8d45",
"risk-rating": "low-risk",
"updated-at": "2022-02-14T10:48:03.215Z",
"verification-status": "checks-complete",
"verification-url": "/v0/verifications/vn.BhpS_dCqFKRYXa8d457fgA",
"workflow-url": "/v0/workflows/wf.Ul-1r4gRWfOFxHJsHWghcA"
}
Verification statuses explained
| Status | Description |
|---|---|
pending | Verification has been created but processing has not yet begun |
in-progress | Verification checks are actively being performed |
failed | An internal system error has occurred during verification |
checks-declined | Verification was terminated early due to failing one or more workflow checks |
checks-complete | Verification has successfully completed all required checks |
Verification status flow
Decision process
After reaching checks-complete, the system will either:
- Generate an automated decision
- Refer the application for manual review (followed by a manual decision)
Tracking decisions
Monitor decisions by:
- Polling the
legal-person-decisions-urlendpoint - Listening for
decision-createdwebhook events
Application status and decision flow
In context
Both the verification status and the decisions can be seen in context on the legal person entity.
curl 'https://api.griffin.com/v0/legal-persons/lp.Kfd8_BhpSdCqFKRYXa8d45' -H "Authorization: GriffinAPIKey $GRIFFIN_API_KEY"
The response will include application-status and also the latest-decision when one exists, as shown below:
{
"latest-decision": {
"verification-url": "/v0/verifications/vn.BhpS_dCqFKRYXa8d457fgA",
"decision-outcome": "accepted",
"decision-maker": "user",
"decision-notes": "No red flags here",
"decision-user-url": "/v0/users/ur.ICAgICAgICAgdXNlci1pZA",
"created-at": "2024-02-14T14:15:22Z"
},
"display-name": "Floyd Black Photography",
"application-status": "accepted",
"status-changed-at": "2024-02-14T14:15:22Z",
"created-at": "2024-02-10T14:15:22Z",
...
}
Once you have an accepted decision, you're good to go 🎉
What's next? Open an account! See here to get started.
Updating customer information
For any customer information that has changed, you can re-submit just the claim information that needs updating and the checks associated with that claim will be re-run. These checks will re-run when another verification is run.
Submitting updated claims
You can submit the updated claim information for each legal persons using:
POST https://api.griffin.com/v0/legal-persons/{legal-person-id}/claims
Once you have updated a claim you can fetch a list of unverified claims using the filter:
GET https://api.griffin.com/v0/legal-persons/{legal-person-id}/claims?filter[verification-status][eq]=unverified
The verification-status will change from unverified to verified when it has successfully been used as part of an accepted verification.
A verified claim has been used by an accepted verification. An unverified claim is when a verification hasn’t been run on a claim, or a verification resulted in a declined or errored decision.
You will need to run a new verification after you have updated claims by using:
POST https://api.griffin.com/v0/legal-persons/{legal-person-id}/verifications
{
"workflow-url": "{workflow-id}"
}
ID&V re-use for Verify customers
When updating customer information for individuals who have completed ID&V (identity and verification) through Verify:
- Within 30 days of ID&V completion: If you update any customer information, including their name, address, or date of birth, we will automatically re-use the previously submitted selfie and ID document images. Your customer will not need to complete the ID&V process again.
- After 30 days of ID&V completion: If you update the customer's name, address, or date of birth, your customer will need to complete a new ID&V check. This means they'll need to submit a new selfie and photo of their identity document through a new ID&V link.
To avoid requiring customers to repeat the ID&V process, ensure any updates for incorrect information are made within 30 days of their initial ID&V completion.