Skip to main content

Create Project

Endpoint​

POST https://api.verifik.co/v3/projects

Create a new KYC project with complete configuration. You can create a basic project with minimal fields or include a complete project flow configuration in a single request.

Headers​

NameValue
Content-Typeapplication/json
AuthorizationBearer <token>

Params​

NameTypeRequiredDescription
namestringYesProject name (max 60 characters)
allowedCountriesarrayYesList of allowed countries
contactEmailstringYesContact email (valid email format)
privacyUrlstringYesPrivacy policy URL (valid URL format)
termsAndConditionsUrlstringYesTerms and conditions URL (valid URL format)
dataProtectionobjectYesData protection officer information
identifierstringNoProject identifier
currentStepnumberNoCurrent configuration step
lastStepnumberNoLast completed step
demoModebooleanNoEnable demo mode for testing
demoOTPstringNoDemo OTP (6 digits) - auto-generated if not provided
brandingobjectNoProject branding configuration
projectFlowobjectNoProject flow configuration
projectFlowTypestringNoProject flow type (required if projectFlow provided)

Data Protection Object​

NameTypeRequiredDescription
namestringYesDPO name
emailstringYesDPO email (valid email format)
addressstringYesPrimary address
address2stringNoSecondary address
citystringYesCity
countrystringYesCountry
postalCodestringYesPostal code (3-12 characters, alphanumeric with spaces and hyphens)

Project Flow Object​

NameTypeRequiredDescription
targetstringYesTarget audience (personal)
typestringYesFlow type (onboarding)
signUpFormobjectNoSign-up form configuration
documentsobjectNoDocument verification settings
livenessobjectNoBiometric verification settings
stepsobjectNoStep configuration
integrationsobjectNoIntegration settings

Request​

const fetch = require("node-fetch");

async function run() {
const res = await fetch("https://api.verifik.co/v3/projects", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.VERIFIK_TOKEN}`,
},
body: JSON.stringify({
name: "My KYC Project",
allowedCountries: ["United States"],
contactEmail: "admin@example.com",
privacyUrl: "https://example.com/privacy",
termsAndConditionsUrl: "https://example.com/terms",
dataProtection: {
name: "John Doe",
email: "dpo@example.com",
address: "123 Main St",
city: "New York",
country: "United States",
postalCode: "10001"
}
}),
});
console.log(await res.json());
}

run();

Response​

{
"data": {
"_id": "64a1b2c3d4e5f6789012345",
"name": "My KYC Project",
"identifier": null,
"contactEmail": "admin@example.com",
"privacyUrl": "https://example.com/privacy",
"termsAndConditionsUrl": "https://example.com/terms",
"status": "draft",
"currentStep": 0,
"lastStep": 0,
"demoMode": false,
"demoOTP": null,
"allowedCountries": ["United States", "Canada"],
"dataProtection": {
"name": "John Doe",
"email": "dpo@example.com",
"address": "123 Main St",
"address2": "",
"city": "New York",
"country": "United States",
"postalCode": "10001"
},
"branding": {
"bgColor": "#01236D",
"tabColor": "#01236D",
"borderColor": "#B2BDD3",
"buttonColor": "#B2BDD3",
"buttonTxtColor": "#FFFFFF",
"secondaryButtonColor": "#B2BDD3",
"secondaryButtonTextColor": "#FFFFFF",
"txtColor": "#8091B6",
"titleColor": "#000000",
"logo": null,
"rightImage": null,
"rightImagePosition": "center center",
"rightBackgroundColor": "white"
},
"projectFlows": "64a1b2c3d4e5f6789012346",
"version": 2,
"createdAt": "2023-07-01T10:00:00.000Z",
"updatedAt": "2023-07-01T10:00:00.000Z"
}
}

Notes​

  • Demo Mode: When demoMode: true without demoOTP, the system auto-generates a random 6-digit OTP. In development environments, demo mode is automatically enabled.
  • Project Flow: For production use, create complete projects with projectFlow configuration in a single request to ensure consistency.
  • Validation: All fields are validated; missing required fields or invalid values result in validation errors.
  • Data Protection: The postalCode must be 3-12 characters, alphanumeric with spaces and hyphens allowed.
  • Document Types: When steps.document is not "skip", verificationMethods and documentTypes are required.
  • Liveness: minScore range: 0.52–0.9; searchMinScore range: 0.7–0.95.