Low-code / no-code integration guide
Connect KhaleejiAPI to Zapier, Make.com, and Bubble.io without writing backend code. This guide covers bearer authentication, JSON payloads, response mapping, and ready-to-copy workflow templates for Emirates ID validation and Zakat calculation.
/api/v1/emirates-id/validate and /api/v1/zakat/calculate. Every request must send the standard bearer token in the Authorization header.1) Configure standard bearer authentication
In every custom HTTP request module, add your KhaleejiAPI key as a standard bearer token. This is the same setup for Zapier Webhooks, Make's HTTP module, and Bubble's API Connector shared headers.
Authorization: ******Content-Type: application/jsonAccept: application/json- Keep one space between
Bearerand the API key. - Set
Content-Typetoapplication/jsonfor POST requests. - If the platform offers an Accept header, use
application/jsonthere too.
2) Understand the JSON shape once, then reuse it everywhere
KhaleejiAPI wraps successful responses in a top-level data object with a meta.timestamp. In low-code builders, map fields from inside data, not from the root object.
Common request habits
- Send arrays exactly as arrays, even for a single item.
- Use real numbers, not quoted numbers, for financial fields.
- Pass 0 for optional numeric values you want to leave blank.
Common response mappings
- Emirates ID validity:
data.results[0].valid - Zakat total due:
data.calculation.zakatDue - Last response time:
meta.timestamp
3) Make.com: validate Emirates IDs in one HTTP module
- Add an HTTP > Make a request module.
- Set the URL to
https://khaleejiapi.dev/api/v1/emirates-id/validate. - Set the method to POST.
- Add the bearer auth and content-type headers shown above.
- Choose Raw body type and JSON (application/json) content type.
- Paste this request body. Even a single Emirates ID must be wrapped in an array.
{ "ids": ["784-1990-1234567-1"]}Turn on Parse response so the next module can map the parsed JSON directly.
{ "data": { "results": [ { "emiratesId": "784-1990-1234567-1", "valid": true, "formatted": "784-1990-1234567-1", "details": { "birthYear": 1990, "estimatedAge": 36, "generation": "Millennial (1981–1996)" } } ], "summary": { "total": 1, "valid": 1, "invalid": 0 } }, "meta": { "timestamp": "2026-08-16T00:00:00.000Z" }}Useful Make mappings
- Save pass/fail into Airtable:
data.results[0].valid - Display cleaned ID in a Slack alert:
data.results[0].formatted - Track batch totals:
data.summary.validanddata.summary.invalid
4) Zapier: calculate Zakat with Webhooks by Zapier
- Create a Webhooks by Zapier step and choose Custom Request.
- Set the URL to
https://khaleejiapi.dev/api/v1/zakat/calculate. - Use method POST.
- Add the same bearer auth and JSON content-type headers.
- Paste this payload into the Data field.
{ "currency": "AED", "assets": [ { "type": "cash", "value": 50000 }, { "type": "gold", "value": 0, "weight": 150 }, { "type": "stocks", "value": 10000 } ]}Zapier will parse the response into nested output fields you can reuse in CRM, invoicing, or messaging steps.
{ "data": { "calculation": { "totalWealth": 74250, "eligible": true, "zakatDue": 1856.25, "currency": "AED", "assetsCount": 3 }, "breakdown": [ { "type": "cash", "value": 50000, "zakatRate": 2.5, "zakatDue": 1250 }, { "type": "gold", "value": 14250, "zakatRate": 2.5, "zakatDue": 356.25 }, { "type": "stocks", "value": 10000, "zakatRate": 2.5, "zakatDue": 250 } ], "metalPrices": { "goldPerGram": 95, "silverPerGram": 1.05, "currency": "AED" } }, "meta": { "timestamp": "2026-08-16T00:00:00.000Z" }}Useful Zapier mappings
- Show the final amount due:
data.calculation.zakatDue - Branch the Zap only when Zakat is required:
data.calculation.eligible - Summarize line items in a follow-up message from
data.breakdown
5) Bubble.io: set up a reusable API Connector
- Install the API Connector plugin.
- Create a new API named KhaleejiAPI.
- Add shared headers for
AuthorizationandContent-Type. - Add a call named Validate Emirates ID with method POST and the URL
https://khaleejiapi.dev/api/v1/emirates-id/validate. - Use this sample body, then click Initialize call.
{ "ids": ["<dynamic emirates id>"]}Bubble will infer the schema from the sample response. Repeat the same pattern for /api/v1/zakat/calculate if you want a reusable Zakat action inside workflows or forms.
6) Copy-paste templates for Make.com and Zapier webhooks
Save these as internal team snippets or paste them into the platform's advanced configuration fields when creating new flows.
Make.com blueprint
{ "module": "HTTP > Make a request", "url": "https://khaleejiapi.dev/api/v1/emirates-id/validate", "method": "POST", "headers": [ { "name": "Authorization", "value": "******" }, { "name": "Content-Type", "value": "application/json" } ], "bodyType": "raw", "contentType": "application/json", "requestContent": { "ids": ["784-1990-1234567-1"] }, "parseResponse": true, "mapLater": { "isValid": "{{data.results[0].valid}}", "formattedId": "{{data.results[0].formatted}}" }}Zapier webhook template
{ "app": "Webhooks by Zapier", "event": "Custom Request", "method": "POST", "url": "https://khaleejiapi.dev/api/v1/zakat/calculate", "headers": { "Authorization": "******", "Content-Type": "application/json" }, "data": { "currency": "AED", "assets": [ { "type": "cash", "value": 50000 }, { "type": "gold", "value": 0, "weight": 150 }, { "type": "stocks", "value": 10000 } ] }, "unflatten": true, "mapLater": { "zakatDue": "{{data__calculation__zakatDue}}", "eligible": "{{data__calculation__eligible}}" }}7) Troubleshooting low-code workflow failures
401 Unauthorized
The Authorization header is missing, the Bearer prefix is missing, or the key is incomplete.
400 Bad Request
The JSON body shape is wrong. For Emirates ID use ids: string[]. For Zakat use assets: Asset[].
429 Too Many Requests
Your scenario is retrying in a loop. Add delay, retry, or fallback branches in the platform instead of firing the same step immediately.