API Reference
Public, indexable documentation for Tulify external endpoints under /api/v1. Base URL: https://api.tulify.com.ng
Authentication
All external requests require an API key passed in the x-api-key header. Some dashboard routes may additionally support bearer tokens (JWT), but industry and insights endpoints require an API key.
x-api-key: YOUR_API_KEY
/api/v1/payments/initialize
Initialize a payment and generate a dynamic virtual account for bank transfers.
x-api-key: YOUR_API_KEY Content-Type: application/json
{
"amount": 5000,
"currency": "NGN",
"callback_url": "https://tulify.com.ng/billing",
"metadata": {
"planId": "plan_uuid_here",
"type": "subscription"
}
}cURL
curl -X POST https://api.tulify.com.ng/api/v1/payments/initialize \
-H "x-api-key: YOUR_API_KEY"
-H "Content-Type: application/json" \
-d '{
"amount": 5000,
"currency": "NGN",
"callback_url": "https://tulify.com.ng/billing",
"metadata": {
"planId": "plan_uuid_here",
"type": "subscription"
}
}'JavaScript
const response = await fetch('https://api.tulify.com.ng/api/v1/payments/initialize', {
"method": "POST",
"headers": {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
"body": "{\n \"amount\": 5000,\n \"currency\": \"NGN\",\n \"callback_url\": \"https://tulify.com.ng/billing\",\n \"metadata\": {\n \"planId\": \"plan_uuid_here\",\n \"type\": \"subscription\"\n }\n}"
});
const data = await response.json();
console.log(data);Python
import requests
url = "https://api.tulify.com.ng/api/v1/payments/initialize"
headers = {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
}
data = {
"amount": 5000,
"currency": "NGN",
"callback_url": "https://tulify.com.ng/billing",
"metadata": {
"planId": "plan_uuid_here",
"type": "subscription"
}
}
response = requests.post(url, json=data, headers=headers)
print(response.json()){
"success": true,
"data": {
"account_number": "1234567890",
"bank_name": "WEMA BANK",
"account_name": "Tulify App FLW",
"expiry_date": "2026-03-29T12:00:00.000Z",
"tx_ref": "TULIFY_TX_REF_123",
"amount": 5000
}
}/api/v1/loan/statements/upload
Upload and process bank statements (PDF, CSV, Excel) to extract raw transaction data.
x-api-key: YOUR_API_KEY Content-Type: application/json
{
"fileUrl": "https://example.com/statement.pdf",
"password": "optional_password_if_encrypted"
}cURL
curl -X POST https://api.tulify.com.ng/api/v1/loan/statements/upload \
-H "x-api-key: YOUR_API_KEY"
-H "Content-Type: application/json" \
-d '{
"fileUrl": "https://example.com/statement.pdf",
"password": "optional_password_if_encrypted"
}'JavaScript
const response = await fetch('https://api.tulify.com.ng/api/v1/loan/statements/upload', {
"method": "POST",
"headers": {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
"body": "{\n \"fileUrl\": \"https://example.com/statement.pdf\",\n \"password\": \"optional_password_if_encrypted\"\n}"
});
const data = await response.json();
console.log(data);Python
import requests
url = "https://api.tulify.com.ng/api/v1/loan/statements/upload"
headers = {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
}
data = {
"fileUrl": "https://example.com/statement.pdf",
"password": "optional_password_if_encrypted"
}
response = requests.post(url, json=data, headers=headers)
print(response.json()){
"success": true,
"data": {
"statementId": "stmt_987654321",
"status": "processing"
}
}/api/v1/loan/statements/analyze
Trigger a deep analysis on an uploaded bank statement to compute income, expenses, and risk metrics.
x-api-key: YOUR_API_KEY Content-Type: application/json
{
"statementId": "stmt_987654321"
}cURL
curl -X POST https://api.tulify.com.ng/api/v1/loan/statements/analyze \
-H "x-api-key: YOUR_API_KEY"
-H "Content-Type: application/json" \
-d '{
"statementId": "stmt_987654321"
}'JavaScript
const response = await fetch('https://api.tulify.com.ng/api/v1/loan/statements/analyze', {
"method": "POST",
"headers": {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
"body": "{\n \"statementId\": \"stmt_987654321\"\n}"
});
const data = await response.json();
console.log(data);Python
import requests
url = "https://api.tulify.com.ng/api/v1/loan/statements/analyze"
headers = {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
}
data = {
"statementId": "stmt_987654321"
}
response = requests.post(url, json=data, headers=headers)
print(response.json()){
"success": true,
"data": {
"analysisId": "anly_123456789",
"status": "completed"
}
}/api/v1/loan/statements/:id/insights
Retrieve comprehensive financial insights, health scores, and risk assessments derived from the analyzed bank statement.
x-api-key: YOUR_API_KEY
{}cURL
curl -X GET https://api.tulify.com.ng/api/v1/loan/statements/:id/insights \ -H "x-api-key: YOUR_API_KEY"
JavaScript
const response = await fetch('https://api.tulify.com.ng/api/v1/loan/statements/:id/insights', {
"method": "GET",
"headers": {
"x-api-key": "YOUR_API_KEY"
}
});
const data = await response.json();
console.log(data);Python
import requests
url = "https://api.tulify.com.ng/api/v1/loan/statements/:id/insights"
headers = {
"x-api-key": "YOUR_API_KEY",
}
response = requests.get(url, headers=headers)
print(response.json()){
"success": true,
"data": {
"averageMonthlyIncome": 450000,
"averageMonthlyExpenses": 120000,
"riskScore": 810,
"healthScore": 92,
"insights": [
"Consistent monthly salary detected.",
"Low risk of default based on disposable income."
]
}
}/api/v1/industry/loan/early-default-prediction
Predict the likelihood of early default based on applicant history and behavioral signals.
x-api-key: YOUR_API_KEY Content-Type: application/json
{
"paymentHistory": 95,
"creditUtilization": 25,
"creditAgeYears": 4
}cURL
curl -X POST https://api.tulify.com.ng/api/v1/industry/loan/early-default-prediction \
-H "x-api-key: YOUR_API_KEY"
-H "Content-Type: application/json" \
-d '{
"paymentHistory": 95,
"creditUtilization": 25,
"creditAgeYears": 4
}'JavaScript
const response = await fetch('https://api.tulify.com.ng/api/v1/industry/loan/early-default-prediction', {
"method": "POST",
"headers": {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
"body": "{\n \"paymentHistory\": 95,\n \"creditUtilization\": 25,\n \"creditAgeYears\": 4\n}"
});
const data = await response.json();
console.log(data);Python
import requests
url = "https://api.tulify.com.ng/api/v1/industry/loan/early-default-prediction"
headers = {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
}
data = {
"paymentHistory": 95,
"creditUtilization": 25,
"creditAgeYears": 4
}
response = requests.post(url, json=data, headers=headers)
print(response.json()){
"prediction": {
"score": 720,
"riskLevel": "LOW"
},
"confidence": 0.92
}/api/v1/industry/retail/basket-affinity
Analyze product associations and suggest cross-sell recommendations.
x-api-key: YOUR_API_KEY Content-Type: application/json
{
"items": [
"Bread",
"Milk"
]
}cURL
curl -X POST https://api.tulify.com.ng/api/v1/industry/retail/basket-affinity \
-H "x-api-key: YOUR_API_KEY"
-H "Content-Type: application/json" \
-d '{
"items": [
"Bread",
"Milk"
]
}'JavaScript
const response = await fetch('https://api.tulify.com.ng/api/v1/industry/retail/basket-affinity', {
"method": "POST",
"headers": {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
"body": "{\n \"items\": [\n \"Bread\",\n \"Milk\"\n ]\n}"
});
const data = await response.json();
console.log(data);Python
import requests
url = "https://api.tulify.com.ng/api/v1/industry/retail/basket-affinity"
headers = {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
}
data = {
"items": [
"Bread",
"Milk"
]
}
response = requests.post(url, json=data, headers=headers)
print(response.json()){
"recommendations": [
"Butter",
"Eggs"
],
"confidence": 0.88
}/api/v1/industry/retail/demand-spike
Forecast potential demand spikes based on historical and seasonal trends.
x-api-key: YOUR_API_KEY Content-Type: application/json
{
"historicalSales": [
100,
120,
150,
80,
200
],
"period": "30d"
}cURL
curl -X POST https://api.tulify.com.ng/api/v1/industry/retail/demand-spike \
-H "x-api-key: YOUR_API_KEY"
-H "Content-Type: application/json" \
-d '{
"historicalSales": [
100,
120,
150,
80,
200
],
"period": "30d"
}'JavaScript
const response = await fetch('https://api.tulify.com.ng/api/v1/industry/retail/demand-spike', {
"method": "POST",
"headers": {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
"body": "{\n \"historicalSales\": [\n 100,\n 120,\n 150,\n 80,\n 200\n ],\n \"period\": \"30d\"\n}"
});
const data = await response.json();
console.log(data);Python
import requests
url = "https://api.tulify.com.ng/api/v1/industry/retail/demand-spike"
headers = {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
}
data = {
"historicalSales": [
100,
120,
150,
80,
200
],
"period": "30d"
}
response = requests.post(url, json=data, headers=headers)
print(response.json()){
"spikeProbability": 0.65,
"expectedIncrease": "15%"
}/api/v1/industry/supply-chain/disruption-impact
Forecast the financial loss and ripple-effect probability of a disruption event.
x-api-key: YOUR_API_KEY Content-Type: application/json
{
"disruptionType": "Geopolitical",
"region": "Global"
}cURL
curl -X POST https://api.tulify.com.ng/api/v1/industry/supply-chain/disruption-impact \
-H "x-api-key: YOUR_API_KEY"
-H "Content-Type: application/json" \
-d '{
"disruptionType": "Geopolitical",
"region": "Global"
}'JavaScript
const response = await fetch('https://api.tulify.com.ng/api/v1/industry/supply-chain/disruption-impact', {
"method": "POST",
"headers": {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
"body": "{\n \"disruptionType\": \"Geopolitical\",\n \"region\": \"Global\"\n}"
});
const data = await response.json();
console.log(data);Python
import requests
url = "https://api.tulify.com.ng/api/v1/industry/supply-chain/disruption-impact"
headers = {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
}
data = {
"disruptionType": "Geopolitical",
"region": "Global"
}
response = requests.post(url, json=data, headers=headers)
print(response.json()){
"estimatedFinancialLoss": 50000,
"rippleEffectProbability": 0.4
}/api/v1/industry/health/missed-appointment-risk
Predict the probability of a patient missing an appointment based on history and context.
x-api-key: YOUR_API_KEY Content-Type: application/json
{
"pastNoShows": 2,
"distance": 15
}cURL
curl -X POST https://api.tulify.com.ng/api/v1/industry/health/missed-appointment-risk \
-H "x-api-key: YOUR_API_KEY"
-H "Content-Type: application/json" \
-d '{
"pastNoShows": 2,
"distance": 15
}'JavaScript
const response = await fetch('https://api.tulify.com.ng/api/v1/industry/health/missed-appointment-risk', {
"method": "POST",
"headers": {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
"body": "{\n \"pastNoShows\": 2,\n \"distance\": 15\n}"
});
const data = await response.json();
console.log(data);Python
import requests
url = "https://api.tulify.com.ng/api/v1/industry/health/missed-appointment-risk"
headers = {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
}
data = {
"pastNoShows": 2,
"distance": 15
}
response = requests.post(url, json=data, headers=headers)
print(response.json()){
"riskLevel": "High",
"probability": 0.75
}/api/v1/industry/health/clinical-outcome-deviation
Detect anomalies in clinical outcomes compared to expected benchmarks.
x-api-key: YOUR_API_KEY Content-Type: application/json
{
"patientData": {
"age": 45,
"diagnosis": "Type 2 Diabetes"
},
"metrics": {
"hba1c": 8.5
}
}cURL
curl -X POST https://api.tulify.com.ng/api/v1/industry/health/clinical-outcome-deviation \
-H "x-api-key: YOUR_API_KEY"
-H "Content-Type: application/json" \
-d '{
"patientData": {
"age": 45,
"diagnosis": "Type 2 Diabetes"
},
"metrics": {
"hba1c": 8.5
}
}'JavaScript
const response = await fetch('https://api.tulify.com.ng/api/v1/industry/health/clinical-outcome-deviation', {
"method": "POST",
"headers": {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
"body": "{\n \"patientData\": {\n \"age\": 45,\n \"diagnosis\": \"Type 2 Diabetes\"\n },\n \"metrics\": {\n \"hba1c\": 8.5\n }\n}"
});
const data = await response.json();
console.log(data);Python
import requests
url = "https://api.tulify.com.ng/api/v1/industry/health/clinical-outcome-deviation"
headers = {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
}
data = {
"patientData": {
"age": 45,
"diagnosis": "Type 2 Diabetes"
},
"metrics": {
"hba1c": 8.5
}
}
response = requests.post(url, json=data, headers=headers)
print(response.json()){
"deviationFound": true,
"severity": "Moderate"
}/api/v1/industry/edutech/knowledge-decay
Model student engagement and estimate knowledge decay based on activity patterns.
x-api-key: YOUR_API_KEY Content-Type: application/json
{
"studentId": "std_123",
"lastQuizScore": 85,
"engagementScore": 0.9
}cURL
curl -X POST https://api.tulify.com.ng/api/v1/industry/edutech/knowledge-decay \
-H "x-api-key: YOUR_API_KEY"
-H "Content-Type: application/json" \
-d '{
"studentId": "std_123",
"lastQuizScore": 85,
"engagementScore": 0.9
}'JavaScript
const response = await fetch('https://api.tulify.com.ng/api/v1/industry/edutech/knowledge-decay', {
"method": "POST",
"headers": {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
"body": "{\n \"studentId\": \"std_123\",\n \"lastQuizScore\": 85,\n \"engagementScore\": 0.9\n}"
});
const data = await response.json();
console.log(data);Python
import requests
url = "https://api.tulify.com.ng/api/v1/industry/edutech/knowledge-decay"
headers = {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
}
data = {
"studentId": "std_123",
"lastQuizScore": 85,
"engagementScore": 0.9
}
response = requests.post(url, json=data, headers=headers)
print(response.json()){
"prediction": 0.85,
"confidence": 0.85,
"analysis": "Student engagement is at 90.0%."
}/api/v1/industry/edutech/exam-difficulty-calibration
Calibrate exam difficulty based on student performance and completion metrics.
x-api-key: YOUR_API_KEY Content-Type: application/json
{
"averageScore": 65,
"completionTime": 45
}cURL
curl -X POST https://api.tulify.com.ng/api/v1/industry/edutech/exam-difficulty-calibration \
-H "x-api-key: YOUR_API_KEY"
-H "Content-Type: application/json" \
-d '{
"averageScore": 65,
"completionTime": 45
}'JavaScript
const response = await fetch('https://api.tulify.com.ng/api/v1/industry/edutech/exam-difficulty-calibration', {
"method": "POST",
"headers": {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
"body": "{\n \"averageScore\": 65,\n \"completionTime\": 45\n}"
});
const data = await response.json();
console.log(data);Python
import requests
url = "https://api.tulify.com.ng/api/v1/industry/edutech/exam-difficulty-calibration"
headers = {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
}
data = {
"averageScore": 65,
"completionTime": 45
}
response = requests.post(url, json=data, headers=headers)
print(response.json()){
"suggestedDifficulty": "Medium-Hard",
"adjustmentNeeded": "+5%"
}/api/v1/industry/insurtech/claim-fraud-score
Score an insurance claim for potential fraud signals.
x-api-key: YOUR_API_KEY Content-Type: application/json
{
"claimAmount": 500000,
"incidentType": "Accident"
}cURL
curl -X POST https://api.tulify.com.ng/api/v1/industry/insurtech/claim-fraud-score \
-H "x-api-key: YOUR_API_KEY"
-H "Content-Type: application/json" \
-d '{
"claimAmount": 500000,
"incidentType": "Accident"
}'JavaScript
const response = await fetch('https://api.tulify.com.ng/api/v1/industry/insurtech/claim-fraud-score', {
"method": "POST",
"headers": {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
"body": "{\n \"claimAmount\": 500000,\n \"incidentType\": \"Accident\"\n}"
});
const data = await response.json();
console.log(data);Python
import requests
url = "https://api.tulify.com.ng/api/v1/industry/insurtech/claim-fraud-score"
headers = {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
}
data = {
"claimAmount": 500000,
"incidentType": "Accident"
}
response = requests.post(url, json=data, headers=headers)
print(response.json()){
"fraudScore": 0.15,
"action": "Approve"
}/api/v1/industry/proptech/rental-price-volatility
Predict rental price volatility in a location for a given property type.
x-api-key: YOUR_API_KEY Content-Type: application/json
{
"region": "Lagos",
"propertyType": "Apartment"
}cURL
curl -X POST https://api.tulify.com.ng/api/v1/industry/proptech/rental-price-volatility \
-H "x-api-key: YOUR_API_KEY"
-H "Content-Type: application/json" \
-d '{
"region": "Lagos",
"propertyType": "Apartment"
}'JavaScript
const response = await fetch('https://api.tulify.com.ng/api/v1/industry/proptech/rental-price-volatility', {
"method": "POST",
"headers": {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
"body": "{\n \"region\": \"Lagos\",\n \"propertyType\": \"Apartment\"\n}"
});
const data = await response.json();
console.log(data);Python
import requests
url = "https://api.tulify.com.ng/api/v1/industry/proptech/rental-price-volatility"
headers = {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
}
data = {
"region": "Lagos",
"propertyType": "Apartment"
}
response = requests.post(url, json=data, headers=headers)
print(response.json()){
"volatilityIndex": 0.08,
"trend": "Stable"
}/api/v1/industry/proptech/tenant-churn
Predict tenant churn likelihood using rental history patterns.
x-api-key: YOUR_API_KEY Content-Type: application/json
{
"tenantId": "tnt_456",
"rentalHistory": [
1200,
1200,
1200
]
}cURL
curl -X POST https://api.tulify.com.ng/api/v1/industry/proptech/tenant-churn \
-H "x-api-key: YOUR_API_KEY"
-H "Content-Type: application/json" \
-d '{
"tenantId": "tnt_456",
"rentalHistory": [
1200,
1200,
1200
]
}'JavaScript
const response = await fetch('https://api.tulify.com.ng/api/v1/industry/proptech/tenant-churn', {
"method": "POST",
"headers": {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
"body": "{\n \"tenantId\": \"tnt_456\",\n \"rentalHistory\": [\n 1200,\n 1200,\n 1200\n ]\n}"
});
const data = await response.json();
console.log(data);Python
import requests
url = "https://api.tulify.com.ng/api/v1/industry/proptech/tenant-churn"
headers = {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
}
data = {
"tenantId": "tnt_456",
"rentalHistory": [
1200,
1200,
1200
]
}
response = requests.post(url, json=data, headers=headers)
print(response.json()){
"churnProbability": 0.12,
"riskLevel": "Low"
}/api/v1/industry/sme/productivity-drift
Detect productivity drift by analyzing operational output signals over time.
x-api-key: YOUR_API_KEY Content-Type: application/json
{
"outputRate": [
50,
48,
45,
42
],
"period": "Weekly"
}cURL
curl -X POST https://api.tulify.com.ng/api/v1/industry/sme/productivity-drift \
-H "x-api-key: YOUR_API_KEY"
-H "Content-Type: application/json" \
-d '{
"outputRate": [
50,
48,
45,
42
],
"period": "Weekly"
}'JavaScript
const response = await fetch('https://api.tulify.com.ng/api/v1/industry/sme/productivity-drift', {
"method": "POST",
"headers": {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
"body": "{\n \"outputRate\": [\n 50,\n 48,\n 45,\n 42\n ],\n \"period\": \"Weekly\"\n}"
});
const data = await response.json();
console.log(data);Python
import requests
url = "https://api.tulify.com.ng/api/v1/industry/sme/productivity-drift"
headers = {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
}
data = {
"outputRate": [
50,
48,
45,
42
],
"period": "Weekly"
}
response = requests.post(url, json=data, headers=headers)
print(response.json()){
"driftDetected": true,
"magnitude": "Low"
}/api/v1/industry/sme/cash-flow-stress
Analyze SME cash flow to identify stress points and forecast short-term outcomes.
x-api-key: YOUR_API_KEY Content-Type: application/json
{
"monthlyRevenue": 1000000,
"expenses": 850000
}cURL
curl -X POST https://api.tulify.com.ng/api/v1/industry/sme/cash-flow-stress \
-H "x-api-key: YOUR_API_KEY"
-H "Content-Type: application/json" \
-d '{
"monthlyRevenue": 1000000,
"expenses": 850000
}'JavaScript
const response = await fetch('https://api.tulify.com.ng/api/v1/industry/sme/cash-flow-stress', {
"method": "POST",
"headers": {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
"body": "{\n \"monthlyRevenue\": 1000000,\n \"expenses\": 850000\n}"
});
const data = await response.json();
console.log(data);Python
import requests
url = "https://api.tulify.com.ng/api/v1/industry/sme/cash-flow-stress"
headers = {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
}
data = {
"monthlyRevenue": 1000000,
"expenses": 850000
}
response = requests.post(url, json=data, headers=headers)
print(response.json()){
"nextMonth": 1100000,
"confidence": 0.87
}/api/v1/analytics/dashboard
Retrieve dashboard analytics and module usage overview.
x-api-key: YOUR_API_KEY
{}cURL
curl -X GET https://api.tulify.com.ng/api/v1/analytics/dashboard \ -H "x-api-key: YOUR_API_KEY"
JavaScript
const response = await fetch('https://api.tulify.com.ng/api/v1/analytics/dashboard', {
"method": "GET",
"headers": {
"x-api-key": "YOUR_API_KEY"
}
});
const data = await response.json();
console.log(data);Python
import requests
url = "https://api.tulify.com.ng/api/v1/analytics/dashboard"
headers = {
"x-api-key": "YOUR_API_KEY",
}
response = requests.get(url, headers=headers)
print(response.json()){
"usage": {
"requests": 1250,
"errors": 12,
"latency": "45ms"
},
"modules": [
{
"name": "Payments",
"count": 450
},
{
"name": "Fintech",
"count": 320
}
]
}