Public OpenAPI spec for eFICA developer portal.
Exchanges authorization code for access token (PKCE required) or refreshes access token using refresh token
| grant_type required | string Enum: "authorization_code" "refresh_token" Grant type (authorization_code or refresh_token) |
| code | string Authorization code received from authorization endpoint (required for authorization_code grant) |
| code_verifier | string PKCE code verifier (required for authorization_code grant) |
| redirect_uri | string Redirect URI (required for authorization_code grant) |
| refresh_token | string Refresh token (required for refresh_token grant) |
| client_id required | string OAuth2 client identifier |
{- "grant_type": "authorization_code",
- "code": "abc123def456",
- "code_verifier": "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk",
- "refresh_token": "eyJhbGciOiJFZERTQSJ9...",
- "client_id": "my-client-id"
}{- "access_token": "eyJhbGciOiJFZERTQSJ9...",
- "refresh_token": "eyJhbGciOiJFZERTQSJ9...",
- "token_type": "Bearer",
- "expires_in": 3600,
- "userID": "123e4567-e89b-12d3-a456-426614174000",
- "partnerID": "123e4567-e89b-12d3-a456-426614174000",
- "scope": "read write"
}Invalidates OAuth2 session by deleting the refresh token from the database. Useful for testing and proper session management.
| refresh_token required | string OAuth2 refresh token to invalidate |
| client_id required | string OAuth2 client identifier |
{- "refresh_token": "eyJhbGciOiJFZERTQSJ9...",
- "client_id": "my-client-id"
}{- "message": "Logged out successfully"
}Retrieves a list of countries with their basic information including ISO codes, names, FATF status, and active status. Countries are used for client onboarding, risk assessment, and compliance. Returns partner-specific settings if configured, otherwise returns default system settings. The FATF flag indicates countries that require enhanced due diligence according to Financial Action Task Force guidelines.
| active | boolean Example: active=true Filter countries by active status. When set to true, returns only countries available for selection. When set to false, returns only inactive countries. If omitted, returns all countries regardless of status. |
[- {
- "id": 1,
- "code": "ZA",
- "name": "South Africa",
- "fatf": false,
- "active": true
}
]Retrieves a list of employment industries available for individual client onboarding. Each industry includes an ID, description, active status, and a flag indicating whether additional questions are required. Industries are used to categorize client employment and assess risk levels. Returns partner-specific settings if configured, otherwise returns default system settings.
[- {
- "id": 1,
- "name": "Agriculture, forestry and fishing",
- "active": true,
- "additionalQuestions": false
}
]Retrieves a list of employment types available for individual client onboarding. Each type includes an ID, description, active status, and a flag indicating whether additional questions are required. Employment types are used to categorize client employment status (e.g., Employed, Self-Employed, Retired) for risk assessment and compliance. Returns partner-specific settings if configured, otherwise returns default system settings.
[- {
- "id": 1,
- "name": "Employed",
- "active": true,
- "additionalQuestions": false
}
]Retrieves a list of document groups required for individual client onboarding. Document groups are parent categories (e.g., "Identity", "Proof of Address") that contain multiple document types. Each group specifies document requirements for different risk levels (low, medium, high). Use the /individual-doc-types endpoint to get specific document types within each group. Returns partner-specific settings if configured, otherwise returns default system settings.
[- {
- "id": 1,
- "name": "Identity",
- "lowRiskRequired": true,
- "lowRiskDescription": "Copy of ID Document",
- "mediumRiskRequired": true,
- "mediumRiskDescription": "Copy of ID Document",
- "highRiskRequired": true,
- "highRiskDescription": "Copy of ID Document original sighted",
- "description": "ID Number given by Client corresponds to ID number on documentation",
- "active": true
}
]Retrieves all document types available for individual client onboarding. Document types are specific document variants (e.g., "RSA ID Book", "Passport", "Driver's License") that belong to document groups. Use the docID field to link document types to their parent document group from the /individual-docs endpoint. Returns partner-specific settings if configured, otherwise returns default system settings.
[- {
- "id": 1,
- "description": "RSA ID Book",
- "name": "rsaIDBook",
- "docID": 1,
- "active": true
}
]Retrieves a list of transaction types used to classify and categorize client transactions. Transaction types help identify the nature of business transactions (e.g., "Annual Financial Statements", "Cash Deposits", "Wire Transfers") for compliance reporting and risk assessment. Returns partner-specific settings if configured, otherwise returns default system settings.
[- {
- "id": 1,
- "name": "Cash Deposit",
- "active": true
}
]Retrieves a list of transaction frequency options used to describe how often transactions occur (e.g., "Monthly", "Quarterly", "Annually", "One-time"). Transaction frequencies are used to assess transaction patterns and support risk analysis. Returns partner-specific settings if configured, otherwise returns default system settings.
[- {
- "id": 1,
- "description": "Monthly",
- "active": true,
- "additionalQuestions": false
}
]Retrieves a list of transaction funding sources used to describe how transactions are funded (e.g., "Bank Transfer", "Cash", "Credit Card"). Funding sources are critical for AML (Anti-Money Laundering) compliance and help identify the origin of funds. Returns partner-specific settings if configured, otherwise returns default system settings.
[- {
- "id": 1,
- "name": "Bank Transfer",
- "active": true,
- "additionalQuestions": true
}
]Retrieves a list of wealth sources used to describe the origin of client wealth (e.g., "Salary", "Inheritance", "Business Income", "Investment Returns"). Wealth sources are critical for Source of Wealth (SOW) and Source of Funds (SOF) compliance, particularly for high-risk clients. Returns partner-specific settings if configured, otherwise returns default system settings.
[- {
- "id": 1,
- "name": "Salary",
- "active": true,
- "additionalQuestions": false
}
]Retrieves a list of public official types used to identify Politically Exposed Persons (PEPs). PEP identification is critical for enhanced due diligence and AML (Anti-Money Laundering) compliance. Clients identified as PEPs typically require additional screening and documentation. Returns partner-specific settings if configured, otherwise returns default system settings.
[- {
- "id": 1,
- "name": "Politically Exposed Person",
- "active": true
}
]Retrieves all custom questions configured for the partner's client onboarding process. Custom questions allow partners to collect additional information beyond standard FICA requirements. These questions are partner-specific and can be configured through the partner admin interface. Questions are returned grouped by section (Individual, Trust, Entity, UBO, TrustIndividual). If none are configured, each section array is empty. This endpoint supports white-labeling and partner customization.
{- "sections": {
- "Individual": [
- {
- "id": 456,
- "section": "Individual",
- "fieldType": "DROPDOWN",
- "label": "Transaction Value",
- "required": true,
- "sortOrder": 0,
- "options": [
- {
- "id": 965,
- "label": "R1 - R500",
- "sortOrder": 0
}
]
}, - {
- "id": 457,
- "section": "Individual",
- "fieldType": "TEXT",
- "label": "Gender",
- "required": false,
- "sortOrder": 1,
- "options": [ ]
}
], - "Trust": [
- {
- "id": 458,
- "section": "Trust",
- "fieldType": "DROPDOWN",
- "label": "Transaction Value",
- "required": true,
- "sortOrder": 0,
- "options": [
- {
- "id": 969,
- "label": "R1 - R500",
- "sortOrder": 0
}
]
}, - {
- "id": 459,
- "section": "Trust",
- "fieldType": "DROPDOWN",
- "label": "Reason for Establishment",
- "required": true,
- "sortOrder": 1,
- "options": [
- {
- "id": 973,
- "label": "Estate Planning",
- "sortOrder": 0
}
]
}, - {
- "id": 460,
- "section": "Trust",
- "fieldType": "TEXT",
- "label": "Trust Contact Person",
- "required": false,
- "sortOrder": 2,
- "options": [ ]
}
], - "Entity": [
- {
- "id": 463,
- "section": "Entity",
- "fieldType": "DROPDOWN",
- "label": "Transaction Value",
- "required": true,
- "sortOrder": 0,
- "options": [
- {
- "id": 980,
- "label": "R1 - R500",
- "sortOrder": 0
}
]
}, - {
- "id": 464,
- "section": "Entity",
- "fieldType": "TEXT",
- "label": "Test Entity",
- "required": false,
- "sortOrder": 1,
- "options": [ ]
}
], - "UBO": [
- {
- "id": 465,
- "section": "UBO",
- "fieldType": "DROPDOWN",
- "label": "Transaction Value",
- "required": true,
- "sortOrder": 0,
- "options": [
- {
- "id": 984,
- "label": "R1 - R500",
- "sortOrder": 0
}
]
}, - {
- "id": 466,
- "section": "UBO",
- "fieldType": "TEXT",
- "label": "Test UBO",
- "required": false,
- "sortOrder": 1,
- "options": [ ]
}
], - "TrustIndividual": [
- {
- "id": 461,
- "section": "TrustIndividual",
- "fieldType": "DROPDOWN",
- "label": "Transaction Value",
- "required": true,
- "sortOrder": 0,
- "options": [
- {
- "id": 976,
- "label": "R1 - R500",
- "sortOrder": 0
}
]
}, - {
- "id": 462,
- "section": "TrustIndividual",
- "fieldType": "TEXT",
- "label": "Test Trust Individual",
- "required": false,
- "sortOrder": 1,
- "options": [ ]
}
]
}
}Retrieves a list of document groups required for entity (company, trust, etc.) client onboarding. Entity document groups are parent categories (e.g., "Identity", "Registration Documents") that contain multiple document types. Each group specifies document requirements for different risk levels (low, medium, high) and includes flags for UBO (Ultimate Beneficial Owner) and trust-related party documentation. Use the /entity-doc-types endpoint to get specific document types within each group. Returns partner-specific settings if configured, otherwise returns default system settings.
[- {
- "id": 2,
- "name": "Company Address",
- "descriptionHighRisk": "Copy of proof of address original sighted",
- "descriptionLowRisk": "Copy of proof of address",
- "descriptionMediumRisk": "Copy of proof of address",
- "requiredLowRisk": false,
- "requiredMediumRisk": false,
- "requiredHighRisk": true,
- "active": true
}
]Retrieves all document types available for entity client onboarding. Document types are specific document variants (e.g., "Certificate of Incorporation", "Memorandum of Association", "Trust Deed") that belong to entity document groups. Use the docID field to link document types to their parent document group from the /entity-docs endpoint. Internal metadata fields are excluded from the response. Returns partner-specific settings if configured, otherwise returns default system settings.
[- {
- "id": 1,
- "description": "Certificate of Incorporation",
- "name": "certificateOfIncorporation",
- "docID": 1,
- "active": true
}
]Retrieves a list of trust related party types used to categorize parties associated with trust entities. Trust related parties include roles such as Beneficiaries, Trustees, Settlors, and Protectors. These types are used during trust onboarding to identify and document all parties involved in the trust structure for compliance purposes.
[- {
- "id": 1,
- "description": "Beneficiary",
- "active": true
}
]Retrieves a list of document groups required for trust client onboarding. Trust document groups are parent categories (e.g., "Trust Deeds", "Trust Amendments") that contain multiple document types. Each group specifies document requirements for different risk levels (low, medium, high). Trust documents are specific to trust entities and are separate from entity documents. Returns partner-specific settings if configured, otherwise returns default system settings.
[- {
- "id": 1,
- "name": "Trust Deeds",
- "descriptionHighRisk": "Certified copy of Trust Deeds and Amendments",
- "descriptionLowRisk": "Certified copy of Trust Deeds and Amendments",
- "descriptionMediumRisk": "Certified copy of Trust Deeds and Amendments",
- "selectDocTypeName": "trustDeeds",
- "requiredHighRisk": true,
- "requiredLowRisk": true,
- "requiredMediumRisk": true,
- "active": true
}
]Retrieves a list of users associated with the authenticated partner's account. Users are team members who have access to the partner's eFICA account. The response includes user details such as ID, role, email, name, and active status. Only users belonging to the partner associated with the OAuth2 access token are returned.
[- {
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "role": "Admin",
- "email": "admin@example.com",
- "firstName": "John",
- "lastName": "Doe",
- "active": true
}
]Returns the partner available balance (sum of non-pending/non-cancelled transactions). External partners can only query their own balance. If the partnerUUID does not match the authenticated partner, the API returns 403 Forbidden.
{- "balance": 1234.56
}Runs bank account verification for the given individual using details on file (identity) and the bank details supplied in the request body. The result is stored for the eFICA application. Requires OAuth2.
| id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 FICA individual UUID |
| bankName required | string <= 50 characters Bank identifier as used for bureau verification (e.g. FNB, STANDARDBANK) |
| accountType required | string <= 50 characters Account type code (e.g. CURRENTCHEQUEACCOUNT, SAVINGSACCOUNT) |
| branchCode required | string [ 4 .. 6 ] characters Branch code |
| accountNumber required | string [ 1 .. 13 ] characters Account number |
{- "bankName": "FNB",
- "accountType": "CURRENTCHEQUEACCOUNT",
- "branchCode": "250655",
- "accountNumber": "62000000000"
}{- "success": true,
- "error": null,
- "bankAccountDetails": {
- "accountVerificationResult": { }
}, - "bankName": "FNB",
- "bankAccountType": "CURRENTCHEQUEACCOUNT",
- "bankBranchCode": "250655",
- "bankAccountNumber": "62000000000",
- "transactionDescription": "John Doe Bank Account Verification"
}Returns a paginated list of individuals for the authenticated partner. Supports filtering on multiple fields. Maximum 100 results per page.
| take | number <= 100 Example: take=50 Number of records to return (max 100) |
| skip | number Example: skip=0 Number of records to skip |
| externalUserID | string <= 50 characters Example: externalUserID=EXT-12345 Filter by external user ID |
| clientReference | string <= 50 characters Example: clientReference=REF123456 Filter by client reference |
| firstName | string <= 150 characters Example: firstName=John Filter by first name |
| lastName | string <= 150 characters Example: lastName=Doe Filter by last name |
| ficaStatus | string <= 50 characters Example: ficaStatus=Approved Filter by FICA status |
| identificationNumber | string <= 50 characters Example: identificationNumber=7510315073000 Filter by identification number |
| passportNumber | string <= 100 characters Example: passportNumber=A12345678 Filter by passport number |
| riskDescription | string <= 50 characters Example: riskDescription=Low Risk Filter by risk description |
| approvalDate | string Example: approvalDate=2025-12-01T00:00:00.000Z Filter by approval date (ISO date string) |
| lastUpdated | string Example: lastUpdated=2025-12-01T00:00:00.000Z Filter by last updated date (ISO date string) |
| nextFicaReviewDate | string Example: nextFicaReviewDate=2026-12-01T00:00:00.000Z Filter by next FICA review date (ISO date string) |
{- "data": [
- {
- "ficaIndividualUUID": "123e4567-e89b-12d3-a456-426614174000",
- "externalUserID": "EXT-12345",
- "clientReference": "REF123456",
- "firstName": "John",
- "lastName": "Doe",
- "ficaStatus": "Approved",
- "identificationNumber": "7510315073000",
- "passportNumber": "A12345678",
- "riskDescription": "Low Risk",
- "approvalDate": "2025-12-01T00:00:00.000Z",
- "approvedBy": "John Admin",
- "lastUpdated": "2025-12-01T00:00:00.000Z",
- "nextFicaReviewDate": "2026-12-01T00:00:00.000Z"
}
], - "count": 150,
- "take": 50,
- "skip": 0
}Creates a new individual record in the ficaIndividual table and returns the individual record id as "id".
| externalSystemId | string <= 50 characters External system ID - ID from the external system |
| clientRef | string <= 50 characters Client reference number |
| firstName required | string <= 150 characters First name of the individual |
| lastName required | string <= 150 characters Last name of the individual |
| clientEmail required | string <email> <= 150 characters Client email address |
| telNumber required | string <= 50 characters Client phone number |
| idNumber | string <= 50 characters ID number |
| passportNumber | string <= 100 characters Passport number |
| taxNumber | string <= 50 characters Tax number |
| addressLineOne required | string <= 150 characters Address line one |
| addressLineTwo | string <= 150 characters Address line two |
| townCity required | string <= 150 characters Town/City |
| zipCode required | string <= 50 characters ZIP code |
| employmentStatus required | number The ID of the Employment status |
| occupation | string <= 150 characters Occupation |
| employmentIndustry | number The clients employment industry |
| employerName | string <= 150 characters The clients employer name |
| employerIndustry | string <= 250 characters The industry of the clients employer |
| transactionFrequency required | number The ID of the transaction frequency |
| transactionType required | number The ID of the transaction type |
| transactionFundingSource required | number The ID of the transaction funding source |
| transactionSourceWealth required | number The ID of the transaction source of wealth |
| sourceFundingDescription | string <= 250 characters Source funding description (Required if transactionSourceWealth additional questions is true). |
| sourceWealthDescription | string <= 250 characters Source wealth description (Required if transactionFundingSource additional questions is true) |
| additionalVerification required | boolean Is additional verification required |
| additionalVerificationReason | string <= 250 characters Additional verification reason (Only required if additionalVerification is true). |
| transactionConsistent required | boolean <= 50 characters Is the transaction consistent with your knowledge of the client. |
| transactionInconsistantReason | string <= 250 characters Transaction inconsistent reason (Only required if transactionConsistent is false) |
| customerPermission required | boolean Has the customer given permission for the FICA query. |
| countryResidence required | number The ID of the clients residence country |
| passportCountry required | number The ID of the clients passport country |
| addressCountry required | number Physical address country |
| clientFaceToFace required | boolean Has the client been met Face 2 Face. |
| clientSACitizen required | boolean Is the client a South African Citizen. |
object Custom questions object |
{- "externalSystemId": "EXT-12345",
- "clientRef": "REF123456",
- "firstName": "John",
- "lastName": "Doe",
- "clientEmail": "john.doe@example.com",
- "telNumber": "+27123456789",
- "idNumber": "7510315073000",
- "passportNumber": "A12345678",
- "taxNumber": "1234567890",
- "addressLineOne": "123 Main Street",
- "addressLineTwo": "Apt 4B",
- "townCity": "Cape Town",
- "zipCode": "8001",
- "employmentStatus": 5,
- "occupation": "Software Engineer",
- "employmentIndustry": 1,
- "employerName": "Tech Corp",
- "employerIndustry": "Technology",
- "transactionFrequency": 1,
- "transactionType": 31,
- "transactionFundingSource": 32,
- "transactionSourceWealth": 8,
- "sourceFundingDescription": "Salary",
- "sourceWealthDescription": "Savings",
- "additionalVerification": false,
- "additionalVerificationReason": "High risk client",
- "transactionConsistent": true,
- "transactionInconsistantReason": "Not applicable",
- "customerPermission": true,
- "countryResidence": 2,
- "passportCountry": 0,
- "addressCountry": 0,
- "clientFaceToFace": true,
- "clientSACitizen": true,
- "customQuestions": { }
}{- "id": "123e4567-e89b-12d3-a456-426614174000",
- "ficaStatus": "In Progress",
- "riskDescription": "In Progress"
}Returns individual details from the ficaIndividual table. When client validation data is available, the response includes renderVersion (V1 or V2) so the external system knows how to interpret the payload. V1: consumerDetail, kycResult, consumerEmploymentHistory at root. V2: consumerDetail and consumerAddressHistory at root (and in externalValidationData). Root-level consumerDetail is always populated when validation data exists so the same fields can be read regardless of version.
| id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The individual UUID |
{- "riskDescription": "Low Risk"
}Clones an existing individual to renew an individual if their FICA application has expired or if you need to re-FICA a client based off your internal processes. Creates a new FICA record using the source individual as the clone reference.
| id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The individual UUID - Clone source UUID |
| externalSystemId | string <= 50 characters External system ID - ID from the external system |
| clientRef | string <= 50 characters Client reference number |
| firstName required | string <= 150 characters First name of the individual |
| lastName required | string <= 150 characters Last name of the individual |
| clientEmail required | string <email> <= 150 characters Client email address |
| telNumber required | string <= 50 characters Client phone number |
| idNumber | string <= 50 characters ID number |
| passportNumber | string <= 100 characters Passport number |
| taxNumber | string <= 50 characters Tax number |
| addressLineOne required | string <= 150 characters Address line one |
| addressLineTwo | string <= 150 characters Address line two |
| townCity required | string <= 150 characters Town/City |
| zipCode required | string <= 50 characters ZIP code |
| employmentStatus required | number The ID of the Employment status |
| occupation | string <= 150 characters Occupation |
| employmentIndustry | number The clients employment industry |
| employerName | string <= 150 characters The clients employer name |
| employerIndustry | string <= 250 characters The industry of the clients employer |
| transactionFrequency required | number The ID of the transaction frequency |
| transactionType required | number The ID of the transaction type |
| transactionFundingSource required | number The ID of the transaction funding source |
| transactionSourceWealth required | number The ID of the transaction source of wealth |
| sourceFundingDescription | string <= 250 characters Source funding description (Required if transactionSourceWealth additional questions is true). |
| sourceWealthDescription | string <= 250 characters Source wealth description (Required if transactionFundingSource additional questions is true) |
| additionalVerification required | boolean Is additional verification required |
| additionalVerificationReason | string <= 250 characters Additional verification reason (Only required if additionalVerification is true). |
| transactionConsistent required | boolean <= 50 characters Is the transaction consistent with your knowledge of the client. |
| transactionInconsistantReason | string <= 250 characters Transaction inconsistent reason (Only required if transactionConsistent is false) |
| customerPermission required | boolean Has the customer given permission for the FICA query. |
| countryResidence required | number The ID of the clients residence country |
| passportCountry required | number The ID of the clients passport country |
| addressCountry required | number Physical address country |
| clientFaceToFace required | boolean Has the client been met Face 2 Face. |
| clientSACitizen required | boolean Is the client a South African Citizen. |
object Custom questions object |
{- "externalSystemId": "EXT-12345",
- "clientRef": "REF123456",
- "firstName": "John",
- "lastName": "Doe",
- "clientEmail": "john.doe@example.com",
- "telNumber": "+27123456789",
- "idNumber": "7510315073000",
- "passportNumber": "A12345678",
- "taxNumber": "1234567890",
- "addressLineOne": "123 Main Street",
- "addressLineTwo": "Apt 4B",
- "townCity": "Cape Town",
- "zipCode": "8001",
- "employmentStatus": 5,
- "occupation": "Software Engineer",
- "employmentIndustry": 1,
- "employerName": "Tech Corp",
- "employerIndustry": "Technology",
- "transactionFrequency": 1,
- "transactionType": 31,
- "transactionFundingSource": 32,
- "transactionSourceWealth": 8,
- "sourceFundingDescription": "Salary",
- "sourceWealthDescription": "Savings",
- "additionalVerification": false,
- "additionalVerificationReason": "High risk client",
- "transactionConsistent": true,
- "transactionInconsistantReason": "Not applicable",
- "customerPermission": true,
- "countryResidence": 2,
- "passportCountry": 0,
- "addressCountry": 0,
- "clientFaceToFace": true,
- "clientSACitizen": true,
- "customQuestions": { }
}{- "id": "123e4567-e89b-12d3-a456-426614174000",
- "ficaStatus": "In Progress",
- "riskDescription": "In Progress"
}Updates individual details based on the individual id.
| id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The individual UUID |
| firstName required | string <= 150 characters First name of the individual |
| lastName required | string <= 150 characters Last name of the individual |
| clientEmail required | string <email> <= 150 characters Client email address |
| clientPhone required | string <= 50 characters Client phone number |
| externalSystemId | string External system individual record id |
{- "firstName": "John",
- "lastName": "Doe",
- "clientEmail": "john.doe@example.com",
- "clientPhone": "+27123456789",
- "externalSystemId": "889912d3-xxxx-xxxx-xxx-b77bb61231c1"
}{- "riskDescription": "Low Risk"
}Returns the face-match profile photo stored for the individual as base64, plus its MIME type. The image exists only after bureau verification has produced and stored a face match photo. Use faceMatchImageDocURL from create or external-validation responses to know that a photo may be available.
| id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The individual UUID |
{- "mimeType": "image/jpeg",
- "base64": "string"
}Executes an AML screening search. Uses data from the existing individual record (firstName, lastName, clientEmail).
| id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The individual UUID |
{- "matchedNumber": 0,
- "matchedEntities": [ ],
- "webSearchResults": [ ]
}Executes a client validation search using the partner's configured verification type. Returns renderVersion V1 or V2 so the external system knows how to handle the response. V1: consumerDetail, kycResult, consumerEmploymentHistory. V2: consumerDetail, consumerAddressHistory. Validation parameters can be provided in the request body, or data from the existing individual record is used.
| id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The individual UUID |
| identificationNumber | string <= 50 characters South African identification number |
| passportNumber | string <= 100 characters Passport number |
| firstName | string <= 150 characters First name |
| lastName | string <= 150 characters Last name |
| residentialLine1 | string <= 150 characters Residential address line 1 |
| residentialLine2 | string <= 150 characters Residential address line 2 |
| residentialLine3 | string <= 150 characters Residential address line 3 |
| residentialZIPCode | string <= 50 characters Residential ZIP code |
{- "identificationNumber": "0101010000081",
- "passportNumber": "A12345678",
- "firstName": "John",
- "lastName": "Doe",
- "residentialLine1": "123 Main Street",
- "residentialLine2": "Apt 4B",
- "residentialLine3": "Suburb",
- "residentialZIPCode": "2000"
}{- "renderVersion": "V1",
- "consumerDetail": {
- "FirstName": "JOHN",
- "SecondName": "JAMES",
- "Surname": "DOE",
- "IDNo": 7510315000081,
- "BirthDate": "1975-10-31T00:00:00+02:00",
- "Gender": "Male",
- "TitleDesc": "MR",
- "MaritalStatusDesc": "Single",
- "Age": 50,
- "PrivacyStatus": "ACCEPTS CONTACTS",
- "HomeTelephoneNo": "0215555555",
- "WorkTelephoneNo": "0216666666",
- "CellularNo": "0723334444",
- "EmailAddress": "johndoe@gmail.com",
- "EmployerDetail": "HAPPY PTY LTD",
- "Nationality": "South African"
}, - "kycResult": {
- "EnquiryDate": "2025-12-01T00:00:00+02:00",
- "ID": "Valid | 7510315000081",
- "ResidentialAddress": "Not Confirmed | 1 2 3 4",
- "Sources": "",
- "IDStatusInd": 1,
- "IDStatusDesc": "ID Validated On Bureau Data",
- "KYCStatusDesc": "No Match Established Within Provided Parameters"
}, - "consumerEmploymentHistory": [
- {
- "EmployerDetail": "HAPPY PTY LTD",
- "Designation": "",
- "LastUpdatedDate": "2023-07-06T22:52:42.527+02:00",
- "IsVerifiedYN": false,
- "FirstReportedDate": "2023-06-21T00:00:00+02:00"
}
], - "faceMatchResult": {
- "IdentityVerificationResult": {
- "IdentityInformation": {
- "VerificationStatus": "Verified",
- "IDNo": "7510315000081"
}
}
}, - "faceMatchImageDocURL": "uuid-key.jpg"
}Updates the PEP and sanctions decision for an individual.
| id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The individual UUID |
| pepConfirmReviewed required | boolean Sanctions PEP reviewed decision |
| adverseSearchKYC required | boolean Are there adverse search results? |
| clientForeignOfficial required | boolean Is the client a foreign official? |
| clientForeignOfficialType | number or null The ID of the type of foreign official (Required if clientForeignOfficial is true). |
{- "pepConfirmReviewed": true,
- "adverseSearchKYC": true,
- "clientForeignOfficial": true,
- "clientForeignOfficialType": 7
}{- "riskDescription": "Low Risk"
}Adds a client document and type to the fica record. Requires a file upload. Supports multiple document types and groups with a single file upload (shared document) to save storage space. Use the documents array to explicitly pair document groups (individualDocsID) with their corresponding document types (IndividualDocTypesID). Each entry in the documents array creates a separate document record, all pointing to the same uploaded file. When sending as multipart/form-data, the documents field should be a JSON string that will be automatically parsed.
| id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The individual UUID |
| file required | string <binary> Document file to upload (required) |
| documents required | string JSON string array of document group-type pairs. Each entry should have individualDocsID (number) and IndividualDocTypesID (number). Example: [{"individualDocsID": 1, "IndividualDocTypesID": 1}, {"individualDocsID": 7, "IndividualDocTypesID": 19}] |
| additionalFicaDoc | string Additional FICA document flag (optional) |
{- "assignedGroups": [
- {
- "groupId": 1,
- "types": [
- {
- "typeId": 1,
- "ficaIndividualDocsID": 123
}
]
}
], - "documents": [
- {
- "ficaIndividualDocsID": 1,
- "individualDocsID": 1,
- "IndividualDocTypesID": 1,
- "isActive": true
}
], - "count": 2
}Retrieves a client document by FICA Individual Document ID and returns it as a base64 encoded string.
| id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The individual UUID |
| ficaIndividualDocsID required | number Example: 123 FICA Individual Document ID |
{- "ficaIndividualDocsID": 123,
- "base64Content": "JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9MZW5ndGggND...",
- "mimeType": "application/pdf",
- "filename": "document.pdf"
}Deletes a client document from the fica record.
| id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The individual UUID |
| ficaIndividualDocsID required | number Example: 123 FICA Individual Document ID |
{- "result": {
- "success": true
}
}Marks that documents have been uploaded and reviewed for an individual. Sets docsUploadedReviewed to true.
| id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The individual fica application UUID |
| userUUID required | string <uuid> UUID of the user who is confirming the documents |
{- "userUUID": "123e4567-e89b-12d3-a456-426614174000"
}{- "message": "Documents confirmed successfully",
- "docsUploadedReviewed": true
}Updates the onboarding decision for an individual.
| id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The individual UUID |
| onboardingDecision required | string <= 50 characters Enum: "Approved" "Declined" "Refer" "In Progress" Client onboarding decision |
| additionalComments | string <= 250 characters Transaction approve, decline, refer reason |
| nextFicaReviewDate | string <= 250 characters Date of fica expiry. |
{- "onboardingDecision": "Approved",
- "additionalComments": "All checks passed",
- "nextFicaReviewDate": "2025-12-02T22:00:00.000Z"
}{- "message": "The client was successfully onboarded."
}Generates the PDF report of the FICA application. By default returns JSON with a base64-encoded string. Use format=binary to receive raw application/pdf bytes (e.g. for large files). The report includes personal information, addresses, employment details, compliance questionnaire, and verification checks.
| id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The individual UUID |
| format | string Enum: "json" "binary" Omit or use json for { base64Content, mimeType, filename }. Use binary for raw PDF body. |
{- "base64Content": "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC9UeXBlIC9DYXRhbG9nCi9QYWdlcyAyIDAgUgo+PgplbmRvYmoK...",
- "mimeType": "application/pdf",
- "filename": "fica-report-123e4567-e89b-12d3-a456-426614174000.pdf"
}Returns a paginated list of entities for the authenticated partner. Supports filtering on multiple fields. Maximum 100 results per page.
| take | number <= 100 Example: take=50 Number of records to return (max 100) |
| skip | number Example: skip=0 Number of records to skip |
| externalUserID | string <= 50 characters Example: externalUserID=EXT-12345 Filter by external user ID |
| clientReference | string <= 50 characters Example: clientReference=REF123456 Filter by client reference |
| ficaStatus | string <= 50 characters Example: ficaStatus=Approved Filter by FICA status |
| riskDescription | string <= 50 characters Example: riskDescription=Low Risk Filter by risk description |
| approvalDate | string Example: approvalDate=2025-12-01T00:00:00.000Z Filter by approval date (ISO date string) |
| lastUpdated | string Example: lastUpdated=2025-12-01T00:00:00.000Z Filter by last updated date (ISO date string) |
| nextFicaReviewDate | string Example: nextFicaReviewDate=2026-12-01T00:00:00.000Z Filter by next FICA review date (ISO date string) |
{ }Creates an entity record from CIPC registration details. Returns enriched CIPC commercial data, sanctions screening results, and any UBO records created from CIPC principal information.
| externalSystemId | string <= 50 characters External system identifier for this entity in your system |
| clientReference | string <= 50 characters Partner client reference |
| entityRegNumber required | string <= 150 characters Company registration number (CIPC format) |
| entityType required | integer Entity type ID from settings entity-types |
| entityRegName required | string <= 150 characters Registered entity name |
{- "externalSystemId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
- "clientReference": "REF-001",
- "entityRegNumber": "2020/123456/07",
- "entityType": 1,
- "entityRegName": "EXAMPLE ENTITY (PTY) LTD"
}{- "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
- "adminAdded": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
- "adminAddedDate": "2026-06-01T10:00:00.000Z",
- "entityAddressLine1": "123 Example Street",
- "entityAddressLine2": "Example Suburb",
- "entityAddressLine3": "Example City",
- "entityZIPCode": "EXAMPLE PROVINCE",
- "entityRegName": "EXAMPLE ENTITY (PTY) LTD",
- "entityRegNumber": "2020/123456/07",
- "clientReference": "REF-001",
- "physicalAddress": "123 Example Street, Example Suburb, Example City, EXAMPLE PROVINCE, 0001",
- "postalAddress": "123 Example Street, Example Suburb, Example City, EXAMPLE PROVINCE, 0001",
- "ficaStatus": "In Progress",
- "riskDescription": "Undetermined",
- "transactionFrequency": 1,
- "cipcCommercialName": "EXAMPLE GAMING (PTY) LTD",
- "cipcCommercialResponse": {
- "Commercial": {
- "CommercialDirectorInformation": [
- {
- "DisplayText": "Commercial Director Information",
- "IDNo": 8001015009087,
- "FirstName": "JOHN MICHAEL",
- "Initials": "J",
- "Surname": "DOE",
- "FullName": "JOHN MICHAEL DOE",
- "BirthDate": "1980-01-01",
- "DirectorStatusCode": "Inactive",
- "AppointmentDate": "2020-03-15",
- "DirectorStatusDate": "",
- "MemberSize": 0,
- "PhysicalAddress": "45 Sample Road, Example Suburb, Example City, EXAMPLE PROVINCE, 0001"
}
], - "CommercialAddressInformation": [
- {
- "DisplayText": "Commercial Address Information",
- "AddressType": "Physical",
- "Address1": "123 Example Street",
- "Address2": "Example Suburb",
- "Address3": "Example City",
- "Address4": "EXAMPLE PROVINCE",
- "PostalCode": 1,
- "LastUpdatedDate": "2020-03-16"
}, - {
- "DisplayText": "Commercial Address Information",
- "AddressType": "Postal",
- "Address1": "123 Example Street",
- "Address2": "Example Suburb",
- "Address3": "Example City",
- "Address4": "EXAMPLE PROVINCE",
- "PostalCode": 1,
- "LastUpdatedDate": "2020-03-16"
}
], - "CommercialBusinessInformation": {
- "DisplayText": "Commercial Business Information",
- "CommercialName": "EXAMPLE GAMING (PTY) LTD",
- "RegistrationNo": "K2020/123456/07",
- "BusinessStartDate": "2020-03-15",
- "FinancialYearEnd": "June",
- "RegistrationNoOld": "",
- "CommercialStatus": "In Business",
- "CommercialType": "Private Company",
- "SIC": "0 - Unknown Data",
- "TaxNo": 9000000001,
- "ReferenceNo": "B00000000-0000001",
- "ExternalReference": "eFICA",
- "TradeName": "",
- "PreviousBussName": "",
- "PhysicalAddress": "123 Example Street, Example Suburb, Example City, EXAMPLE PROVINCE, 0001",
- "PostalAddress": "123 Example Street, Example Suburb, Example City, EXAMPLE PROVINCE, 0001",
- "RegistrationDate": "2020-03-15",
- "BusinessDesc": "No Information Available",
- "TelephoneNo": "",
- "FaxNo": "",
- "BussEmail": "",
- "BussWebsite": "",
- "NoOfEnquiries": 42,
- "NameChangeDate": "",
- "AgeofBusiness": "6 Years 3 Months",
- "AuthorisedCapitalAmt": 0,
- "IssuedNoOfShares": 0,
- "RegistrationNoConverted": "",
- "FinancialEffectiveDate": "",
- "AuthorisedNoOfShares": 1000,
- "IssuedCapitalAmt": 0,
- "CommercialStatusDate": "",
- "DirectorCount": 1,
- "VATNo": ""
}, - "CommercialCompanyInformation": {
- "DisplayText": "Commercial Company Information",
- "CommercialName": "EXAMPLE GAMING (PTY) LTD",
- "RegistrationNo": "K2020/123456/07",
- "RegistrationNoOld": "",
- "BusinessStartDate": "2020-03-15",
- "FinancialYearEnd": "June",
- "CommercialStatus": "In Business",
- "CommercialType": "Private Company",
- "SIC": "0 - Unknown Data",
- "TaxNo": 9000000001,
- "DirectorCount": 2,
- "ReferenceNo": "B00000000-0000001",
- "ExternalReference": "eFICA",
- "TradeName": "",
- "VATNo": "",
- "PreviousBussName": "",
- "NameChangeDate": "",
- "BussEmail": "",
- "BussWebsite": "",
- "LastUpdatedDate": "2024-02-05"
}, - "CommercialPrincipalInformation": [
- {
- "DisplayText": "Commercial Principal Information",
- "DirectorID": 1000001,
- "IDNo": 8001015009087,
- "FirstName": "JOHN",
- "Initials": "J",
- "Surname": "DOE",
- "SecondName": "",
- "BirthDate": "1980-01-01",
- "DirectorStatusCode": "Active",
- "AppointmentDate": "2020-03-15",
- "Designation": "",
- "MemberSize": "R 0.00",
- "MemberControlPerc": 0,
- "DirectorIndicator": "YES",
- "PrincipalType": "Director",
- "CM29Date": "",
- "ISRSAResident": "Yes",
- "CountryCode": "ZA",
- "ISIDVerified": "Yes",
- "ISCIPROConfirmed": "Yes",
- "PhysicalAddress": "45 Sample Road Example Suburb Example City EXAMPLE PROVINCE 0001",
- "PostalAddress": "45 Sample Road Example Suburb Example City EXAMPLE PROVINCE 0001",
- "Name": "JOHN DOE",
- "HomeTelephoneNo": "0820000001",
- "WorkTelephoneNo": "0210000001",
- "CellularNo": "0820000001",
- "EmailAddress": "",
- "Age": "46 Years 2 Months",
- "YearsWithBusiness": "6 Years 3 Months",
- "Fullname": "JOHN MICHAEL DOE",
- "SurnamePrevious": "",
- "DirectorStatusDate": "2020-03-16",
- "MemberControlType": "",
- "Executor": "",
- "ExecutorAppointmentDate": "",
- "Estate": "",
- "ResignationDate": "",
- "ConsumerScore": 0,
- "PresageV3ExclusionRule": "",
- "ConsumerID": 100000001
}
], - "CommercialActivePrincipalInfoSummary": {
- "DisplayText": "Commercial Active Principal Info Summary",
- "NoOfPrincipals": 1,
- "NoOfInactivePrincipals": 0,
- "AverageAge": 46
}, - "CommercialInActivePrincipalInfoSummary": {
- "DisplayText": "Commercial Inactive Principal Info Summary",
- "NoOfPrincipals": 0,
- "NoOfInactivePrincipals": 0,
- "AverageAge": 0
}, - "CommercialActivePrincipalInformation": [
- {
- "DisplayText": "Commercial Active Principal Information",
- "DirectorID": 1000001,
- "IDNo": 8001015009087,
- "FirstName": "JOHN",
- "Initials": "J",
- "Surname": "DOE",
- "SecondName": "",
- "BirthDate": "1980-01-01",
- "DirectorStatusCode": "Active",
- "AppointmentDate": "2020-03-15",
- "Designation": "",
- "MemberSize": "R 0.00",
- "MemberControlPerc": 0,
- "DirectorIndicator": "YES",
- "PrincipalType": "Director",
- "CM29Date": "",
- "ISRSAResident": "Yes",
- "CountryCode": "ZA",
- "ISIDVerified": "Yes",
- "ISCIPROConfirmed": "Yes",
- "PhysicalAddress": "45 Sample Road Example Suburb Example City EXAMPLE PROVINCE 0001",
- "PostalAddress": "45 Sample Road Example Suburb Example City EXAMPLE PROVINCE 0001",
- "Name": "JOHN DOE",
- "HomeTelephoneNo": "0820000001",
- "WorkTelephoneNo": "0210000001",
- "CellularNo": "0820000001",
- "EmailAddress": "",
- "Age": "46 Years 2 Months",
- "YearsWithBusiness": "6 Years 3 Months",
- "Fullname": "JOHN MICHAEL DOE",
- "SurnamePrevious": "",
- "DirectorStatusDate": "2020-03-16",
- "MemberControlType": "",
- "Executor": "",
- "ExecutorAppointmentDate": "",
- "Estate": "",
- "ResignationDate": "",
- "ConsumerScore": 0,
- "PresageV3ExclusionRule": "",
- "ConsumerID": 100000001
}
]
}
}, - "sanctionsSearchResults": {
- "metadata": {
- "message": "No match found for Sanctions and Adverse Media."
}, - "matchedNumber": 0,
- "matchedEntities": null,
- "webSearchResults": [
- {
- "title": "Example company overview",
- "snippet": "Sample search result snippet for documentation purposes.",
- "displayLink": "example.com"
}
]
}, - "createdUbos": [
- {
- "uboUUID": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
- "firstName": "JOHN",
- "lastName": "DOE",
- "fullName": "JOHN MICHAEL DOE",
- "identificationNumber": "8001015009087",
- "passportNumber": "",
- "physicalAddress": "45 Sample Road Example Suburb Example City EXAMPLE PROVINCE 0001",
- "postalAddress": "45 Sample Road Example Suburb Example City EXAMPLE PROVINCE 0001",
- "isDirector": true,
- "isShareholder": false,
- "shareholderPercentage": 0,
- "identificationType": "saID",
- "saIDValid": true,
- "cipcDirectorVerification": {
- "DisplayText": "Commercial Active Principal Information",
- "DirectorID": 1000001,
- "IDNo": 8001015009087,
- "FirstName": "JOHN",
- "Initials": "J",
- "Surname": "DOE",
- "SecondName": "",
- "BirthDate": "1980-01-01",
- "DirectorStatusCode": "Active",
- "AppointmentDate": "2020-03-15",
- "Designation": "",
- "MemberSize": "R 0.00",
- "MemberControlPerc": 0,
- "DirectorIndicator": "YES",
- "PrincipalType": "Director",
- "CM29Date": "",
- "ISRSAResident": "Yes",
- "CountryCode": "ZA",
- "ISIDVerified": "Yes",
- "ISCIPROConfirmed": "Yes",
- "PhysicalAddress": "45 Sample Road Example Suburb Example City EXAMPLE PROVINCE 0001",
- "PostalAddress": "45 Sample Road Example Suburb Example City EXAMPLE PROVINCE 0001",
- "Name": "JOHN DOE",
- "HomeTelephoneNo": "0820000001",
- "WorkTelephoneNo": "0210000001",
- "CellularNo": "0820000001",
- "EmailAddress": "",
- "Age": "46 Years 2 Months",
- "YearsWithBusiness": "6 Years 3 Months",
- "Fullname": "JOHN MICHAEL DOE",
- "SurnamePrevious": "",
- "DirectorStatusDate": "2020-03-16",
- "MemberControlType": "",
- "Executor": "",
- "ExecutorAppointmentDate": "",
- "Estate": "",
- "ResignationDate": "",
- "ConsumerScore": 0,
- "PresageV3ExclusionRule": "",
- "ConsumerID": 100000001
}, - "shareholderType": "Individual",
- "adminID": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
- "adminAddedDate": "2026-06-01T10:00:00.000Z",
- "ficaStatus": "In Progress",
- "riskStatus": "Undetermined",
- "clientSACitizen": true
}
]
}Update the external system ID of an entity to eFICA.
| id required | string <uuid> <= 50 characters eFICA entity UUID |
| externalSystemId required | string <= 50 characters External system identifier for this entity in your system |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "externalSystemId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}{- "success": true
}Updates entity KYB (Know Your Business) details from the external system, including trading name, address, industry, transaction profile, compliance flags, and custom form answers.
| id required | string <uuid> Example: f47ac10b-58cc-4372-a567-0e02b2c3d479 FICA entity UUID |
| sameEntityName required | boolean Whether the trading name is the same as the registered name |
| entityTradingName required | string <= 150 characters Entity trading name |
| entityTelNumber required | string [ 10 .. 15 ] characters Entity telephone number |
| physicalAddress1 required | string <= 150 characters Physical address line 1 |
| physicalAddress2 required | string <= 150 characters Physical address line 2 |
| physicalAddress3 required | string <= 150 characters Physical address line 3 |
| zipCode required | string <= 20 characters Postal code or province label |
| addressCountry required | integer Address country ID from settings countries |
| countriesTransactedWith required | Array of integers Country IDs the entity transacts with |
| entityIndustry required | integer Entity industry ID from settings |
| entityIndustryDescription | string <= 150 characters Industry description when industry is Other |
| transactionFrequency required | integer Transaction frequency ID |
| transactionType required | integer Transaction type ID |
| transactionFundingSource required | integer Transaction funding source ID |
| sourceFundingDescription | string <= 150 characters Funding source description when source is Other |
| transactionSourceWealth required | integer Source of wealth ID |
| sourceWealthDescription | string <= 150 characters Source of wealth description when source is Other |
| additionalVerification required | boolean Whether additional verification is required |
| additionalVerificationReason | string <= 250 characters Reason for additional verification |
| transactionConsistent required | string <= 5 characters Whether the transaction is consistent with the client profile |
| transactionInconsistantReason | string <= 150 characters Reason when the transaction is not consistent |
| entityDetailsConfirmed required | boolean Whether entity KYB details have been confirmed |
object Partner custom form question answers keyed by question ID | |
| userID required | string <uuid> eFICA user UUID performing the update (must belong to the partner) |
{- "sameEntityName": true,
- "entityTradingName": "Example Entity (Pty) Ltd",
- "entityTelNumber": "0215558888",
- "physicalAddress1": "123 Example Street",
- "physicalAddress2": "Example Suburb",
- "physicalAddress3": "Example City",
- "zipCode": "EXAMPLE PROVINCE",
- "addressCountry": 189,
- "countriesTransactedWith": [
- 189
], - "entityIndustry": 2,
- "entityIndustryDescription": "",
- "transactionFrequency": 1,
- "transactionType": 31,
- "transactionFundingSource": 31,
- "sourceFundingDescription": "",
- "transactionSourceWealth": 6,
- "sourceWealthDescription": "",
- "additionalVerification": false,
- "additionalVerificationReason": "",
- "transactionConsistent": "true",
- "transactionInconsistantReason": "",
- "entityDetailsConfirmed": true,
- "customQuestions": { },
- "userID": "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
}{- "success": true
}Confirms entity KYB sanctions and adverse media review outcomes from the external system. Records whether adverse KYC search and PEP/sanctions list review have been completed.
| id required | string <uuid> Example: f47ac10b-58cc-4372-a567-0e02b2c3d479 FICA entity UUID |
| adverseSearchKYC required | boolean Whether adverse KYC search results apply to the entity |
| pepConfirmReviewed required | boolean Whether PEP and sanctions list review has been confirmed |
{- "adverseSearchKYC": false,
- "pepConfirmReviewed": true
}{- "success": true
}Creates a new director or UBO on an existing entity. Runs sanctions screening and, for South African citizens with an ID number, bureau verification including face match. The UBO is created even if external verification is temporarily unavailable; verification fields are omitted from the response when searches did not run.
| id required | string <uuid> Example: f47ac10b-58cc-4372-a567-0e02b2c3d479 FICA entity UUID |
| externalId | string <= 50 characters External system identifier for this director/UBO in your system |
| firstName required | string <= 150 characters First name |
| lastName required | string <= 150 characters Last name |
| addressLine1 required | string <= 100 characters Residential address line 1 |
| addressLine2 required | string <= 100 characters Residential address line 2 |
| addressLine3 required | string <= 100 characters Residential address line 3 |
| addressZipCode required | string <= 20 characters Residential postal or ZIP code |
| addressCountry required | integer Residential country ID (countries table) |
| clientSACitizen required | boolean Default: false Whether the director/UBO is a South African citizen |
| idNumber | string or null <= 13 characters South African ID number (required when clientSACitizen is true) |
| passportCountry | integer or null Passport issuing country ID (countries table) |
| passportNumber | string or null <= 50 characters Passport number (required when clientSACitizen is false) |
| resolutionToAct | boolean or null Whether a resolution to act is on file |
| isShareholder required | boolean Default: false Whether this person is a shareholder |
| shareholderPercentage required | string <= 20 characters Default: "0" Shareholder percentage as a string (e.g. "0", "25.5") |
object Partner custom form answers keyed by question ID (object) or pre-stringified JSON string | |
| isDirector required | boolean Default: false Whether this person is a director |
| informationConfirmed required | boolean Default: false Whether the director/UBO information has been confirmed |
| trustRelatedPartyTypes | string (PublicVerifyEntityOrganigramTrustRelatedPartyTypes) Trust relationship type(s) for an Individual who is a direct child of a Trust node in the organigram tree. Stored on uboLink.trustRelatedPartyTypes (not on the UBO row).
Where to send: on each Individual node nested under a Trust node's |
{- "externalId": "ext-ubo-001",
- "firstName": "Alex",
- "lastName": "Sample",
- "addressLine1": "100 Example Street",
- "addressLine2": "Example Suburb",
- "addressLine3": "Example City",
- "addressZipCode": "8001",
- "addressCountry": 189,
- "clientSACitizen": true,
- "idNumber": "8001015009087",
- "resolutionToAct": true,
- "isShareholder": false,
- "shareholderPercentage": "0",
- "customQuestionsAnswers": {
- "101": "Example answer"
}, - "isDirector": true,
- "informationConfirmed": true
}{- "success": true,
- "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
- "sanctionsSearchResults": {
- "metadata": {
- "message": "No match found for PEP and Sanctions."
}, - "matchedNumber": 0,
- "matchedEntities": [ ],
- "webSearchResults": [
- {
- "title": "Example professional profile listing",
- "snippet": "Sample snippet mentioning a person with a similar name at an example employer.",
- "mime": null,
- "kind": "customsearch#result",
- "htmlTitle": "Example professional profile listing",
- "htmlSnippet": "Sample snippet with an <b>example name</b> at an example organisation.",
- "fileFormat": null,
- "displayLink": "example.com"
}
], - "fatfJurisdictionRiskResults": [ ]
}, - "renderVersion": "V1",
- "consumerDetail": {
- "FirstName": "JOHN",
- "SecondName": "MICHAEL",
- "Surname": "DOE",
- "IDNo": "8001015009087",
- "BirthDate": "1980-01-01T00:00:00+02:00",
- "Gender": "Male",
- "TitleDesc": "MR",
- "MaritalStatusDesc": "Single",
- "Age": 46,
- "PrivacyStatus": "ACCEPTS CONTACTS",
- "HomeTelephoneNo": "0215550001",
- "WorkTelephoneNo": "0215550002",
- "CellularNo": "0825550003",
- "EmailAddress": "client@example.com",
- "EmployerDetail": "EXAMPLE COMPANY (PTY) LTD",
- "Nationality": "South African"
}, - "kycResult": {
- "EnquiryDate": "2026-06-01T00:00:00+02:00",
- "ID": "Valid | 8001015009087",
- "ResidentialAddress": "Not Confirmed | 123 Example Street Example City",
- "Sources": "",
- "IDStatusInd": 1,
- "IDStatusDesc": "ID Validated On Bureau Data",
- "KYCStatusDesc": "No Match Established Within Provided Parameters"
}, - "faceMatchResult": {
- "IdentityVerificationResult": {
- "IdentityInformation": {
- "Title": "Mister",
- "IDNo": "8001015009087",
- "Names": "JOHN MICHAEL",
- "Surname": "DOE",
- "IdentityCountry": "South African ID",
- "IdentityType": "ID Card",
- "IDIssueDate": "2016-05-09",
- "DeceasedStatus": "Alive",
- "DeceasedDate": "",
- "AlivenessScore": 88,
- "AlivenessExceptionReason": "",
- "ErrorMessage": "",
- "LastUpdated": 4
}, - "PersonalInformation": {
- "DateOfBirth": "1980-01-01",
- "PlaceOfBirth": "ZAF",
- "Citizenship": "South African",
- "Gender": "Male",
- "MaritalStatus": "SINGLE",
- "MaritalDate": ""
}, - "AddressInformation": {
- "PostalAddress1": "",
- "PostalAddress2": "",
- "PostalAddress3": "",
- "PostalAddress4": "",
- "PostalCode": "",
- "ResidentialAddress1": "",
- "ResidentialAddress2": "",
- "ResidentialAddress3": "",
- "ResidentialAddress4": "",
- "ResidentialCode": ""
}
}
}, - "faceMatchImageDocURL": "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11.jpg"
}Updates an existing director or UBO. Path id is the UBO UUID. Uses the same request body as create. Sanctions and bureau verification run only when results are not already stored on the UBO; returned verification fields match the create response.
Trust relationship types: Trust-member UBOs (those with ficaEntityTrustID on the UBO record, set during verify-organigram) may include optional trustRelatedPartyTypes in the body to create or update uboLink.trustRelatedPartyTypes. Same JSON-string format as verify-organigram. Omit for entity-level UBOs that are not trust members. The entity organigram is refreshed after update so relationship badges stay in sync in efica.
| id required | string <uuid> Example: 7c9e6679-7425-40de-944b-e07fc1f90ae7 The UBO UUID |
| externalId | string <= 50 characters External system identifier for this director/UBO in your system |
| firstName required | string <= 150 characters First name |
| lastName required | string <= 150 characters Last name |
| addressLine1 required | string <= 100 characters Residential address line 1 |
| addressLine2 required | string <= 100 characters Residential address line 2 |
| addressLine3 required | string <= 100 characters Residential address line 3 |
| addressZipCode required | string <= 20 characters Residential postal or ZIP code |
| addressCountry required | integer Residential country ID (countries table) |
| clientSACitizen required | boolean Default: false Whether the director/UBO is a South African citizen |
| idNumber | string or null <= 13 characters South African ID number (required when clientSACitizen is true) |
| passportCountry | integer or null Passport issuing country ID (countries table) |
| passportNumber | string or null <= 50 characters Passport number (required when clientSACitizen is false) |
| resolutionToAct | boolean or null Whether a resolution to act is on file |
| isShareholder required | boolean Default: false Whether this person is a shareholder |
| shareholderPercentage required | string <= 20 characters Default: "0" Shareholder percentage as a string (e.g. "0", "25.5") |
object Partner custom form answers keyed by question ID (object) or pre-stringified JSON string | |
| isDirector required | boolean Default: false Whether this person is a director |
| informationConfirmed required | boolean Default: false Whether the director/UBO information has been confirmed |
| trustRelatedPartyTypes | string (PublicVerifyEntityOrganigramTrustRelatedPartyTypes) Trust relationship type(s) for an Individual who is a direct child of a Trust node in the organigram tree. Stored on uboLink.trustRelatedPartyTypes (not on the UBO row).
Where to send: on each Individual node nested under a Trust node's |
{- "externalId": "ext-ubo-001",
- "firstName": "Alex",
- "lastName": "Sample",
- "addressLine1": "100 Example Street",
- "addressLine2": "Example Suburb",
- "addressLine3": "Example City",
- "addressZipCode": "8001",
- "addressCountry": 189,
- "clientSACitizen": true,
- "idNumber": "8001015009087",
- "resolutionToAct": true,
- "isShareholder": false,
- "shareholderPercentage": "0",
- "customQuestionsAnswers": {
- "101": "Example answer"
}, - "isDirector": true,
- "informationConfirmed": true,
- "trustRelatedPartyTypes": "[{\"id\":1,\"name\":\"Founder\"},{\"id\":2,\"name\":\"Trustees\"}]"
}{- "success": true,
- "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
- "sanctionsSearchResults": {
- "metadata": {
- "message": "No match found for PEP and Sanctions."
}, - "matchedNumber": 0,
- "matchedEntities": [ ],
- "webSearchResults": [ ],
- "fatfJurisdictionRiskResults": [ ]
}, - "consumerDetail": {
- "FirstName": "JOHN",
- "SecondName": "MICHAEL",
- "Surname": "DOE",
- "IDNo": "8001015009087",
- "BirthDate": "1980-01-01T00:00:00+02:00",
- "Gender": "Male",
- "TitleDesc": "MR"
}, - "kycResult": {
- "EnquiryDate": "2026-06-01T00:00:00+02:00",
- "ID": "Valid | 8001015009087",
- "IDStatusDesc": "ID Validated On Bureau Data",
- "KYCStatusDesc": "No Match Established Within Provided Parameters"
}, - "faceMatchResult": {
- "IdentityVerificationResult": {
- "IdentityInformation": {
- "Title": "Mister",
- "IDNo": "8001015009087",
- "Names": "JOHN MICHAEL",
- "Surname": "DOE"
}
}
}, - "faceMatchImageDocURL": "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11.jpg"
}Returns the face-match profile photo stored for the director or UBO as base64, plus its MIME type. Requires OAuth2. The image exists only after bureau verification has produced and stored a face match photo. Use faceMatchImageDocURL from the create director or UBO response to know that a photo may be available.
| id required | string <uuid> Example: 7c9e6679-7425-40de-944b-e07fc1f90ae7 The UBO UUID |
{- "mimeType": "image/jpeg",
- "base64": "/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCwAA8A/9k="
}Updates adverse KYC and PEP/sanctions review on a UBO (path id is the UBO UUID), recalculates UBO risk using the same rules as internal step-two confirmation, and returns riskStatus and riskReason.
| id required | string <uuid> Example: 7c9e6679-7425-40de-944b-e07fc1f90ae7 The UBO UUID |
| adverseSearchKYC required | boolean Whether adverse KYC search results apply to the UBO |
| pepConfirmReviewed required | boolean Whether PEP and sanctions list review has been confirmed |
{- "adverseSearchKYC": false,
- "pepConfirmReviewed": true
}{- "riskStatus": "Low Risk",
- "riskReason": "The UBO calculated risk score (2) is within the low risk range. (1 to 14)"
}Uploads one document for a UBO (path id is uboUUID). Multipart fields: file (required) and documents (required) as a single JSON object { individualDocsID, IndividualDocTypesID }, or a JSON array with exactly one such object. Multiple document groups or types in one request return 400.
| id required | string <uuid> Example: 7c9e6679-7425-40de-944b-e07fc1f90ae7 The UBO UUID |
| file required | string <binary> Document file to upload (required) |
| documents required | string JSON object or single-element array with individualDocsID (number) and IndividualDocTypesID (number). Only one group and type per upload. |
| additionalFicaDoc | string <= 5 characters Additional FICA document flag (optional) |
{- "uboDocsID": 456
}Retrieves a UBO document by uboDocsID (path id) and returns the file as base64. Partner-scoped via the parent UBO's entity.
| id required | integer Example: 123 UBO document ID (uboDocsID) |
{- "uboDocsID": 123,
- "base64Content": "JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9MZW5ndGggND...",
- "mimeType": "application/pdf",
- "filename": "document.pdf"
}Confirms UBO document upload/review status. Path id is the UBO UUID. Request body supplies docsUploadedReviewed (boolean), which is persisted on the UBO record.
| id required | string <uuid> Example: 7c9e6679-7425-40de-944b-e07fc1f90ae7 The UBO UUID |
| docsUploadedReviewed required | boolean Whether UBO documents have been uploaded and reviewed |
{- "docsUploadedReviewed": true
}{- "message": "Documents confirmed successfully"
}Verifies / builds the entity ownership structure from the supplied organigram. Path id is the entity UUID. The request body supplies entityOrganigram as a JSON array. The endpoint creates trusts (Entity Trust), creates or updates UBOs (an existing UBO is identified by its uboID, a null uboID creates a new UBO) and their trust related-party links (uboLink), and finalises the ownership structure (ownershipStructureReviewed, directorsListChecked, shareholdersConfirmed).
Trust relationship types: For each Individual node that is a direct child of a Trust node, include trustRelatedPartyTypes (see schema). This is stored and drives the relationship typein eFica. Lookup valid type IDs and labels via GET /api/v1/settings/trust-related-party-types.
Returns the processed organigram in the external-system shape, plus the entity riskStatus and riskDescription.
| id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The entity UUID |
required | Array of objects (PublicVerifyEntityOrganigramNode) The entity organigram value. Provided as a JSON array whose first node must be Root. efica stringifies this when storing on ficaEntity.entityOrganigram. | ||||||||||||||||||||||||||||||||||||
Array
| |||||||||||||||||||||||||||||||||||||
{- "entityOrganigram": [
- {
- "guid": "58a7eede-4a4c-421e-bfcc-d4a05b6770e5",
- "shareholderType": "Root",
- "shareholderEntityName": "EXAMPLE GAMING",
- "uboPercentage": 100,
- "shareholderPercentage": 100,
- "children": [
- {
- "guid": "d02d8786-2845-4bd6-b99a-180015b9cfd8",
- "shareholderType": "Trust",
- "shareholderTrustName": "Test Trust",
- "shareholderPercentage": 25,
- "uboPercentage": 25,
- "parentGUID": "58a7eede-4a4c-421e-bfcc-d4a05b6770e5",
- "children": [
- {
- "guid": "e05cb316-da27-4cff-b93e-03e01f5e1663",
- "uboID": null,
- "firstName": "JOHN",
- "lastName": "DOE",
- "shareholderType": "Individual",
- "shareholderPercentage": 0,
- "uboPercentage": 0,
- "isTrustMember": true,
- "isDirector": true,
- "hasResolution": "false",
- "parentGUID": "d02d8786-2845-4bd6-b99a-180015b9cfd8",
- "trustRelatedPartyTypes": "[{\"id\":1,\"name\":\"Founder\"},{\"id\":3,\"name\":\"Named Beneficiaries\"}]",
- "children": [ ]
}
]
}
], - "ubos": [ ],
- "trustUbos": [
- {
- "ficaEntityTrustGUID": "d02d8786-2845-4bd6-b99a-180015b9cfd8",
- "trustName": "Test Trust",
- "sharePercentage": "25",
- "uboPercentage": "25",
- "relatedParties": [ ]
}
]
}
]
}{- "entityOrganigram": [
- {
- "id": "58a7eede-4a4c-421e-bfcc-d4a05b6770e5",
- "shareholderType": "Root",
- "shareholderEntityName": "EXAMPLE GAMING",
- "uboPercentage": 100,
- "shareholderPercentage": 100,
- "riskStatus": "High Risk",
- "children": [
- {
- "id": "d184b90a-2cdb-4fe3-b4cf-861fd99aafc5",
- "uboID": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
- "firstName": "John",
- "lastName": "Doe",
- "shareholderType": "Individual",
- "shareholderPercentage": 25,
- "uboPercentage": 25,
- "isDirector": false,
- "hasResolution": "false",
- "parentID": "58a7eede-4a4c-421e-bfcc-d4a05b6770e5",
- "children": [ ]
}, - {
- "id": "d02d8786-2845-4bd6-b99a-180015b9cfd8",
- "trustID": "d02d8786-2845-4bd6-b99a-180015b9cfd8",
- "shareholderType": "Trust",
- "shareholderTrustName": "Test Trust",
- "shareholderPercentage": 25,
- "uboPercentage": 25,
- "parentID": "58a7eede-4a4c-421e-bfcc-d4a05b6770e5",
- "children": [ ]
}
], - "ubos": [
- {
- "uboID": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
- "id": "d184b90a-2cdb-4fe3-b4cf-861fd99aafc5",
- "firstName": "John",
- "lastName": "Doe",
- "shareholderPercentage": 25,
- "uboPercentage": 25,
- "verified": false
}
], - "trustUbos": [ ]
}
], - "riskStatus": "High Risk",
- "riskDescription": "The entities risk score (19) equals or exceeds the high risk threshold score (15)."
}Retrieves an entity document by entityDocID (path id) and returns the file as base64. Partner-scoped via the parent entity.
| id required | integer Example: 123 Entity document ID (entityDocID) |
{- "entityDocID": 123,
- "base64Content": "JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9MZW5ndGggND...",
- "mimeType": "application/pdf",
- "filename": "document.pdf"
}Uploads one document for an entity. Multipart fields: file (required) and documents (required) as a single JSON object { entityDocsID, entityDocTypesID }, or a JSON array with exactly one such object. Multiple document groups or types in one request return 400.
| id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The entity UUID |
| file required | string <binary> Document file to upload (required) |
| documents required | string JSON object or single-element array with entityDocsID (number) and entityDocTypesID (number). Only one group and type per upload. |
| additionalFicaDoc | string <= 5 characters Additional FICA document flag (optional) |
{- "entityDocID": 123
}Confirms entity document upload/review status. Request body supplies docsUploadedReviewed (boolean), persisted on the entity record.
| id required | string <uuid> Example: ceac5f5e-9dea-4b47-927d-1ed39ab10e43 The entity UUID |
| docsUploadedReviewed required | boolean Whether entity documents have been uploaded and reviewed |
{- "docsUploadedReviewed": true
}{- "message": "Documents confirmed successfully"
}Updates entity onboarding decision and decision-specific comments. Rejected with 403 if the entity is already Approved or Declined. Admin IDs and dates are set from the OAuth2 token user (not the request body).
| id required | string <uuid> Example: ceac5f5e-9dea-4b47-927d-1ed39ab10e43 The entity UUID |
| onboardingDecision required | string <= 50 characters Enum: "Approved" "Declined" "Refer" "In Progress" Entity onboarding decision |
| nextFicaReviewDate | string <date-time> Next FICA review date (optional; omitted leaves existing value unchanged) |
| referComments | string <= 250 characters Required when onboardingDecision is Refer (maps to referredToAdminReason) |
| approvedComments | string <= 250 characters Optional when onboardingDecision is Approved |
| declinedComments | string <= 250 characters Required when onboardingDecision is Declined |
{- "onboardingDecision": "Approved",
- "nextFicaReviewDate": "2027-06-02T00:00:00.000Z",
- "approvedComments": "All checks passed"
}{- "riskDescription": "Low Risk"
}Generates the PDF report of the entity FICA application. By default returns JSON with a base64-encoded string. Use format=binary to receive raw application/pdf bytes (e.g. for large files). The report includes entity details, directors and UBOs, compliance questionnaire, verification checks, and risk audit.
| id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 The entity UUID |
| format | string Enum: "json" "binary" Omit or use json for { base64Content, mimeType, filename }. Use binary for raw PDF body. |
{- "base64Content": "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC9UeXBlIC9DYXRhbG9nCi9QYWdlcyAyIDAgUgo+PgplbmRvYmoK...",
- "mimeType": "application/pdf",
- "filename": "fica-report-123e4567-e89b-12d3-a456-426614174000.pdf"
}