BYTETOOLS

Shoof Aflam API

Shoof Aflam publishes a free, key-free API over 14,900+ Arabic movies and series with per-platform streaming availability, ratings and posters, as static JSON. Tested example included.

No API key requiredHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the Shoof Aflam API?

Shoof Aflam is a free, key-free API covering more than 14,900 Arabic movies and series, with bilingual titles, genre, year, ratings and the streaming platforms each title is available on. It is served as static JSON files split by first letter, with a stats endpoint reporting catalogue size and freshness.

Arabic-language streaming metadata is badly served by the usual providers, and availability data — which of Watch It, Shahid, Viu, OSN or a broadcaster's own service actually carries a title — is normally a paid product in any language. This project publishes both for free, covering 10,800 films and 4,000 series with a `platforms` array on each record. For anyone building for an Arabic-speaking audience, that combination is hard to find elsewhere at any price.

The delivery model is static files, which shapes how you use it. Titles are sharded by first letter at `/api/search/{letter}.json`, so a search means fetching the shard and filtering locally rather than querying a server. There is a `/api/stats.json` endpoint that reports totals and a `last_updated` date — check it, because a static catalogue refreshes only when the maintainer regenerates it, and the honest way to present availability data is with the date it was gathered. Note also that `titles_with_platforms` is well below the total: most records have no availability data at all, so guard for an empty or missing `platforms` array. No CORS header is sent, so browser calls need a proxy.

Quick facts

Base URL
https://shoofaflam.tv/api
Authentication
No key or account.
Rate limit
None — these are static files. Fetch a shard once and cache it.
Pricing
Free.
CORS
Not enabled — call it from your server
Official docs
Read the docs

How to use the Shoof Aflam API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Fetch every title beginning with A

GET https://shoofaflam.tv/api/search/a.json

