https://mobapi.signme.it/api/v2/SignMeAPIIntegrate in 5 minutes. If you can't — we help you, free.
# Step 1 — Upload the ID image
# ID_type: 0 = National ID front / Driver / Car License | 1 = National ID back | 2 = Passport
curl -X POST 'https://mobapi.signme.it/api/v2/SignMeAPI/uploadImage?ID_type=0' \
-H 'APIKEY: YOUR_API_KEY' \
-F 'file=@national_id.jpg'
# → { "code": 200, "status": "success", "message": "Successful.", "id": "896702" }
# Step 2 — Read the result (wait 1–2s first)
curl 'https://mobapi.signme.it/api/v2/SignMeAPI/ReadImage?id=896702&isBlocked=false' \
-H 'APIKEY: YOUR_API_KEY'
Add your API key to every request as the APIKEY header.
Get yours on the API Keys page — it's free.
APIKEY: YOUR_API_KEY/uploadImage?ID_type=0
Send the ID image as multipart/form-data with the field named
file. You'll get back a numeric id — save it for the next step.
Use the ID_type query parameter to tell the engine which side or document type you are uploading:
| ID_type | Document |
|---|---|
0 (default) |
Egyptian National ID — front side · Driver License · Car License |
1 |
Egyptian National ID — back side |
2 |
Passport · Resident Permit |
# ID_type: 0 = National ID front / Driver / Car License | 1 = National ID back | 2 = Passport
curl -X POST 'https://mobapi.signme.it/api/v2/SignMeAPI/uploadImage?ID_type=0' \
-H 'APIKEY: YOUR_API_KEY' \
-F 'file=@/path/to/national_id.jpg'{
"code": 200,
"status": "success",
"id": "896702"
}id value (e.g. "896702") — you need it in the next step. It is not the filename./ReadImage?id=896702&isBlocked=false
Pass the id from Step 1. The OCR engine typically processes
in 2–5 seconds — each API call returns in under 400ms, and the OCR engine processes asynchronously. If data comes back empty, wait a second and retry.
See the for a ready-to-paste polling loop.
curl 'https://mobapi.signme.it/api/v2/SignMeAPI/ReadImage?id=896702&isBlocked=false' \
-H 'APIKEY: YOUR_API_KEY'{
"code": 200,
"status": "success",
"message": "Successful.",
"data": {
"firstname": "محمود",
"lastname": "عماد حسنين حسين احمد",
"national_ID": "29612160101819",
"birthday": "16/12/1996",
"gender": "ذكر",
"city": "القاهرة",
"address1": "ق 5217 هضبه وسطي المقطم القاهره",
"address2": "",
"religion": "",
"status": "",
"job": "",
"issueDate": "",
"expiry": "",
"releseCity": "",
"platenumber": "",
"passportType":"",
"gender_2": "",
"proccesstime":"29/04/2026 23:49:26:4926",
"imageName": "490131.png",
"savedImage": "290426\\2349264926.jpg",
"urlImage": null
}
}Copy and paste. Handles the full flow — upload, wait, retry, done.
const BASE = 'https://mobapi.signme.it/api/v2/SignMeAPI';
// ID_type: 0 = National ID front / Driver / Car License (default)
// 1 = National ID back
// 2 = Passport / Resident Permit
async function extractId(apiKey, imageFile, idType = 0) {
// 1. Upload
const form = new FormData();
form.append('file', imageFile);
const { id } = await fetch(`${BASE}/uploadImage?ID_type=${idType}`, {
method: 'POST',
headers: { 'APIKEY': apiKey },
body: form,
}).then(r => r.json());
// 2. Poll until data is ready (max 12 attempts)
await delay(2000);
for (let i = 0; i < 12; i++) {
const { data } = await fetch(
`${BASE}/ReadImage?id=${id}&isBlocked=false`,
{ headers: { 'APIKEY': apiKey } }
).then(r => r.json());
if (data && Object.keys(data).length) return data;
await delay(1500);
}
throw new Error('Timeout — please try again.');
}
const delay = ms => new Promise(r => setTimeout(r, ms));
// Usage:
const data = await extractId('YOUR_API_KEY', fileInput.files[0], 0);
console.log(data.firstname, data.national_ID);All fields returned inside the data object.
| Field | Type | Description |
|---|---|---|
firstname |
string | First name in Arabic. |
lastname |
string | Last name / full remaining name in Arabic. |
national_ID |
string | 14-digit national ID number. |
birthday |
string | Date of birth — DD/MM/YYYY. |
gender |
string | Gender in Arabic (ذكر / أنثى). |
city |
string | City of residence in Arabic. |
address1 |
string | Primary address line in Arabic. |
address2 |
string | Secondary address line (may be empty). |
religion |
string | Religion as printed on the ID (may be empty). |
status |
string | Marital status (may be empty). |
job |
string | Occupation (may be empty). |
issueDate |
string | Document issue date (may be empty). |
expiry |
string | Document expiry date (may be empty). |
releseCity |
string | City of document release (may be empty). |
platenumber |
string | Plate number — populated for vehicle licenses. |
passportType |
string | Passport type — populated for passports. |
gender_2 |
string | Secondary gender field (may be empty). |
proccesstime |
string | Server-side processing timestamp. |
imageName |
string | Filename assigned to the uploaded image. |
savedImage |
string | Relative path of the saved image on the server. |
urlImage |
string? | Public URL of the image, or null. |
| HTTP Code | Meaning |
|---|---|
| 200 | Success. Check data — if empty, image still processing; retry after 1–2s. |
| 400 | Bad request — missing file or wrong field name (must be "file"). |
| 401 | Unauthorized — APIKEY header missing or invalid. |
| 403 | ID not found — check the id value from the upload response. |
| 413 | File too large — maximum 10 MB. |
| 500 | Server error — retry once, then contact support if it persists. |
{ "code": 401, "message": "Unauthorized" }