> For the complete documentation index, see [llms.txt](https://docs.lumiid.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.lumiid.com/getting-started/quickstart.md).

# Quickstart

This quickstart gets you to your first deploy as fast as possible. We'll skip most of the configuration — you can refine things later once you have something running.

{% hint style="success" %}
**Estimated time: 5 minutes.** All you need is an account and a project to deploy.
{% endhint %}

## Steps

{% stepper %}
{% step %}

### Create Your LumiID Account

Before making any API calls, you need a LumiID account. Registration is free and takes about two minutes. You'll get instant access to the sandbox environment — no credit card required.

1. #### Go to [lumiid.com](https://lumiid.com/) and click **Get Started**.

Fill in your name, business email, and choose a secure password. You'll receive a verification email — copy the OTP to activate your account.

2. #### Complete your business profile.

Enter your company name, industry, and intended use case. This helps LumiID configure the right verification products and compliance settings for your account.

3. #### Select your environment.

By default you start in **Sandbox** mode. Sandbox is free and uses simulated data so you can test every flow without touching real government databases or spending credits.

#### Sandbox vs. Live

**Sandbox** responses use realistic dummy data — perfect for development and testing. When you're ready to go live, switch to **Production** in the dashboard and fund your wallet. Sandbox requests are always free; production requests consume wallet credits.
{% endstep %}

{% step %}

### Get Your API Keys

LumiID uses Bearer Tokens for security. **Secret Key (API Key)** (server-side only, never exposed). Every request requires both.

#### 1. Open the **API Keys** section in your dashboard.

From the left sidebar, navigate to *Settings → API Keys*. You'll see separate key pairs for Sandbox and Production.

#### 2. Copy your Sandbox keys for development.

Click **Copy** next to both your App ID and Secret Key. Store them securely — you'll need both for every API request.

#### 3. Add them to your environment variables.

Never hardcode credentials in source files. Use `.env` files locally and your hosting platform's secrets manager in production.

.env

```
# LumiID Credentials — never commit this file to version control
API Key=your-sandbox-secret-key-here
LUMIID_ENV=sandbox   # change to "production" when going live
```

<pre class="language-abap"><code class="lang-abap"><strong>Keep your Secret Key private
</strong>
Your Secret Key grants full access to your LumiID account. 
Never expose it in frontend code, public repos, or client-side JavaScript. 
If it's ever compromised, regenerate it immediately 
from the dashboard under Settings → API Keys → Regenerate.
</code></pre>

{% endstep %}

{% step %}

### Make Your First API Call

Let's verify a Nigerian NIN (National Identification Number). This is the most common first call developers make — it confirms that a user's NIN exists and returns their official identity record from the government database.

POST<mark style="color:purple;">`https://api.lumiid.com/v1/ng/nin-basic/`</mark>

{% tabs %}
{% tab title="curl" %} <mark style="color:purple;">`curl --request POST`</mark>\ <mark style="color:purple;">`'https://api.lumiid.com/v1/ng/nin-basic/'`</mark>\ <mark style="color:purple;">`--header 'Authorization: your-sandbox-secret-key'`</mark>\ <mark style="color:purple;">`--header 'Content-Type: application/json'`</mark>\ <mark style="color:purple;">`--data '{"nin": "89184072280"}'`</mark>
{% endtab %}

{% tab title="Python" icon="python" %}

```python
import requests
import os

secret_key = os.getenv("LUMIID_SECRET_KEY")

url = "https://api.lumiid.com/v1/ng/nin-basic/"

headers = {
    "Authorization": secret_key,
    "Content-Type":  "application/json",
}

data = {"nin": "89184072280"}

response = requests.post(url, headers=headers, json=data)
print(response.json())
```

{% endtab %}

{% tab title="Node.js" icon="node" %}

```mjs
const axios = require('axios');

const secretKey = process.env.LUMIID_SECRET_KEY;

async function verifyNIN(nin) {
  const response = await axios.post(
    'https://api.lumiid.com/v1/ng/nin-basic/',
    { nin },
    {
      headers: {
        'Authorization': secretKey,
        'Content-Type':  'application/json',
      },
    }
  );
  return response.data;
}

verifyNIN('89184072280').then(console.log).catch(console.error);
```

{% endtab %}

{% tab title="PHP" icon="php" %}

```php
$secretKey = getenv('LUMIID_SECRET_KEY');
$nin       = '89184072280';

$ch = curl_init("https://api.lumiid.com/v1/ng/nin-basic/");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        "Authorization: {$secretKey}",
        "Content-Type: application/json",
    ],
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode(['nin' => $nin]),
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);

var_dump($response);
```

{% endtab %}
{% endtabs %}

<table data-card-size="large" data-view="cards"><thead><tr><th></th></tr></thead><tbody><tr><td><h4>Authorization</h4><p>Your secret key. This authenticates the request. Always send from your server, never from a browser or mobile app directly.</p></td></tr><tr><td><h4><strong>nin</strong></h4><p>The 11-digit NIN to verify. In sandbox mode, you can use our test 11-digit number (89184072280) — it returns realistic dummy data every time.</p></td></tr></tbody></table>
{% endstep %}

{% step %}

### Understand the Response

Every LumiID response follows the same predictable JSON envelope. Once you understand this structure, handling any endpoint becomes second nature.

✓ Success (200)✗ Not Found (404)✗ Unauthorized (401)200 OK — NIN VerifiedCopy

```json
{
  "data": {
    "nin":          "89184072280",
    "first_name":   "Adaeze",
    "last_name":    "Okonkwo",
    "middle_name":  "Chioma",
    "date_of_birth": "1992-04-15",
    "gender":       "Female",
    "phone_number": "080XXXXXXXX",
    "address":      "14 Adeola Odeku, Victoria Island, Lagos",
    "state_of_origin": "Anambra",
    "photo":        "data:image/jpeg;base64,/9j/4AAQ..."
  }
}
```

#### Response Fields Explained

FieldType   Description

`entity` objectThe root object containing all identity data returned from the government database.`entity.nin`stringThe verified NIN number, echoed back for confirmation.`entity.first_name`stringLegal first name as registered with NIMC.`entity.date_of_birth`stringDate of birth in `YYYY-MM-DD` format.`entity.photo`stringBase64-encoded JPEG passport photo from the NIMC database. Use this for face-match verification.

What to do next with the response

Cross-reference `first_name`, `last_name`, and `date_of_birth` against what the user provided during signup. Use the `photo` field as the reference image in a [Face Comparison](https://docs.lumiid.com/face-match/) call to confirm the person is who they claim to be.

### Integration Options

LumiID meets you wherever you are in your technical stack. Pick the path that fits your team and timeline.

<table data-view="cards"><thead><tr><th></th></tr></thead><tbody><tr><td><h4>REST API</h4><p>Clean, well-documented endpoints with webhook support. Full control over verification logic in any language or framework.</p><p>Recommended for most teams</p></td></tr><tr><td><h4>SDKs &#x26; Libraries</h4><p>Drop-in SDKs for Web, Python, Android, and React Native. Handles auth, retries, and response parsing out of the box.</p><p>Fastest integration</p></td></tr><tr><td><h4>No-Code Dashboard</h4><p>Run verifications, build KYC flows, and generate reports directly in the LumiID dashboard — zero code required.</p><p>No coding needed</p></td></tr></tbody></table>

### What Can You Build?

LumiID powers secure onboarding and fraud prevention across industries in Nigeria and beyond.

<table data-view="cards"><thead><tr><th></th></tr></thead><tbody><tr><td><p>🏦 <strong>Fintech &#x26; Banking</strong></p><p>Verify identities for account opening, loan disbursement, and wallet top-ups. Reduce fraud with AML screening and transaction risk scoring.</p></td></tr><tr><td><p>🛒 <strong>E-commerce</strong></p><p>Confirm delivery addresses, prevent return fraud, and reduce chargebacks by verifying buyer identity at checkout.</p></td></tr><tr><td><p>🚗 <strong>Mobility &#x26; Logistics</strong></p><p>Onboard drivers and riders securely, verify vehicle ownership, and detect device-based fraud in ride-sharing platforms.</p></td></tr><tr><td><p>🏥<strong>Healthcare</strong></p><p>Validate patient identity, eliminate duplicate records, and protect sensitive health data with biometric checks.</p></td></tr><tr><td><p>📱 <strong>Telecoms</strong></p><p>Enable NCC-compliant SIM registration, verify identity for mobile onboarding, and flag high-risk subscriber behaviors.</p></td></tr><tr><td><p>🏢 <strong>Corporate KYB</strong></p><p>Verify businesses via CAC and TIN before onboarding them as vendors, partners, or merchants on your platform.</p></td></tr></tbody></table>

### What's Next?

You've made your first LumiID API call. Here's where to go from here:

{% embed url="<https://docs.lumiid.com/authentication/>" %}

[Authentication Deep-DiveLearn about API key rotation, rate limits, and securing requests in production.](https://docs.lumiid.com/authentication/)[NIN Verification DocsFull reference for all NIN endpoints, parameters, and response fields.](https://docs.lumiid.com/nin/)[BVN VerificationVerify Bank Verification Numbers against CBN data with a single API call.](https://docs.lumiid.com/bvn/)[Liveness & Face MatchAdd biometric checks to confirm the user is real, present, and matches their government ID photo.](https://docs.lumiid.com/face-liveness/)[Unified Identity API ✦Combine NIN, BVN, biometrics and address checks into a single intelligent call. The fastest path to full KYC compliance.](https://docs.lumiid.com/v1/docs/identities/verify/)[Explore SDKsWeb, Python, Android, and React Native SDKs to get integrated even faster.](https://docs.lumiid.com/web-sdk/)

{% hint style="info" %}
First builds typically take 1–3 minutes. Subsequent builds are faster because dependencies are cached.
{% endhint %}
{% endstep %}
{% endstepper %}

## What's next?

You've shipped something — now make it yours.

{% content-ref url="/pages/56a52747d54863f8df67ff3ce908938888c69b66" %}
[Broken mention](broken://pages/56a52747d54863f8df67ff3ce908938888c69b66)
{% endcontent-ref %}

{% content-ref url="/pages/fb922e107b31a3e9e9fcf81410029e993b0a9afc" %}
[Broken mention](broken://pages/fb922e107b31a3e9e9fcf81410029e993b0a9afc)
{% endcontent-ref %}

{% content-ref url="/pages/d9d593aeabc52a165190bf8c93720491a4eb9682" %}
[Broken mention](broken://pages/d9d593aeabc52a165190bf8c93720491a4eb9682)
{% endcontent-ref %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.lumiid.com/getting-started/quickstart.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
