API-dokumentation

Aapl.se är Sveriges ledande Apple-nyhetssajt sedan 2008. Vi aggregerar ~40 källor och sammanfattar på svenska med AI. Den här sidan dokumenterar sajtens publika, skrivskyddade gränssnitt för utvecklare och AI-agenter.

Föredrar du markdown? Samma innehåll finns på /api-docs.md.

Om innehållet: de svenska sammanfattningarna är Aapl.se:s eget innehåll. Originalartiklarna tillhör respektive källa — fulltext exponeras aldrig via något gränssnitt. Citera gärna "enligt {källa}, via Aapl.se" med länk. Datumfält (published_at) är ISO 8601. Om inget annat anges krävs ingen autentisering och endast GET stöds.

1. Anonyma JSON-endpoints (legacy)

Öppna, skrivskyddade och utan autentisering. Endast apple_relevant-artiklar listas. Parametern items begränsas till max 100.

  • https://aapl.se/entries.json — de senaste artiklarna (nyast först). Frivillig ?items=.
  • https://aapl.se/entries/popular.json — ordnad på popularitet (flest klick först).
  • https://aapl.se/entries/:id.json — en enskild artikel (numeriskt :id).
  • https://aapl.se/feeds.json — aktiva nyhetskällor.
  • https://aapl.se/feeds/:id.json — artiklarna för en källa.
  • https://aapl.se/tags.json — alla taggar.
  • https://aapl.se/tags/:id.json — artiklarna för en tagg.

Svarsform för en artikellista:

{
  "entries": [
    {
      "id": 123,
      "title": "Apple lanserar ny iPhone",
      "url": "https://källa.example/artikel",
      "image": "https://aaplse-vibe-storage.hel1.your-objectstorage.com/",
      "summary": "Svensk AI-sammanfattning av artikeln.",
      "source": "MacRumors",
      "source_id": 7,
      "posted": "about 3 hours",
      "published_at": "2026-07-04T09:21:13Z"
    }
  ]
}

posted är en människoläsbar relativ tid (svenska ord) och kan vara null. Parsa alltid published_at (ISO) i stället — det kan vara null för äldre poster. /feeds.json ger { id, title }, /tags.json ger { id, name }.

2. /api/v1 (modernt API, Bearer-auth)

Bas: https://aapl.se/api/v1. De flesta endpoints är publika; skicka en token bara för personaliserade vyer (följda källor) med Authorization: Bearer <token>. Listsvar har höljet { data, pagination, meta }; fel returneras som { error: { type, message }, meta } med lämplig HTTP-status. Paginering via ?per_page= (max 100), språkfilter via ?lang=sv|en.

Metod & sökväg Auth Beskrivning
POST /api/v1/auth/loginLogga in med provider (email/apple/google); returnerar en token.
POST /api/v1/auth/logoutBearerRoterar och ogiltigförklarar aktuell token.
DELETE /api/v1/auth/accountBearerRaderar det autentiserade kontot permanent.
GET /api/v1/entriesvalfriArtiklar (nyast först). ?sort=popular, ?lang=.
GET /api/v1/entries/popularArtiklar ordnade på popularitet.
GET /api/v1/entries/followsBearerArtiklar från användarens följda källor.
GET /api/v1/entries/searchvalfriSök bland artiklar (semantisk sökning med nyckelordsfallback). ?q= (krävs), ?limit= (standard 20, max 50).
GET /api/v1/feedsvalfriAktiva källor (med entries_count, is_following).
GET /api/v1/feeds/:idvalfriEn källa i detalj.
GET /api/v1/feeds/:id/entriesvalfriArtiklar för en källa.
POST /api/v1/feeds/:id/followBearerFölj en källa (idempotent).
DELETE /api/v1/feeds/:id/followBearerSluta följa en källa (idempotent).
GET /api/v1/tagsTaggar med artiklar.
GET /api/v1/tags/:idEn tagg i detalj (:id = slug).
GET /api/v1/tags/:id/entriesArtiklar för en tagg.
GET /api/v1/storiesStory-bevakningar, senast uppdaterad först. ?status=active/dormant.
GET /api/v1/stories/:idEn story i detalj med brödtext, medlemsartiklar och föregångare/efterföljare (:id = id eller id-slug).
GET /api/v1/podd_episodesAapl Pod-avsnitt, nyast först.
GET /api/v1/podd_episodes/:idEtt avsnitt med kapitel, källor och transcript_url (:id = episode_id). ?include_transcript=true bifogar manuset.

