{
  "data": {
    "a": {
      "slug": "apple-ads",
      "name": "Apple Ads Platform API",
      "vendor": "Apple",
      "vendorUrl": "https://ads.apple.com",
      "kind": "http-api",
      "category": "advertising",
      "summary": "Apple's Ads Platform API creates and manages App Store and Apple Maps campaigns, ad groups, keywords, ads, creatives and budgets, and returns performance reports. Agents call REST endpoints at api.ads.apple.com/v1 with an OAuth 2 client credentials token.",
      "url": "https://www.anchorterminal.com/tools/apple-ads",
      "markdownUrl": "https://www.anchorterminal.com/tools/apple-ads.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/apple-ads.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/apple-ads.json",
      "repo": "https://github.com/apple/apple-ads-platform-api-python",
      "license": "Proprietary service under the Apple Advertising Services Terms of Service. The client libraries are MIT",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://api.ads.apple.com/v1",
      "packages": [
        {
          "registry": "npm",
          "name": "@apple/apple-ads-platform"
        },
        {
          "registry": "pypi",
          "name": "apple-ads-platform"
        }
      ],
      "auth": "oauth",
      "authNotes": "Access is self-serve for an advertiser. An account administrator invites a user with an API role, and that user uploads a public key in the Apple Ads interface and signs a JWT client secret with the private key. The OAuth 2 client credentials grant at appleid.apple.com returns a one-hour bearer token with the single scope `searchadsorg`. The role (read and write, or read only, account-wide or for one campaign group) limits what calls can do. A third-party provider acting for advertisers registers an OAuth 2 application with Apple by email.",
      "pricing": "free",
      "pricingNotes": "No fee for API access is stated in the docs, the help article or the terms. Ad spend is billed per tap up to a maximum the advertiser sets, and no rates or minimum are published. Apple advertises a 100 USD credit for eligible new App Store advertisers. No sandbox or test account was found, and whether an account needs a payment method before API use was not established (checked 2026-10-09).",
      "priceSummary": "Free",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the Apple Ads Platform API documentation or the Apple Advertising Services Terms of Service (checked 2026-10-09).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-09"
      },
      "docsUrl": "https://developer.apple.com/documentation/apple-ads-platform-api",
      "capabilities": [
        "ads.reporting",
        "ads.campaigns",
        "ads.budgets",
        "ads.creatives"
      ],
      "tags": [
        "hosted",
        "free",
        "oauth",
        "sdk",
        "audit-log",
        "bug-bounty",
        "closed-source",
        "self-serve"
      ],
      "lastRelease": "2026-08-14",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 53.8,
        "grade": "D",
        "agentReady": false,
        "rank": 699,
        "ranked": true,
        "rankOf": 950,
        "categoryRank": 7,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 69,
          "maintenance": 48,
          "payments": 20,
          "reliability": 35,
          "schema": 69,
          "security": 68,
          "transparency": 66
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-09"
        },
        "negative": 0,
        "verdict": "Every response carries `RateLimit-*` headers and a 429 carries `Retry-After`, Apple maintains MIT client libraries in four languages, and read-only API roles exist. The API was first released in August 2026. No status page, SLA, published OpenAPI file, idempotency key or test account was found, and a person must create the credentials in the Apple Ads interface.",
        "bestFor": "An agent that manages or reports on App Store search campaigns, or Apple Maps campaigns, for an advertiser whose administrator can grant an API role.",
        "strengths": [
          "Every response carries `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` headers, and a 429 adds `Retry-After`, with a sample backoff client in the docs",
          "Apple maintains client libraries for Swift, Python, Java and Node.js under the MIT licence, generated from its OpenAPI document and handling the token cycle",
          "API roles include API Account Read Only and a campaign group API Read Only role, so a reporting agent needs no write access",
          "Each documentation page links a Markdown twin at the same address with `.md`",
          "Change history endpoints return audit summaries and change detail records for entities in an ad account"
        ],
        "weaknesses": [
          "The Platform API was first released in August 2026 and its changelog has one entry. The Campaign Management API 5 it replaces is sunset on 26 January 2027",
          "No status page, incident history or SLA was found in the pages read, and the rate limit quota is given only in response headers",
          "The OpenAPI document the client libraries are generated from is not published, and developer.apple.com has no llms.txt",
          "No idempotency key, validate-only mode or test account was found. A PUT that includes an array replaces the whole array",
          "The terms let Apple use advertiser and campaign data to develop and train AI models, retain account data after use ends, and require written approval of any announcement about the services"
        ],
        "agentNotes": [
          "Send `Authorization: Bearer {access_token}` and `X-AP-Context: adAccountId={adAccountId}` on every ad account call. Get the account id from `GET /v1/acls`",
          "Request a new access token every 3,600 seconds from `https://appleid.apple.com/auth/oauth2/token` with scope `searchadsorg`. The signed client secret lasts at most 180 days",
          "Read `RateLimit-Remaining` on each response. On a 429 wait the `Retry-After` seconds, then double the wait up to 16 seconds",
          "List and filter with POST to a `/query` endpoint, not GET with query parameters. Deleted entities return only when a filter asks for them",
          "On PUT send only the fields to change, and send the complete desired array for any array field. Create campaigns with `\"status\": \"PAUSED\"` before review"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "D",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 53.8
          }
        ],
        "editorialScores": {
          "ergonomics": 69,
          "maintenance": 48,
          "payments": 20,
          "reliability": 35,
          "schema": 69,
          "security": 68,
          "transparency": 49
        },
        "provenanceScore": 83
      },
      "connect": {
        "install": "npm install @apple/apple-ads-platform",
        "http": "curl \"https://api.ads.apple.com/v1/acls\" \\\n  -H \"Authorization: Bearer {access_token}\""
      },
      "letme": {
        "capability": "https://letme.dev/ads.reporting",
        "tool": "https://letme.dev/apple-ads"
      },
      "sameCompany": [
        "mlx-lm"
      ],
      "area": "communication",
      "provenance": {
        "legalEntity": "Apple Inc.",
        "domain": "apple.com",
        "domainRegistered": "1987-02-19",
        "endpointOnVendorDomain": true,
        "terms": "https://ads.apple.com/terms-of-service",
        "privacy": "https://www.apple.com/legal/privacy/",
        "statusPage": "",
        "changelog": "https://developer.apple.com/documentation/Apple-Ads-Platform-API/changelog-apple-ads-platform-api",
        "securityTxt": "valid",
        "checked": "2026-10-09",
        "notes": [
          "The Apple Advertising Services Terms of Service (effective 28 July 2026) govern the advertising services. They do not mention the API, and no separate API terms were found.",
          "The contracting entity is Apple Inc. for ad content served in the United States and Apple Distribution International Ltd. for most other locations, with other entities for Canada, Latin America, Japan, Australia and New Zealand, Southeast Asia and mainland China (Countries and Regions Specific Terms, 1 May 2026).",
          "The terms cite Apple's Privacy Policy at www.apple.com/privacy. The policy page at www.apple.com/legal/privacy/ is drawn by script and its text did not reach our reader. The Apple Advertising and Privacy notice (11 May 2026) was read.",
          "API calls go to https://api.ads.apple.com/v1 and token requests to https://appleid.apple.com/auth/oauth2/token. The documentation is at developer.apple.com.",
          "www.apple.com/.well-known/security.txt has Contact, Acknowledgments, Policy and Expires (2027-10-06) lines.",
          "No status page for Apple Ads was linked from the pages read.",
          "RDAP gives a registration date of 1987-02-19 for apple.com."
        ],
        "score": 83
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/apple-ads.json",
      "live": {
        "slug": "apple-ads",
        "probe": {
          "target": "https://api.ads.apple.com/v1",
          "method": "get",
          "lastAt": "2026-10-10T02:54:46.302868079Z",
          "lastOk": false,
          "lastStatus": 503,
          "lastMs": 486,
          "lastNote": "server error",
          "authRequired": false,
          "uptime24h": 0,
          "uptime30d": 0,
          "p50ms24h": 0,
          "p95ms24h": 0,
          "samples24h": 115,
          "samples30d": 115,
          "days": [
            {
              "date": "2026-10-09",
              "probes": 85,
              "ok": 0
            },
            {
              "date": "2026-10-10",
              "probes": 30,
              "ok": 0
            }
          ],
          "outages": [
            {
              "start": "2026-10-09T15:42:56.297965171Z",
              "end": "0001-01-01T00:00:00Z",
              "note": "HTTP 503 server error"
            }
          ]
        },
        "versions": [
          {
            "registry": "github",
            "name": "apple/apple-ads-platform-api-python",
            "version": "v1.109.0",
            "released": "2026-08-14",
            "seenAt": "2026-10-09T16:40:00.215659958Z"
          },
          {
            "registry": "npm",
            "name": "@apple/apple-ads-platform",
            "version": "1.109.0",
            "seenAt": "2026-10-09T16:39:58.989527402Z"
          },
          {
            "registry": "pypi",
            "name": "apple-ads-platform",
            "version": "1.109.0",
            "released": "2026-08-14",
            "seenAt": "2026-10-09T16:40:00.003963299Z"
          }
        ],
        "githubStars": 32,
        "npmWeekly": 6024,
        "pypiWeekly": 394,
        "pages": [
          {
            "url": "https://developer.apple.com/documentation/Apple-Ads-Platform-API/changelog-apple-ads-platform-api",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-09T18:35:01.531863928Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "e4a638dcba02"
          },
          {
            "url": "https://www.apple.com/legal/privacy/",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-09T18:48:09.045163836Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "26c270f23c46"
          },
          {
            "url": "https://ads.apple.com/terms-of-service",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-09T18:32:14.161112367Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "6ab5918e07a0"
          }
        ],
        "updatedAt": "2026-10-10T02:54:46.302868079Z"
      }
    },
    "answer": "X Ads API scores 57.3 (C) on agent readiness against Apple Ads Platform API's 53.8 (D), and leads in 2 of 7 scored categories. Apple Ads Platform API leads on schema \u0026 documentation, agent ergonomics and security \u0026 auth.",
    "b": {
      "slug": "x-ads",
      "name": "X Ads API",
      "vendor": "X Corp.",
      "vendorUrl": "https://docs.x.com/x-ads-api/introduction",
      "kind": "http-api",
      "category": "advertising",
      "summary": "X's Ads API creates and manages campaigns, line items, targeting, creatives and audiences on X and returns performance analytics. Agents call versioned REST endpoints at ads-api.x.com with OAuth 1.0a, or use the X Ads MCP server with OAuth 2.0.",
      "url": "https://www.anchorterminal.com/tools/x-ads",
      "markdownUrl": "https://www.anchorterminal.com/tools/x-ads.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/x-ads.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/x-ads.json",
      "license": "Proprietary service under the X Developer Agreement and its incorporated Developer Policy",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://ads-api.x.com/mcp",
      "packages": [],
      "auth": "oauth",
      "authNotes": "Access needs approval. A person creates an app in the X Developer Console and requests Ads API access with the Ads API Access Form, which the docs say is reviewed within three business days, at the Conversion Only or Standard Access tier. The MCP page instead says selecting Ads Project under Project Access enables Ads API access for the app. REST calls are signed with OAuth 1.0a using the app key and a user access token from the three-legged or PIN flow. The docs say these tokens do not expire and the user can revoke them. The X Ads MCP server uses OAuth 2.0 with PKCE and the scopes `ads.read`, `ads.write`, `media.write` and `offline.access`. Calls act with the user's ad account role.",
      "pricing": "free",
      "pricingNotes": "No fee for Ads API access was found in the pages read, and the X API pricing page does not mention the Ads API. Ad spend is billed to the ad account's funding instrument, and advertising prices were not read. The sandbox host creates test accounts and funding instruments and never serves ads, so an approved app can start without spend. Whether a developer account needs a payment card was not established (checked 2026-10-09).",
      "priceSummary": "Free",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the Ads API documentation, the X API pricing page or the Developer Agreement (checked 2026-10-09).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-09"
      },
      "docsUrl": "https://docs.x.com/x-ads-api/introduction",
      "llmsTxt": "https://docs.x.com/x-ads-api/llms.txt",
      "capabilities": [
        "ads.reporting",
        "ads.campaigns",
        "ads.budgets",
        "ads.audiences",
        "ads.creatives"
      ],
      "tags": [
        "hosted",
        "free",
        "oauth",
        "mcp",
        "llms-txt",
        "sandbox",
        "approval-required",
        "closed-source"
      ],
      "lastRelease": "2026-09-17",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 57.3,
        "grade": "C",
        "agentReady": false,
        "rank": 616,
        "ranked": true,
        "rankOf": 950,
        "categoryRank": 6,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 62,
          "maintenance": 63,
          "payments": 20,
          "reliability": 75,
          "schema": 64,
          "security": 48,
          "transparency": 62
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-09"
        },
        "negative": 0,
        "verdict": "Rate limits are published per endpoint type, a sandbox host never serves ads, and the X Ads MCP server has separate read and write scopes and creates campaigns paused. The REST API needs OAuth 1.0a signing and an approved app, no OpenAPI file covers it, and the official Python and Ruby SDKs were last released in May 2022.",
        "bestFor": "An agent that manages or reports on X campaigns for an advertiser with an approved developer app, especially through the MCP server, where scopes separate reads from writes and writes start paused.",
        "strengths": [
          "Rate limits are published by endpoint type, such as 450 writes a minute and 250 synchronous analytics requests per 15 minutes, with remaining quota in `x-rate-limit-*` headers",
          "The sandbox host `ads-api-sandbox.x.com` creates test ad accounts and funding instruments, and campaigns made there are not served",
          "The X Ads MCP server at `https://ads-api.x.com/mcp` lists 74 tools, with `ads.read`, `ads.write` and `media.write` as separate OAuth 2.0 scopes",
          "The MCP docs say campaigns and line items are always created paused, and spending starts only after `activate_campaign` or `activate_line_item`",
          "Every docs page has a Markdown twin, and https://docs.x.com/x-ads-api/llms.txt indexes the Ads API pages"
        ],
        "weaknesses": [
          "No OpenAPI file covers the Ads API. The published file (version 2.170, 178 paths) describes api.x.com only",
          "REST calls need an OAuth 1.0a signature on each request, and the docs say user access tokens do not expire",
          "The official Python and Ruby SDKs were last released on 27 May 2022 at v11.0.0, while the current API version is 12",
          "No idempotency key, audit log endpoint or SLA was found in the reviewed documentation",
          "The Developer Agreement treats statistics on the X API's performance and responsiveness as Confidential Information for internal, non-commercial use, which matters before any probe is run",
          "The `video_total_views` metric was redefined in place on 13 August 2026 with no version change"
        ],
        "agentNotes": [
          "Build against `https://ads-api-sandbox.x.com/12/` first. Create a test account with `POST accounts` and a funding instrument there before touching a live account",
          "On HTTP 429 wait until the time in `x-rate-limit-reset`. On 503 wait for `retry-after`. The docs say apps that ignore these can be throttled or lose access without notice",
          "Read the account-level limit from `x-account-rate-limit-*` when present and use `x-rate-limit-*` only when it is absent",
          "For a read-only MCP session request `ads.read offline.access` only. Without `offline.access` the token expires in about two hours with no refresh",
          "Page with `count` (1 to 1,000, default 200) and `cursor` until `next_cursor` is null. Analytics endpoints page by time range instead, and `with_total_count` cannot be combined with `cursor`"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 57.3
          }
        ],
        "editorialScores": {
          "ergonomics": 62,
          "maintenance": 63,
          "payments": 20,
          "reliability": 75,
          "schema": 64,
          "security": 48,
          "transparency": 40
        },
        "provenanceScore": 84
      },
      "connect": {
        "http": "twurl -H ads-api.x.com \"/11/accounts\"",
        "claudeCode": "claude mcp add x-ads https://ads-api.x.com/mcp \\\n  --transport http \\\n  --client-id YOUR_OAUTH2_CLIENT_ID \\\n  --callback-port 8080"
      },
      "letme": {
        "capability": "https://letme.dev/ads.reporting",
        "tool": "https://letme.dev/x-ads"
      },
      "sameCompany": [
        "x-mcp"
      ],
      "area": "communication",
      "provenance": {
        "legalEntity": "X Corp.",
        "domain": "x.com",
        "domainRegistered": "1993-04-02",
        "endpointOnVendorDomain": true,
        "terms": "https://docs.x.com/developer-terms/agreement",
        "privacy": "https://x.com/privacy",
        "statusPage": "https://developer.x.com/status",
        "changelog": "https://docs.x.com/changelog",
        "securityTxt": "unknown",
        "checked": "2026-10-09",
        "notes": [
          "The Developer Agreement (last updated 27 April 2026) governs use of the X API and incorporates the Developer Policy and the API Restricted Use Rules. The contracting entity is X Corp. (Bastrop, Texas), or X Internet Unlimited Company (Dublin) for a developer in the EU, EFTA or the United Kingdom.",
          "The privacy link is the one the Developer Policy cites. x.com's robots.txt disallows every path for unnamed agents, so the policy was not read.",
          "No advertiser agreement or data processing agreement was found in the pages read. business.x.com was not read.",
          "API calls go to https://ads-api.x.com and https://ads-api-sandbox.x.com, and OAuth 2.0 tokens come from api.x.com. The documentation is at docs.x.com.",
          "x.com/.well-known/security.txt is closed to us by robots.txt. developer.x.com and docs.x.com return 404 for the file.",
          "The status page at developer.x.com/status is script-drawn and its components were not read. The incident history is at https://docs.x.com/incidents.",
          "RDAP gives a registration date of 1993-04-02 for x.com."
        ],
        "score": 84
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/x-ads.json",
      "live": {
        "slug": "x-ads",
        "probe": {
          "target": "https://ads-api.x.com/mcp",
          "method": "get",
          "lastAt": "2026-10-10T02:55:16.388656573Z",
          "lastOk": true,
          "lastStatus": 401,
          "lastMs": 122,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 136,
          "p95ms24h": 287,
          "samples24h": 115,
          "samples30d": 115,
          "days": [
            {
              "date": "2026-10-09",
              "probes": 85,
              "ok": 85
            },
            {
              "date": "2026-10-10",
              "probes": 30,
              "ok": 30
            }
          ]
        },
        "vendorStatus": {
          "page": "https://developer.x.com/status",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-10T00:51:26.152185931Z"
        },
        "pages": [
          {
            "url": "https://docs.x.com/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-09T18:38:47.238452338Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "d1064f68558e"
          },
          {
            "url": "https://x.com/privacy",
            "kind": "privacy",
            "status": 0,
            "checkedAt": "2026-10-09T18:56:08.988834251Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "blockedByRobots": true
          },
          {
            "url": "https://docs.x.com/developer-terms/agreement",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-09T18:38:49.524865418Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "69ecb268f31a"
          }
        ],
        "updatedAt": "2026-10-10T02:55:16.388656573Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Apple",
        "b": "X Corp.",
        "name": "Vendor"
      },
      {
        "a": "https://api.ads.apple.com/v1",
        "b": "https://ads-api.x.com/mcp",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth",
        "b": "OAuth",
        "name": "Auth"
      },
      {
        "a": "Free",
        "b": "Free",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Proprietary service under the Apple Advertising Services Terms of Service. The client libraries are MIT",
        "b": "Proprietary service under the X Developer Agreement and its incorporated Developer Policy",
        "name": "Licence"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-08-14",
        "b": "2026-09-17",
        "name": "Last release"
      },
      {
        "a": "no date given",
        "b": "2026-04-27",
        "name": "Terms last updated"
      },
      {
        "a": "couldn't be read",
        "b": "couldn't be read",
        "name": "Privacy policy last updated"
      },
      {
        "a": "yes",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Arbitration or class-action waiver"
      }
    ],
    "faq": [
      {
        "answer": "X Ads API scores 57.3 (C) on agent readiness against Apple Ads Platform API's 53.8 (D), and leads in 2 of 7 scored categories. Apple Ads Platform API leads on schema \u0026 documentation, agent ergonomics and security \u0026 auth.",
        "question": "Which is better for AI agents, Apple Ads Platform API or X Ads API?"
      },
      {
        "answer": "Both use an OAuth sign-in.",
        "question": "Do Apple Ads Platform API and X Ads API need an API key?"
      },
      {
        "answer": "Yes. Apple Ads Platform API has a hosted endpoint at https://api.ads.apple.com/v1 and X Ads API at https://ads-api.x.com/mcp.",
        "question": "Can an agent call Apple Ads Platform API and X Ads API without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Schema \u0026 documentation, 69 against 64",
          "Agent ergonomics, 69 against 62",
          "Security \u0026 auth, 68 against 48"
        ],
        "also": null,
        "goodFor": "An agent that manages or reports on App Store search campaigns, or Apple Maps campaigns, for an advertiser whose administrator can grant an API role.",
        "slug": "apple-ads",
        "watchFor": "The Platform API was first released in August 2026 and its changelog has one entry. The Campaign Management API 5 it replaces is sunset on 26 January 2027"
      },
      {
        "aheadOn": [
          "Reliability, 75 against 35",
          "Maintenance \u0026 community, 63 against 48"
        ],
        "also": null,
        "goodFor": "An agent that manages or reports on X campaigns for an advertiser with an approved developer app, especially through the MCP server, where scopes separate reads from writes and writes start paused.",
        "slug": "x-ads",
        "watchFor": "No OpenAPI file covers the Ads API. The published file (version 2.170, 178 paths) describes api.x.com only"
      }
    ],
    "job": {
      "capability": "ads.reporting",
      "name": "Ad reporting"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/amazon-ads-api-vs-apple-ads.json",
        "title": "Amazon Ads API vs Apple Ads Platform API",
        "url": "https://www.anchorterminal.com/compare/amazon-ads-api-vs-apple-ads"
      },
      {
        "json": "https://www.anchorterminal.com/compare/amazon-ads-api-vs-x-ads.json",
        "title": "Amazon Ads API vs X Ads API",
        "url": "https://www.anchorterminal.com/compare/amazon-ads-api-vs-x-ads"
      },
      {
        "json": "https://www.anchorterminal.com/compare/apple-ads-vs-google-ads-api.json",
        "title": "Apple Ads Platform API vs Google Ads API",
        "url": "https://www.anchorterminal.com/compare/apple-ads-vs-google-ads-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/apple-ads-vs-linkedin-marketing-api.json",
        "title": "Apple Ads Platform API vs LinkedIn Marketing APIs",
        "url": "https://www.anchorterminal.com/compare/apple-ads-vs-linkedin-marketing-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/apple-ads-vs-meta-marketing-api.json",
        "title": "Apple Ads Platform API vs Meta Marketing API",
        "url": "https://www.anchorterminal.com/compare/apple-ads-vs-meta-marketing-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/apple-ads-vs-microsoft-advertising-api.json",
        "title": "Apple Ads Platform API vs Microsoft Advertising API",
        "url": "https://www.anchorterminal.com/compare/apple-ads-vs-microsoft-advertising-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/apple-ads-vs-snapchat-ads.json",
        "title": "Apple Ads Platform API vs Snapchat Ads API",
        "url": "https://www.anchorterminal.com/compare/apple-ads-vs-snapchat-ads"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-ads-api-vs-x-ads.json",
        "title": "Google Ads API vs X Ads API",
        "url": "https://www.anchorterminal.com/compare/google-ads-api-vs-x-ads"
      },
      {
        "json": "https://www.anchorterminal.com/compare/linkedin-marketing-api-vs-x-ads.json",
        "title": "LinkedIn Marketing APIs vs X Ads API",
        "url": "https://www.anchorterminal.com/compare/linkedin-marketing-api-vs-x-ads"
      },
      {
        "json": "https://www.anchorterminal.com/compare/meta-marketing-api-vs-x-ads.json",
        "title": "Meta Marketing API vs X Ads API",
        "url": "https://www.anchorterminal.com/compare/meta-marketing-api-vs-x-ads"
      },
      {
        "json": "https://www.anchorterminal.com/compare/microsoft-advertising-api-vs-x-ads.json",
        "title": "Microsoft Advertising API vs X Ads API",
        "url": "https://www.anchorterminal.com/compare/microsoft-advertising-api-vs-x-ads"
      },
      {
        "json": "https://www.anchorterminal.com/compare/snapchat-ads-vs-x-ads.json",
        "title": "Snapchat Ads API vs X Ads API",
        "url": "https://www.anchorterminal.com/compare/snapchat-ads-vs-x-ads"
      }
    ],
    "scores": [
      {
        "apple-ads": 35,
        "by": 40,
        "edge": "x-ads",
        "key": "reliability",
        "name": "Reliability",
        "weight": 16,
        "x-ads": 75
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "apple-ads": 69,
        "by": 5,
        "edge": "apple-ads",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "weight": 13,
        "x-ads": 64
      },
      {
        "apple-ads": 69,
        "by": 7,
        "edge": "apple-ads",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "weight": 13,
        "x-ads": 62
      },
      {
        "apple-ads": 68,
        "by": 20,
        "edge": "apple-ads",
        "key": "security",
        "name": "Security \u0026 auth",
        "weight": 14,
        "x-ads": 48
      },
      {
        "apple-ads": 20,
        "by": 0,
        "edge": "",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "weight": 10,
        "x-ads": 20
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "apple-ads": 48,
        "by": 15,
        "edge": "x-ads",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "weight": 7,
        "x-ads": 63
      },
      {
        "apple-ads": 66,
        "by": 4,
        "edge": "apple-ads",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "weight": 7,
        "x-ads": 62
      }
    ],
    "summary": "X Ads API scores 57.3 (C) on agent readiness against Apple Ads Platform API's 53.8 (D), and leads in 2 of 7 scored categories. Apple Ads Platform API leads on schema \u0026 documentation, agent ergonomics and security \u0026 auth. Both do ad reporting.",
    "verdicts": {
      "apple-ads": "Every response carries `RateLimit-*` headers and a 429 carries `Retry-After`, Apple maintains MIT client libraries in four languages, and read-only API roles exist. The API was first released in August 2026. No status page, SLA, published OpenAPI file, idempotency key or test account was found, and a person must create the credentials in the Apple Ads interface.",
      "x-ads": "Rate limits are published per endpoint type, a sandbox host never serves ads, and the X Ads MCP server has separate read and write scopes and creates campaigns paused. The REST API needs OAuth 1.0a signing and an approved app, no OpenAPI file covers it, and the official Python and Ruby SDKs were last released in May 2022."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/apple-ads-vs-x-ads",
    "json": "https://www.anchorterminal.com/compare/apple-ads-vs-x-ads.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/apple-ads-vs-x-ads.md",
    "slim": "https://www.anchorterminal.com/compare/apple-ads-vs-x-ads.min.md"
  },
  "markdown": "X Ads API scores 57.3 (C) on agent readiness against Apple Ads Platform API's 53.8 (D), and leads in 2 of 7 scored categories. Apple Ads Platform API leads on schema \u0026 documentation, agent ergonomics and security \u0026 auth. Both do ad reporting.\n\n- Apple Ads Platform API: grade D, 53.8/100, rank #699 of 950. Markdown https://www.anchorterminal.com/tools/apple-ads.md · JSON https://www.anchorterminal.com/api/v1/tools/apple-ads.json\n- X Ads API: grade C, 57.3/100, rank #616 of 950. Markdown https://www.anchorterminal.com/tools/x-ads.md · JSON https://www.anchorterminal.com/api/v1/tools/x-ads.json\n- Best advertising platform APIs for AI agents: https://www.anchorterminal.com/best/advertising/index.md\n- All 28 advertising comparisons: https://www.anchorterminal.com/compare/advertising/index.md\n\n## Which one, for what\n\n### Apple Ads Platform API (D)\n\nGood for: An agent that manages or reports on App Store search campaigns, or Apple Maps campaigns, for an advertiser whose administrator can grant an API role.\n\nAhead on:\n- Schema \u0026 documentation, 69 against 64\n- Agent ergonomics, 69 against 62\n- Security \u0026 auth, 68 against 48\n\nWatch for: The Platform API was first released in August 2026 and its changelog has one entry. The Campaign Management API 5 it replaces is sunset on 26 January 2027\n\n### X Ads API (C)\n\nGood for: An agent that manages or reports on X campaigns for an advertiser with an approved developer app, especially through the MCP server, where scopes separate reads from writes and writes start paused.\n\nAhead on:\n- Reliability, 75 against 35\n- Maintenance \u0026 community, 63 against 48\n\nWatch for: No OpenAPI file covers the Ads API. The published file (version 2.170, 178 paths) describes api.x.com only\n\n\n## Score by category\n\n| Category | Weight | Apple Ads Platform API | X Ads API | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 35 | 75 | X Ads API +40 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 69 | 64 | Apple Ads Platform API +5 |\n| Agent ergonomics | 13% (16.2 this run) | 69 | 62 | Apple Ads Platform API +7 |\n| Security \u0026 auth | 14% (17.5 this run) | 68 | 48 | Apple Ads Platform API +20 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 20 | 20 | even |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 48 | 63 | X Ads API +15 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 66 | 62 | Apple Ads Platform API +4 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **53.8 · D** | **57.3 · C** | |\n\n## Facts side by side\n\n| Fact | Apple Ads Platform API | X Ads API |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Apple | X Corp. |\n| Hosted endpoint | `https://api.ads.apple.com/v1` | `https://ads-api.x.com/mcp` |\n| Transports | HTTP | HTTP |\n| Auth | OAuth | OAuth |\n| Pricing | Free | Free |\n| x402 | no | no |\n| Licence | Proprietary service under the Apple Advertising Services Terms of Service. The client libraries are MIT | Proprietary service under the X Developer Agreement and its incorporated Developer Policy |\n| Read-only variant documented | no | yes |\n| llms.txt | no | yes |\n| Last release | 2026-08-14 | 2026-09-17 |\n| Terms last updated | no date given | 2026-04-27 |\n| Privacy policy last updated | couldn't be read | couldn't be read |\n| Customer content may train models | yes | not found in the text |\n| Terms restrict automated access | not found in the text | not found in the text |\n| Terms restrict benchmarking | not found in the text | yes |\n| Terms or service can change without notice | not found in the text | not found in the text |\n| Arbitration or class-action waiver | not found in the text | yes |\n\n## Verdicts\n\n**Apple Ads Platform API.** Every response carries `RateLimit-*` headers and a 429 carries `Retry-After`, Apple maintains MIT client libraries in four languages, and read-only API roles exist. The API was first released in August 2026. No status page, SLA, published OpenAPI file, idempotency key or test account was found, and a person must create the credentials in the Apple Ads interface.\n\n**X Ads API.** Rate limits are published per endpoint type, a sandbox host never serves ads, and the X Ads MCP server has separate read and write scopes and creates campaigns paused. The REST API needs OAuth 1.0a signing and an approved app, no OpenAPI file covers it, and the official Python and Ruby SDKs were last released in May 2022.\n\n## Before you call either\n\n### Apple Ads Platform API\n\n1. Send `Authorization: Bearer {access_token}` and `X-AP-Context: adAccountId={adAccountId}` on every ad account call. Get the account id from `GET /v1/acls`\n2. Request a new access token every 3,600 seconds from `https://appleid.apple.com/auth/oauth2/token` with scope `searchadsorg`. The signed client secret lasts at most 180 days\n3. Read `RateLimit-Remaining` on each response. On a 429 wait the `Retry-After` seconds, then double the wait up to 16 seconds\n4. List and filter with POST to a `/query` endpoint, not GET with query parameters. Deleted entities return only when a filter asks for them\n5. On PUT send only the fields to change, and send the complete desired array for any array field. Create campaigns with `\"status\": \"PAUSED\"` before review\n\n### X Ads API\n\n1. Build against `https://ads-api-sandbox.x.com/12/` first. Create a test account with `POST accounts` and a funding instrument there before touching a live account\n2. On HTTP 429 wait until the time in `x-rate-limit-reset`. On 503 wait for `retry-after`. The docs say apps that ignore these can be throttled or lose access without notice\n3. Read the account-level limit from `x-account-rate-limit-*` when present and use `x-rate-limit-*` only when it is absent\n4. For a read-only MCP session request `ads.read offline.access` only. Without `offline.access` the token expires in about two hours with no refresh\n5. Page with `count` (1 to 1,000, default 200) and `cursor` until `next_cursor` is null. Analytics endpoints page by time range instead, and `with_total_count` cannot be combined with `cursor`\n\n## Questions\n\n### Which is better for AI agents, Apple Ads Platform API or X Ads API?\n\nX Ads API scores 57.3 (C) on agent readiness against Apple Ads Platform API's 53.8 (D), and leads in 2 of 7 scored categories. Apple Ads Platform API leads on schema \u0026 documentation, agent ergonomics and security \u0026 auth.\n\n### Do Apple Ads Platform API and X Ads API need an API key?\n\nBoth use an OAuth sign-in.\n\n### Can an agent call Apple Ads Platform API and X Ads API without installing anything?\n\nYes. Apple Ads Platform API has a hosted endpoint at https://api.ads.apple.com/v1 and X Ads API at https://ads-api.x.com/mcp.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/apple-ads-vs-x-ads.json, and with the fewest tokens: https://www.anchorterminal.com/compare/apple-ads-vs-x-ads.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"apple-ads\", \"b\": \"x-ads\"}`. From a terminal: `anchor compare apple-ads x-ads`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/apple-ads.json and https://www.anchorterminal.com/api/v1/tools/x-ads.json\n\n## Other comparisons with Apple Ads Platform API or X Ads API\n\n- [Amazon Ads API vs Apple Ads Platform API](https://www.anchorterminal.com/compare/amazon-ads-api-vs-apple-ads.md)\n- [Amazon Ads API vs X Ads API](https://www.anchorterminal.com/compare/amazon-ads-api-vs-x-ads.md)\n- [Apple Ads Platform API vs Google Ads API](https://www.anchorterminal.com/compare/apple-ads-vs-google-ads-api.md)\n- [Apple Ads Platform API vs LinkedIn Marketing APIs](https://www.anchorterminal.com/compare/apple-ads-vs-linkedin-marketing-api.md)\n- [Apple Ads Platform API vs Meta Marketing API](https://www.anchorterminal.com/compare/apple-ads-vs-meta-marketing-api.md)\n- [Apple Ads Platform API vs Microsoft Advertising API](https://www.anchorterminal.com/compare/apple-ads-vs-microsoft-advertising-api.md)\n- [Apple Ads Platform API vs Snapchat Ads API](https://www.anchorterminal.com/compare/apple-ads-vs-snapchat-ads.md)\n- [Google Ads API vs X Ads API](https://www.anchorterminal.com/compare/google-ads-api-vs-x-ads.md)\n- [LinkedIn Marketing APIs vs X Ads API](https://www.anchorterminal.com/compare/linkedin-marketing-api-vs-x-ads.md)\n- [Meta Marketing API vs X Ads API](https://www.anchorterminal.com/compare/meta-marketing-api-vs-x-ads.md)\n- [Microsoft Advertising API vs X Ads API](https://www.anchorterminal.com/compare/microsoft-advertising-api-vs-x-ads.md)\n- [Snapchat Ads API vs X Ads API](https://www.anchorterminal.com/compare/snapchat-ads-vs-x-ads.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-10",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Apple Ads Platform API vs X Ads API",
        "url": ""
      }
    ],
    "description": "X Ads scores 57.3 (C) to Apple Ads Platform's 53.8 (D) for ad reporting. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Apple Ads Platform API D 53.8",
      "X Ads API C 57.3",
      "scores"
    ],
    "h1": "Apple Ads Platform API vs X Ads API",
    "image": "https://www.anchorterminal.com/assets/og/compare-apple-ads-vs-x-ads.png",
    "path": "/compare/apple-ads-vs-x-ads",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Apple Ads Platform vs X Ads for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-10-09",
    "url": "https://www.anchorterminal.com/compare/apple-ads-vs-x-ads"
  },
  "tokens": {
    "markdown": 2350,
    "slim": 680
  },
  "version": 1
}
