Research index
Developer guides/

Apple Foundation Models API on iOS 27: Daily Limits, Claude, and GPT

Apple Foundation Models API ships with iOS 27 on 14 Sep. On-device is free. AFM 3 Cloud has daily limits and a future fee. Call Claude and GPT on RouterPlex.

Written byRouterPlex
Reading time8 min
Apple Foundation Models API on iOS 27: Daily Limits, Claude, and GPT

Apple's Surprise and Shine event on 9 September 2026 did not ship a new public LLM HTTP API. It shipped iPhone 18 Pro, set iOS 27 for Monday 14 September 2026, and put a billing footnote on Apple Intelligence that developers will hit as soon as they leave on-device.

The Apple Foundation Models API is the Swift LanguageModel protocol and LanguageModelSession from WWDC 2026 (8 June). iOS 27 is when that protocol reaches production phones. On-device stays free. AFM 3 Cloud, Siri AI, Image Playground, and intelligent photo editing have daily usage limits, and Apple says expanded access will be available for a fee in the future.

If the workload needs Claude or GPT-6 Astra past that cap, with a spend limit you set, that request does not go through Apple's cloud. It goes through a prepaid OpenAI-compatible gateway.

Sources: Apple's iPhone 18 Pro newsroom post (9 September 2026, footnote 2), Apple Intelligence, the Foundation Models framework, Anthropic's ClaudeForFoundationModels, and 9to5Mac on the iOS 27 date. Apple has not published the future fee. Rates on RouterPlex follow the live catalog.

What actually shipped at Surprise and Shine #

John Ternus's first keynote was a hardware event. The developer-relevant facts are the software date and the footnote, not the cameras.

ItemWhat Apple said on 9 Sep 2026
EventSurprise and Shine
PhonesiPhone 18 Pro and iPhone 18 Pro Max
Pre-order / availability12 September / 18 September
iOS 27Free update, Monday 14 September 2026
Siri AIBeta with iOS 27, English first, not initially in the EU on iOS
Apple Foundation Models APINot announced today. WWDC 2026 (8 June), production with iOS 27
New OpenAI-style HTTP APINone
Third-party view APIsApple Reference Image viewing on iOS, iPadOS, and macOS 27. Viewing only. Not a model API

Do not write a client that assumes Apple opened /v1/chat/completions on iPhone. The public developer surface is still Swift: LanguageModelSession, on-device SystemLanguageModel, Private Cloud Compute PrivateCloudComputeLanguageModel, and vendor packages that conform to LanguageModel.

Apple Foundation Models API: three LanguageModel providers #

Apple's Foundation Models framework is a protocol, not a single model. You construct a session and call respond(to:) (or stream). Swap the model object.

On-device. SystemLanguageModel (commonly SystemLanguageModel.default) runs Apple's on-device foundation model. Apple's own developer copy: any app can use the on-device models, features work offline, and it is no cost per request. Check availability before you prompt. Context is small compared with cloud flagships. This is the right default for summarization, tagging, and short generation that can fail closed when the model is missing.

Private Cloud Compute. PrivateCloudComputeLanguageModel is the server-side path introduced for OS 27. It needs a network. Apple's 9 September footnote names AFM 3 Cloud models in Shortcuts as one of the features under daily limits. Treat PCC as the larger Apple model with a quota you do not set. Handle availability and quota errors. Do not build a product whose happy path is unbounded PCC.

Third-party packages. Anthropic ships ClaudeForFoundationModels: ClaudeLanguageModel conforms to LanguageModel, so the same LanguageModelSession API drives Claude. Google has a Gemini package in the same shape. Those packages are not Apple inference. They are vendor SDKs wearing Apple's session type. Auth, bill, and rate limits belong to Anthropic or Google unless you put a relay in front.

swift
import FoundationModels
 
let onDevice = LanguageModelSession(model: SystemLanguageModel.default)
let local = try await onDevice.respond(to: "Tag this note in three words.")
 
if #available(iOS 27.0, *) {
let cloud = LanguageModelSession(model: PrivateCloudComputeLanguageModel())
let reply = try await cloud.respond(to: "Rewrite this paragraph for a commit message.")
}

