{"openapi":"3.1.0","info":{"title":"AppTierList API","version":"1.0","description":"Ranked iOS app lists by product type, from public App Store data. Read-only; nothing is purchasable. Index with field semantics at /api/v1. While the database is briefly unavailable an answer may be the last good copy: it then carries the X-Stale header and a top-level stale_copy object { served_at, built_at, reason } in the JSON body."},"servers":[{"url":"https://apptierlist.com/api/v1"}],"paths":{"/lists":{"get":{"summary":"All lists","parameters":[{"name":"status","in":"query","schema":{"type":"string","enum":["active","draft","archived","all"],"default":"active"}}],"responses":{"200":{"description":"catalogue","content":{"application/json":{"schema":{"type":"object","required":["schema_version","generated_at","data_as_of","count","tiered_app_count","lists"],"properties":{"schema_version":{"type":"string"},"generated_at":{"type":"string"},"data_version":{"type":"integer","description":"the oldest data version among the objects this answer read; the same number on the X-Data-Version header"},"attribution":{"type":"object","description":"Who the data belongs to and the terms of reuse (name, url, terms, licence).","additionalProperties":{"type":"string"}},"data_as_of":{"type":["string","null"]},"count":{"type":"integer"},"tiered_app_count":{"type":"integer","description":"distinct apps holding a tier in at least one active list, whatever the status filter"},"lists":{"type":"array","items":{"$ref":"#/components/schemas/ListSummary"}}}}}}}}}},"/lists/{slug}":{"get":{"summary":"One list with its ranking","parameters":[{"name":"compact","in":"query","schema":{"type":"string","enum":["1","true"]},"description":"members carry the compact app (no screenshots or file facts); the full app is at /apps/{key}"},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200},"description":"the first N members: ranked, then unranked, then under review"},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"list","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ListSummary"},{"type":"object","required":["schema_version","generated_at","data_as_of","subtypes","parent_list","scoring","members","unranked","under_review"],"properties":{"schema_version":{"type":"string"},"generated_at":{"type":"string"},"data_version":{"type":"integer","description":"the oldest data version among the objects this answer read; the same number on the X-Data-Version header"},"attribution":{"type":"object","description":"Who the data belongs to and the terms of reuse (name, url, terms, licence).","additionalProperties":{"type":"string"}},"data_as_of":{"type":["string","null"]},"subtypes":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}}}},"parent_list":{"type":["object","null"],"properties":{"slug":{"type":"string"},"name":{"type":"string"},"url":{"type":["string","null"],"description":"null while the parent list is not published"}}},"scoring":{"type":"object","properties":{"method":{"type":"string"},"components":{"type":"array","items":{"type":"string"}},"tiers":{"type":"string"},"recent_review_weight":{"type":"number"}}},"members":{"type":"array","items":{"$ref":"#/components/schemas/Member"}},"unranked":{"type":"array","description":"checked members with no tier: beyond the tiered top, or the list is under review","items":{"type":"object","properties":{"app":{"$ref":"#/components/schemas/ListApp"},"status":{"$ref":"#/components/schemas/MembershipStatus"},"score":{"type":"number"},"review_status":{"type":"string","enum":["checked"]}}}},"under_review":{"type":"array","description":"members not checked against the list yet, after every ranked and unranked one: no tier, no position","items":{"$ref":"#/components/schemas/UnderReview"}}}}]}}}},"404":{"description":"unknown slug"}}}},"/apps/{key}":{"get":{"summary":"One app","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"},"description":"app slug or app_store_id"}],"responses":{"200":{"description":"app","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/AppSummary"},{"type":"object","required":["schema_version","generated_at","data_as_of","description","facts","freshness","editorial","main_list","memberships","claim","history"],"properties":{"schema_version":{"type":"string"},"generated_at":{"type":"string"},"data_version":{"type":"integer","description":"the oldest data version among the objects this answer read; the same number on the X-Data-Version header"},"attribution":{"type":"object","description":"Who the data belongs to and the terms of reuse (name, url, terms, licence).","additionalProperties":{"type":"string"}},"data_as_of":{"type":["string","null"]},"description":{"type":"string"},"facts":{"type":"object","description":"everything else the App Store listing says; null: not read yet","required":["support_url","privacy_url","website_url","developer_id","developer_url","first_released","app_version","release_notes","rating_current_version","rating_count_current_version","star_counts","genres","languages","content_advisories","device_families","chart"],"properties":{"support_url":{"type":["string","null"],"description":"the developer's support page from the App Store (not verified)"},"privacy_url":{"type":["string","null"],"description":"the privacy policy linked on the App Store"},"website_url":{"type":["string","null"],"description":"the developer's website from the App Store"},"developer_id":{"type":["integer","null"]},"developer_url":{"type":["string","null"],"description":"the developer's site as listed on the App Store (not verified; see claim)"},"first_released":{"type":["string","null"]},"app_version":{"type":["string","null"]},"release_notes":{"type":["string","null"],"description":"the current version's What's New, first 1,500 characters"},"rating_current_version":{"type":["number","null"],"description":"the star rating Apple reports for the current version (US store). In practice Apple returns the same figure as the lifetime rating, so it adds nothing to rating"},"rating_count_current_version":{"type":["integer","null"]},"star_counts":{"type":["array","null"],"items":{"type":"integer"},"description":"US ratings per star, 1 to 5"},"genres":{"type":["array","null"],"items":{"type":"string"}},"languages":{"type":["array","null"],"items":{"type":"string"},"description":"ISO 639-1 codes, upper case"},"content_advisories":{"type":["array","null"],"items":{"type":"string"},"description":"Apple's reasons behind the age rating"},"device_families":{"type":["array","null"],"items":{"type":"string"}},"chart":{"type":["object","null"],"properties":{"name":{"type":"string"},"position":{"type":"integer"}}}}},"freshness":{"type":"object","description":"when each part of this record was last refreshed (ISO-8601 UTC); null: never yet","required":["apple_read_at","catalog_read_at","reviews_checked_at","summary_written_at","placed_at","scored_at"],"properties":{"apple_read_at":{"type":"string","description":"the App Store lookup: name, rating, price, version"},"catalog_read_at":{"type":["string","null"],"description":"the App Store catalog: devices, subtitle, links"},"reviews_checked_at":{"type":["string","null"],"description":"the newest App Store reviews"},"summary_written_at":{"type":["string","null"],"description":"the editorial summary"},"placed_at":{"type":["string","null"],"description":"the last category placement"},"scored_at":{"type":["string","null"],"description":"the newest score among the lists it is in"}}},"editorial":{"type":["object","null"]},"main_list":{"type":["string","null"],"description":"the list slug of the app's main job: the first category the placer marked primary on the current App Store listing; null when no read of the current listing marks one (never guessed). An app's alternatives belong to this job"},"memberships":{"type":"array","items":{"type":"object","required":["list","list_name","list_status","list_url","position","tier","score","components","status","review_status","list_ranking_status","confidence","judged_at"],"properties":{"list":{"type":"string"},"list_name":{"type":"string"},"list_status":{"$ref":"#/components/schemas/ListStatus"},"list_url":{"type":["string","null"],"description":"null for a draft list (no page)"},"review_status":{"$ref":"#/components/schemas/ReviewStatus"},"list_ranking_status":{"$ref":"#/components/schemas/RankingStatus"},"position":{"type":["integer","null"]},"tier":{"type":["string","null"]},"score":{"type":"number"},"components":{"$ref":"#/components/schemas/Components"},"status":{"$ref":"#/components/schemas/MembershipStatus"},"confidence":{"$ref":"#/components/schemas/Confidence"},"judged_at":{"type":["string","null"]}}}},"claim":{"type":"object","properties":{"status":{"type":"string","enum":["none","pending","claimed","verified"]},"verified":{"type":"boolean"},"site_url":{"type":["string","null"]},"verified_via":{"type":["string","null"],"enum":["email","promo","page",null],"description":"how the maker proved the app: a code to the listing's email, a token in the promotional text, or a page on their site"},"verified_domain":{"type":["string","null"]}}},"history":{"type":"array","items":{"$ref":"#/components/schemas/Change"}}}}]}}}},"404":{"description":"unknown app"}}}},"/apps/{key}/explain":{"get":{"summary":"Why an app ranks where it does","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"explanation","content":{"application/json":{"schema":{"type":"object","required":["schema_version","generated_at","app","method","lists","history"],"properties":{"schema_version":{"type":"string"},"generated_at":{"type":"string"},"data_version":{"type":"integer","description":"the oldest data version among the objects this answer read; the same number on the X-Data-Version header"},"attribution":{"type":"object","description":"Who the data belongs to and the terms of reuse (name, url, terms, licence).","additionalProperties":{"type":"string"}},"app":{"$ref":"#/components/schemas/AppSummary"},"method":{"type":"string"},"lists":{"type":"array","items":{"type":"object","properties":{"list":{"type":"string"},"list_name":{"type":"string"},"status":{"type":"string","enum":["active","contested","removed"]},"review_status":{"type":["string","null"],"enum":["checked","under_review","rejected",null],"description":"as ReviewStatus for a live membership; for a removed one, rejected (the list check said no) or null"},"position":{"type":["integer","null"]},"tier":{"type":["string","null"]},"score":{"type":"number"},"components":{"$ref":"#/components/schemas/Components"},"ranks":{"type":"array","items":{"$ref":"#/components/schemas/Rank"}},"verdicts":{"type":"array","items":{"type":"object","properties":{"verdict":{"type":"string","enum":["keep","reject","unknown","invalid"]},"reason":{"type":"string"},"verifier":{"type":"string"},"decided_at":{"type":"string"},"attempts":{"type":"integer"},"current":{"type":"boolean","description":"judged at the app's current listing text and the list's current definition"}}}}}}},"history":{"type":"array","items":{"$ref":"#/components/schemas/Change"}}}}}}},"404":{"description":"unknown app"}}}},"/search":{"get":{"summary":"Find lists and apps by name","parameters":[{"name":"q","in":"query","schema":{"type":"string","maxLength":100},"description":"the words to match; empty or missing answers empty arrays"},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}}],"responses":{"200":{"description":"matches","content":{"application/json":{"schema":{"type":"object","required":["schema_version","generated_at","query","lists","apps"],"properties":{"schema_version":{"type":"string"},"generated_at":{"type":"string"},"data_version":{"type":"integer","description":"the oldest data version among the objects this answer read; the same number on the X-Data-Version header"},"attribution":{"type":"object","description":"Who the data belongs to and the terms of reuse (name, url, terms, licence).","additionalProperties":{"type":"string"}},"query":{"type":"string"},"lists":{"type":"array","items":{"$ref":"#/components/schemas/ListSummary"}},"apps":{"type":"array","items":{"$ref":"#/components/schemas/AppSummary"}},"hint":{"type":"string","description":"set when no category matches every word: the categories that match some of them"}}}}}}}}},"/changes":{"get":{"summary":"What changed","parameters":[{"name":"since","in":"query","schema":{"type":"string","format":"date-time"},"description":"ISO-8601; an offset is read as the instant it names. Event lists: only changes after this exact instant. With summary=1: rounded down to its UTC day, within the last 31 days (an older day is the first whole day inside them)"},{"name":"list","in":"query","schema":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{0,199}$"}},{"name":"kind","in":"query","schema":{"type":"string","enum":["membership_added","membership_removed","membership_contested","tier_changed","list_created","list_activated","list_archived","list_definition_changed","app_added","app_missing","app_returned","app_described","claim_dropped"]},"description":"one change kind; any other value is a 400"},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}},{"name":"cursor","in":"query","schema":{"type":"integer","minimum":1},"description":"next_cursor from the previous page (not with summary)"},{"name":"after_id","in":"query","schema":{"type":"integer","minimum":0,"maximum":2147483647},"description":"polling: events whose seq is greater than this, oldest first by seq, at most limit; send next_after_id from the previous answer, 0 to start. seq is the event's place in the order events became public (an event shown after review comes after everything sent before it); up to 2026-10-15 seq equalled id. Never misses an event written or shown late, which since can. Not with since, cursor or summary"},{"name":"summary","in":"query","schema":{"type":"string","enum":["1","true"]},"description":"a per-category digest of the window (since rounded to its UTC day, default 7 days back, at most the last 31 days; list) instead of raw events, computed over every event in the window; kind, limit and cursor do not apply"}],"responses":{"200":{"description":"history, newest first (by at, then id); with summary=1 the ChangesSummary digest","content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["schema_version","generated_at","changes","next_cursor"],"properties":{"schema_version":{"type":"string"},"generated_at":{"type":"string"},"data_version":{"type":"integer","description":"the oldest data version among the objects this answer read; the same number on the X-Data-Version header"},"attribution":{"type":"object","description":"Who the data belongs to and the terms of reuse (name, url, terms, licence).","additionalProperties":{"type":"string"}},"changes":{"type":"array","items":{"$ref":"#/components/schemas/Change"}},"next_cursor":{"type":["integer","null"]},"next_after_id":{"type":"integer","description":"with after_id: the last seq returned, the after_id to send next time"}}},{"$ref":"#/components/schemas/ChangesSummary"}]}}}},"400":{"description":"since is not a timestamp, cursor or after_id not an integer, or after_id combined with since, cursor or summary"}}}},"/health":{"get":{"summary":"Is the system running itself","responses":{"200":{"description":"health; status ok|degraded; invariants ok|failing|unknown; per-job state; provider cool-downs; counts","content":{"application/json":{"schema":{"type":"object","required":["schema_version","generated_at","status","plan","invariants","jobs","providers","counts","last_publish","last_tick_failure","paused"],"properties":{"schema_version":{"type":"string"},"generated_at":{"type":"string"},"data_version":{"type":"integer","description":"the oldest data version among the objects this answer read; the same number on the X-Data-Version header"},"attribution":{"type":"object","description":"Who the data belongs to and the terms of reuse (name, url, terms, licence).","additionalProperties":{"type":"string"}},"status":{"type":"string","enum":["ok","degraded"]},"plan":{"type":"string","enum":["free","paid"]},"invariants":{"type":"object"},"jobs":{"type":"array"},"providers":{"type":"array"},"ai_neurons":{"type":["object","null"],"description":"Workers AI neurons booked today (UTC): reserve (booked), cf_neurons (Cloudflare's figure), used, free_allowance, reserve_cap, stop_at, mode normal|capped, capped_at"},"counts":{"type":"object","description":"includes public_unchecked: memberships of published lists shown as under review, expected to fall to 0"},"last_publish":{"type":"object"},"last_tick_failure":{"type":["object","null"]},"paused":{"type":["object","null"],"description":"a pause taken by design: past the daily D1 write guard every non-essential job waits for 00:00 UTC (reason, rows_written, guard, resumes_at, jobs); not a failure"}}}}}}}}}},"components":{"schemas":{"Confidence":{"type":"string","enum":["normal","provisional"],"description":"normal: >=10 ratings and >=1 search-rank observation for the list; provisional otherwise"},"MembershipStatus":{"type":"string","enum":["active","contested"],"description":"contested: the judge's budget ran out without a settled verdict; the app stays with the flag"},"ListStatus":{"type":"string","enum":["draft","active","archived"]},"ReviewStatus":{"type":"string","enum":["checked","under_review"],"description":"checked: approved against the list's definition from the list's side, so it can hold a tier and a position. under_review: listed but not checked yet; tier and position are null and it comes after every ranked app. Do not present it as ranked."},"RankingStatus":{"type":"string","enum":["ranked","under_review","too_few"],"description":"under_review: fewer than 6 of the list's apps are checked, so it shows no ranking yet (no tiers, no positions, top_app null); too_few: fewer than 6 apps in the list at all, so it cannot rank until more are placed in it. Its apps are listed either way"},"UnderReview":{"type":"object","required":["app","status","score","review_status"],"description":"a member not checked against the list yet: no tier, no position","properties":{"app":{"$ref":"#/components/schemas/ListApp"},"status":{"$ref":"#/components/schemas/MembershipStatus"},"score":{"type":"number"},"review_status":{"type":"string","enum":["under_review"]}}},"Components":{"type":"object","required":["rating","votes","rank","recency"],"properties":{"rating":{"type":"number"},"votes":{"type":"number"},"rank":{"type":"number"},"recency":{"type":"number"},"editors_choice":{"type":"number","description":"100, present only for an app showing Apple's Editors' Choice badge"},"quality":{"type":"number","description":"not in use: this component is switched off, so no app has it today"}},"description":"each 0-100; score is the plain average of those present"},"Rank":{"type":"object","required":["country","rank"],"properties":{"country":{"type":"string"},"rank":{"type":"integer","minimum":1,"maximum":50}}},"AppSummary":{"type":"object","required":["app_store_id","slug","name","subtitle","icon_url","store_url","price","currency","in_app_purchases","rating","rating_count","recent_rating","recent_review_count","reviews_checked_at","primary_genre","version_date","updated_at","stale","missing_since","one_liner","verified_maker","maker_site","file_size_bytes","minimum_os","content_rating","language_count","screenshots","developer_name","editors_choice","url","api_url"],"properties":{"app_store_id":{"type":"integer"},"slug":{"type":"string"},"name":{"type":"string"},"subtitle":{"type":["string","null"]},"icon_url":{"type":["string","null"]},"store_url":{"type":"string"},"price":{"type":["number","null"]},"currency":{"type":["string","null"]},"in_app_purchases":{"type":["boolean","null"],"description":"the App Store lists in-app purchases or subscriptions; price is only the upfront price. null: not read yet"},"rating":{"type":["number","null"]},"rating_count":{"type":["integer","null"]},"recent_rating":{"type":["number","null"],"description":"mean stars of the latest <=20 US reviews within 180 days, when >=10 qualify"},"recent_review_count":{"type":["integer","null"]},"reviews_checked_at":{"type":["string","null"]},"primary_genre":{"type":["string","null"]},"version_date":{"type":["string","null"]},"updated_at":{"type":"string"},"stale":{"type":"boolean"},"missing_since":{"type":["string","null"]},"one_liner":{"type":["string","null"]},"verified_maker":{"type":"boolean"},"maker_site":{"type":["string","null"]},"file_size_bytes":{"type":["integer","null"],"description":"App Store binary size in bytes"},"minimum_os":{"type":["string","null"],"description":"minimum iOS version, e.g. 17.0"},"content_rating":{"type":["string","null"],"description":"App Store age rating: 4+, 9+, 12+, 17+"},"language_count":{"type":["integer","null"]},"screenshots":{"type":["array","null"],"items":{"type":"string"},"description":"first 8 iPhone screenshot URLs"},"developer_name":{"type":["string","null"],"description":"the seller as the App Store names it"},"editors_choice":{"type":["boolean","null"],"description":"Apple's Editors' Choice badge; null: not read yet"},"url":{"type":"string"},"api_url":{"type":"string"}}},"ListSummary":{"type":"object","required":["slug","name","title","status","definition","excludes","definition_version","parent","section","sections","member_count","tiered_count","contested_count","under_review_count","ranking_status","url","api_url","scored_at","ranks_searched_at","activated_at","archived_at","merged_into","top_app"],"properties":{"top_app":{"type":["object","null"],"required":["app_store_id","slug","name","icon_url","tier","price","currency","in_app_purchases"],"properties":{"app_store_id":{"type":"integer"},"slug":{"type":"string"},"name":{"type":"string"},"icon_url":{"type":["string","null"]},"tier":{"type":"string","enum":["S","A","B","C","D","F"]},"price":{"type":["number","null"],"description":"store price to download; 0 is free to download, and in_app_purchases says whether it sells anything inside"},"currency":{"type":["string","null"]},"in_app_purchases":{"type":["boolean","null"],"description":"the App Store lists in-app purchases; null until its store page is read"}},"description":"the list's #1: the tiered member at the lowest position whose app is still on the App Store; null for a draft list, a list under review, or while no such member holds a tier"},"slug":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"status":{"$ref":"#/components/schemas/ListStatus"},"definition":{"type":"string"},"excludes":{"type":"string"},"definition_version":{"type":"integer"},"parent":{"type":["string","null"]},"section":{"type":["string","null"]},"sections":{"type":"array","items":{"type":"string"}},"member_count":{"type":"integer"},"tiered_count":{"type":"integer"},"contested_count":{"type":"integer"},"under_review_count":{"type":"integer","description":"members listed but not checked against the list yet (no tier, no position)"},"ranking_status":{"$ref":"#/components/schemas/RankingStatus"},"url":{"type":["string","null"],"description":"null while draft"},"api_url":{"type":"string"},"scored_at":{"type":["string","null"]},"ranks_searched_at":{"type":["string","null"]},"activated_at":{"type":["string","null"]},"archived_at":{"type":["string","null"]},"merged_into":{"type":["string","null"]}}},"Member":{"type":"object","required":["app","position","tier","score","components","review_status","status","confidence","judged_at","added_at","ranks"],"properties":{"app":{"$ref":"#/components/schemas/ListApp"},"review_status":{"type":"string","enum":["checked"],"description":"a ranked member is always checked"},"position":{"type":["integer","null"]},"tier":{"type":["string","null"],"enum":["S","A","B","C","D","F",null]},"score":{"type":"number"},"components":{"$ref":"#/components/schemas/Components"},"status":{"$ref":"#/components/schemas/MembershipStatus"},"confidence":{"$ref":"#/components/schemas/Confidence"},"judged_at":{"type":["string","null"]},"added_at":{"type":"string"},"ranks":{"type":"array","items":{"$ref":"#/components/schemas/Rank"}}}},"Change":{"type":"object","required":["id","at","kind","list","app_store_id","app","from","to","reason","job"],"properties":{"id":{"type":"integer"},"at":{"type":"string"},"kind":{"type":"string","enum":["membership_added","membership_removed","membership_contested","tier_changed","list_created","list_activated","list_archived","list_definition_changed","app_added","app_missing","app_returned","app_described","claim_dropped"]},"list":{"type":["string","null"]},"app_store_id":{"type":["integer","null"]},"app":{"type":["string","null"]},"from":{"type":["string","null"]},"to":{"type":["string","null"]},"reason":{"type":"string"},"job":{"type":"string"},"seq":{"type":"integer","description":"with after_id only: the event's place in the order events became public; next_after_id is the last one"}}},"ChangesSummary":{"type":"object","description":"summary=1: the change log digested per category over a window","required":["schema_version","generated_at","since","covers_from","complete","events","lists","catalog"],"properties":{"schema_version":{"type":"string"},"generated_at":{"type":"string","description":"when the log was read"},"since":{"type":"string","description":"the window's start: the asked since rounded down to its UTC day (default: 7 days before now)"},"covers_from":{"type":["string","null"],"description":"the oldest event the log held"},"complete":{"type":"boolean","description":"false: the log starts after since, so older events in the window are not counted"},"events":{"type":"integer","description":"events in the window"},"lists":{"type":"array","description":"categories with changes, most events first","items":{"type":"object","required":["list","events","last_change_at","added","removed","contested","up","down","entered","left","highlights"],"properties":{"list":{"type":"string"},"events":{"type":"integer"},"last_change_at":{"type":"string"},"added":{"type":"integer"},"removed":{"type":"integer"},"contested":{"type":"integer"},"up":{"type":"integer","description":"apps whose net move in the window is to a better tier"},"down":{"type":"integer"},"entered":{"type":"integer","description":"apps that gained a tier (joined the top 40)"},"left":{"type":"integer","description":"apps that lost their tier"},"highlights":{"type":"array","description":"at most 8: moves into or out of S and A first, then memberships added, removed, contested; newest first","items":{"type":"object","required":["app","app_store_id","change","from","to","at","reason"],"properties":{"app":{"type":["string","null"]},"app_store_id":{"type":["integer","null"]},"change":{"type":"string","enum":["added","removed","contested","up","down","entered","left"]},"from":{"type":["string","null"]},"to":{"type":["string","null"]},"at":{"type":"string"},"reason":{"type":"string","description":"the event's own cause; for a net tier move, the cause of its last event (e.g. \"under review: not checked from the list's side yet\")"}}}}}}},"catalog":{"type":"object","required":["lists_created","lists_activated","lists_archived","definitions_changed","apps_added","apps_missing","apps_returned","apps_described"],"properties":{"lists_created":{"type":"array","items":{"type":"string"}},"lists_activated":{"type":"array","items":{"type":"string"}},"lists_archived":{"type":"array","items":{"type":"string"}},"definitions_changed":{"type":"array","items":{"type":"string"}},"apps_added":{"type":"integer"},"apps_missing":{"type":"integer"},"apps_returned":{"type":"integer"},"apps_described":{"type":"integer"}}}}},"AppCompact":{"type":"object","required":["app_store_id","slug","name","subtitle","one_liner","price","currency","in_app_purchases","rating","rating_count","primary_genre","version_date","updated_at","stale","missing_since","verified_maker","editors_choice","icon_url","store_url","url"],"properties":{"app_store_id":{"type":"integer"},"slug":{"type":"string"},"name":{"type":"string"},"subtitle":{"type":["string","null"]},"one_liner":{"type":["string","null"]},"price":{"type":["number","null"]},"currency":{"type":["string","null"]},"in_app_purchases":{"type":["boolean","null"],"description":"the App Store lists in-app purchases or subscriptions; price is only the upfront price. null: not read yet"},"rating":{"type":["number","null"]},"rating_count":{"type":["integer","null"]},"primary_genre":{"type":["string","null"]},"version_date":{"type":["string","null"]},"updated_at":{"type":"string"},"stale":{"type":"boolean"},"missing_since":{"type":["string","null"]},"verified_maker":{"type":"boolean"},"editors_choice":{"type":["boolean","null"],"description":"Apple's Editors' Choice badge; null: not read yet"},"icon_url":{"type":["string","null"]},"store_url":{"type":"string"},"url":{"type":"string"}}},"ListApp":{"anyOf":[{"$ref":"#/components/schemas/AppSummary"},{"$ref":"#/components/schemas/AppCompact"}],"description":"the full app, or with compact=1 the compact one"}}}}