Documentation de Fresh on Play

API REST de données Google Play : 4 millions d'applications, développeurs, applications nouvelles et supprimées, mots-clés des titres. Format JSON, encodage UTF-8, CORS activé.

Démarrage rapide

URL de base : https://apiapk.top/api/v1. Inscrivez-vous, créez une clé API dans votre compte et envoyez votre première requête :

Description de l'API lisible par machine : OpenAPI 3.1 · collection Postman — importez-la dans Postman, Insomnia ou un générateur de clients (openapi-generator) pour obtenir un SDK prêt à l'emploi dans votre langage.

curl -H "X-API-Key: VOTRE_CLE" "https://apiapk.top/api/v1/app?id=com.whatsapp"

Les données couvrent plus de 4 millions d'applications Google Play de la vitrine américaine en anglais (d'un autre pays si l'application n'est pas disponible aux États-Unis), actualisées chaque nuit. Les applications qui disparaissent du store restent dans la base avec leurs dernières données.

Authentification

Chaque requête, sauf /v1/health, doit inclure la clé API dans un en-tête :

X-API-Key: ak_live_…

Également accepté : Authorization: Bearer …. Il est interdit de passer la clé dans les paramètres d'URL : elle se retrouverait dans les journaux et l'historique du navigateur.

Gardez la clé sur votre serveur. Si vous l'intégrez au JavaScript de la page, n'importe quel visiteur peut la copier. Faites passer les requêtes du frontend par votre backend.

Crédits et limites

Chaque appel coûte 0 à 3 crédits selon le endpoint, quel que soit le nombre de lignes de la réponse (jusqu'à 100) ; l'appel groupé apps coûte 1 crédit par application. Les crédits de l'offre du mois en cours sont utilisés en premier, puis le solde prépayé. Si une requête échoue de notre côté, les crédits sont restitués. Offres et packs

En-têteSignification
X-Credits-Costcrédits coûtés par cette requête
X-Credits-Remainingcrédits restants (offre + solde)
X-CacheHIT — servi depuis le cache (plus rapide), MISS — nouvelle requête à l'index
X-RateLimit-Limit / -Remainingla limite par minute de la clé et ce qu'il reste
X-Planfree | pro | scale | business

Vos crédits restants figurent aussi dans le champ _credits de chaque réponse et dans /v1/account (gratuit).

Format de réponse et erreurs

Chaque réponse contient le champ ok. Les listes contiennent results, total, page, per, pages. Erreur : ok = false, error est l'explication, code un code lisible par machine. Les dates sont en 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. …" }
HTTPcodeQuand
400invalid_param, invalid_requestparamètre invalide ou manquant
401missing_api_key, invalid_api_keypas de clé, ou clé révoquée
402insufficient_creditscrédits insuffisants — rechargez ou passez à une offre supérieure
403account_blocked, plan_requiredle compte est bloqué ou l'endpoint nécessite une offre supérieure
404not_foundl'application ou le développeur n'est pas dans la base, ou l'endpoint est inconnu
429rate_limitedlimite de requêtes par minute dépassée
503service_unavailableproblème temporaire de la base — réessayez plus tard ; aucun crédit n'est débité

Endpoints

Tous les endpoints sont GET /api/v1/{nom}. Pagination : page (à partir de 1) et per (1–100), jusqu'au 10 000e résultat. Tri : sort + order=asc|desc.

GET/api/v1/accountgratuit

Votre offre, les crédits de l'offre et le solde, la date de renouvellement des crédits et la limite par minute.

Applications
GET/api/v1/app 1 cr.

La fiche complète de l'application : titre, description, nouveautés, installations (palier et nombre exact), note, nombre de notes et d'avis, répartition des étoiles, prix, achats intégrés, publicités, catégorie, classification, version, Android minimal, dates de sortie et de mise à jour, icône, captures, vidéo, développeur et son site. Pour les applications supprimées : les dernières données enregistrées et la date de disparition.

id *nom de package de l'application
GET · POST/api/v1/apps 1 crédit par application

Jusqu'à 100 applications en un appel : GET ?ids=a,b,c ou POST avec la liste dans le corps (une par ligne ou JSON {"ids": […]}). 1 crédit par application ; celles introuvables reviennent dans not_found.

ids *noms de package séparés par des virgules, jusqu'à 100
GET/api/v1/suggest gratuit

Suggestions selon le début du titre : les 10 résultats les plus populaires. Gratuit.

q *début du titre, 2 caractères minimum
Développeurs
GET/api/v1/developer 2 cr.

Un développeur et toutes ses applications : nombre (dans le store et supprimées), installations totales, note moyenne, première sortie, catégories, site. Avec l'offre Business : e-mail, téléphone, adresse et raison sociale.

idID du développeur (depuis une fiche : developer.id)
nameou le nom exact du développeur
statusall (par défaut), live ou removed
sortrelevance | installs | real_installs | score | ratings | reviews | released | updated | price
pagepage, à partir de 1
perlignes par page, 1–100 (par défaut 20)
Changements dans le store
GET/api/v1/new 2 cr.

Nouvelles applications par date de première sortie, les plus récentes d'abord.

sinceà partir de cette date, YYYY-MM-DD (par défaut : il y a 7 jours)
untiljusqu'à cette date incluse
categoryID de catégorie, p. ex. GAME_PUZZLE (voir /v1/categories)
min_installsinstallations minimum (paliers Google Play : 1000, 10000…)
langlangue du titre, code ISO : en, de, pt…
sortrelevance | installs | real_installs | score | ratings | reviews | released | updated | price
pagepage, à partir de 1
perlignes par page, 1–100 (par défaut 20)
GET/api/v1/removed 2 cr.

Applications disparues de Google Play (absentes des 19 pays que nous vérifions), par date de disparition. La fiche conserve les dernières données.

sinceà partir de cette date, YYYY-MM-DD (par défaut : il y a 7 jours)
untiljusqu'à cette date incluse
categoryID de catégorie, p. ex. GAME_PUZZLE (voir /v1/categories)
min_installsinstallations minimum (paliers Google Play : 1000, 10000…)
sortremoved_at | installs | score
pagepage, à partir de 1
perlignes par page, 1–100 (par défaut 20)
Marché
GET/api/v1/keywords 2 cr.

Mots et expressions des titres d'applications par langue : nombre d'applications et de développeurs qui les utilisent, combien sont fortes (100 k+ installations), installations totales, part du leader et un score d'opportunité.

langlangue, par défaut en
qmot ou expression
phrasetrue — expressions de deux mots uniquement, false — mots seuls uniquement
min_appsapplications minimum
max_appsapplications maximum
sortopportunity | apps | installs | strong | devs | max_installs
orderdesc | asc
pagepage, à partir de 1
perlignes par page, 1–100 (par défaut 20)
GET/api/v1/categories gratuit

Toutes les catégories avec le nombre d'applications et les installations totales. Gratuit.

statuslive (dans le store, par défaut), removed ou all
GET/api/v1/free_domains 3 cr.Pro+

Applications dont le domaine du site du développeur est libre à l'enregistrement, avec la popularité de l'application. Offre Pro et supérieure.

categoryID de catégorie, p. ex. GAME_PUZZLE (voir /v1/categories)
min_installsinstallations minimum (paliers Google Play : 1000, 10000…)
statuslive (dans le store, par défaut), removed ou all
tldextension de domaine, p. ex. com
sortrelevance | installs | real_installs | score | ratings | reviews | released | updated | price
pagepage, à partir de 1
perlignes par page, 1–100 (par défaut 20)
GET/api/v1/charts 2 cr.

Un classement Google Play pour un pays et une catégorie : jusqu'à 200 positions, évolution depuis le relevé précédent (change : de combien de places elle est montée, "new" pour les nouvelles entrées), icône et installations.

country *pays, code ISO : US, DE, BR…
category *catégorie, p. ex. GAME_PUZZLE
collectionfree | paid | grossing
pagepage, à partir de 1
perlignes par page, 1–100 (par défaut 20)
GET/api/v1/rankings 1 cr.

Tous les classements où figure l'application dans le dernier relevé : pays, catégorie, collection, position ; nombre de classements et de pays, meilleure position.

id *nom de package de l'application
countryun seul pays
collectionfree | paid | grossing
GET/api/v1/availability 1 cr.

Pays où l'application est disponible sur Google Play (d'après le hreflang du sitemap du store). Au-delà de 190 pays, worldwide = true est renvoyé sans liste.

