{
    "openapi": "3.1.0",
    "info": {
        "title": "APK API",
        "version": "1.0.0",
        "description": "Google Play data API: 4 million apps (live and removed), developers, new releases, removals and title keywords. JSON, UTF-8, CORS enabled.\n\nEvery call costs 0–3 credits regardless of the number of rows (up to 100); /apps costs 1 credit per app. Plan credits are used first, then the prepaid balance; if a request fails on our side, the credits are returned. Remaining credits are in the `_credits` field of every response.\n\nDocumentation: https://apkapi.com/api-docs.php",
        "contact": {
            "url": "https://apkapi.com/api-docs.php"
        },
        "termsOfService": "https://apkapi.com/legal/terms.php"
    },
    "servers": [
        {
            "url": "https://apkapi.com/api/v1"
        }
    ],
    "security": [
        {
            "ApiKeyHeader": []
        },
        {
            "BearerAuth": []
        }
    ],
    "tags": [
        {
            "name": "Apps"
        },
        {
            "name": "Desarrolladores"
        },
        {
            "name": "Cambios en la tienda"
        },
        {
            "name": "Mercado"
        }
    ],
    "paths": {
        "/account": {
            "get": {
                "operationId": "account",
                "tags": [
                    "Account"
                ],
                "summary": "Your plan, plan credits and balance, the credit reset date and the per-minute limit.",
                "description": "Free: no credits are charged.",
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Ok"
                    },
                    "401": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/app": {
            "get": {
                "operationId": "app",
                "tags": [
                    "Apps"
                ],
                "summary": "La ficha completa de la app: título, descripción, novedades, instalaciones (umbral y número exacto), valoración, número de valoraciones y reseñas, distribución de estrellas, precio, compras, anuncios, categoría, clasificación por edad, versión, Android mínimo, fechas de lanzamiento y actualización, icono, capturas, vídeo, desarrollador y su sitio. Para las eliminadas: los últimos datos guardados y la fecha de desaparición.",
                "description": "La ficha completa de la app: título, descripción, novedades, instalaciones (umbral y número exacto), valoración, número de valoraciones y reseñas, distribución de estrellas, precio, compras, anuncios, categoría, clasificación por edad, versión, Android mínimo, fechas de lanzamiento y actualización, icono, capturas, vídeo, desarrollador y su sitio. Para las eliminadas: los últimos datos guardados y la fecha de desaparición.\n\nCost: 1 credit per call.",
                "x-credits": 1,
                "parameters": [
                    {
                        "name": "id",
                        "in": "query",
                        "required": true,
                        "description": "nombre de paquete de la app",
                        "schema": {
                            "type": "string"
                        },
                        "example": "com.whatsapp"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Ok"
                    },
                    "400": {
                        "$ref": "#/components/responses/Error"
                    },
                    "401": {
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "$ref": "#/components/responses/Error"
                    },
                    "502": {
                        "$ref": "#/components/responses/Error"
                    },
                    "503": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/apps": {
            "get": {
                "operationId": "apps",
                "tags": [
                    "Apps"
                ],
                "summary": "Hasta 100 apps en una solicitud: GET ?ids=a,b,c o POST con la lista en el cuerpo (una por línea o JSON {\"ids\": […]}). 1 crédito por app; las que no encontramos vuelven en not_found.",
                "description": "Hasta 100 apps en una solicitud: GET ?ids=a,b,c o POST con la lista en el cuerpo (una por línea o JSON {\"ids\": […]}). 1 crédito por app; las que no encontramos vuelven en not_found.\n\nCost: 1 credit per app.",
                "x-credits": 1,
                "parameters": [
                    {
                        "name": "ids",
                        "in": "query",
                        "required": true,
                        "description": "nombres de paquete separados por comas, hasta 100",
                        "schema": {
                            "type": "string"
                        },
                        "example": "com.whatsapp,org.telegram.messenger"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Ok"
                    },
                    "400": {
                        "$ref": "#/components/responses/Error"
                    },
                    "401": {
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "$ref": "#/components/responses/Error"
                    },
                    "502": {
                        "$ref": "#/components/responses/Error"
                    },
                    "503": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "post": {
                "operationId": "apps_post",
                "tags": [
                    "Apps"
                ],
                "summary": "Same as GET, with package names in the request body (one per line, or JSON {\"ids\": [...]}).",
                "description": "Hasta 100 apps en una solicitud: GET ?ids=a,b,c o POST con la lista en el cuerpo (una por línea o JSON {\"ids\": […]}). 1 crédito por app; las que no encontramos vuelven en not_found.\n\nCost: 1 credit per app.",
                "x-credits": 1,
                "parameters": [],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Ok"
                    },
                    "400": {
                        "$ref": "#/components/responses/Error"
                    },
                    "401": {
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "$ref": "#/components/responses/Error"
                    },
                    "502": {
                        "$ref": "#/components/responses/Error"
                    },
                    "503": {
                        "$ref": "#/components/responses/Error"
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "text/plain": {
                            "schema": {
                                "type": "string"
                            },
                            "example": "com.whatsapp\norg.telegram.messenger"
                        }
                    }
                }
            }
        },
        "/search": {
            "get": {
                "operationId": "search",
                "tags": [
                    "Apps"
                ],
                "summary": "Búsqueda y filtros en toda la base. Se necesita al menos un filtro. Sin q, se ordena por instalaciones.",
                "description": "Búsqueda y filtros en toda la base. Se necesita al menos un filtro. Sin q, se ordena por instalaciones.\n\nCost: 2 credits per call.",
                "x-credits": 2,
                "parameters": [
                    {
                        "name": "q",
                        "in": "query",
                        "required": false,
                        "description": "palabras a buscar en el título, la descripción y el nombre del desarrollador",
                        "schema": {
                            "type": "string"
                        },
                        "example": "photo editor"
                    },
                    {
                        "name": "category",
                        "in": "query",
                        "required": false,
                        "description": "ID de categoría, p. ej. GAME_PUZZLE (ver /v1/categories)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "developer_id",
                        "in": "query",
                        "required": false,
                        "description": "ID del desarrollador en Google Play",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "min_installs",
                        "in": "query",
                        "required": false,
                        "description": "mínimo de instalaciones (umbrales de Google Play: 1000, 10000…)",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "max_installs",
                        "in": "query",
                        "required": false,
                        "description": "máximo de instalaciones",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "min_score",
                        "in": "query",
                        "required": false,
                        "description": "valoración mínima, 0–5",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "min_ratings",
                        "in": "query",
                        "required": false,
                        "description": "mínimo de valoraciones",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "free",
                        "in": "query",
                        "required": false,
                        "description": "true — solo gratis, false — solo de pago",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "true",
                                "false"
                            ]
                        }
                    },
                    {
                        "name": "ads",
                        "in": "query",
                        "required": false,
                        "description": "true — con anuncios, false — sin",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "true",
                                "false"
                            ]
                        }
                    },
                    {
                        "name": "iap",
                        "in": "query",
                        "required": false,
                        "description": "true — con compras en la app",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "true",
                                "false"
                            ]
                        }
                    },
                    {
                        "name": "lang",
                        "in": "query",
                        "required": false,
                        "description": "idioma del título, código ISO: en, de, pt…",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "released_from",
                        "in": "query",
                        "required": false,
                        "description": "lanzadas desde esta fecha, YYYY-MM-DD",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "released_to",
                        "in": "query",
                        "required": false,
                        "description": "lanzadas hasta esta fecha inclusive",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "updated_from",
                        "in": "query",
                        "required": false,
                        "description": "actualizadas desde esta fecha",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "updated_to",
                        "in": "query",
                        "required": false,
                        "description": "actualizadas hasta esta fecha inclusive",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "required": false,
                        "description": "live (en la tienda, por defecto), removed o all",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "live",
                                "removed",
                                "all"
                            ]
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "required": false,
                        "description": "relevance | installs | real_installs | score | ratings | reviews | released | updated | price",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "required": false,
                        "description": "desc | asc",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "desc",
                                "asc"
                            ]
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "página, desde 1",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per",
                        "in": "query",
                        "required": false,
                        "description": "filas por página, 1–100 (por defecto 20)",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        },
                        "example": 20
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Ok"
                    },
                    "400": {
                        "$ref": "#/components/responses/Error"
                    },
                    "401": {
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "$ref": "#/components/responses/Error"
                    },
                    "502": {
                        "$ref": "#/components/responses/Error"
                    },
                    "503": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/suggest": {
            "get": {
                "operationId": "suggest",
                "tags": [
                    "Apps"
                ],
                "summary": "Sugerencias por el inicio del título: las 10 coincidencias más populares. Gratis.",
                "description": "Sugerencias por el inicio del título: las 10 coincidencias más populares. Gratis.\n\nCost: 0 credits per call.",
                "x-credits": 0,
                "parameters": [
                    {
                        "name": "q",
                        "in": "query",
                        "required": true,
                        "description": "inicio del título, 2+ caracteres",
                        "schema": {
                            "type": "string"
                        },
                        "example": "whats"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Ok"
                    },
                    "400": {
                        "$ref": "#/components/responses/Error"
                    },
                    "401": {
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "$ref": "#/components/responses/Error"
                    },
                    "502": {
                        "$ref": "#/components/responses/Error"
                    },
                    "503": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/developer": {
            "get": {
                "operationId": "developer",
                "tags": [
                    "Desarrolladores"
                ],
                "summary": "Un desarrollador y todas sus apps: número (en la tienda y eliminadas), instalaciones totales, valoración media, primer lanzamiento, categorías, sitio. En el plan Business: email, teléfono, dirección y razón social.",
                "description": "Un desarrollador y todas sus apps: número (en la tienda y eliminadas), instalaciones totales, valoración media, primer lanzamiento, categorías, sitio. En el plan Business: email, teléfono, dirección y razón social.\n\nCost: 2 credits per call.",
                "x-credits": 2,
                "parameters": [
                    {
                        "name": "id",
                        "in": "query",
                        "required": false,
                        "description": "ID del desarrollador (de la ficha de una app: developer.id)",
                        "schema": {
                            "type": "string"
                        },
                        "example": "5191370068110375942"
                    },
                    {
                        "name": "name",
                        "in": "query",
                        "required": false,
                        "description": "o el nombre exacto del desarrollador",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "required": false,
                        "description": "all (por defecto), live o removed",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "live",
                                "removed",
                                "all"
                            ]
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "required": false,
                        "description": "relevance | installs | real_installs | score | ratings | reviews | released | updated | price",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "página, desde 1",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per",
                        "in": "query",
                        "required": false,
                        "description": "filas por página, 1–100 (por defecto 20)",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        },
                        "example": 20
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Ok"
                    },
                    "400": {
                        "$ref": "#/components/responses/Error"
                    },
                    "401": {
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "$ref": "#/components/responses/Error"
                    },
                    "502": {
                        "$ref": "#/components/responses/Error"
                    },
                    "503": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/new": {
            "get": {
                "operationId": "new",
                "tags": [
                    "Cambios en la tienda"
                ],
                "summary": "Apps nuevas por fecha del primer lanzamiento, las más recientes primero.",
                "description": "Apps nuevas por fecha del primer lanzamiento, las más recientes primero.\n\nCost: 2 credits per call.",
                "x-credits": 2,
                "parameters": [
                    {
                        "name": "since",
                        "in": "query",
                        "required": false,
                        "description": "desde esta fecha, YYYY-MM-DD (por defecto, hace 7 días)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "until",
                        "in": "query",
                        "required": false,
                        "description": "hasta esta fecha inclusive",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "category",
                        "in": "query",
                        "required": false,
                        "description": "ID de categoría, p. ej. GAME_PUZZLE (ver /v1/categories)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "min_installs",
                        "in": "query",
                        "required": false,
                        "description": "mínimo de instalaciones (umbrales de Google Play: 1000, 10000…)",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "lang",
                        "in": "query",
                        "required": false,
                        "description": "idioma del título, código ISO: en, de, pt…",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "required": false,
                        "description": "relevance | installs | real_installs | score | ratings | reviews | released | updated | price",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "página, desde 1",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per",
                        "in": "query",
                        "required": false,
                        "description": "filas por página, 1–100 (por defecto 20)",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        },
                        "example": 20
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Ok"
                    },
                    "400": {
                        "$ref": "#/components/responses/Error"
                    },
                    "401": {
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "$ref": "#/components/responses/Error"
                    },
                    "502": {
                        "$ref": "#/components/responses/Error"
                    },
                    "503": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/removed": {
            "get": {
                "operationId": "removed",
                "tags": [
                    "Cambios en la tienda"
                ],
                "summary": "Apps que desaparecieron de Google Play (ausentes en los 19 países que comprobamos), por fecha de desaparición. La ficha conserva los últimos datos.",
                "description": "Apps que desaparecieron de Google Play (ausentes en los 19 países que comprobamos), por fecha de desaparición. La ficha conserva los últimos datos.\n\nCost: 2 credits per call.",
                "x-credits": 2,
                "parameters": [
                    {
                        "name": "since",
                        "in": "query",
                        "required": false,
                        "description": "desde esta fecha, YYYY-MM-DD (por defecto, hace 7 días)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "until",
                        "in": "query",
                        "required": false,
                        "description": "hasta esta fecha inclusive",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "category",
                        "in": "query",
                        "required": false,
                        "description": "ID de categoría, p. ej. GAME_PUZZLE (ver /v1/categories)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "min_installs",
                        "in": "query",
                        "required": false,
                        "description": "mínimo de instalaciones (umbrales de Google Play: 1000, 10000…)",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "required": false,
                        "description": "removed_at | installs | score",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "página, desde 1",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per",
                        "in": "query",
                        "required": false,
                        "description": "filas por página, 1–100 (por defecto 20)",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        },
                        "example": 20
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Ok"
                    },
                    "400": {
                        "$ref": "#/components/responses/Error"
                    },
                    "401": {
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "$ref": "#/components/responses/Error"
                    },
                    "502": {
                        "$ref": "#/components/responses/Error"
                    },
                    "503": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/keywords": {
            "get": {
                "operationId": "keywords",
                "tags": [
                    "Mercado"
                ],
                "summary": "Palabras y frases de títulos de apps por idioma: cuántas apps y desarrolladores las usan, cuántas son fuertes (100 mil+ instalaciones), instalaciones totales, cuota del líder y una puntuación de oportunidad.",
                "description": "Palabras y frases de títulos de apps por idioma: cuántas apps y desarrolladores las usan, cuántas son fuertes (100 mil+ instalaciones), instalaciones totales, cuota del líder y una puntuación de oportunidad.\n\nCost: 2 credits per call.",
                "x-credits": 2,
                "parameters": [
                    {
                        "name": "lang",
                        "in": "query",
                        "required": false,
                        "description": "idioma, por defecto en",
                        "schema": {
                            "type": "string"
                        },
                        "example": "en"
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "required": false,
                        "description": "palabra o frase",
                        "schema": {
                            "type": "string"
                        },
                        "example": "vpn"
                    },
                    {
                        "name": "phrase",
                        "in": "query",
                        "required": false,
                        "description": "true — solo frases de dos palabras, false — solo palabras sueltas",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "true",
                                "false"
                            ]
                        }
                    },
                    {
                        "name": "min_apps",
                        "in": "query",
                        "required": false,
                        "description": "mínimo de apps",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "max_apps",
                        "in": "query",
                        "required": false,
                        "description": "máximo de apps",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "required": false,
                        "description": "opportunity | apps | installs | strong | devs | max_installs",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "required": false,
                        "description": "desc | asc",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "desc",
                                "asc"
                            ]
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "página, desde 1",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per",
                        "in": "query",
                        "required": false,
                        "description": "filas por página, 1–100 (por defecto 20)",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        },
                        "example": 20
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Ok"
                    },
                    "400": {
                        "$ref": "#/components/responses/Error"
                    },
                    "401": {
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "$ref": "#/components/responses/Error"
                    },
                    "502": {
                        "$ref": "#/components/responses/Error"
                    },
                    "503": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/categories": {
            "get": {
                "operationId": "categories",
                "tags": [
                    "Mercado"
                ],
                "summary": "Todas las categorías con número de apps e instalaciones totales. Gratis.",
                "description": "Todas las categorías con número de apps e instalaciones totales. Gratis.\n\nCost: 0 credits per call.",
                "x-credits": 0,
                "parameters": [
                    {
                        "name": "status",
                        "in": "query",
                        "required": false,
                        "description": "live (en la tienda, por defecto), removed o all",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "live",
                                "removed",
                                "all"
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Ok"
                    },
                    "400": {
                        "$ref": "#/components/responses/Error"
                    },
                    "401": {
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "$ref": "#/components/responses/Error"
                    },
                    "502": {
                        "$ref": "#/components/responses/Error"
                    },
                    "503": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/free_domains": {
            "get": {
                "operationId": "free_domains",
                "tags": [
                    "Mercado"
                ],
                "summary": "Apps cuyo dominio del sitio del desarrollador está libre para registrar, con la popularidad de la app. Plan Pro o superior.",
                "description": "Apps cuyo dominio del sitio del desarrollador está libre para registrar, con la popularidad de la app. Plan Pro o superior.\n\nCost: 3 credits per call. Plan: Pro or higher.",
                "x-credits": 3,
                "parameters": [
                    {
                        "name": "category",
                        "in": "query",
                        "required": false,
                        "description": "ID de categoría, p. ej. GAME_PUZZLE (ver /v1/categories)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "min_installs",
                        "in": "query",
                        "required": false,
                        "description": "mínimo de instalaciones (umbrales de Google Play: 1000, 10000…)",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        }
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "required": false,
                        "description": "live (en la tienda, por defecto), removed o all",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "live",
                                "removed",
                                "all"
                            ]
                        }
                    },
                    {
                        "name": "tld",
                        "in": "query",
                        "required": false,
                        "description": "zona de dominio, p. ej. com",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "required": false,
                        "description": "relevance | installs | real_installs | score | ratings | reviews | released | updated | price",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "página, desde 1",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per",
                        "in": "query",
                        "required": false,
                        "description": "filas por página, 1–100 (por defecto 20)",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        },
                        "example": 20
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Ok"
                    },
                    "400": {
                        "$ref": "#/components/responses/Error"
                    },
                    "401": {
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "$ref": "#/components/responses/Error"
                    },
                    "502": {
                        "$ref": "#/components/responses/Error"
                    },
                    "503": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/charts": {
            "get": {
                "operationId": "charts",
                "tags": [
                    "Mercado"
                ],
                "summary": "Un ranking de Google Play de un país y categoría: hasta 200 posiciones, cambio de puesto desde la captura anterior (change: cuántos puestos subió, \"new\" para las nuevas), icono e instalaciones.",
                "description": "Un ranking de Google Play de un país y categoría: hasta 200 posiciones, cambio de puesto desde la captura anterior (change: cuántos puestos subió, \"new\" para las nuevas), icono e instalaciones.\n\nCost: 2 credits per call.",
                "x-credits": 2,
                "parameters": [
                    {
                        "name": "country",
                        "in": "query",
                        "required": true,
                        "description": "país, código ISO: US, DE, BR…",
                        "schema": {
                            "type": "string"
                        },
                        "example": "US"
                    },
                    {
                        "name": "category",
                        "in": "query",
                        "required": true,
                        "description": "categoría, p. ej. GAME_PUZZLE",
                        "schema": {
                            "type": "string"
                        },
                        "example": "GAME_PUZZLE"
                    },
                    {
                        "name": "collection",
                        "in": "query",
                        "required": false,
                        "description": "free | paid | grossing",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "free",
                                "paid",
                                "grossing"
                            ]
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "página, desde 1",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per",
                        "in": "query",
                        "required": false,
                        "description": "filas por página, 1–100 (por defecto 20)",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        },
                        "example": 20
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Ok"
                    },
                    "400": {
                        "$ref": "#/components/responses/Error"
                    },
                    "401": {
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "$ref": "#/components/responses/Error"
                    },
                    "502": {
                        "$ref": "#/components/responses/Error"
                    },
                    "503": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/rankings": {
            "get": {
                "operationId": "rankings",
                "tags": [
                    "Mercado"
                ],
                "summary": "Todos los rankings en los que está la app en la última captura: país, categoría, colección, puesto; número de rankings y países y mejor puesto.",
                "description": "Todos los rankings en los que está la app en la última captura: país, categoría, colección, puesto; número de rankings y países y mejor puesto.\n\nCost: 1 credit per call.",
                "x-credits": 1,
                "parameters": [
                    {
                        "name": "id",
                        "in": "query",
                        "required": true,
                        "description": "nombre de paquete de la app",
                        "schema": {
                            "type": "string"
                        },
                        "example": "com.whatsapp"
                    },
                    {
                        "name": "country",
                        "in": "query",
                        "required": false,
                        "description": "solo un país",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "collection",
                        "in": "query",
                        "required": false,
                        "description": "free | paid | grossing",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "free",
                                "paid",
                                "grossing"
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Ok"
                    },
                    "400": {
                        "$ref": "#/components/responses/Error"
                    },
                    "401": {
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "$ref": "#/components/responses/Error"
                    },
                    "502": {
                        "$ref": "#/components/responses/Error"
                    },
                    "503": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/availability": {
            "get": {
                "operationId": "availability",
                "tags": [
                    "Mercado"
                ],
                "summary": "Países donde la app está disponible en Google Play (según hreflang del sitemap de la tienda). Con 190+ países se devuelve worldwide = true sin lista.",
                "description": "Países donde la app está disponible en Google Play (según hreflang del sitemap de la tienda). Con 190+ países se devuelve worldwide = true sin lista.\n\nCost: 1 credit per call.",
                "x-credits": 1,
                "parameters": [
                    {
                        "name": "id",
                        "in": "query",
                        "required": true,
                        "description": "nombre de paquete de la app",
                        "schema": {
                            "type": "string"
                        },
                        "example": "com.whatsapp"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Ok"
                    },
                    "400": {
                        "$ref": "#/components/responses/Error"
                    },
                    "401": {
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "$ref": "#/components/responses/Error"
                    },
                    "502": {
                        "$ref": "#/components/responses/Error"
                    },
                    "503": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/markets": {
            "get": {
                "operationId": "markets",
                "tags": [
                    "Mercado"
                ],
                "summary": "Competencia por mercado según los rankings gratuitos: umbral de entrada al top 100 y top 200 (instalaciones de la app en esa posición), cuota de apps nuevas (12 meses) y locales (≤3 países) en el top y tamaño del mercado local. Sin parámetros: todos los países; country: las categorías de un país; category: una categoría en todos los países.",
                "description": "Competencia por mercado según los rankings gratuitos: umbral de entrada al top 100 y top 200 (instalaciones de la app en esa posición), cuota de apps nuevas (12 meses) y locales (≤3 países) en el top y tamaño del mercado local. Sin parámetros: todos los países; country: las categorías de un país; category: una categoría en todos los países.\n\nCost: 1 credit per call.",
                "x-credits": 1,
                "parameters": [
                    {
                        "name": "country",
                        "in": "query",
                        "required": false,
                        "description": "país, código ISO",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "category",
                        "in": "query",
                        "required": false,
                        "description": "ID de categoría, p. ej. GAME_PUZZLE (ver /v1/categories)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "required": false,
                        "description": "entry100 | entry200 | new_share | local_share | local_apps | local_installs | local_new",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "required": false,
                        "description": "desc | asc",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "desc",
                                "asc"
                            ]
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "página, desde 1",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per",
                        "in": "query",
                        "required": false,
                        "description": "filas por página, 1–100 (por defecto 20)",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        },
                        "example": 20
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Ok"
                    },
                    "400": {
                        "$ref": "#/components/responses/Error"
                    },
                    "401": {
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "$ref": "#/components/responses/Error"
                    },
                    "502": {
                        "$ref": "#/components/responses/Error"
                    },
                    "503": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/stats": {
            "get": {
                "operationId": "stats",
                "tags": [
                    "Mercado"
                ],
                "summary": "Tamaño de la base: apps en la tienda y eliminadas, desarrolladores, nuevas y eliminadas en 7 días, hora de la última actualización. Gratis.",
                "description": "Tamaño de la base: apps en la tienda y eliminadas, desarrolladores, nuevas y eliminadas en 7 días, hora de la última actualización. Gratis.\n\nCost: 0 credits per call.",
                "x-credits": 0,
                "parameters": [],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Ok"
                    },
                    "400": {
                        "$ref": "#/components/responses/Error"
                    },
                    "401": {
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "$ref": "#/components/responses/Error"
                    },
                    "502": {
                        "$ref": "#/components/responses/Error"
                    },
                    "503": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/health": {
            "get": {
                "operationId": "health",
                "tags": [
                    "Account"
                ],
                "summary": "Service status. No key required.",
                "security": [],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Ok"
                    }
                }
            }
        }
    },
    "components": {
        "securitySchemes": {
            "ApiKeyHeader": {
                "type": "apiKey",
                "in": "header",
                "name": "X-API-Key"
            },
            "BearerAuth": {
                "type": "http",
                "scheme": "bearer"
            }
        },
        "schemas": {
            "Credits": {
                "type": "object",
                "properties": {
                    "cost": {
                        "type": "integer",
                        "description": "credits this request cost"
                    },
                    "remaining": {
                        "type": "integer",
                        "description": "credits left (plan + balance)"
                    }
                }
            },
            "Ok": {
                "type": "object",
                "required": [
                    "ok"
                ],
                "additionalProperties": true,
                "properties": {
                    "ok": {
                        "type": "boolean",
                        "const": true
                    },
                    "results": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "total": {
                        "type": "integer"
                    },
                    "page": {
                        "type": "integer"
                    },
                    "per": {
                        "type": "integer"
                    },
                    "pages": {
                        "type": "integer"
                    },
                    "_credits": {
                        "$ref": "#/components/schemas/Credits"
                    }
                }
            },
            "Error": {
                "type": "object",
                "required": [
                    "ok",
                    "error",
                    "code"
                ],
                "properties": {
                    "ok": {
                        "type": "boolean",
                        "const": false
                    },
                    "error": {
                        "type": "string"
                    },
                    "code": {
                        "type": "string",
                        "examples": [
                            "missing_api_key",
                            "invalid_api_key",
                            "account_blocked",
                            "insufficient_credits",
                            "rate_limited",
                            "invalid_param",
                            "invalid_request",
                            "not_found",
                            "upstream_error",
                            "service_unavailable"
                        ]
                    }
                }
            }
        },
        "responses": {
            "Ok": {
                "description": "Success",
                "headers": {
                    "X-Cache": {
                        "description": "HIT — served from cache, MISS — fresh query to the database",
                        "schema": {
                            "type": "string"
                        }
                    }
                },
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Ok"
                        }
                    }
                }
            },
            "Error": {
                "description": "Error",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            }
        }
    }
}