Sijilat API Reference
Programmatic access to Bahrain's commercial registry. Search 271,829+ businesses, retrieve company details, ownership data, and contact information through a simple REST API.
api.sijilat.io
HTTPS only
JSON
Quick Start
Make your first API call in seconds. No authentication required for basic usage.
curl "https://api.sijilat.io/search?q=Gulf+Trading"Authentication
The API can be used without authentication for quick exploration. For production use, pass an API key to bypass rate limits.
Unlimited requests. No rate limiting. Pass via x-api-key header.
5 requests per hour per IP address. Good for testing and exploration.
Example Request
curl "https://api.sijilat.io/search?q=Bahrain" \
-H "x-api-key: your_api_key_here"Rate Limiting
Unauthenticated requests are limited to 5 requests per hour per IP address. Authenticated requests with a valid API key have no rate limits.
Rate Limit Headers
All responses from unauthenticated requests include these headers:
X-RateLimit-Limit: 5
X-RateLimit-Remaining: 4
X-RateLimit-Reset: 1640995200When Rate Limited
If you exceed the limit, you'll receive a 429 response with an additional header:
Retry-After: 3600{
"error": "Too Many Requests",
"message": "Rate limit exceeded. Maximum 5 requests per hour allowed.",
"retryAfter": 3600
}X-RateLimit-Reset header contains a Unix timestamp indicating when the current window expires.GET/search
Search across the entire Bahrain commercial registry. Supports both simple free-text queries and advanced multi-field searches. Results are categorized by CR matches, company matches, and person matches, each with relevance scoring.
Simple Search
Search across all fields with a single query string.
curl "https://api.sijilat.io/search?q=Gulf+Trading" \
-H "x-api-key: your_api_key_here"| Parameter | Type | Description |
|---|---|---|
qrequired | string | Search query. Minimum 2 characters. Searches company names, CR numbers, and person names. |
Advanced Search
Search with targeted filters. At least one parameter must be provided with a minimum of 2 characters.
curl "https://api.sijilat.io/search?companyName=Gulf&ownerName=Ahmed" \
-H "x-api-key: your_api_key_here"| Parameter | Type | Description |
|---|---|---|
crNumber | string | CR registration number to search for. |
companyName | string | Company name — supports both Arabic and English. |
ownerName | string | Owner or person name associated with a company. |
shareholderName | string | Shareholder name to search across all companies. |
Response
{
"crMatches": [
{
"cr": "123-1",
"nameAr": "شركة الخليج",
"nameEn": "Gulf Trading Co.",
"status": "ACTIVE",
"matchType": "exact",
"relevanceScore": 100
}
],
"companyMatches": [
{
"cr": "456-1",
"nameAr": "شركة البحرين",
"nameEn": "Bahrain Trading",
"status": "ACTIVE",
"matchType": "partial",
"relevanceScore": 85
}
],
"personMatches": [
{
"personNameAr": "أحمد المنصور",
"personNameEn": "Ahmed Al-Mansoor",
"companies": [
{
"cr": "123-1",
"companyNameAr": "شركة الخليج",
"companyNameEn": "Gulf Trading Co.",
"role": "owner"
}
],
"matchType": "exact",
"relevanceScore": 95
}
],
"metadata": {
"query": "Gulf Trading",
"totalResults": 3,
"executionTimeMs": 45,
"searchType": "simple"
}
}Response Fields
crCR and branch number (e.g. "123-1")nameArCompany name in ArabicnameEnCompany name in English (nullable)statusCompany status (e.g. "ACTIVE")matchType"exact" or "partial"relevanceScoreRelevance score from 0–100crCR and branch numbernameArCompany name in ArabicnameEnCompany name in English (nullable)statusCompany statusmatchType"exact", "partial", "fuzzy", or "multiword"relevanceScoreRelevance score from 0–100personNameArPerson name in ArabicpersonNameEnPerson name in English (nullable)companies[]Array of companies associated with this personmatchType"exact", "subsequence", "fuzzy", or "multiword"relevanceScoreRelevance score from 0–100queryThe original query string or advanced search parameterstotalResultsTotal number of results across all categoriesexecutionTimeMsServer-side query execution time in millisecondssearchType"simple" or "advanced"GET/cr
Retrieve comprehensive details for a specific company by its CR number and branch. Returns registration info, contact details, ownership, capital structure, business activities, and amendment history.
Request
curl "https://api.sijilat.io/cr?cr=12345-1" \
-H "x-api-key: your_api_key_here"| Parameter | Type | Description |
|---|---|---|
crrequired | string | CR number and branch in "CR_NO-BRANCH_NO" format (e.g. "12345-1"). The branch number is typically "1" for the main registration. |
Response
{
"companyInfo": {
"registrationNumber": "12345",
"branchNumber": "1",
"arabicName": "شركة الخليج للتجارة",
"englishName": "Gulf Trading Co. WLL",
"companyType": "WLL - With Limited Liability",
"registrationDate": "2020-01-15",
"expiryDate": "2025-01-15",
"status": "ACTIVE",
"financialYearEnd": "December"
},
"contactDetails": {
"building": "Tower 123",
"flat": "Office 456",
"roadNumber": "3802",
"roadName": "Road 38",
"block": "338",
"areaTown": "Diplomatic Area",
"poBox": "12345",
"email": "[email protected]",
"phone": "+973 1700 1234",
"mobile": "+973 3900 5678",
"fax": null,
"website": "https://gulftrading.bh"
},
"socialMedia": {
"Facebook": "https://facebook.com/gulftrading",
"Instagram": "@gulftrading",
"Twitter": null
},
"activities": [
{
"activityCode": "4610",
"isicCode": "4610",
"description": "Wholesale on a fee or contract basis",
"details": "General trading",
"capitalAmount": "50000"
}
],
"capitalDetails": {
"authorizedCapital": "100000",
"issuedCapital": "50000",
"totalShares": "500",
"nominalValuePerShare": "100",
"currency": "BHD",
"paidInCash": "50000",
"actualPaidCapital": "50000"
},
"shareholders": [
{
"name": "Ahmed Al-Mansoor",
"nameInArabic": "أحمد المنصور",
"nationality": "Bahraini",
"numberOfShares": "250",
"ownershipPercentage": "50"
}
],
"authorizedSignatories": [
{
"name": "Ahmed Al-Mansoor",
"nameInArabic": "أحمد المنصور",
"nationality": "Bahraini",
"signingAuthority": "Full"
}
],
"boardOfDirectors": [],
"partners": [],
"amendments": [
{
"date": "2023-06-15",
"amendmentType": "Change of Address",
"applicationNumber": "APP-2023-12345"
}
],
"branches": []
}Response Structure
registrationNumberCR registration numberbranchNumberBranch numberarabicNameOfficial name in ArabicenglishNameOfficial name in English (nullable)companyTypeLegal entity type (e.g. WLL, BSC)registrationDateDate of registrationexpiryDateCR expiry datestatusCurrent statusfinancialYearEndFinancial year end monthbuildingBuilding name/numberflatFlat/office numberroadNumber / roadNameRoad detailsblock / areaTownBlock and areapoBoxPO Box numberemail / phone / mobile / faxContact channelswebsiteCompany websiteactivityCodeBusiness activity codeisicCodeISIC Rev. 4 classification codedescriptionActivity descriptiondetailsAdditional activity detailscapitalAmountCapital allocated to activityauthorizedCapitalMaximum authorized capitalissuedCapitalCurrently issued capitaltotalSharesTotal number of sharesnominalValuePerShareFace value per sharecurrencyCurrency code (typically BHD)paidInCash / actualPaidCapitalCapital paid inname / nameInArabicShareholder name (bilingual)nationalityNationalitynumberOfSharesShares heldownershipPercentageOwnership %authorizedSignatories[]People authorized to sign for the companyboardOfDirectors[]Board members with positionspartners[]Company partnersamendments[]History of CR amendmentsbranches[]Other branches of the companyError Handling
The API uses standard HTTP status codes. Errors return a JSON body with an error field describing the problem.
| Status | Meaning | When |
|---|---|---|
400 | Bad Request | Missing or invalid query parameters, or search query under 2 characters. |
401 | Unauthorized | An x-api-key header was provided but the key is invalid. |
429 | Too Many Requests | Rate limit exceeded. Wait for the Retry-After duration. |
500 | Internal Error | Unexpected server error. Retry after a brief delay. |
Error Response Format
{
"error": "Invalid search query",
"code": "INVALID_QUERY",
"details": "Search query must be at least 2 characters long"
}{
"error": "Unauthorized",
"code": "UNAUTHORIZED"
}401 immediately.Search Features
The search engine uses multiple matching strategies with intelligent scoring to return the most relevant results.
Match Types
exactbase 100Exact Match
Full string match after normalization. Highest possible relevance.
multiwordbase 85Multi-word Match
All query words found flexibly within the value.
partialbase 80Partial Match
Query found as a substring within company or person names.
subsequencebase 60Subsequence Match
Characters found in order. Optimized for Arabic name variations.
fuzzybase 40Fuzzy Match
Similarity-based matching using Levenshtein distance (≥70% similarity).
Relevance Scoring
Each result receives a relevance score from 0–100 based on the match type plus contextual bonuses and penalties:
| Modifier | Points | Condition |
|---|---|---|
| Exact string match | +20 | Normalized query equals field value exactly |
| Starts-with bonus | +15 | Match occurs at the beginning of the field |
| All words found | +30 | Every word in a multi-word query is present |
| Missing words | -50 | Some words in a multi-word query are absent |
Bilingual Support
All search queries work with both Arabic and English input. Arabic text is matched using Unicode-aware subsequence algorithms that handle the full Arabic script range, including presentation forms and diacritics. You can search شركة الخليج or Gulf Trading and get matching results for the same companies.
Result Categories
Search results are returned in three categories, each scored and sorted independently:
CR Matches
crMatches
Direct matches on CR registration numbers.
Company Matches
companyMatches
Matches on company names in Arabic or English.
Person Matches
personMatches
People matched by name, with their associated companies.