Artikelobjekten i /api/v1 innehåller id, url, main_image_url, published_at (ISO), source_count (antal oberoende källor som bevakat samma händelse), click_count (deprecated — backas numera av artikelvisningar, inte av den avvecklade klickräknaren), popularity_score, apple_relevant, en feed, ett content-objekt (original/translated) och tags. Även här är content.*.summary sammanfattning/utdrag — aldrig full originaltext.

Söksvar från /api/v1/entries/search exponerar samma artikelobjekt som andra entry-endpoints. Svaret innehåller ingen paginering utan är en rankad topplista med meta.mode som anger om sökningen använde "semantic" (vektorsökning) eller "keyword" (automatisk fallback när semantisk sökning inte är tillgänglig eller ger noll träffar). Parametern ?lang= stöds inte — den semantiska sökningen är språkoberoende (svenska söktermer matchar svenska sammanfattningar av engelska källor). Begränsning: 30 anrop per 10 minuter och IP; 429 vid överskridande. Tom eller saknad ?q= returnerar 400.

Story-objekten innehåller id, title, lead, status (active/dormant), entries_count, first_entry_published_at/last_entry_published_at (ISO), image_url (ärvd från tidigaste medlemsartikeln med bild; kan vara null) och url; detaljvyn lägger till body, predecessor/successors samt entries (medlemsartiklarna som sammanfattning + metadata — samma innehållssnitt som MCP-verktygen och markdown-ytorna). Podd-avsnitten innehåller episode_id, title, description, published_on (ISO), duration_seconds, page_url, audio_url, cover_url och cover_thumb_url; detaljvyn lägger till chapters, sources och transcript_url.

3. Markdown för agenter

Token-effektiva markdown-ytor med endast metadata + svensk sammanfattning. Alla bär X-Robots-Tag: noindex och sätter aldrig cookies.

  • https://aapl.se/entries/:id.md — en artikel som markdown (YAML-frontmatter + rubrik + sammanfattning + länk). Lägg .md på valfri artikel-URL, eller skicka Accept: text/markdown.
  • https://aapl.se/index.md — de senaste 50 apple_relevant-artiklarna som länkar till respektive .md-version.
  • https://aapl.se/{slug}.md — en produktguide som markdown. Gäller alla 26 produktguider, familjehubbar, generationshubbar och ryktessidor på sajten, t.ex. mac-mini, iphone, iphone-18 och apple-watch-12. Aktuell lista finns alltid på /llms.txt.
  • https://aapl.se/llms.txt — startpunkt för agenter (llmstxt.org-format).

4. MCP-server (Model Context Protocol)

https://aapl.se/mcp — stateless Streamable HTTP, ingen autentisering. Anslut som custom connector i Claude (Settings → Connectors) eller i ChatGPT developer mode. Servern exponerar skrivskyddade verktyg: latest_news, popular_news, search_news (semantisk sökning), get_entry, list_feeds, list_tags, latest_stories och get_story (story-bevakningar), list_podd_episodes och get_podd_episode (Aapl Pod) samt list_product_guides och get_product_guide (produktguider och ryktessidor, se avsnitt 3). list_product_guides tar en valfri page_type ("product_hub", "family_hub", "generation_hub" eller "rumor"); get_product_guide kräver en slug (t.ex. "mac-mini") och returnerar guiden som markdown. Verktygssvaren följer samma innehållssnitt som markdown-ytorna (sammanfattning + metadata, aldrig originaltext). Anropen är begränsade till 30 per minut och IP (429 vid överskridande).

5. Fel & format

  • Okända artiklar/sökvägar returnerar HTTP 404 med en HTML-body (public/404.html), inte JSON — kontrollera statuskoden, inte kroppen.
  • .json-endpoints i avsnitt 1 kräver .json-suffix i sökvägen (inte bara en Accept-header).
  • RSS finns på https://aapl.se/entries.rss (senaste 50, med taggar och bilder).

Autentisering med query-parameter (?token=) är avsiktligt odokumenterad och stöds inte för nya integrationer.