Skip to main content
REST API

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.

Base URL

api.sijilat.io

Protocol

HTTPS only

Format

JSON

Quick Start

Make your first API call in seconds. No authentication required for basic usage.

terminal
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.

With API Key

Unlimited requests. No rate limiting. Pass via x-api-key header.

Without API Key

5 requests per hour per IP address. Good for testing and exploration.

Example Request

terminal
curl "https://api.sijilat.io/search?q=Bahrain" \
  -H "x-api-key: your_api_key_here"
Get your API key by subscribing to one of our paid plans. The Small Business plan and above include full API access.

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: 1640995200

When Rate Limited

If you exceed the limit, you'll receive a 429 response with an additional header:

Retry-After: 3600
429 response body
{
  "error": "Too Many Requests",
  "message": "Rate limit exceeded. Maximum 5 requests per hour allowed.",
  "retryAfter": 3600
}
Rate limit counters reset on a rolling window basis. The X-RateLimit-Reset header contains a Unix timestamp indicating when the current window expires.


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

terminal
curl "https://api.sijilat.io/cr?cr=12345-1" \
  -H "x-api-key: your_api_key_here"
ParameterTypeDescription
crrequiredstringCR number and branch in "CR_NO-BRANCH_NO" format (e.g. "12345-1"). The branch number is typically "1" for the main registration.
Results are cached for 24 hours. Subsequent requests for the same CR within that window return cached data instantly while triggering a background refresh.

Response

200 OK — application/json
{
  "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

companyInfo
registrationNumberCR registration number
branchNumberBranch number
arabicNameOfficial name in Arabic
englishNameOfficial name in English (nullable)
companyTypeLegal entity type (e.g. WLL, BSC)
registrationDateDate of registration
expiryDateCR expiry date
statusCurrent status
financialYearEndFinancial year end month
contactDetails
buildingBuilding name/number
flatFlat/office number
roadNumber / roadNameRoad details
block / areaTownBlock and area
poBoxPO Box number
email / phone / mobile / faxContact channels
websiteCompany website
activities[]
activityCodeBusiness activity code
isicCodeISIC Rev. 4 classification code
descriptionActivity description
detailsAdditional activity details
capitalAmountCapital allocated to activity
capitalDetails
authorizedCapitalMaximum authorized capital
issuedCapitalCurrently issued capital
totalSharesTotal number of shares
nominalValuePerShareFace value per share
currencyCurrency code (typically BHD)
paidInCash / actualPaidCapitalCapital paid in
shareholders[]
name / nameInArabicShareholder name (bilingual)
nationalityNationality
numberOfSharesShares held
ownershipPercentageOwnership %
Other arrays
authorizedSignatories[]People authorized to sign for the company
boardOfDirectors[]Board members with positions
partners[]Company partners
amendments[]History of CR amendments
branches[]Other branches of the company

Error Handling

The API uses standard HTTP status codes. Errors return a JSON body with an error field describing the problem.

StatusMeaningWhen
400Bad RequestMissing or invalid query parameters, or search query under 2 characters.
401UnauthorizedAn x-api-key header was provided but the key is invalid.
429Too Many RequestsRate limit exceeded. Wait for the Retry-After duration.
500Internal ErrorUnexpected server error. Retry after a brief delay.

Error Response Format

400 Bad Request
{
  "error": "Invalid search query",
  "code": "INVALID_QUERY",
  "details": "Search query must be at least 2 characters long"
}
401 Unauthorized
{
  "error": "Unauthorized",
  "code": "UNAUTHORIZED"
}
If no API key header is sent, the API treats the request as unauthenticated and applies rate limiting. If an invalid key is sent, it returns a 401 immediately.

Search Features

The search engine uses multiple matching strategies with intelligent scoring to return the most relevant results.

Match Types

exactbase 100

Exact Match

Full string match after normalization. Highest possible relevance.

multiwordbase 85

Multi-word Match

All query words found flexibly within the value.

partialbase 80

Partial Match

Query found as a substring within company or person names.

subsequencebase 60

Subsequence Match

Characters found in order. Optimized for Arabic name variations.

fuzzybase 40

Fuzzy 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:

ModifierPointsCondition
Exact string match+20Normalized query equals field value exactly
Starts-with bonus+15Match occurs at the beginning of the field
All words found+30Every word in a multi-word query is present
Missing words-50Some 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.