APIs can still move between the OS 27 beta and the 14 September build. Trust Apple's docs over a gist.

Apple Intelligence daily limits and the future fee #

This is the line Apple added to the iPhone 18 Pro press release. Copy it; do not paraphrase the fee away:

Certain Apple Intelligence features that rely on server-side models are subject to daily usage limits, including but not limited to Siri AI, intelligent photo editing tools, Image Playground, and AFM 3 Cloud models in Shortcuts. Daily limits may vary by feature, request complexity, system demand, system policies, and other factors. Expanded access to such features will be available for a fee in the future.

On-device is still the free bucket. The moment the prompt needs AFM 3 Cloud, Siri AI, or Image Playground, you are on a daily cap Apple controls, and Apple has now said the overflow product is paid. No dollar amount, no iCloud+ SKU, and no per-token table appeared in that footnote.

WWDC-era reporting described higher PCC allowances on iCloud+ and free PCC for App Store small-business accounts under 2 million first-time downloads. That is June guidance, not the 9 September footnote. Budget as if cloud Apple Intelligence can throttle you, then charge you, and as if the numbers can change.

Siri AI is also age-gated (not available under 13) and region-gated (not initially in the EU on iOS). Those are product constraints, not RouterPlex constraints.

ClaudeForFoundationModels is not a RouterPlex drop-in #

Anthropic's package is the honest way to keep LanguageModelSession while calling Claude. Auth is the part people will get wrong.

ModeWhat it actually talks toShip it?
.appAttest(clientID:)Anthropic, via App Attest. No key in the app. Physical device.Recommended for a shipping Claude-in-session app
.apiKey("...")Anthropic directlySimulator only. A bundled key is extractable
.proxied(headers:, baseURL:)Your relay. Anthropic's example is https://api.yourapp.com/claude. The relay adds the credentialYour backend, not a documented RouterPlex URL
swift
import FoundationModels
import ClaudeForFoundationModels
 
// Simulator. Do not ship a bundled key.
let model = ClaudeLanguageModel(
name: .sonnet5,
auth: .apiKey(ProcessInfo.processInfo.environment["ANTHROPIC_API_KEY"] ?? "")
)
let session = LanguageModelSession(model: model)
let response = try await session.respond(to: "Plan a 4-day trip to Buenos Aires.")

baseURL on .proxied is the app's own Claude relay. We have not tested ClaudeLanguageModel against https://api.routerplex.com. Do not paste that host into baseURL and assume guided generation, tools, and fallbacks work. Anthropic also says a proxied relay must forward beta headers for fallbacks.

If you already have that relay, the spend-safe move is: the iOS app talks to your server; your server talks to RouterPlex (or Anthropic) with a key that never ships in the IPA.

Call GPT-6 Astra from your iOS backend #

Apple's session API does not wrap OpenAI. There is no public OpenAI Foundation Models package to cite. For GPT-6 Astra, Claude, Gemini, and the rest of a multi-vendor catalog, use the OpenAI-compatible API from a server you control.

RouterPlex base URL for the OpenAI SDK is https://api.routerplex.com/v1. The Anthropic SDK uses https://api.routerplex.com (no /v1 on the base). Model ID for Astra is gpt-6-astra.

GPT-6 Astra on RouterPlex
Model IDgpt-6-astra
Input / 1M (≤272K)$10.00
Output / 1M (≤272K)$50.00
Whole request above 272K input$20 / $75
Markup$0
BalancePrepaid, never negative
KeyHard lifetime budget
bash
curl https://api.routerplex.com/v1/chat/completions \
-H "Authorization: Bearer $ROUTERPLEX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6-astra",
"messages": [
{"role": "user", "content": "Rewrite this release note for App Store review."}
]
}'
python
import os
from openai import OpenAI
 
client = OpenAI(
api_key=os.environ["ROUTERPLEX_API_KEY"],
base_url="https://api.routerplex.com/v1",
)
 
response = client.chat.completions.create(
model="gpt-6-astra",
messages=[{"role": "user", "content": "Turn these crash logs into a one-line fix plan."}],
)
print(response.choices[0].message.content)

