توثيق APK API

واجهة REST API ببيانات Google Play: 4 ملايين تطبيق ومطوّرون وتطبيقات جديدة ومحذوفة وكلمات مفتاحية من العناوين. الصيغة: JSON، الترميز: UTF-8، وCORS مفعّل.

البدء السريع

عنوان URL الأساسي: https://apkapi.com/api/v1. التسجيل، وأنشئ مفتاح API في حسابك وأرسل طلبك الأول:

وصف API القابل للقراءة آليًا: OpenAPI 3.1 · مجموعة Postman — استورده إلى Postman أو Insomnia أو مولّد عملاء (openapi-generator) للحصول على SDK جاهز للغتك.

curl -H "X-API-Key: YOUR_KEY" "https://apkapi.com/api/v1/app?id=com.whatsapp"

تغطي البيانات أكثر من 4 ملايين تطبيق على Google Play من المتجر الأمريكي باللغة الإنجليزية (ومن بلد آخر إذا لم يكن التطبيق متاحًا في الولايات المتحدة)، وتُحدَّث كل ليلة. وتبقى التطبيقات التي تختفي من المتجر في قاعدة البيانات مع آخر بياناتها.

المصادقة

يجب أن يتضمن كل طلب عدا /v1/health مفتاح API في الترويسة:

X-API-Key: ak_live_…

يُقبل أيضًا: Authorization: Bearer …. لا يُسمح بتمرير المفتاح في معاملات URL: فسينتهي به الأمر في السجلات وسجل المتصفح.

احتفظ بالمفتاح على خادمك. إذا وضعته في JavaScript الصفحة، يمكن لأي زائر نسخه. مرّر طلبات الواجهة الأمامية عبر خادمك الخلفي.

الأرصدة والحدود

تكلّف كل عملية استدعاء من 0 إلى 3 أرصدة حسب نقطة النهاية، بغض النظر عن عدد الصفوف في الاستجابة (حتى 100)؛ ويكلّف استدعاء apps الجماعي رصيدًا واحدًا لكل تطبيق. تُستخدم أرصدة خطة الشهر الحالي أولًا، ثم الرصيد المدفوع مسبقًا. إذا فشل الطلب بسبب من جانبنا، تُعاد الأرصدة. الخطط والحزم

الترويسةالمعنى
X-Credits-Costأرصدة هذا الطلب
X-Credits-Remainingالأرصدة المتبقية (الخطة + الرصيد)
X-CacheHIT — من الذاكرة المؤقتة (أسرع)، MISS — استعلام جديد إلى الفهرس
X-RateLimit-Limit / -Remainingحد المفتاح في الدقيقة وما تبقى منه
X-Planfree | pro | scale | business

تجد أرصدتك المتبقية أيضًا في الحقل _credits في كل استجابة وفي /v1/account (مجانًا).

صيغة الاستجابة والأخطاء

تحتوي كل استجابة على الحقل ok. تتضمن القوائم results وtotal وpage وper وpages. عند الخطأ: ok = false، وerror هو الشرح، وcode رمز قابل للقراءة آليًا. التواريخ بصيغة ISO 8601 بتوقيت UTC.

{ "ok": true, "app": { "id": "com.whatsapp", "title": "WhatsApp", "installs": { "label": "10,000,000,000+", "min": 10000000000, "real": 12445120489 }, … },
  "_credits": { "cost": 1, "plan_remaining": 1999, "balance": 0, "available": 1999, "cached": false } }

{ "ok": false, "code": "insufficient_credits", "error": "Not enough credits: this call costs 2, you have 1. …" }
HTTPcodeمتى
400invalid_param, invalid_requestمعامل غير صالح أو مفقود
401missing_api_key, invalid_api_keyلا يوجد مفتاح، أو أن المفتاح ملغى
402insufficient_creditsالأرصدة غير كافية — اشحن رصيدك أو رقِّ خطتك
403account_blocked, plan_requiredالحساب محظور، أو أن نقطة النهاية تتطلب خطة أعلى
404not_foundالتطبيق أو المطوّر غير موجود في قاعدة البيانات، أو أن نقطة النهاية غير معروفة
429rate_limitedتم تجاوز حد الطلبات في الدقيقة
503service_unavailableمشكلة مؤقتة في قاعدة البيانات — حاول لاحقًا؛ لا تُخصم أرصدة

نقاط النهاية

جميع نقاط النهاية بصيغة GET /api/v1/{name}. التقسيم إلى صفحات: page (من 1) وper (من 1 إلى 100)، حتى النتيجة رقم 10,000. الترتيب: sort + order=asc|desc.

GET/api/v1/accountمجاني

خطتك وأرصدة الخطة والرصيد وتاريخ إعادة ضبط الأرصدة والحد في الدقيقة.