curl
curl 'https://shoofaflam.tv/api/search/a.json'
JavaScript (fetch)
const res = await fetch("https://shoofaflam.tv/api/search/a.json");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://shoofaflam.tv/api/search/a.json", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
[
  {
    "slug": "ali-klay",
    "title_ar": "علي كلاي",
    "title_en": "Ali Klay",
    "year": 2026,
    "type": "series",
    "rating": 7.2,
    "platforms": [
      "watchit",
      "dmc",
      "viu"
    ],
    "genre": "action",
    "poster_path": "/1rv82gNj4IisQPiaRD2a6J7Fg4t.jpg",
    "vote_average": 8.5
  },
  {
    "slug": "awlad-el-raaey",
    "title_ar": "أولاد الراعي",
    "title_en": "Awlad El-Raaey",
    "year": 2026,
    "type": "series",
    "rating": 7,
    "platforms": [
      "watchit",
      "dmc",
      "cbc"
    ],
    "genre": "drama",
    "poster_path": "/biAvwA8P2h348GLYLMbykmiNOBI.jpg"
  },
  {
    "slug": "ala-qad-el-hob",
    "title_ar": "على قد الحب",
    "title_en": "Ala Qad El-Hob",
    "year": 2026,
    "type": "series",
    "rating": 7.4,
    "platforms": [
      "watchit",
      "cbc"
    ],
    "genre": "romance",
    "poster_path": "/18DKi5YlMSSBKIHW0weReUidS87.jpg",
    "vote_average": 7.0
  },
  {
    "slug": "aard-w-talab",
    "title_ar": "عرض وطلب",
    "title_en": "Aard W Talab",
    "year": 2026,
    "type": "series",
    "rating": 7,
    "platforms": [
      "watchit",
      "on"
    ],
    "genre": "drama",
    "poster_path": "/4rF4z1AJJbiAd4FidLgpN2AcvQG.jpg",
    "vote_average": 7.0
  },
  {
    "slug": "ab-wa-laken",
    "title_ar": "أب ولكن",
    "title_en": "Ab Wa Laken",
    "year": 2026,
    "type": "series",
    "rating": 7.1,
    "platforms": [
      "watchit",
      "dmc",
      "shahid"
    ],
    "genre": "drama",
    "poster_path": "/tMkSzkVDBLsk8DQ7FnDggY0XEDC.jpg",
    "vote_average": 8.0
  },
  {
    "slug": "as

2. Fetch catalogue statistics

GET https://shoofaflam.tv/api/stats.json

curl
curl 'https://shoofaflam.tv/api/stats.json'
JavaScript (fetch)
const res = await fetch("https://shoofaflam.tv/api/stats.json");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://shoofaflam.tv/api/stats.json", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
{
  "total_titles": 14912,
  "total_movies": 10821,
  "total_series": 4091,
  "total_platforms": 18,
  "titles_with_platforms": 3906,
  "last_updated": "2026-03-08"
}

Parameters

ParameterTypeRequiredDescription
letterpath segmentRequiredFirst letter shard on `/api/search/{letter}.json`, lowercase. a
titles.jsonpathOptional`/api/titles.json` returns the entire catalogue in one document. Large — prefer a shard unless you genuinely need everything. titles.json
platforms.jsonpathOptional`/api/platforms.json` lists the 18 streaming services referenced in the `platforms` arrays. platforms.json
stats.jsonpathOptional`/api/stats.json` returns catalogue totals and `last_updated`. Check it before trusting availability data. stats.json

Response fields

[].slugstring
URL-safe identifier for the title on shoofaflam.tv.
[].title_ar / title_enstring
Arabic and transliterated English titles. Both are present on most records.
[].yearinteger
Release or broadcast year.
[].typestring
`movie` or `series`.
[].genrestring
A single genre label, not an array.
[].platformsarray of strings
Streaming services carrying the title, by short code. Frequently empty — only about a quarter of the catalogue has availability data.
[].rating / vote_averagefloat
Two separate score fields. `vote_average` is absent on some records, so do not assume both exist.
[].poster_pathstring
Relative poster path in the TMDB image-path format, to be prefixed with an image host.

What you can build with the Shoof Aflam API

  • Build an Arabic film and series discovery site with 'where to watch' badges
  • Check which platform carries a title before recommending it
  • Analyse Arabic streaming catalogue overlap between services
  • Seed a bilingual media database with both Arabic and Latin-script titles
  • Practise client-side search over sharded static JSON

Common errors and how to fix them

404 on a letter shard

Only shards that exist are published.

Fix: Fetch `/api/stats.json` or the full `titles.json` to see what is covered rather than looping the alphabet blindly.

Empty `platforms` array

Most titles have no availability data.

Fix: `titles_with_platforms` in the stats response tells you the real coverage. Hide the availability UI when the array is empty instead of showing nothing.

CORS error in the browser

No `Access-Control-Allow-Origin` header is sent.

Fix: Proxy the fetch through your own server or edge function, or mirror the shards you need.

Stale data

The catalogue is static and refreshes when regenerated.

Fix: Read `last_updated` from `/api/stats.json` and show it next to any availability claim you display.

Shoof Aflam API — frequently asked questions

Is there a free Arabic movie and series API?

Shoof Aflam publishes over 14,900 Arabic titles with bilingual names, genres, ratings and streaming availability, free and with no key. It is served as static JSON files.

Does it show where a title is streaming?

For part of the catalogue, yes — each record carries a `platforms` array of service codes, resolvable through `/api/platforms.json`. Only around a quarter of titles have this data, so treat it as a bonus rather than a guarantee.

How do I search it?

Client-side. Titles are sharded by first letter at `/api/search/{letter}.json`, so you fetch the relevant shard and filter it in your own code. There is no query endpoint because there is no server-side query layer.

How current is the data?

Whatever `last_updated` in `/api/stats.json` says. It is a static export, so it is exactly as fresh as the last regeneration, and streaming availability in particular ages quickly.

Tools that pair with this API

Shoof Aflam is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.