Keep that call on the server. An iOS client should send the user prompt to your backend; the backend attaches the RouterPlex key. The same pattern works for Claude model IDs on the Anthropic hub.

Cursor users writing the app can override the OpenAI base URL to https://api.routerplex.com/v1 so the IDE and the production backend share a catalog. That override is for Cursor, not for LanguageModelSession.

Astra still has the 272K cliff: one fat context doubles the request. A coding agent or a naive "stuff the whole thread into PCC-or-Astra" loop is how indie budgets die. Put Astra on its own key with a small cap until the first dashboard row looks right.

Prepaid budgets vs a daily cap you do not control #

Apple's cloud path is: free-ish until the daily limit, then wait, degrade, or (later) pay Apple an unpublished fee. You cannot set that limit per user of your app. You cannot put a $5 lifetime cap on Siri AI.

RouterPlex is the opposite control: you buy prepaid credit from $5, tokens bill at vendor list price with 0% markup and $0 top-up fee, the balance never goes negative, and every key has a hard spend budget. When the key hits the cap, the request stops. It does not overdraft. That is the difference between "Apple may throttle AFM 3 Cloud" and "this iOS feature cannot spend more than $5 of GPT-6 Astra."

Use on-device Foundation Models when the task fits and privacy or offline matters. Use PCC while the quota holds for Apple-quality cloud prompts. The moment you need Claude, Astra, a model Apple does not wrap, or a budget you can prove to a client, point the backend at RouterPlex.

Start a $5 RouterPlex test, put gpt-6-astra on a budgeted key, and send one live chat-completions request from your server. That is the model you can actually call on 14 September, with a cap you set.

Common questions

Frequently asked questions

Is Apple Intelligence free on iOS 27?

On-device Apple Foundation Models stay free per request. Features that rely on server-side models — Siri AI, intelligent photo editing, Image Playground, and AFM 3 Cloud models in Shortcuts — have daily usage limits. Apple wrote on 9 September 2026 that expanded access to those features will be available for a fee in the future. Apple has not published that fee.

What is the Apple Foundation Models API?

It is Apple's Foundation Models framework: a Swift LanguageModel protocol plus LanguageModelSession. On-device inference uses SystemLanguageModel. Private Cloud Compute uses PrivateCloudComputeLanguageModel. Third-party packages such as Anthropic's ClaudeForFoundationModels conform to the same protocol. It is not an OpenAI-compatible HTTP API.

Did Apple announce a new LLM API at the iPhone 18 event?

No. Foundation Models, the LanguageModel protocol, and third-party Claude and Gemini packages were introduced at WWDC 2026 on 8 June. Surprise and Shine on 9 September 2026 is the hardware and iOS 27 ship date. The new developer-relevant line is the daily-limit and future-fee footnote on the iPhone 18 Pro press release.

When does iOS 27 ship?

Apple said iOS 27 will be a free software update on Monday, 14 September 2026. iPhone 18 Pro and iPhone 18 Pro Max pre-order on 12 September and are available 18 September. Siri AI rolls out in beta with iOS 27, English first, and is not initially available in the EU on iOS.

Can I point ClaudeForFoundationModels at RouterPlex?

Do not treat RouterPlex as a documented drop-in for ClaudeLanguageModel. .apiKey talks to Anthropic. .appAttest bills Anthropic through App Attest with no key in the app. .proxied is your own relay (Anthropic's example is https://api.yourapp.com/claude) that adds the credential server-side. RouterPlex is an OpenAI- and Anthropic-compatible HTTP gateway. Call it from that backend with URLSession or an SDK; do not paste api.routerplex.com into baseURL and assume LanguageModelSession just works.

How do I use GPT-6 Astra from an iOS app?

Keep the RouterPlex key on your server. POST https://api.routerplex.com/v1/chat/completions with model gpt-6-astra, or use the OpenAI SDK with base_url https://api.routerplex.com/v1. List price is $10 per 1M input and $50 per 1M output at or below 272K input tokens. Put a hard budget on the key so a loop stops at $0.

Run the smallest paid test.

Add $5, cap the key, and verify the result with your own workload. No subscription, and credit never expires — a first top-up of $25+ is matched with $25 extra.