{
 "blyg": "0.3",
 "id": "797kdy8d6ccsf859ya1c0yhga6",
 "kind": "thread",
 "origin": "https://rafael.fyi/blyg/",
 "page": "t/797kdy8d6ccsf859ya1c0yhga6/",
 "created": "2026-10-28T08:19:57Z",
 "updated": "2026-10-28T08:19:57Z",
 "version": 1,
 "content_md": "# Intelligent APIs\n\n*Will every customer get an API continuously shaped by its own agents?*\n\nA SaaS vendor publishes one API, and each customer works around the parts that don't fit. A person learns a workaround once. Different agents repeat it on every request, relying on context memory, potentially thousands of times a day, and every pass costs time and compute and risks an error. As compute and code become less expensive, a vendor can fit the API to each customer instead of to the ideal or average one.\n\nThis means we're well on our way to **intelligent APIs**. They have three parts:\n\n- **A shared core:** the vendor's records and API, the same for every customer and kept accurate by the vendor.\n- **Operations:** a small set of general-purpose ones that agents call, such as search, read, create and update.\n- **A customer layer** in between: saved queries, precomputed totals, the customer's terms for things, and its business rules.\n\nWhat makes an API intelligent is a continuous, and evolutionary, feedback loop. The vendor's software watches how a customer (and its agents) use the API, proposes changes to that customer's layer, tests them against the customer's recent traffic, and ships them as versions it can roll back, with the customer's approval for anything that changes meaning or permissions.\n\n## Even the best APIs today are updated by admins, as step-changes\n\nStripe, Shopify and Twilio set the standard for APIs. Each already varies by customer in some way:\n\n- **Versions.** Stripe keeps each account on the API version it started with, and translates every response into that version's format.\n- **Response shape.** Stripe's `expand` pulls related records into one response. Shopify's GraphQL lets each request choose exactly which fields come back.\n- **Data model.** Shopify merchants can define their own record types.\n- **Logic.** Shopify Functions and Twilio Functions run code the customer wrote inside the vendor's platform.\n\nEach is set by a person and stays put until a person changes it. Desk research has found no vendor that documents an API tuning itself to how each customer uses it.\n\n## Salesforce has all three parts, built by hand for people\n\n**Each company can download a description of its own setup.** Salesforce's [SOAP API guide](https://developer.salesforce.com/docs/platform/api/guide/sforce-api-partner.html) offers two. The Enterprise WSDL is built \"for a single Salesforce organization.\" It lists that company's objects and fields, and must be downloaded again \"when changes are made to the custom objects or fields in their org.\" The Partner WSDL is generic and works \"within any organization,\" which is why partners use it. Same operations; the difference is whether the description includes the customer's data model. A REST API beta goes further and [generates an OpenAPI file](https://developer.salesforce.com/docs/platform/api-rest/guide/openapi-beta.html) covering resources \"that reflect your customizations and configurations.\"\n\n**Agents get standard tools, selected per team.** Salesforce's standard MCP servers offer [\"a fixed set of tools\"](https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/servers-reference.html) for reading, creating, updating, deleting and querying records, and calls run with the user's permissions. Admins can then [build custom servers](https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/custom-servers.html) for each role, \"a sales rep server, a support agent server,\" mixing those tools with the company's automations, because \"beyond a few dozen tools, an AI client struggles to select the right one.\"\n\nSalesforce also has a customer layer: formula fields, roll-up summaries, validation rules, list views, reports and Flows, set up for each company. But people build it by hand, for people. What's missing is a layer shaped by how agents actually use the system, and an automated loop that keeps it up to date.\n\n**Industries already get their own(ish) designs.** Industry clouds such as Health Cloud, now [Agentforce Health](https://help.salesforce.com/s/articleView?id=ind.admin_planning.htm&type=5), add their own data model and setup on the same platform. One industry version became a separate business: Veeva built its life-sciences CRM on Salesforce, and its [annual report](https://www.sec.gov/Archives/edgar/data/1393052/000139305225000022/veev-20250131.htm) says it is now moving customers to its own platform and won't renew the agreement.\n\n**Most of the customization happens in implementation.** Any admin can add a field in minutes; the real work is deciding which fields, rules and reports the business needs. Partners — usually people in a vendor's solutions engineering or customer success team — study the business, translate it into objects, fields, rules and workflows, and hand it over to the customer's admins. A [2021 IDC study that Salesforce sponsored](https://investor.salesforce.com/news/news-details/2021/New-Study-Finds-Salesforce-Economy-Will-Create-9.3-Million-Jobs-and-1.6-Trillion-in-New-Business-Revenues-by-2026/default.aspx) projected that its ecosystem would make \"$6.19 for every $1 Salesforce makes by 2026.\" Much of the money around Salesforce sits outside Salesforce itself.\n\nThat model has two limits:\n\n- **It drifts.** Salesforce's [Trailhead unit on field cleanup](https://trailhead.salesforce.com/content/learn/modules/data-cleanup-fundamentals/clean-up-unused-fields-and-field-configuration) warns that \"AI tools can get confused by empty or unused fields,\" and notes that \"in older systems, many fields … stop being used over time.\" The fix it teaches is manual, one field at a time.\n- **It works from snapshots.** Discovery relies on interviews, reports and occasional usage reviews. It rarely sees which questions people ask, day after day.\n\nAgent traffic, ideally via traces, can show exactly what's needed: which questions get asked, which fields get read and which never do.\n\n## Two customers on one CRM need different layers\n\nPicture a pharmaceutical sales team and a software sales team on the same Salesforce product.\n\n**The pharma team.** Every visit to a doctor is also a compliance record: who can be visited, which samples are allowed, what can be said. Its agents ask: \"Which doctors in my territory can I still see this quarter, and what can I leave them?\" Its layer is mostly rules that every update must pass.\n\n**The software team.** Its agents ask: \"Which accounts have rising product usage but no open deal?\" Most of what it needs is a daily view that combines CRM records with product-usage data.\n\nThe harder test is two software companies that define \"at risk\" differently. An industry version would build in one definition. A customer layer can hold each company's.\n\n## The vendor is better placed to do part of the work\n\nThose differences matter because agents pay for every mismatch on every call. In the review behind [[71jexkhsyr9e7c70vadqkz5ba6]], a different vendor's API returned 20 records per call, so reading 113,000 records took 5,650 calls and an hour and a half. Bulk export would fix that case. It wouldn't stop an agent from rebuilding the same total from raw records on every question, and getting a slightly different answer each time.\n\nThere are two main objections so far:\n\n- **Customers can do this themselves.** Many larger companies copy each vendor's data into their own warehouse and model it there.\n- **General-purpose tools keep improving.** Cloudflare's [Code Mode](https://blog.cloudflare.com/code-mode-mcp/) puts its whole API behind two tools, and the agent writes code against the API itself. Maybe that's enough.\n\nBoth move the work rather than remove it. Someone still has to turn raw records into a small, correct answer. As one reader of the readiness post put it, \"pre-filtering/sorting/processing is where you get lots of gains.\"\n\nThe vendor is better placed to do part of that work, in four cases:\n\n- **Freshness.** It has the live data, with no sync delay.\n- **Data it never exports.** It knows internal states that never reach a warehouse.\n- **Changes.** Safeguards belong where the update happens, not in a copy.\n- **Reach.** A total computed at the source serves every agent and tool, not just the ones wired to the warehouse.\n\nThe split I'd propose: the vendor keeps the data accurate, the customer makes it useful, and an intelligent API lets the vendor take on part of the second job.\n\n## History shows how architectures converge to a fixed core, cheap customization, and a customization limit\n\nThis pattern isn't new. By the 1930s, IBM's tabulating machines were standard, and each shop wired its own plug-in control panel for each job. Salesforce made customization cheap by turning it into settings that one shared platform reads per customer, while the core stayed fixed.\n\nBut there's a limit. Before 1883, each American railroad ran on its own time; once trains from different lines had to connect, standard time zones replaced them. Customization wins inside one business. Where businesses have to exchange data, such as invoices, payments and orders, the shared format has to win.\n\n## Three requirements: one core, a safe loop, clear ownership\n\n1. **One accurate core.** Every customer's query or rule is a definition over the shared records, never a separate copy of them. Answers stay explainable, and customers can still exchange data in the shared format.\n2. **A loop that learns safely.** The vendor proposes changes from the customer's call logs and tests each one by replaying the customer's recent reads in shadow mode, and trying writes in a sandbox. It ships each change as a version that can be rolled back, and the customer approves anything that changes a definition or a permission. Those logs are the customer's data, so the contract should say who can read them and what they're used for.\n3. **Clear ownership and pricing.** The contract says who owns the customer layer and whether it can be exported. Pricing will likely shift from seats toward usage; Salesforce's hosted MCP servers already [bill through Flex Credits](https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/hosted-mcp-servers-overview.html).\n\nSalesforce already has the per-company description, the per-team tools, a hand-built customer layer and the industry versions. What it lacks is the loop that shapes that layer from agent usage; today people set up each piece by hand. Whoever builds that loop, Salesforce or a challenger, turns implementation from a one-time project into a service that keeps adjusting to each customer.\n",
 "content_html": "<h1>Intelligent APIs</h1>\n<div class=\"blyg-tk-gen\"><p><em>Will every customer get an API continuously shaped by its own agents?</em></p>\n<p>A SaaS vendor publishes one API, and each customer works around the parts that don't fit. A person learns a workaround once. Different agents repeat it on every request, relying on context memory, potentially thousands of times a day, and every pass costs time and compute and risks an error. As compute and code become less expensive, a vendor can fit the API to each customer instead of to the ideal or average one.</p>\n<p>This means we're well on our way to <strong>intelligent APIs</strong>. They have three parts:</p>\n<ul>\n<li><strong>A shared core:</strong> the vendor's records and API, the same for every customer and kept accurate by the vendor.</li>\n<li><strong>Operations:</strong> a small set of general-purpose ones that agents call, such as search, read, create and update.</li>\n<li><strong>A customer layer</strong> in between: saved queries, precomputed totals, the customer's terms for things, and its business rules.</li>\n</ul>\n<p>What makes an API intelligent is a continuous, and evolutionary, feedback loop. The vendor's software watches how a customer (and its agents) use the API, proposes changes to that customer's layer, tests them against the customer's recent traffic, and ships them as versions it can roll back, with the customer's approval for anything that changes meaning or permissions.</p>\n<h2>Even the best APIs today are updated by admins, as step-changes</h2>\n<p>Stripe, Shopify and Twilio set the standard for APIs. Each already varies by customer in some way:</p>\n<ul>\n<li><strong>Versions.</strong> Stripe keeps each account on the API version it started with, and translates every response into that version's format.</li>\n<li><strong>Response shape.</strong> Stripe's <code>expand</code> pulls related records into one response. Shopify's GraphQL lets each request choose exactly which fields come back.</li>\n<li><strong>Data model.</strong> Shopify merchants can define their own record types.</li>\n<li><strong>Logic.</strong> Shopify Functions and Twilio Functions run code the customer wrote inside the vendor's platform.</li>\n</ul>\n<p>Each is set by a person and stays put until a person changes it. Desk research has found no vendor that documents an API tuning itself to how each customer uses it.</p>\n<h2>Salesforce has all three parts, built by hand for people</h2>\n<p><strong>Each company can download a description of its own setup.</strong> Salesforce's <a href=\"https://developer.salesforce.com/docs/platform/api/guide/sforce-api-partner.html\">SOAP API guide</a> offers two. The Enterprise WSDL is built \"for a single Salesforce organization.\" It lists that company's objects and fields, and must be downloaded again \"when changes are made to the custom objects or fields in their org.\" The Partner WSDL is generic and works \"within any organization,\" which is why partners use it. Same operations; the difference is whether the description includes the customer's data model. A REST API beta goes further and <a href=\"https://developer.salesforce.com/docs/platform/api-rest/guide/openapi-beta.html\">generates an OpenAPI file</a> covering resources \"that reflect your customizations and configurations.\"</p>\n<p><strong>Agents get standard tools, selected per team.</strong> Salesforce's standard MCP servers offer <a href=\"https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/servers-reference.html\">\"a fixed set of tools\"</a> for reading, creating, updating, deleting and querying records, and calls run with the user's permissions. Admins can then <a href=\"https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/custom-servers.html\">build custom servers</a> for each role, \"a sales rep server, a support agent server,\" mixing those tools with the company's automations, because \"beyond a few dozen tools, an AI client struggles to select the right one.\"</p>\n<p>Salesforce also has a customer layer: formula fields, roll-up summaries, validation rules, list views, reports and Flows, set up for each company. But people build it by hand, for people. What's missing is a layer shaped by how agents actually use the system, and an automated loop that keeps it up to date.</p>\n<p><strong>Industries already get their own(ish) designs.</strong> Industry clouds such as Health Cloud, now <a href=\"https://help.salesforce.com/s/articleView?id=ind.admin_planning.htm&amp;type=5\">Agentforce Health</a>, add their own data model and setup on the same platform. One industry version became a separate business: Veeva built its life-sciences CRM on Salesforce, and its <a href=\"https://www.sec.gov/Archives/edgar/data/1393052/000139305225000022/veev-20250131.htm\">annual report</a> says it is now moving customers to its own platform and won't renew the agreement.</p>\n<p><strong>Most of the customization happens in implementation.</strong> Any admin can add a field in minutes; the real work is deciding which fields, rules and reports the business needs. Partners — usually people in a vendor's solutions engineering or customer success team — study the business, translate it into objects, fields, rules and workflows, and hand it over to the customer's admins. A <a href=\"https://investor.salesforce.com/news/news-details/2021/New-Study-Finds-Salesforce-Economy-Will-Create-9.3-Million-Jobs-and-1.6-Trillion-in-New-Business-Revenues-by-2026/default.aspx\">2021 IDC study that Salesforce sponsored</a> projected that its ecosystem would make \"$6.19 for every $1 Salesforce makes by 2026.\" Much of the money around Salesforce sits outside Salesforce itself.</p>\n<p>That model has two limits:</p>\n<ul>\n<li><strong>It drifts.</strong> Salesforce's <a href=\"https://trailhead.salesforce.com/content/learn/modules/data-cleanup-fundamentals/clean-up-unused-fields-and-field-configuration\">Trailhead unit on field cleanup</a> warns that \"AI tools can get confused by empty or unused fields,\" and notes that \"in older systems, many fields … stop being used over time.\" The fix it teaches is manual, one field at a time.</li>\n<li><strong>It works from snapshots.</strong> Discovery relies on interviews, reports and occasional usage reviews. It rarely sees which questions people ask, day after day.</li>\n</ul>\n<p>Agent traffic, ideally via traces, can show exactly what's needed: which questions get asked, which fields get read and which never do.</p>\n<h2>Two customers on one CRM need different layers</h2>\n<p>Picture a pharmaceutical sales team and a software sales team on the same Salesforce product.</p>\n<p><strong>The pharma team.</strong> Every visit to a doctor is also a compliance record: who can be visited, which samples are allowed, what can be said. Its agents ask: \"Which doctors in my territory can I still see this quarter, and what can I leave them?\" Its layer is mostly rules that every update must pass.</p>\n<p><strong>The software team.</strong> Its agents ask: \"Which accounts have rising product usage but no open deal?\" Most of what it needs is a daily view that combines CRM records with product-usage data.</p>\n<p>The harder test is two software companies that define \"at risk\" differently. An industry version would build in one definition. A customer layer can hold each company's.</p>\n<h2>The vendor is better placed to do part of the work</h2>\n<p>Those differences matter because agents pay for every mismatch on every call. In the review behind <a href=\"https://rafael.fyi/blyg/t/71jexkhsyr9e7c70vadqkz5ba6/\">The Agent Readiness Test for Enterprise Operations Software</a>, a different vendor's API returned 20 records per call, so reading 113,000 records took 5,650 calls and an hour and a half. Bulk export would fix that case. It wouldn't stop an agent from rebuilding the same total from raw records on every question, and getting a slightly different answer each time.</p>\n<p>There are two main objections so far:</p>\n<ul>\n<li><strong>Customers can do this themselves.</strong> Many larger companies copy each vendor's data into their own warehouse and model it there.</li>\n<li><strong>General-purpose tools keep improving.</strong> Cloudflare's <a href=\"https://blog.cloudflare.com/code-mode-mcp/\">Code Mode</a> puts its whole API behind two tools, and the agent writes code against the API itself. Maybe that's enough.</li>\n</ul>\n<p>Both move the work rather than remove it. Someone still has to turn raw records into a small, correct answer. As one reader of the readiness post put it, \"pre-filtering/sorting/processing is where you get lots of gains.\"</p>\n<p>The vendor is better placed to do part of that work, in four cases:</p>\n<ul>\n<li><strong>Freshness.</strong> It has the live data, with no sync delay.</li>\n<li><strong>Data it never exports.</strong> It knows internal states that never reach a warehouse.</li>\n<li><strong>Changes.</strong> Safeguards belong where the update happens, not in a copy.</li>\n<li><strong>Reach.</strong> A total computed at the source serves every agent and tool, not just the ones wired to the warehouse.</li>\n</ul>\n<p>The split I'd propose: the vendor keeps the data accurate, the customer makes it useful, and an intelligent API lets the vendor take on part of the second job.</p>\n<h2>History shows how architectures converge to a fixed core, cheap customization, and a customization limit</h2>\n<p>This pattern isn't new. By the 1930s, IBM's tabulating machines were standard, and each shop wired its own plug-in control panel for each job. Salesforce made customization cheap by turning it into settings that one shared platform reads per customer, while the core stayed fixed.</p>\n<p>But there's a limit. Before 1883, each American railroad ran on its own time; once trains from different lines had to connect, standard time zones replaced them. Customization wins inside one business. Where businesses have to exchange data, such as invoices, payments and orders, the shared format has to win.</p>\n<h2>Three requirements: one core, a safe loop, clear ownership</h2>\n<ol>\n<li><strong>One accurate core.</strong> Every customer's query or rule is a definition over the shared records, never a separate copy of them. Answers stay explainable, and customers can still exchange data in the shared format.</li>\n<li><strong>A loop that learns safely.</strong> The vendor proposes changes from the customer's call logs and tests each one by replaying the customer's recent reads in shadow mode, and trying writes in a sandbox. It ships each change as a version that can be rolled back, and the customer approves anything that changes a definition or a permission. Those logs are the customer's data, so the contract should say who can read them and what they're used for.</li>\n<li><strong>Clear ownership and pricing.</strong> The contract says who owns the customer layer and whether it can be exported. Pricing will likely shift from seats toward usage; Salesforce's hosted MCP servers already <a href=\"https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/hosted-mcp-servers-overview.html\">bill through Flex Credits</a>.</li>\n</ol>\n<p>Salesforce already has the per-company description, the per-team tools, a hand-built customer layer and the industry versions. What it lacks is the loop that shapes that layer from agent usage; today people set up each piece by hand. Whoever builds that loop, Salesforce or a challenger, turns implementation from a one-time project into a service that keeps adjusting to each customer.</p></div>",
 "content_hash": "sha256:ccc086e50bf92682377633daa7eacaf023b1643f7a243f0b391bef1fb83257f0",
 "media": [],
 "transclusions": [],
 "generated": [
  {
   "sources": [],
   "model": "claude-opus-5-5",
   "at": "2026-10-28T08:19:57Z"
  }
 ],
 "changelog": [
  {
   "version": 1,
   "at": "2026-10-28T08:19:57Z",
   "note": "First version"
  }
 ]
}
