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://aapl.se/rails/active_storage/...",
      "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/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), click_count, popularity_score, apple_relevant, en feed, ett content-objekt (original/translated) och tags. Även här är content.*.summary sammanfattning/utdrag — aldrig full originaltext.

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.