Documentation Index
Fetch the complete documentation index at: https://docs.urtentic.com/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
Before you begin, you’ll need:
- Urtentic Account: Sign up at urtentic.com
- API Credentials: Obtain your Client ID and API Secret from the integrations page in your dashboard
- Workflow ID: Create a verification workflow in your dashboard
Generate Your API Credentials
Navigate to the integrations page in your dashboard to obtain your API credentials:
- Client ID: Your application identifier (sent via
X-CLIENT-ID header)
- Client Secret: Your authentication token (sent via
Authorization: Bearer header)
Create a Workflow
Set up your verification workflow by defining the required verification processes.
Configure your workflow settings including document types, verification steps, and security options.
Quick Start (5 minutes)
Step 1: Set Up Your Environment
First, set your API credentials as environment variables:
export URTENTIC_API_KEY="your-base64-encoded-api-key"
export URTENTIC_CLIENT_ID="your-base64-encoded-client-id"
Step 2: Create Your First Verification
curl -X POST https://api.urtentic.com/api/v1/verifications \
-H "Authorization: Bearer $URTENTIC_API_KEY" \
-H "X-CLIENT-ID: $URTENTIC_CLIENT_ID" \
-H "Content-Type: application/json" \
-d '{
"workflowId": "wf_abc123",
"metadata": {
"userId": "user_12345",
"applicationId": "app_67890"
}
}'
Response:
{
"id": "ver_xyz789",
"workflowId": "wf_abc123",
"status": "pending",
"metadata": {
"userId": "user_12345",
"applicationId": "app_67890"
},
"createdAt": "2023-12-01T10:00:00Z",
"verificationUrl": "https://verify.urtentic.com/ver_xyz789"
}
Step 3: Check Verification Status
curl -X GET https://api.urtentic.com/api/v1/verifications/ver_xyz789 \
-H "Authorization: Bearer $URTENTIC_API_KEY" \
-H "X-CLIENT-ID: $URTENTIC_CLIENT_ID"
Integration Examples
const URTENTIC_API_KEY = process.env.URTENTIC_API_KEY;
const URTENTIC_CLIENT_ID = process.env.URTENTIC_CLIENT_ID;
const BASE_URL = 'https://api.urtentic.com/api/v1';
// Create a verification
async function createVerification(workflowId, metadata = {}) {
const response = await fetch(`${BASE_URL}/verifications`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${URTENTIC_API_KEY}`,
'X-CLIENT-ID': URTENTIC_CLIENT_ID,
'Content-Type': 'application/json'
},
body: JSON.stringify({ workflowId, metadata })
});
return await response.json();
}
// Check verification status
async function getVerificationStatus(verificationId) {
const response = await fetch(`${BASE_URL}/verifications/${verificationId}`, {
headers: {
'Authorization': `Bearer ${URTENTIC_API_KEY}`,
'X-CLIENT-ID': URTENTIC_CLIENT_ID
}
});
return await response.json();
}
// Usage
const verification = await createVerification('wf_abc123', { userId: 'user_12345' });
console.log('Verification URL:', verification.verificationUrl);
Workflow Types
Document Verification Only
{
"workflowId": "wf_docs_only",
"metadata": {
"requiredDocuments": ["passport", "national_id"]
}
}
Liveness + Document Verification
{
"workflowId": "wf_full_kyc",
"metadata": {
"enableLiveness": true,
"requiredDocuments": ["passport"]
}
}
Location + Email Verification
{
"workflowId": "wf_location_email",
"metadata": {
"requireLocation": true,
"emailAddress": "user@example.com"
}
}
Handling Webhooks
Configure webhook endpoints in your dashboard to receive real-time updates:
// Express.js webhook handler
app.post('/webhook/urtentic', express.raw({type: 'application/json'}), (req, res) => {
const signature = req.headers['x-urtentic-signature'];
const timestamp = req.headers['x-urtentic-timestamp'];
const payload = req.body;
try {
const currentTime = Math.floor(Date.now() / 1000);
if (Math.abs(currentTime - parseInt(timestamp)) > 300) {
return res.status(400).send('Webhook timestamp too old');
}
const secretBytes = Buffer.from(WEBHOOK_SECRET, 'base64');
const expectedSignature = crypto
.createHmac('sha256', secretBytes)
.update(payload)
.digest('hex');
let sig = signature.startsWith('sha256=') ? signature.substring(7) : signature;
if (sig !== expectedSignature) {
return res.status(400).send('Invalid signature');
}
} catch (error) {
return res.status(400).send('Signature verification failed');
}
const event = JSON.parse(payload);
switch (event.eventName) {
case 'verification_completed':
console.log('Verification completed:', event.flowId);
break;
case 'verification_abandoned':
console.log('Verification abandoned:', event.flowId);
break;
case 'step_completed':
console.log('Step completed:', event.flowId, 'Step:', event.step.stepId);
break;
}
res.status(200).send('OK');
});
Error Handling
The API uses standard HTTP status codes and returns detailed error messages:
async function handleApiCall() {
try {
const response = await fetch(`${BASE_URL}/verifications`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${URTENTIC_API_KEY}`,
'X-CLIENT-ID': URTENTIC_CLIENT_ID,
'Content-Type': 'application/json'
},
body: JSON.stringify({ workflowId: 'wf_abc123' })
});
if (!response.ok) {
const error = await response.json();
console.error('API Error:', error);
switch (response.status) {
case 400: console.log('Bad request - check your payload'); break;
case 401: console.log('Unauthorized - check your API credentials'); break;
case 429: console.log('Rate limited - wait before retrying'); break;
}
return null;
}
return await response.json();
} catch (error) {
console.error('Network error:', error);
return null;
}
}
Next Steps
Support
Need help? We’re here to assist: