Skip to main content

Search API

The Search API enables searching through Quranic content with multi-language support. It supports two modes: Quick for autocomplete/navigation and Advanced for detailed search results.

info

See the Search API Reference for the complete endpoint documentation.

To use Search, you must have the search scope. To request search scope, fill this form.

Search Modes​

The @quranjs/api SDK requires specifying a search mode:

ModeUse CaseDescription
SearchMode.QuickCommand bar, autocompleteReturns navigational results (chapters, juz, pages) and verse matches
SearchMode.AdvancedSearch results pageReturns detailed verse results with pagination
import { SearchMode } from "@quranjs/api";

// Quick search (for autocomplete/navigation)
const quickResults = await client.search.search("fatiha", {
mode: SearchMode.Quick,
});

// Advanced search (for detailed results)
const advancedResults = await client.search.search("mercy", {
mode: SearchMode.Advanced,
});

Response Structure​

The search response contains:

interface SearchResponse {
pagination: {
currentPage: number;
nextPage: number | null;
perPage: number;
totalPages: number;
totalRecords: number;
};
result?: {
navigation: SearchResult[]; // Chapters, juz, pages matching query
verses: SearchResult[]; // Individual verse matches
};
}

SearchResult Type​

FieldTypeDescription
resultTypeSearchNavigationTypeType of result: surah, juz, hizb, ayah, rub_el_hizb, page, range
keynumber \| stringNavigation key (chapter number, verse key like "1:1", juz number, etc.)
namestringDisplay name (chapter name, verse text preview, etc.)
arabicstring?Original Arabic text
isArabicboolean?True if the name contains Arabic text
isTransliterationboolean?True if matched via transliteration

Quick Mode Examples​

Quick mode is ideal for command bars and search-as-you-type interfaces:

import { SearchMode } from "@quranjs/api";

const results = await client.search.search("fatiha", {
mode: SearchMode.Quick,
navigationalResultsNumber: 5, // Number of navigation results
versesResultsNumber: 10, // Number of verse results
});

// Navigation results (chapters, juz, pages)
results.result?.navigation.forEach((nav) => {
console.log(`${nav.resultType}: ${nav.name} (key: ${nav.key})`);
});

// Verse results
results.result?.verses.forEach((verse) => {
console.log(`${verse.key}: ${verse.name}`);
});

Advanced Mode Examples​

Advanced mode provides paginated, detailed search results:

import { Language, SearchMode } from "@quranjs/api";

const results = await client.search.search("mercy", {
mode: SearchMode.Advanced,
page: 1,
size: 20,
language: Language.ENGLISH,
});

console.log(
`Page ${results.pagination.currentPage} of ${results.pagination.totalPages}`,
);
console.log(`Total results: ${results.pagination.totalRecords}`);

results.result?.verses.forEach((verse) => {
console.log(`${verse.key}: ${verse.name}`);
});

With Translation Filters​

const results = await client.search.search("الرحمن", {
mode: SearchMode.Advanced,
translationIds: [131, 20], // Filter by translation IDs
exactMatchesOnly: "1", // Only exact matches
});

Pagination​

// Get first page
const page1 = await client.search.search("light", {
mode: SearchMode.Advanced,
page: 1,
size: 20,
});

// Get next page if available
if (page1.pagination.nextPage) {
const page2 = await client.search.search("light", {
mode: SearchMode.Advanced,
page: page1.pagination.nextPage,
size: 20,
});
}

Search Options Reference​

Common Options​

OptionTypeDescription
modeSearchModeRequired. Quick or Advanced
languageLanguageResponse language
translationIdsstring \| number[]Filter by translation IDs

Quick Mode Options​

OptionTypeDefaultDescription
navigationalResultsNumbernumber5Number of navigation results (1-50)
versesResultsNumbernumber20Number of verse results (1-50)
indexesstring \| string[]—Indexes to search (quran, translations)

Advanced Mode Options​

OptionTypeDefaultDescription
pagenumber1Page number
sizenumber30Results per page
exactMatchesOnly"0" \| "1""0"Only return exact matches
getText"0" \| "1""0"Include full verse text
highlight"0" \| "1""1"Highlight matching text
filterTranslationsstring \| string[]—Filter by translation IDs
import { Language, SearchMode } from "@quranjs/api";

// English search
const english = await client.search.search("mercy", {
mode: SearchMode.Advanced,
language: Language.ENGLISH,
});

// Arabic search
const arabic = await client.search.search("الرحمن", {
mode: SearchMode.Advanced,
language: Language.ARABIC,
});

// Urdu search
const urdu = await client.search.search("رحمت", {
mode: SearchMode.Advanced,
language: Language.URDU,
});