id *nom de package de l'application
GET/api/v1/markets 1 cr.

Concurrence des marchés selon les classements gratuits : seuil d'entrée du top 100 et du top 200 (installations de l'application à cette position), part des applications nouvelles (12 mois) et locales (≤3 pays) dans le top, taille du marché local. Sans paramètre : tous les pays ; country : les catégories d'un pays ; category : une catégorie dans tous les pays.

countrypays, code ISO
categoryID de catégorie, p. ex. GAME_PUZZLE (voir /v1/categories)
sortentry100 | entry200 | new_share | local_share | local_apps | local_installs | local_new
orderdesc | asc
pagepage, à partir de 1
perlignes par page, 1–100 (par défaut 20)
GET/api/v1/stats gratuit

Taille de la base : applications dans le store et supprimées, développeurs, nouvelles et supprimées sur 7 jours, heure de la dernière mise à jour. Gratuit.

* — paramètre obligatoire

Exemples de code

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

# curl — puzzle games with 10M+ installs, best rated first
curl -H "X-API-Key: $KEY" "https://apiapk.top/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://apiapk.top/api/v1/apps"
# Python — apps removed from Google Play this week
import os, requests
r = requests.get("https://apiapk.top/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+ (sur le serveur — pas dans le navigateur)
const res = await fetch("https://apiapk.top/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://apiapk.top/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;

Essayer

Vous pouvez créer une clé dans votre compte. La requête part directement de votre navigateur. La clé n'est stockée nulle part et disparaît au rechargement de la page. Les requêtes depuis la console consomment des crédits comme les autres.