التطبيقات
GET/api/v1/app 1 رصيد

سجل التطبيق الكامل: العنوان والوصف والجديد والتثبيتات (الفئة والعدد الدقيق) والتقييم وعدد التقييمات والمراجعات وتوزيع النجوم والسعر وعمليات الشراء داخل التطبيق والإعلانات والفئة وتصنيف المحتوى والإصدار والحد الأدنى من Android وتاريخا الإصدار والتحديث والأيقونة ولقطات الشاشة والفيديو والمطوّر وموقعه. وللتطبيقات المحذوفة: آخر البيانات المحفوظة وتاريخ الحذف.

id *اسم حزمة التطبيق
GET · POST/api/v1/apps رصيد واحد لكل تطبيق

حتى 100 تطبيق في استدعاء واحد: GET ?ids=a,b,c أو POST مع القائمة في المتن (عنصر في كل سطر، أو JSON {"ids": […]}). رصيد واحد لكل تطبيق؛ وتعود المعرّفات غير الموجودة لدينا في not_found.

ids *أسماء الحزم مفصولة بفواصل، حتى 100
GET/api/v1/suggest مجاني

اقتراحات من بداية العنوان: أشهر 10 نتائج. مجانًا.

q *بداية العنوان، حرفان أو أكثر
المطوّرون
GET/api/v1/developer 2 رصيد

مطوّر وجميع تطبيقاته: الأعداد (في المتجر والمحذوفة) وإجمالي التثبيتات ومتوسط التقييم وأول إصدار والفئات والموقع. في خطة Business: البريد الإلكتروني والهاتف والعنوان والاسم القانوني.

idمعرّف المطوّر (من التطبيق: developer.id)
nameأو الاسم الدقيق للمطوّر
statusall (الافتراضي) أو live أو removed
sortrelevance | installs | real_installs | score | ratings | reviews | released | updated | price
pageالصفحة، من 1
perالصفوف في الصفحة، 1–100 (الافتراضي 20)
تغييرات المتجر
GET/api/v1/new 2 رصيد

تطبيقات جديدة حسب تاريخ أول إصدار، الأحدث في الأعلى.

sinceمن هذا التاريخ، YYYY-MM-DD (الافتراضي: قبل 7 أيام)
untilحتى هذا التاريخ، شاملًا
categoryمعرّف الفئة، مثل GAME_PUZZLE (راجع /v1/categories)
min_installsالحد الأدنى للتثبيتات (عتبات Google Play: 1000، 10000…)
langلغة العنوان، رمز ISO: en وde وpt…
sortrelevance | installs | real_installs | score | ratings | reviews | released | updated | price
pageالصفحة، من 1
perالصفوف في الصفحة، 1–100 (الافتراضي 20)
GET/api/v1/removed 2 رصيد

تطبيقات اختفت من Google Play (غير موجودة في جميع البلدان الـ19 التي نفحصها)، حسب تاريخ الحذف. يحتفظ سجل التطبيق بآخر بياناته.

sinceمن هذا التاريخ، YYYY-MM-DD (الافتراضي: قبل 7 أيام)
untilحتى هذا التاريخ، شاملًا
categoryمعرّف الفئة، مثل GAME_PUZZLE (راجع /v1/categories)
min_installsالحد الأدنى للتثبيتات (عتبات Google Play: 1000، 10000…)
sortremoved_at | installs | score
pageالصفحة، من 1
perالصفوف في الصفحة، 1–100 (الافتراضي 20)
السوق
GET/api/v1/keywords 2 رصيد

كلمات وعبارات من عناوين التطبيقات لكل لغة: كم تطبيقًا ومطوّرًا يستخدمها، وكم منها قوي (100 ألف تثبيت أو أكثر)، وإجمالي التثبيتات، وحصة المتصدر، ودرجة الفرصة.

langاللغة، الافتراضية en
qكلمة أو عبارة
phrasetrue — العبارات من كلمتين فقط، false — الكلمات المفردة فقط
min_appsالحد الأدنى للتطبيقات
max_appsأقصى عدد تطبيقات
sortopportunity | apps | installs | strong | devs | max_installs
orderdesc | asc
pageالصفحة، من 1
perالصفوف في الصفحة، 1–100 (الافتراضي 20)
GET/api/v1/categories مجاني

جميع الفئات مع عدد التطبيقات وإجمالي التثبيتات. مجانًا.

statuslive (في المتجر، الافتراضي) أو removed أو all
GET/api/v1/free_domains 3 رصيدPro+

تطبيقات نطاق موقع مطوّرها متاح للتسجيل، مع شعبية التطبيق. خطة Pro وما فوقها.

categoryمعرّف الفئة، مثل GAME_PUZZLE (راجع /v1/categories)
min_installsالحد الأدنى للتثبيتات (عتبات Google Play: 1000، 10000…)
statuslive (في المتجر، الافتراضي) أو removed أو all
tldمنطقة النطاق، مثل com
sortrelevance | installs | real_installs | score | ratings | reviews | released | updated | price
pageالصفحة، من 1
perالصفوف في الصفحة، 1–100 (الافتراضي 20)
GET/api/v1/charts 2 رصيد

تصنيف Google Play لبلد وفئة: حتى 200 مركز، وتغير الترتيب منذ اللقطة السابقة (change: عدد المراكز التي صعدها، و"new" للداخلين الجدد)، والأيقونة والتثبيتات.

country *البلد، رمز ISO: US وDE وBR…
category *الفئة، مثل GAME_PUZZLE
collectionfree | paid | grossing
pageالصفحة، من 1
perالصفوف في الصفحة، 1–100 (الافتراضي 20)
GET/api/v1/rankings 1 رصيد

جميع التصنيفات التي يوجد فيها التطبيق في أحدث لقطة: البلد والفئة والمجموعة والمركز؛ وعدد التصنيفات والبلدان وأفضل مركز.

id *اسم حزمة التطبيق
countryبلد واحد فقط
collectionfree | paid | grossing
GET/api/v1/availability 1 رصيد

البلدان التي يتوفر فيها التطبيق على Google Play (من hreflang في خريطة موقع المتجر). عند 190 بلدًا أو أكثر يُعاد worldwide = true دون قائمة.

id *اسم حزمة التطبيق
GET/api/v1/markets 1 رصيد

المنافسة في السوق بناءً على التصنيفات المجانية: عتبة دخول أفضل 100 وأفضل 200 (تثبيتات التطبيق في ذلك المركز)، وحصة التطبيقات الجديدة (آخر 12 شهرًا) والمحلية (≤3 بلدان) في القمة، وحجم السوق المحلي. دون معاملات: جميع البلدان؛ country: فئات بلد واحد؛ category: فئة واحدة في جميع البلدان.

countryالبلد، رمز ISO
categoryمعرّف الفئة، مثل GAME_PUZZLE (راجع /v1/categories)
sortentry100 | entry200 | new_share | local_share | local_apps | local_installs | local_new
orderdesc | asc
pageالصفحة، من 1
perالصفوف في الصفحة، 1–100 (الافتراضي 20)
GET/api/v1/stats مجاني

حجم قاعدة البيانات: التطبيقات في المتجر والمحذوفة، والمطوّرون، والجديدة والمحذوفة في آخر 7 أيام، ووقت آخر تحديث. مجانًا.

* — معامل إلزامي

أمثلة الشيفرة

# curl — one app
curl -H "X-API-Key: $KEY" "https://apkapi.com/api/v1/app?id=org.telegram.messenger"

# curl — puzzle games with 10M+ installs, best rated first
curl -H "X-API-Key: $KEY" "https://apkapi.com/api/v1/search?category=GAME_PUZZLE&min_installs=10000000&sort=score"

# curl — up to 100 apps in one call (POST, one package per line)
curl -H "X-API-Key: $KEY" --data-binary $'com.whatsapp\norg.telegram.messenger' "https://apkapi.com/api/v1/apps"
# Python — apps removed from Google Play this week
import os, requests
r = requests.get("https://apkapi.com/api/v1/removed",
                 params={"since": "2026-10-20", "min_installs": 100000, "per": 100},
                 headers={"X-API-Key": os.environ["KEY"]}, timeout=30)
r.raise_for_status()
data = r.json()
for app in data["results"]:
    print(app["removed_seen_at"], app["id"], app["installs"]["label"])
print("credits left:", data["_credits"]["available"])
// Node.js 18+ (على الخادم، لا في المتصفح)
const res = await fetch("https://apkapi.com/api/v1/developer?id=5191370068110375942", { headers: { "X-API-Key": process.env.KEY } });
const d = await res.json();
if (!d.ok) throw new Error(d.error);
console.log(d.developer.name, d.developer.apps, d.developer.total_installs);
// PHP
$ch = curl_init('https://apkapi.com/api/v1/keywords?lang=en&q=vpn&per=50');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['X-API-Key: ' . getenv('KEY')]]);
$d = json_decode(curl_exec($ch), true);
foreach ($d['results'] as $k) echo $k['keyword'], ' — ', $k['apps'], PHP_EOL;

جرّب

يمكنك إنشاء مفتاح في حسابك. يُرسل الطلب مباشرة من متصفحك. لا يُخزَّن المفتاح في أي مكان ويختفي بعد إعادة تحميل الصفحة. تستهلك الطلبات من وحدة التحكم الأرصدة مثل غيرها.