All comparisonsCapability matrix Sources: Tray.ai docs, reviewed 
Why this compare page exists

Two integration platforms. One draws on a catalogue of prebuilt apps; the other builds what you need from an API’s own documentation, any API, in hours, not quarters. This page compares what each actually requires of your team, across fifty-four jobs.

The verdict, if you read nothing else

Tray's AI builds, validates and debugs a failed run, on every plan. Then it leaves the agent surface: a run in flight, an alert rule, one fix shipped to an installed base, a version restored, tenant health. APIANT's AI has named tools in all of them.

  1. 1Turning the whole estate off is one call, and one call turns exactly that set back on.On Tray the stop is a button per workflow, and neither published OpenAPI spec carries an endpoint that stops an execution.Capability 37
  2. 2One build carries the universal logic while each account's differences stay in settings, so one corrected integration reaches every linked account in a single deploy, verified at 232 locations.Tray upgrades a breaking change one solution instance per call, and their own sequence ends "Notify the end users of these instances to run the config wizard."Capability 31
  3. 3A vendor's breaking API change is fixed in one connector, and the platform names which automations reference it.Tray: "you will need to manually update it yourself", with no way to "subscribe to updates for a particular connector".Capability 34
  4. 4Quarter end's 80 MB file takes the same path as a normal night's 12 MB.Tray publishes 6 MB between any two steps, 1 MB into a webhook trigger, and 400 KB per parallel thread.Capability 02
  5. 5The configuration host, the authentication callback and the webhook receiver are hostnames you own.Tray's de-branding substitutes their own wildcard domains, and the OAuth callback stays on auth.tray.io where a vendor accepts a single redirect URL.Capability 50
  6. 6One build goes as deep as the API allows and serves hundreds of customers, each one's differences living in settings rather than in copies, and the screen they configure on is built with the platform's own form tools.Tray Embedded "is available to Enterprise customers as an optional add-on", and the application behind the wizard is yours to write.Capability 28
  7. 7One request produces a whole automation: nested conditions, loops, typed subroutines any automation can call by UUID, and parallel fan-out with a real fan-in, compiled from a single intent document. One of our own products is 65 automations across 8 folders with shared subroutines and an installer past 100 steps, in production.Tray.ai recommends the same split into parent and child workflows, and the run their AI can start to prove one of those pieces is the whole workflow, against the real systems.Capability 17

Each line opens the row it came from, with the scenario and the documentation behind it. Read them sceptically: that is what the rest of this page is for.

So this is not a page of claims. It is a page of jobs. A real thing that has to happen. What happens on APIANT, step by step. What the same job requires on Tray.ai, in its own documentation's words.

Apply the same scepticism to us. Read the architecture, not the adjectives. And take three questions with you into every vendor conversation you have after this one:

These three tests run on every one of the fifty-four capabilities on this page. By the third section you will be asking them yourself.

APIANT vs Tray.ai · for the executive who owns the integration decision

Both platforms let an AI build your integrations. The difference is what the AI hands you afterwards.

Integration work is where your roadmap goes to wait. Deals stall on a connector that does not exist yet, engineers get pulled off product to fix a sync, and a single "it didn't work for one customer last Tuesday" can absorb a week of senior time. Whichever platform you choose, you will live inside its architecture for years. This page shows you what each one actually requires of your team, job by job.

A note on method. Every vendor in this category claims depth, autonomy, and reliability, and you have no way to adjudicate competing claims. So this page does something else: it takes concrete jobs and shows what each platform's architecture requires to get them done. APIANT's side is a walkthrough of shipping capabilities. Tray.ai's side is derived from Tray.ai's own documentation, help centre and pricing page, quoted where a quote beats a paraphrase. Where their design handles a job well, we say so.

How to read this page. Every row is one capability. Bright text is what you get on APIANT; muted text after the dot is what the same job costs on Tray.ai. Skim the fifty-four takeaways and open any row that matters. Inside each: the problem that forced the capability to exist, a concrete scenario, how it goes on APIANT, and what the same outcome requires on Tray.ai. Skim the bold lines first. The argument is the pile, not any single row.

54 capabilities All comparisons
Act 1 of 8

The foundation. Why any of the rest is possible.

Every saved version stays readable and diffable here, listed, opened and compared step by step, with no published cliff on the record; Tray runs two clocks, "Edit history: Viewable up to 12 months. Rollback feature: Can rollback to a previous workflow version up to 30 days prior to your current changes", so a March change read in September is inside the readable window and outside the reversible one, and 6 MB is the ceiling between any two steps.

Everything on this page traces back to one design decision made years before AI could build integrations: what is an integration made of? On APIANT the answer is structured data, all the way down. That choice looked like an implementation detail for a decade. It is now the whole ballgame.

01Integrations your team can open and read later

A new hire asks the AI to rework invoice mapping, or does it herself in twenty minutes. Either way, no engineer. On Tray.ai, readable for twelve months, reversible for thirty days.

Open the scenario
SAME1
Capability 01 · Everything else on this page depends on this one

Code cannot be safely edited by a machine, inspected by a non-developer, or replayed with its state intact.

The AI builds your integration as a visual flow your team can open, read, and change. Not as code only its author understood.

And that holds at every layer: the flow, the connectors inside it, each API operation, every mapping, every setting. All of it is structured data. That one choice is why a machine can edit it safely, a person can always inspect it, and a saved run can be replayed with its state intact.

The scenario Meridian's new integrations lead must change invoice mapping after the engineer left.

Meridian's new integrations lead must change invoice mapping after the engineer left.

In March an AI built Meridian's QuickBooks invoice sync. In September the supervising engineer is gone, and Dana, the new integrations lead, not a developer, must remap line items for one segment.

Swipe to see the whole diagram ON APIANT Trigger Map QuickBooks The AI built this. Dana opens the same artifact, reads it, edits one mapping node. Dana ON TRAY.AI (AI-BUILT) Edit history She can open it. Readable for 12 months, reversible for 30 days. No rollback to March.
On APIANT
  1. Dana asks the AI to remap invoice line items for the affected segment. It opens the same artifact she would open, edits that one mapping node, retests against a saved real run, and commits a new version.
  2. Or she does it herself: the integration renders as the visual flow the AI built, because the AI and the editor operate one artifact, a structured document rather than code. She reads the steps in order and clicks the mapping to see which fields feed which, and the blocks inside open the same way.
  3. Either way the edit targets one node, so its blast radius is that node, and she can compare the new version against March's line by line. Every earlier version is kept, ready to redeploy if the change was wrong. About twenty minutes, no engineer.
  4. The March artifact and the September artifact are the same living thing.

Elapsed: about twenty minutes. No engineer involved. The March artifact and the September artifact are the same living thing.

On Tray.ai

Ask their AI to read an existing integration and it does: get_workflow returns the live structure, and it is the same artifact a person opens in the visual builder.

Test 01 this is the row where it bites hardest

Both let an AI build the integration. The difference is what the AI hands you afterwards.

02Any data format, any file size

Quarter-end's 80MB file clears by 4am on the same path as a normal night. On Tray.ai, 6 MB between any two steps and 1 MB into a webhook.

Open the scenario
LONGER2
Capability 02

Integrations died on large payloads, and on formats the platform had not anticipated.

One unified data processing engine: format-agnostic, large payloads on the ordinary path, one open query standard

Every record, file, and API response flows through a single engine with a small memory footprint. The platform does not care what shape your data arrives in or how much of it there is.

The scenario Caldera Health's 38 clinics need overnight claims reconciled before 7am doors open.

Caldera Health's 38 clinics need overnight claims reconciled before 7am doors open.

The nightly claims and inventory export lands at 1am as one file. At quarter end it is 80MB, and it has to be parsed, reconciled and posted before clinics open at 7am. Nobody is awake to babysit it.

Swipe to see the whole diagram ON APIANT Nightly file 80MB at quarter end Unified engine any format, any size Billing, 7am ON TRAY.AI Same file inbound 1 MB webhook cap 6 MB between any two steps, chunking to 400 KB threads
On APIANT
  1. The AI wrote the reconciliation logic once. The engine normalizes any format into one internal model, so the same transformation runs whether the source sends structured records, spreadsheets, or something custom, and queries use one open standard everywhere.
  2. No per-format branch for the AI to author or a person to maintain. Its memory footprint stays small, so the 80MB quarter-end file takes Tuesday's path: no storage hop, no chunking. Corrections post by 4am.
  3. If a record fails, the AI reads the payload at that step and says what arrived, and Caldera's operator can open the same run herself.

Corrections post by 4am. Quarter end is not an incident category.

On Tray.ai

Their AI can build the chunking, and the ceiling it builds against is published: a nightly file moves through in pieces sized under 6 MB, with 1 MB into the webhook trigger and an 8 KB maximum row on the CSV path. Asking does not raise the ceiling; it produces more steps to stay inside it.

Built for this, in the live inventory:the unified data engine, under every one of the 138 tools
Test 02 depth claims dissolve on contact with one big file
03Your own dev and production servers

Your syncs queue behind your own traffic, at your own domain, on a dedicated server pair from the entry paid plan. On Tray.ai, a data region and separate orgs, not a dev and prod server pair of your own.

Open the scenario
MANUAL

Shared infrastructure means shared rate limits, shared incidents, and commingled customer data.

03 · A dedicated dev and production server pair, on your own domain, single tenant, from the first paid tier

The scenarioThird Coast Credit Union: 190,000 members, one circled questionnaire line, nine days

Third Coast Credit Union: 190,000 members, one circled questionnaire line, nine days

A 41-branch credit union circles one line in its security review: confirm member data is not commingled with other tenants, and name the domain traffic terminates on. The board votes in nine days.

Priya asks the AI what runs on her servers: a dedicated dev and production pair, her domain, no other tenant in the queue. She can check it herself, or shut them down.

Not something their AI can do. Not reachable from their AI: no org, region or hosting tool exists on their agent surface. A person requests a data region and stands up separate Tray orgs to get a dev-to-prod path.

04Broken builds refused before they ship

Structurally invalid work is refused at build time, instead of surfacing later in production logs. On Tray.ai, structural checks pass a mapping that resolves cleanly onto the wrong field.

Open the scenario
SAME

A generated integration that is syntactically fine and semantically wrong reaches production, and nobody knows until customer data is wrong.

04 · A deterministic compiler that refuses structurally invalid work before it exists

The scenarioHalvorsen Mutual: 6,200 hail claims ride on a generated payments integration

Halvorsen Mutual: 6,200 hail claims ride on a generated payments integration

After a hail week, 6,200 claims queue up. The integration pushing approved amounts into payments compiled and deployed cleanly. Farmers on the phone tell the claims supervisor which field it wrote.

The AI's intent passes through a constrained schema; the compiler refuses invalid structures at the door. It then tests the build on a real saved claim and reads what reached the payment field. Dee can open that run too.

Ask their AI to build and every mutating call validates server-side, in their words, so the model cannot write a malformed workflow.

05Build a piece once, reuse it everywhere

Ask the AI which integrations use a broken lookup, fix it once, and every one of them inherits the fix, including the ones your team forgot about. On Tray.ai, shared workflows by reference, shared steps by clipboard.

Open the scenario
SAME

The same connector logic was being rebuilt per customer, and the copies diverged.

05 · Reusable building blocks: assemblies, modules, subassemblies

The scenarioCardwell Staffing: 60 trusts, 60 drifting copies of one shift lookup

Cardwell Staffing: 60 trusts, 60 drifting copies of one shift lookup

The shift lookup was built once, then copied into 60 trust integrations, and a February timezone correction reached 41 copies. On an audit call, a liaison asks which version each trust runs today.

Marcus asks the AI which integrations run the shift lookup; it names the referencing assemblies and the automations using them. Built once, fixed once: all 60 trusts inherit it. He can walk the list himself. A layer up, the same holds for logic rather than connector code: a subroutine is a typed unit with declared inputs and outputs that the AI writes once and calls by UUID from any automation, and one of ours that refreshes next-class and next-appointment fields is wired into six callers.

Ask their AI for a shared piece and it creates a callable workflow and wires callers to it by name, which is the structure Tray itself recommends.

At scale, this means

The asset your company accumulates is a library of inspectable building blocks that any successor can open, not a portfolio of codebases that each had exactly one fluent reader, who has since changed jobs.

Act 2 of 8

Reaching any system, not just catalogued ones.

A connector for an API no catalog lists is built from that API's own documentation in hours, not quarters, and becomes one library entry, at whatever depth the API allows, that every customer's deployment then draws on instead of a copy per customer; on Tray one or two endpoints go through the HTTP Client, and their own guide sends "a full set of pre-configured operations" to the CDK as a TypeScript project, since "Creating new connectors in Connector Builder is no longer available" from February 2026.

Connector catalogs are where integration platforms compete in public, and it is the wrong contest. The integration a deal depends on is reliably the one no catalog lists. The real questions are time-to-new-connector, how deep the connector goes once it exists, and whether that one connector then serves every customer who needs it or gets copied and drifts per customer.

06Connectors built straight from an API's documentation

A niche partner API becomes a working connector in hours, not quarters, private endpoints included, and that one build carries all forty clients. Elsewhere it arrives as a Node project each of those clients needs kept alive. On Tray.ai, an uncatalogued API becomes a TypeScript project your team owns.

Open the scenario
MANUAL2
Capability 06

The integration the deal depended on was never in anyone's catalog, and the catalog vendor had no incentive to add it.

Connectors built from an API's own documentation, exposing every trigger and action the API offers, including private and partner endpoints no catalog lists

The scenario Northgate's largest client renews if a niche partner API integration ships this month.

Northgate's largest client renews if a niche partner API integration ships this month.

Membership holds and multi-site transfers live in a partner API behind an NDA, in no catalog anywhere. The client's renewal is conditioned on this integration existing within the month.

Swipe to see the whole diagram ON APIANT Partner API docs, NDA'd AI reads docs, builds + live-tests Connector every endpoint, stored as data ON TRAY.AI Same docs connector project (TS) build, publish, maintain
On APIANT
  1. Northgate points the AI at the partner API's documentation and asks for the connector. It reads the docs, works out the authentication scheme, and builds the connection itself.
  2. It scans the API's capability surface and creates the operations that matter, including the NDA'd endpoints no public catalog will ever carry. It tests each one against the live API with data it creates itself, reads the real responses, and corrects itself until they pass.
  3. Or a Northgate engineer builds the same operations by hand in the editor. Either way the connector is the same structured data: inspectable, reusable across all forty clients, serviceable by whoever is on staff in three years. The connector exists in a working session. The renewal conversation changes subject.

The connector exists in a working session. The renewal conversation changes subject.

On Tray.ai

Not something their AI can do. Not reachable from their AI, by their own statement. A developer leaves the agent surface for a TypeScript CDK project on Node 18, edits it by hand, deploys it from the CLI and shares it per email address.

Built for this, in the live inventory:/build-assemblyassembly toolset · 35 tools
Test 02 name the endpoint, then ask who builds and owns the artifact
07Vendor account signup and secure credential storage

Five integrations clear their vendor portal paperwork in one afternoon, with the credentials landing straight in the vault instead of a spreadsheet. On Tray.ai, registering the app on each vendor's portal stays a manual errand.

Open the scenario
LONGER2
Capability 07

Onboarding stalled for days on OAuth paperwork before a single record moved.

The authentication layer, including automated registration of OAuth applications on a vendor's developer portal, and credential vaulting

The scenario Brightline launches five integrations this quarter, each blocked by vendor portal paperwork.

Brightline launches five integrations this quarter, each blocked by vendor portal paperwork.

Five integrations launch this quarter, each blocked on registering an app on a vendor's developer portal: forms, callback URLs, credentials. It is nobody's job, so it becomes everybody's bottleneck.

On APIANT
  1. Brightline asks the AI for the paperwork. It drives a browser on each vendor's developer portal, registers the application, sets the callback, and captures the issued credentials straight into the platform's encrypted vault.
  2. Or Brightline's own admin fills the forms and saves the credentials to that same vault. Either way nothing sits in a spreadsheet, and either of them can list what the vault holds.
  3. The connection layer then picks the right authentication method per API, builds the connection, and verifies it with a live call, tokens refresh themselves, and every end customer authorizes with a click. Five portals, one afternoon.

Five portals, one afternoon, zero credentials in a spreadsheet.

On Tray.ai

Their AI can create an auth collection and poll it to completion. Two steps stay with a person: registering the app on the vendor's portal, which Tray puts on your account team, and the custom OAuth app itself, which their docs place in the workflow editor with no API alternative published.

Built for this, in the live inventory:/register-oauth-appkeyvault tools
Test 02 depth includes the steps before the first API call
08Field mapping reads the customer's live system

An onboarding call maps forty-one custom fields and a dropdown their admin invented, because the connector reads the customer's live tenant. On Tray.ai, some connectors carry the lookup; without one, the mapping is a hardcoded list from a test run.

Open the scenario
SAME1
Capability 08

Field mappings built against documentation break on contact with a customer who renamed things and added forty custom fields.

Live field discovery against the customer's own tenant: exact field names, types, custom fields, renamed objects, dropdowns populated from their real data

The scenario A 60-store retailer onboards a CRM customized for nine years, forty-one custom fields deep.

A 60-store retailer onboards a CRM customized for nine years, forty-one custom fields deep.

A 60-store retailer's CRM carries forty-one custom fields and a member tier dropdown whose values exist in no documentation. The mapping screen has to show their CRM, not the CRM in the manual.

On APIANT
  1. the onboarding lead asks the AI to build discovery into the connector, and it does: field discovery that interrogates the customer's own tenant live, dropdowns populated from the customer's real data.
  2. Exact field names and types as they exist today, custom fields included, renamed objects under their real names, so "member tier" offers the five values their admin invented instead of a guess.
  3. Or she maps the forty-one fields herself on that screen.
  4. Either way the values she is choosing from came from the customer's live account, not a static list written months earlier, and the call ends without a single "we'll get back to you."

The onboarding call maps forty-one custom fields without a single "we'll get back to you."

On Tray.ai

Their AI reads the customer's live system directly: call_connector runs the connector's own field-discovery lookups against a real tenant, so the reach is whatever lookup operations that connector's author wrote. Their own mapping guidance is that the automatic route may not return the fields you need, most often when they are nested, and that you will often have to hardcode the list and use test runs to find the exact field format. Mapping fields for an end user is built as a Script connector workflow, inside the Embedded add-on.

Built for this, in the live inventory:field discovery tools, assembly toolset
Test 01 the customer sees their own system, or they see the manual's
09Every way an API announces a change

Every API gets a vetted way of announcing changes, so records stop going missing or arriving twice. On Tray.ai, overlapping scheduled runs are missed rather than queued.

Open the scenario
SAME

Every vendor's API announces change differently, and picking the wrong mechanism means missed or duplicated records.

09 · Six ways a run can start

The scenarioRedwing Freight: nine carrier feeds, 1,400 tenders nightly, trucks double-dispatched

Redwing Freight: nine carrier feeds, 1,400 tenders nightly, trucks double-dispatched

Nine carrier systems, 1,400 load tenders a night. One feed replayed a status it had already sent and two trucks went to the same dock, so the night dispatcher now reconciles the tender log by hand.

The AI picks the right pattern per API and builds the trigger, or Dana's team picks it: polling for new records, polling for new-or-updated, manual webhooks, self-registering webhooks, service webhooks with event filtering, long-lived protocol listeners. Six vetted patterns either way, and which one a feed is using is visible on the trigger itself.

Their AI picks the trigger: list_connectors filters for trigger connectors and the step tools write a service, webhook or polling trigger into the workflow.

6 trigger skills

10Any modern API call, still readable

Ask the AI for an inference or a price calculation and it arrives as a step your team can open and check. On Tray.ai, the call outside the operation list is untyped until you fire it.

Open the scenario
LONGER

Create-read-update-delete alone cannot express what modern APIs do.

10 · Seven action primitives, including calls that return computed or generated data

The scenarioHalvard Mutual: two claim-intake steps the company cannot itself explain

Halvard Mutual: two claim-intake steps the company cannot itself explain

The photo-damage model and the fraud score in claims intake sit inside a code block whose author left in March. At 3,000 claims a month, adjusters quote repair numbers the company cannot account for.

Ask the AI for the fraud score and it builds the call as an invoke action, the primitive for operations that compute, transform, or generate. Or Renata's team builds it. Add, delete, find, get, list, update, and invoke: seven primitives, and either way the step opens as data rather than as a contractor's code block.

Their AI adds an HTTP Client step, and what it writes into that step is hand-assembled from the vendor's documentation: URL, auth header, and a response that arrives untyped. The output schema does not exist until a real call has fired against the live workspace.

7 action skills

11Vendor rate limits enforced across every account

Ask the AI to set the vendor's limit, or type it once yourself, and every account sharing that API queues against one 185-calls-per-10-seconds budget. On Tray.ai, throttling is a delay step placed in every workflow that shares the budget.

Open the scenario
LONGER

A vendor's rate limit is the real constraint on a multi-location sync, and hitting it corrupts a run.

11 · Throttling at three levels: connector, action, and connection

The scenarioAlder Pharmacy: 310 branches, one shared rate limit, 2:40am pages

Alder Pharmacy: 310 branches, one shared rate limit, 2:40am pages

310 branches sync to one supplier API that allows 120 calls per 10 seconds. A rate-limit rejection killed the nightly refill batch partway through, and branch queues opened at 8am short of data.

Tell the AI the vendor's published limit and it sets the throttle, at connector, action, or connection level, or Sunil types it once himself. Either way the platform enforces it across every automation and every account touching that API, with queueing and backoff, and either of them can read the current setting back. One deployment runs 232 locations against a single 185-calls-per-10-seconds budget.

Asking gets you a delay step, not a budget. There is no shared per-vendor allowance to set, so their AI places delays and writes a 429 watcher into every workflow that touches the API, and a raised limit is a conversation with the vendor. Platform concurrency is a support request.

At scale, this means

Time-to-new-connector is measured in working sessions, not sprints, and every connector you add, however obscure the API, joins the same inspectable library instead of adding one more codebase to the pile someone must maintain.

Act 3 of 8

Expressing business logic that survives the real world.

Fan-in completion and loop suppression are platform behaviour here; Tray's workflow-threads page has you count threads with atomic increment inside a 400 KB limit per thread, and their data synchronisation page has you build the echo guard from a field list you keep current in both directions.

Field-to-field mapping is the demo. The business is nested rules, parallel work, digests, approvals, waits, and the awkward requirement that makes your operation yours. The question for any platform: does that logic fit inside the model, where it stays visible and testable, or does it spill into code and patterns your team hand-builds? And a second question underneath it: how much of that logic lands in one go. Here the AI describes the whole automation in a single intent document, conditions and their nested boolean trees, loops, subroutine calls and latch groups included, and the platform compiles that description; the pieces it wrote are the pieces it later edits, tests and runs.

12Run hundreds in parallel, know when all finished

214 stores get overnight prices in minutes, and the 6am report fires once. On Tray.ai, fan-in is a counter you build and a timeout you remember to add.

Open the scenario
LONGER3
Capability 12

Processing two hundred locations in series took hours. In parallel, nothing knew when all of them had finished.

Latches: parallel fan-out with a real fan-in

Launch N child runs in parallel, and the platform itself knows when the last one completes, so the "everything is done, now reconcile" step is a primitive, not a science project.

The scenario A 214-store chain updates overnight prices; the 6am report must cover every store.

A 214-store chain updates overnight prices; the 6am report must cover every store.

A 214-store chain pushes overnight price updates, and serially it runs past opening. The hard part was never the fan-out. It is knowing that all 214 are done before the reconciliation report goes out.

Swipe to see the whole diagram ON APIANT Parent run Store 001 Store 002 … Store 214 Latch 214 / 214 Reconcile ON TRAY.AI Fire threads async Poll the counter Persist results a polling loop your team designs and owns atomic increment counter, 400 KB per thread
On APIANT
  1. She asks for the overnight push with one report at the end, and the AI builds it in one pass: the whole automation goes down as a single intent document the platform compiles, with a parent that fans out 214 child runs, one per store with that store's settings, and a wait step held by a latch group scoped to this account or to the linked accounts the stores run in. Or she assembles the same pattern herself and reads it back in the flow.
  2. Either way the latch is a platform primitive: each child checks in and out of a shared counter, the wait step watches that counter until it empties, and the interval and the race conditions are the platform's to get right rather than coordination logic your team writes, tests and maintains per integration. When the last of the 214 checks out, the latch releases and the reconciliation step runs exactly once, with every store's result in hand.
  3. Prices land in minutes, the report is on the director's desk at 6am, and your team wrote no coordination logic.

Prices land in minutes, the report is on the director's desk at 6am, and nobody wrote coordination logic.

On Tray.ai

Their AI can build the fan-out and the fan-in, because on Tray the fan-in is something you build: an account-level counter, an atomic increment, a five-second polling loop, and a running-time guard Tray tells you to add yourself. Each thread carries a 400 KB budget.

Built for this, in the live inventory:pattern-latches
Test 03 hand-built coordination is where 2am pages come from
13Two-way sync without the runaway update loop

Contact changes flow both ways on day one, without the overnight loop that rewrites one record 4,000 times. On Tray.ai, the echo guard is a field list somebody keeps current in both directions.

Open the scenario
LONGER3
Capability 13

Two systems updating each other trigger each other, forever.

Two-way sync with loop prevention as a first-class primitive

The scenario 22 physio clinics sync patient details both ways; a loop rate-limits every clinic.

22 physio clinics sync patient details both ways; a loop rate-limits every clinic.

22 clinics keep patient details identical in practice management and marketing CRM, editable from either side. One record was updated four thousand times overnight and both APIs rate-limited them.

On APIANT
  1. The clinic asks for contact details to match in both directions, and the AI builds the sync from the two-way pattern with echo suppression on by default: the platform recognizes changes the integration itself wrote and declines to bounce them back. It then tests the pair by pushing a change from each side and verifying no echo returns.
  2. Or the practice's own admin builds it from that same pattern. Either way the suppression rule and the conflict handling (both sides changed the same field) are visible, configurable nodes rather than folklore.
  3. The sync runs both directions on day one, and "infinite loop" is not in the runbook.

The sync runs both directions on day one, and "infinite loop" is not in the runbook.

On Tray.ai

Their AI can assemble the echo guard, and on Tray it is assembled: a payload comparison built from Object Helpers steps, plus a custom identifier written into each third-party system so the two sides can find each other. Adding a field later means adding it to the comparison in both directions.

Built for this, in the live inventory:assembly-bidirectional-sync/test-integration
Test 03 a naming convention is what stands between you and 4,000 writes
14One daily digest instead of hundreds of alerts

Customers get one 5pm summary instead of 400 pings, and nothing is lost when two runs land at once. On Tray.ai, the digest is a workflow that writes into a store and a schedule that drains it.

Open the scenario
LONGER

Customers wanted one daily digest, not four hundred notifications.

17 · Collector: aggregate items into named buckets across many runs, drained on a schedule

The scenarioKestrel Freight: 400 daily alerts, two big shippers asking to be unsubscribed

Kestrel Freight: 400 daily alerts, two big shippers asking to be unsubscribed

One Tuesday produced roughly 400 emails, and two of the largest accounts asked to be removed from notifications. The operations manager assembles the 5pm digest by hand, and she is away next week.

The operations manager asks for one 5pm summary and the AI builds the collector: events drop into a named bucket all day, drained on the schedule. She can build the same bucket herself. It is a dedicated primitive, safe when two runs land at once.

Their AI can author the digest, because on Tray a digest is a workflow: one that writes into a storage key, a schedule that drains it, and a per-recipient split. The accumulation has to fit inside a published 400 KB key or be split across keys somebody names.

pattern-collector

15Pause a job for days, resume automatically

A three-day follow-up needs one system, not a separate scheduler for somebody to own. On Tray.ai, a multi-day wait that resumes itself is not a documented platform behaviour.

Open the scenario
NOT DOCUMENTED

"Follow up in three days" required an external scheduler and a second system to maintain.

18 · Snooze: pause a run until a future moment

The scenarioTallgrass Mutual: three-day claim follow-ups riding on an unowned external scheduler

Tallgrass Mutual: three-day claim follow-ups riding on an unowned external scheduler

If the adjuster has not followed up within three days, the claim ages into a regulatory bucket with a penalty. The scheduler holding that wait missed 34 follow-ups, and the audit is in November.

Ask the AI to hold the file for three days and it adds the snooze step; the supervisor can add that step herself. The run suspends for three days, or until next quarter, and resumes with its state intact. One system, one place to look.

Not something their AI can do. Tray.ai does not document this, and a sweep of all three documentation bundles for snooze returns nothing. On that basis a multi-day wait that puts itself down and picks itself back up is manual work rather than a platform behaviour.

pattern-snooze

16Hold a record for human approval

Refunds over $500 wait for a manager's approval while everything else keeps moving. On Tray.ai, the documented gate is Agent Gateway's, on a paid add-on their staff enable.

Open the scenario
LONGER

Some records must not sync until a person says yes, and the wait cannot block the platform.

19 · Human approval gates with a moderation queue

The scenarioRowan Box Office: £500-plus refunds stuck in a support inbox before a storm

Rowan Box Office: £500-plus refunds stuck in a support inbox before a storm

After £48,000 of refunds in one night, anything over £500 needs a venue manager to say yes. Those requests now sit in a shared inbox chased by text, while every small refund queues behind them.

Ask the AI for a gate above $500 and it adds the moderation step; the head of support can add it herself. The run pauses on a queue, a person approves or denies from a link, and the run resumes. Everything smaller keeps flowing.

Their AI can author an approval workflow, and on Tray that is what a parked record is: the holding, the reviewer's link, the retention and the timeout are steps somebody designs. The one documented approval gate belongs to Agent Gateway, a paid add-on their staff switch on per organisation.

pattern-human-moderation

17Break big processes into testable pieces

Change one step of a fifty-step process without re-testing the other forty-nine. On Tray.ai, a step tested alone keeps no log of what it did.

Open the scenario
LONGER

One monolithic automation became unmaintainable and untestable.

20 · Parent and child automation chaining with parameter passing

The scenarioVosdal Precision: 64 untestable steps, and an 18-percent customer needs a branch

Vosdal Precision: 64 untestable steps, and an 18-percent customer needs a branch

Order-to-cash is one automation that has grown to 64 steps. Any change to the credit-check rules means retesting all 64, so the applications manager tests none of it and edits at 5am on Sundays.

The AI splits the 64 steps into small automations that call each other with parameters, and the shared pieces become typed subroutines with declared inputs and outputs that any automation can invoke by UUID, or the applications manager does the split himself. Either way each piece tests alone, so a credit-check change retests one piece instead of all 64. That structure is what carries scale here: one of our own products is 65 automations across 8 folders with shared subroutines and an installer automation running past 100 steps, in production and versioned through v3.9.3.

Their AI can do the splitting, and Tray recommends it. Proving one piece is the part that leaves the surface: step isolation is a mode in the builder, billed per run and retaining no logs, so the run their AI can start is the whole workflow, against the real systems.

pattern-execute-automation

18Turn a mapping spreadsheet into working mappings

A customer's 300-row mapping sheet becomes the configuration directly, with unresolved rows flagged, instead of a week of error-prone typing. On Tray.ai, no spreadsheet import is documented for workflow mappings.

Open the scenario
NOT DOCUMENTED

A customer's mapping requirements arrived as a 300-row spreadsheet, and hand-entering it was a week of error-prone work.

21 · Field mappings imported from a spreadsheet

The scenarioHarrowgate Press: 300 mapping rows to key in before October renewals

Harrowgate Press: 300 mapping rows to key in before October renewals

The field map arrived as a 300-row spreadsheet, and hand-keying it eats most of week one of four. Every keying slip surfaces later as a subscriber billed twice, and renewal season opens 1 October.

Hand the AI the 300-row file and it becomes the mapping directly: the AI reads it, applies it, and flags the rows that do not resolve. The consultant can key a row herself, or correct one the AI flagged, on the same screen.

Not something their AI can do. Tray.ai does not document a spreadsheet import for workflow mappings. We searched the pages listed. On that basis it is manual work rather than a platform behaviour, typed row by row.

pattern-csv-mapping

19Institutional memory that outlasts your engineers

Turnover stops costing you the same debugging twice: a quirk solved once stays solved after its author leaves. On Tray.ai, the reusable step is a clipboard copy with no link back to the snippet.

Open the scenario
MANUAL

The same API quirk was rediscovered every time, by whoever drew the short straw.

22 · A pattern library that persists institutional memory

The scenarioCedarline Credit Union: nine years of API knowledge leaving in three weeks

Cedarline Credit Union: nine years of API knowledge leaving in three weeks

The engineer who holds the loan-status lookup table in his head has given notice. 11 live integrations rest on knowledge that was never written down, and his replacement starts in three weeks.

The AI writes each solved quirk into a searchable library and checks that library before it builds anything, so the timestamp-zone trap is solved once, ever. Your engineers read and write the same library, which is what keeps the knowledge after its author leaves.

Not something their AI can do. Nothing on their agent surface writes a lesson back. The reference skills their assistant reads are Tray-authored files shipped in their plugin repository, so a team's own hard-won facts are notes a person keeps.

patterns toolset · 3 tools

20Custom code as exception, not foundation

A genuinely odd requirement ships without waiting on a vendor release, and everything around it stays readable. On Tray.ai, the escape hatch for a wizard dropdown needs a support ticket to switch on.

Open the scenario
MANUAL

Occasionally a requirement is genuinely outside any data model, and waiting for a platform release is not an answer.

23 · A server-side scripting escape hatch

The scenarioRedbank Falls: a 1987 check-digit rule blocking a 30 September council deadline

Redbank Falls: a 1987 check-digit rule blocking a 30 September council deadline

A 1987 mainframe demands a check digit no mapping tool expresses. The systems analyst has a 30 September council deadline and a $140,000 quote for middleware to cover that one field.

Give the AI the ring-binder rule and it writes the check-digit logic into one script node and compiles it; the analyst can write that node himself. Either way code is an optional leaf inside a data document, never the foundation, and everything around it stays visible, testable and machine-editable.

Not something their AI can do. The config-wizard escape hatch is not reachable from their AI: Custom JS is a feature flag, and their documentation says support switches it on. A person files that request, and end-user field mapping is itself built as a script workflow.

At scale, this means

Logic complexity does not convert into code ownership. The awkward rules that make your business yours stay inside a model that your people can read, your tests can cover, and your AI can safely change. What that buys is scale in one pass: one of our own products was scoped from a one-hour meeting transcript, and two working days later the integration existed and had been tested branch by branch, along with its own connector, 46 automations, 15 event metrics and a provisioning automation.

Act 4 of 8

Proving it before a customer ever sees it.

Branches get proven on real data before deploy here; Tray's validation is structural, and their own build-workflow skill says a fire hits "the live Tray workspace, not a dry-run, not a sandbox", where "a Slack step posts a real message, a Salesforce step writes a real record".

"It worked when I tried it" tests one path out of eleven. The other ten are where customers live. This act is the answer to the third standing test: when the AI, or a person, gets something wrong, what in the architecture catches it before production data does?

21Force a rare path to run on demand

Prove a path that fires once a year works today, not in nine months. On Tray.ai, reaching that branch means a sandbox tenant or a hand-assembled payload.

Open the scenario
NOT DOCUMENTED3
Capability 21 · Patent pending

The branch nobody could trigger on demand was the branch that broke.

Execution-state mutation: change a saved run's data and re-execute from any step, forcing the path that only happens for one customer in December

The scenario United Harvest, 90 food banks: proving a December donation path works in March.

United Harvest, 90 food banks: proving a December donation path works in March.

The donation pipeline has a branch that fires only in the last week of December. It is March and the integration was just modified. Prove the December branch still works without waiting nine months.

Swipe to see the whole diagram ON APIANT Saved real run ordinary gift Mutate state + employer code December branch ✓ ordinary branch Re-execute from any step. The untaken path runs today, on real data, in March. ON TRAY.AI Replay original payload only untaken, untested same path again
On APIANT
  1. She asks the AI to prove the December branch. It takes a saved test run, every step's real data captured from real records, mutates its state to mark a tribute gift with a matching-gift employer code, and re-executes from the step before the branch.
  2. The platform can do this because an execution is a structured document, definition and runtime state together. She can make the same edit and re-run it in the editor, and either way the run is there to read step by step afterwards.
  3. The AI works through every branch the automation still reports as unexercised, which is how a freshly modified integration proves all its paths before deploy. The December branch is tested by lunch, in March, on data that is real in every respect except the two fields changed.

The branch that used to be tested by December is tested by lunch.

On Tray.ai

Not something their AI can do. Tray.ai does not document branch forcing. We searched the pages listed. On that basis it is manual work rather than a platform behaviour, and the run their AI can start is the whole workflow, live.

Test 03 their documented replay takes one argument: the execution ID

The AI tests every branch before it ships. Not the branches somebody thought to write payloads for. Every branch.

22Know which customers a shared fix touches

Ship a one-line fix across 300 accounts knowing exactly which customers it touches. On Tray.ai, the preview reports instance impact and the upgrade is still a loop you write.

Open the scenario
MANUAL1
Capability 22

A one-line connector fix silently changed behaviour for three hundred accounts.

Blast-radius analysis before touching a shared building block: which automations, and which customers, depend on this

The scenario Beacon, 300 live accounts: a one-line date fix that could break customers.

Beacon, 300 live accounts: a one-line date fix that could break customers.

A date-format bug turns up in a shared connector operation, with 300 customer accounts live. The fix is one line. Which automations call it, on whose accounts, and which rely on the buggy behaviour?

On APIANT
  1. She asks which automations use the block, or looks it up herself. One call returns the assemblies that reference it, a second the automations built on those, a third the child accounts running them, all inside the permissions of whoever asked.
  2. Because every layer is data, blast radius is a lookup rather than an investigation. The AI applies the one-line fix to the single node it concerns, retests the affected automations against saved runs, then publishes and deploys to the accounts on that list.
  3. The deploy returns its plan before it writes, and the version it replaces stays on the shelf to redeploy if the fix was wrong. The fix ships with a printed list of everyone it touches, known before the edit rather than after it.

The one-line fix ships with a printed list of everyone it touches, so the dependents are known before the edit rather than after it.

On Tray.ai

Not something their AI can do. No dependency or impact tool sits among their 24. A person opens an authentication's information page or the Embedded slots modal, and for a connector operation their own instruction is to list the step dependencies by hand beforehand.

Built for this, in the live inventory:find everything that uses an assembly, assembly toolset
Test 01 "who depends on this" should be an answer, not an archaeology project
23Measured proof every path was tested

You know a change is fully tested because the platform counts untested paths, not because someone felt confident. On Tray.ai, tracking which branches have been exercised is manual work.

Open the scenario
NOT DOCUMENTED

"It worked when I tried it" tested one path out of eleven.

26 · Branch-coverage test points

The scenarioHalden Mutual ships a claim-intake change with ten of eleven branches unwalked

Halden Mutual ships a claim-intake change with ten of eleven branches unwalked

The claim-intake automation has eleven branches. The claims supervisor signed off on a mapping change because the hail path ran clean in test. Harvest starts in five weeks and ten were never walked.

She asks whether the change is fully tested, and the AI answers from the branch test points the platform tracks, then walks the ones still unexercised. She can read the same list herself. Coverage is measured, not assumed.

Not something their AI can do. Tray.ai does not document this. We searched the pages listed. On that basis keeping score of which branches have actually run is manual work rather than a platform behaviour; the check their AI does get is structural.

enumerate every conditional branch with its coverage

24Retest on real customer data, not samples

Bugs get retested against the actual record that broke, emoji in the surname included. On Tray.ai, replay expires in 7 days on two of the three plans.

Open the scenario
MANUAL

Synthetic test data does not contain the thing that breaks integrations.

27 · Replay a real execution on real data

The scenarioFairmount Dental needs a six-week-old run to reproduce a billing failure

Fairmount Dental needs a six-week-old run to reproduce a billing failure

A patient pre-authorisation posted wrong on 3 July, escalated after the third rejected claim. Reproducing it needs that exact run: an emoji in the surname field. That run is six weeks old.

She names the 3 July run; the AI re-executes it from the step that broke, its captured data intact, or she does it herself. The emoji in the surname and the mangled mobile number are in the test, because the real record is the test.

Not something their AI can do. Re-running the recorded run is not reachable from their AI: replay is a hover button in the log view with no tool behind it. Their AI can read that run and fire a fresh one; a person clicks replay, inside the published window.

restart from any step

25Re-run last month's live traffic

Answer a month-old complaint by re-firing the exact message that failed. On Tray.ai, last month's runs sit outside the published replay window.

Open the scenario
MANUAL

Testing a webhook-triggered flow meant asking a customer to go and click something in their system.

28 · Webhook replay from historical payloads

The scenarioKestrel Freight cannot ask shippers to re-send tenders just to test a fix

Kestrel Freight cannot ask shippers to re-send tenders just to test a fix

An undocumented rate-confirmation payload began dropping accessorial charges worth 18,000 euros a week. The fix is written. Validating it means asking a shipper to re-tender loads they already moved.

She asks for last month's tender; the AI finds the stored payload and re-fires it at the fixed automation, or she replays it herself and watches it process. No shipper is asked to re-send a load they already moved.

Not something their AI can do. Not reachable from their AI, and past the published window not reachable at all: their limits table gives seven days to re-run a log, on every plan. The documented route to a longer horizon is streaming the data to your own systems.

replay a received webhook

26Test a shared building block alone

Shared logic proves itself in one run instead of dragging nine workflows through a test cycle. On Tray.ai, a shared sequence is proven through the workflows that call it.

Open the scenario
LONGER

Proving one shared component meant running nine automations.

29 · Test a subroutine in isolation

The scenarioAshgrove Polytechnic must prove a shared sequence before Monday enrolment opens

Ashgrove Polytechnic must prove a shared sequence before Monday enrolment opens

One change is needed to the address-and-residency normalisation sequence before enrolment opens Monday at 8am. Proving it means dragging all nine parent automations through a test cycle on a Sunday.

She asks the AI to prove the shared sequence; it runs the subroutine alone on controlled inputs and reports what came back. She can run it the same way herself. One run, not nine parents dragged through a cycle.

Their AI can test-fire a callable directly, and their plugin fixed that envelope in August 2026. What the fire is, is production: every step runs against whatever it is wired to. Per-step isolation stays a builder mode, and their docs restrict replay of one callable shape to the calling workflow.

test a subroutine on its own

27AI reads production, writes need approval

An agent works production with full read, and the actions that reach a fleet return a plan a human approves. On Tray.ai, the destructive-action prompt is the agent client's, not the platform's.

Open the scenario
MANUAL

The fastest way to an outage is a confident agent with production credentials.

30 · Production is read-only by default; writes gate on explicit confirmation

The scenarioRavensbourne Credit Union weighs handing an AI agent production ledger credentials

Ravensbourne Credit Union weighs handing an AI agent production ledger credentials

An AI agent is to work directly on production integrations posting 2,600 ACH transactions a night. One mis-sequenced deploy at 11pm is a reportable incident by the time branches open.

The AI reads production freely: run history, step data, assembly logs, the account changelog. The actions that reach a fleet are preview-first by design. A fleet deploy returns its plan first and writes only when a human confirms, not before, and the group kill switch and its restore behave the same way. Marcus can make those same calls himself, and the changelog shows what happened either way.

Not something their AI can do. There is no platform-side gate to ask for. Tray places the guardrail in the client, and a read-mostly posture is assembled by a person: sign the agent in as a restricted user, in a workspace you are willing to lose.

At scale, this means

Test coverage is a property of the platform, not of your team's imagination for payloads. The compiler refuses structurally invalid work before it can ship, and the branch walk names the paths nothing has exercised yet, so a wrong mapping meets a check before it meets production data.

Act 5 of 8

Shipping to a fleet, not to one customer.

One build goes as deep as the API allows, carries the universal logic while each location's differences stay in settings, and one fix reaches all 232 locations in a single deploy here; on Tray a breaking change loops upgradeSolutionInstance, one solutionInstanceId at a time, and where their requiresUserInputToUpdateVersion flag is set each end user runs the config wizard again.

Building the integration once is the demo. Running it for three hundred customers, each configured differently, each on their own credentials, all needing the same fix on the same day, is the business. This act is where per-customer platforms and per-fleet platforms part ways.

28One build, hundreds of customers, per-customer settings

One build at whatever depth the API allows, each location's differences living in settings, so asking the AI to ship a fix deploys it to 232 linked accounts on your confirmation of the plan it returns. On Tray.ai, an Enterprise add-on plus the instance lifecycle as an application you write.

Open the scenario
MANUAL3
Capability 28

Every customer wants the same integration configured differently, and cloning it per customer creates hundreds of divergent copies.

Build once at whatever depth the API allows, deploy to hundreds: universal logic, per-customer settings

One codebase carries the logic. Settings (which fields sync, which features are on, time zones, branding) vary per customer. The same automation serves a single-location studio and a 232-location franchise.

The scenario A 232-location fitness franchise needs one fix live everywhere before evening classes.

A 232-location fitness franchise needs one fix live everywhere before evening classes.

A fitness franchise runs the same booking-system-to-CRM integration at 232 locations, each on its own credentials. A fix has to reach all 232 before the evening class rush.

Swipe to see the whole diagram ON APIANT One codebase logic, universal Location 001 Location 002 Location 232 own credentials, own settings one call, previewed: reaches all 232 ON TRAY.AI Publish v14 breaking change Instance · v14 ✓ Instance · v12 Instance · v13 Instance · v9 updated one instance at a time, or by a script your team writes
On APIANT
  1. The integration exists once, as universal logic, and each location's differences live in settings rather than in copies. You ask the AI for the fix: it edits the single automation, replays it against a saved run, then deploys across the 232 linked accounts, returning the deployment plan and writing on your confirmation.
  2. You can do both by hand, and either way you read the same plan and the same per-account result. Because the accounts are linked, the next fix updates those same copies rather than creating new ones.
  3. Staging is naming a subset of accounts on one call and the rest on the next. A reversal is a redeploy of the previous version, which the platform keeps and the AI can diff.
  4. Fix at 2pm, fleet-wide by 2:15, evening classes uneventful.

Fix at 2pm, fleet-wide by 2:15, evening classes uneventful.

On Tray.ai

Not something their AI can do. Nothing on their agent surface reaches a solution or an instance. Creating one, reading its version flags, passing config values and triggering its upgrade is application code your team writes against their GraphQL API, inside an Enterprise add-on.

Built for this, in the live inventory:/deploy-automationdeploy toolset · 7 tools
Test 03 version drift across a fleet is a slow-motion incident
29Parent account routes work to child locations

One incoming request lands in the right location's account, on that location's own credentials, with hundreds of accounts behind the curtain. On Tray.ai, the event-to-location map is a database you own and keep in sync.

Open the scenario
NOT DOCUMENTED

Three hundred locations cannot each hold their own credentials and configuration.

32 · Master and child account architecture, with master-account routing

The scenarioKestrel Pharmacy: 178 branches, one webhook endpoint, refills landing at 6:40am

Kestrel Pharmacy: 178 branches, one webhook endpoint, refills landing at 6:40am

Kestrel Pharmacy Group's 178 branches share one refill endpoint, with the store code buried in the payload. The first batch lands at 6:40am, and every message has to reach the branch that can fill it.

A parent account governs 178 children: the webhook hits the master, which routes by store code to the right child, processing on that branch's own credentials. Priya asks the AI where a refill landed and it searches execution history across all 178 accounts at once, or she opens the run herself.

Not something their AI can do. Tray.ai does not document an account hierarchy where a parent takes one endpoint's traffic and routes each event to a child by a key in the payload. We searched the pages listed. On that basis it is manual work rather than a platform behaviour.

30Share one credential, keep the rest separate

One CRM login covers every location while each site keeps its own booking login. On Tray.ai, a shared credential is shared with everything in the workspace.

Open the scenario
MANUAL

Re-authenticating per location does not scale past about twenty.

33 · Shared where it matters, isolated where it must be

The scenarioSouthern Reef Dental: 96 practices, one CRM login, re-authorised by hand

Southern Reef Dental: 96 practices, one CRM login, re-authorised by hand

Southern Reef Dental's 96 practices each hold their own practice-management login, but the one group CRM token expires every 90 days. Re-authorising clinic by clinic has cost three weekends.

One CRM credential, flagged shared, serves all 96 practices while each keeps its own practice login. Dan asks the AI whether the group token still authenticates, and it tests the connection live. He can check by hand. Sharing is a toggle on the hierarchy, alongside shared settings and automations.

Not something their AI can do. Not a boundary their AI can set. Their own environment guide lists the limitation, so the sharing unit is the workspace and a person cuts the estate into workspaces to match the access map.

31Fleet-wide upgrades from one confirmed action

A week of hand-updating becomes one confirmed action, staged if you prefer, with every prior version kept for a redeploy. On Tray.ai, breaking changes go instance by instance and reversal is a forward publish.

Open the scenario
MANUAL

Shipping a fix to two hundred customers by hand takes a week and misses some.

34 · One-click deployment and upgrade to every linked account

The scenarioHalyard Ticketing: refunds broken at 186 venues before Friday's 10am on-sale

Halyard Ticketing: refunds broken at 186 venues before Friday's 10am on-sale

A payment provider renamed a field overnight and refunds have been failing since 05:00. The head of support has the fix in hand and 186 venue environments to get it into before Friday's 10am on-sale.

Marta tells the AI to ship it: the whole folder published, then out to the 186 venues, each returning its plan and writing on her confirmation, per-account results in front of her. She can run both herself. Staging is naming a subset on one call, and every prior version is kept, so a reversal is a redeploy rather than a rebuild.

Not something their AI can do. No fleet tool sits on their agent surface. A breaking change goes customer by customer through a script somebody owns and paces, one instance id per call, and the reversal is a new version published forward.

deploy to every child account

32Every version kept, compared, and reversible

Ask the AI what changed and it diffs the bad version against the last good one; the reversal is a redeploy of that kept version to the fleet. On Tray.ai, readable for twelve months, reversible for thirty days.

Open the scenario
MANUAL

A change made things worse, and there was no way back.

35 · Version history, comparison, and rollback on a live integration

The scenarioFoothill Co-op: guardian records merging across 41 districts, enrolment week opens 07:30

Foothill Co-op: guardian records merging across 41 districts, enrolment week opens 07:30

The night before enrolment week, the integrations lead changed how guardian contacts are matched. Registrars in six districts are seeing siblings collapsed into one record, and offices open at 07:30.

Yusuf asks the AI what changed, and it diffs tonight's committed version against last night's, naming the guardian-matching edit. He can read that diff himself. Getting back is a redeploy of the kept good version to the 41 districts, plan returned before it writes.

Not something their AI can do. No version, compare or restore tool exists on their agent surface; the version_id their tools return is a concurrency token. A person takes snapshots and restores them in the builder, inside thirty days.

33Permissions scoped by place in the hierarchy

A regional manager sees their 30 locations, support can look without touching, the master admin sees the whole franchise. On Tray.ai, roles stop at the workspace and cannot narrow per project.

Open the scenario
MANUAL

Support needed to see a customer's runs without being able to change them.

37 · Role-based access with account-level permissions

The scenarioRowan Yards: 340 buildings, 14 owners, all-or-nothing access, audit in five weeks

Rowan Yards: 340 buildings, 14 owners, all-or-nothing access, audit in five weeks

Rent posting has failed at one of 340 buildings. The support desk has to inspect the run without changing owner data, and one owner's contract forbids staff on another portfolio from viewing a record.

Administrators, builders and viewers are scoped by account: a regional manager sees their thirty-odd buildings, Tomas sees all 340, support reads a failed posting without touching owner data. Ask the AI and it stays inside that scope, dependency lookup included, with the account changelog as the audit.

Not something their AI can do. No role or permission tool sits on their agent surface, and their own limitations list caps how narrow a role can be. An admin does it per workspace, which is why the estate gets cut to match the permission map.

34One query shows who a vendor change breaks

You ask the AI who is exposed and get the list in minutes. On Tray.ai, connector updates are manual per workflow, with no subscription.

Open the scenario
MANUAL

An API deprecation notice arrived, and nobody knew who was exposed.

38 · Fleet-wide impact analysis: which of my customers use this connector, this app, this operation

The scenarioAldergrove Underwriting: carrier API retires in 90 days, exposure list missing

Aldergrove Underwriting: carrier API retires in 90 days, exposure list missing

A carrier emails that v1 of its claims API retires in 90 days. By Friday the claims systems manager must name which of 74 connected systems touch that endpoint. That list does not exist.

The carrier emails that v1 retires in 90 days. Rosa asks the AI who is exposed: it names every automation on that app across the broker accounts, and every assembly depending on the connector, permission-scoped. She can search herself. Minutes, and it is the migration worklist.

Not something their AI can do. No query on their agent surface answers which workflows use a connector operation. A person reads the release notes, works out the exposure by hand, and updates each workflow, since Tray declines to do it for you.

At scale, this means

Customer three hundred costs what customer three cost. Growth in breadth, more customers, more locations, does not multiply your operational surface, and does not show up as a per-deployment line item on the platform bill.

Act 6 of 8 · The centrepiece

Running it for years.

In year three a connector fix lands in one data assembly here; on Tray connector updates are manual per workflow with no way to subscribe, and in-platform replay runs 7 days on Pro, 7 with a paid add-on on Team, 30 on Enterprise, with log streaming to your own SIEM as the documented route past that.

Nobody buys an integration platform for month one. The purchase is really years two through five: the customer reports, the API drift, the 2am incidents, the person who left. Every platform demos the build. This act is about everything after the demo, which is where the money is, and where architectures stop being interchangeable.

35Find one customer's run from weeks ago

Answer a three-week-old customer complaint before standup: find the run, fix it, prove it, ship to all 90 sites. On Tray.ai, seven days on two of three plans, and seven days to re-run on all three.

Open the scenario
LONGER13
Capability 35 · The needle in the haystack

"It did not work for this one customer last Tuesday" was a multi-day archaeology project, and often unanswerable.

Out of hundreds of thousands of runs: find the one, watch what it did to the data at every step, fix it, prove the fix, and ship it to everyone. Conversationally.

The scenario A 90-site franchise asks why one member vanished from their CRM three weeks ago.

A 90-site franchise asks why one member vanished from their CRM three weeks ago.

6:51am: one location of a 90-site franchise writes that a member signed up on June 30 and never appeared in their CRM. It is July 21, and hundreds of thousands of executions have run since.

Swipe to see the whole diagram ON APIANT June 30, 09:12 found by her email 1 · signup event 2 · fetch member 3 · tier lookup ✕ 4 · CRM write step 3 dropped legacy plan codes: the record died here, silently fix one node replay her real run ✓ deploy to 90 sites Directed in plain English. Each deploy previews before it writes. Answered before the 9:30 standup. ON TRAY.AI The run is from three weeks ago. Log retention: 7 days on Pro. The step results you would need to trace no longer exist there, or on Team without the 30-day add-on. Enterprise: 30 days. Within the window: per-workflow log search, step data, then a fix in the builder and a per-instance rollout.
On APIANT
  1. Find her. She asks, and the AI searches execution history by the data itself, her email, returning the exact run, June 30 at 09:12, out of hundreds of thousands. See what it did. The AI pulls the step data and reads the record as it was transformed at each stage: step 3, a tier-lookup transform, silently dropped members carrying a legacy plan code.
  2. The same run renders visually, so a person can look at the evidence and judge it too. Fix one node. She corrects the transform where it lives, or asks the AI to; either way the edit targets that node, so its blast radius is that node. Prove it. The AI keeps her June 30 payload as a test run and re-executes it from that step through the fixed logic: the member lands in the CRM, and the branch walk confirms nothing else moved. Ship it.
  3. One confirmed call returns the deployment plan before it writes anything, then reaches all 90 linked sites, with the prior version kept and diffable if the change was wrong. Then one read-only query answers the follow-up that separates good vendors from great ones: who else did this silently affect since June. All of it directed conversationally, by one person, before the 9:30 standup.

All of it directed conversationally, by one person, before the 9:30 standup. The reply to the location: what happened, why, fixed, and here are the other three members we caught and restored.

On Tray.ai

Their AI can find and read a run, and their documentation covers that with three purpose-built tools, but it works one workflow at a time by id: no search across an estate by customer or by a value in the payload. And reachable history is short, seven days on Pro and Team, thirty on Enterprise.

Test 01 can a human watch what the data went through, weeks later Test 03 the fix is proven on her real run before it ships

"It didn't work for one customer last Tuesday" stops being a week of archaeology. It becomes a conversation.

36Alert rules that cut noise to real alerts

A real deployment went from 140 alerts a day to 3. On Tray.ai, the noise filter is a workflow you write plus a log sink you own.

Open the scenario
LONGER3
Capability 36

Alerting was either silent or so noisy that everyone stopped reading it, which is the same thing.

Alert governance: per-automation and per-step rules, system-level mappings, a trace of why an alert fired or did not, suppression lists

The scenario A team muted 140 daily alerts; a real one sat unread nine hours.

A team muted 140 daily alerts; a real one sat unread nine hours.

A platform team's alert channel gets 140 integration alerts a day and two are real. They muted it months ago. Last Thursday one of the two sat unread for nine hours while orders silently queued.

On APIANT
  1. She asks the AI to clean up the channel. It reads the current error policy, then writes rules where they matter: per automation, per step, and system-wide mappings that classify an error once for the whole tenant.
  2. The known noise, the flaky sandbox and the vendor's maintenance window, goes onto suppression lists, deliberately and with a standing list of what is suppressed, instead of into the humans' learned indifference. When an alert fires, or when one should have and did not, the AI pulls the mapping trace: which rule matched, which mapping transformed it, which suppression swallowed it.
  3. She can set the same rules and read the same trace herself. One working session took a real deployment from 140 alerts a day to 3.
  4. Three alerts a day, each one real, each one read. The channel gets unmuted.

Three alerts a day, each one real, each one read. The channel gets unmuted.

On Tray.ai

Part of this is theirs, and it should be said: their AI writes a step's error-handling mode and can author the alerting workflow itself. What stays with a person is the Account Settings screen that decides which alerting workflow receives an organisation's errors, the retry counts Tray publishes as fixed, and org-wide Anomaly Detection thresholds an admin requests.

Built for this, in the live inventory:/alert-handlingalerts + read the alerts · 16 tools
Test 03 an alert nobody reads catches nothing
37One-command shutdown and exact restore during outages

Ask once and 180 automations across a parent and 60 children are snapshotted and disabled, then restored exactly as they were. On Tray.ai, both shutdown controls are scoped to one workflow, and neither snapshots the estate.

Open the scenario
LONGER3
Capability 37

When an upstream vendor breaks, the choice was between flooding a broken API and losing track of what to turn back on.

The incident kill switch: snapshot and disable every running automation across a parent account and all its children, then restore exactly what was on

The scenario 180 automations hammer a dead CRM across a parent and 60 child accounts.

180 automations hammer a dead CRM across a parent and 60 child accounts.

An upstream CRM is down and 180 automations across 60 child accounts are hammering a dead API. When it recovers you must restore the previous state exactly, not reawaken the three disabled on purpose.

On APIANT
  1. The on-call lead asks the AI to shut it down. One group call snapshots the on/off state of every automation across the parent and all 60 children, then disables the ones that are on, returning the preview before it writes so she can confirm the 180 in the plan.
  2. Nothing new starts after 11:42, and a second call halts the runs already in flight. The snapshot tag is the restore plan, so no spreadsheet is kept, because the platform kept the truth. Vendor recovers at 3:15.
  3. One call restores exactly the automations carrying that tag; the three deliberately-disabled ones stay off. Then the mop-up: the AI lists the failed runs from the outage window and retries them in bulk.
  4. She can run every one of those steps from the console herself. Minutes at the start, minutes at the end.

Total human attention: minutes at the start, minutes at the end. No flood, no amnesia.

On Tray.ai

Their AI can turn workflows off one call at a time, which stops future runs. Stopping what is already moving is a button in the builder with no endpoint in either published spec, so 180 automations means 180 calls plus 180 clicks, and their AI is refused outright on shared callables. Nothing snapshots which ones were on.

Built for this, in the live inventory:/support · kill switch tools
Test 03 incident tooling written during the incident is not tooling
38Set which errors retry and which stop

Transient blips retry themselves while broken credentials stop instead of hammering a customer's API, set once for the whole tenant. On Tray.ai, retry counts and intervals are published as fixed platform behaviour.

Open the scenario
LONGER

Transient failures were treated as fatal, and genuine auth failures were retried forever.

42 · Error policy control: which errors deserve retries, and which must stop

The scenarioKestrel Freight: 340 overnight load tenders dropped, trucks idle by 6am

Kestrel Freight: 340 overnight load tenders dropped, trucks idle by 6am

At 03:10 transient 502s marked 340 overnight freight tenders fatal, while an expired token retried until that carrier's account locked. Trucks unassigned past 07:00 come off the contract rate.

Ask the AI to retry the 502s and stop the expired token, or set the lists yourself: retryable error classes are tenant-wide, and auth failures on named domains get carve-outs. Shutoff is a policy on record, not a surprise you discover.

Their AI sets the step's mode, and that is the whole of it: Stop, Continue or Manual. Which errors retry, how many times and how long between attempts are published as platform behaviour, not settings anyone owns, and a third-party throttle arrives wrapped in a 200 so no retry fires on it at all.

/alert-handling

39Bulk retry of everything that failed

After an outage, hundreds of failed records get reprocessed from one screen instead of by hand. On Tray.ai, replay is documented one run or one step at a time, inside 7 days.

Open the scenario
MANUAL

After an upstream outage, hundreds of records needed reprocessing, and there was no safe way to do it in bulk.

43 · Retry inspection and bulk retry

The scenarioHalden Pharmacy: 2,600 failed refill requests, patients arriving Monday morning

Halden Pharmacy: 2,600 failed refill requests, patients arriving Monday morning

A Saturday outage left 2,600 prescription-refill requests failed on the way to the dispensing system. The operations manager has Sunday and two staff before patients walk in Monday.

Ask, and the AI lists every failed run, shows what each was carrying, and retries them in bulk once the cause is fixed. Priya can work the same surface herself, at 2,600 or at any scale.

Not something their AI can do. No retry or replay tool sits among their 24. A person hovers each failed run in the log view and re-runs it, one run or one step at a time, inside the seven-day window.

retry what failed, in bulk

40Stop a runaway job while it runs

Ask the AI and a job pounding a customer's system stops: the in-flight runs halted, the automation deactivated so nothing new starts. On Tray.ai, stopping the runs in flight is a UI action, per workflow.

Open the scenario
MANUAL

A misconfigured run was hammering a customer's API, and the only remedy was waiting.

44 · Halting a runaway execution mid-flight

The scenarioLoftgate Ticketing: a looping sync burns an arena's API mid-onsale

Loftgate Ticketing: a looping sync burns an arena's API mid-onsale

A looping seat-hold sync is firing thousands of calls a minute at an arena's box-office API. The sale is live, 40,000 fans are in the queue, and the arena says it will revoke the API key.

Ask the AI to stop it: one call halts the runs in flight, a second deactivates the automation so nothing new starts. Dane can press both himself, while the sale is still live.

Not something their AI can do. Stopping the runs already in flight is not reachable from their AI: it is a button in the builder with no endpoint in either published spec. Their AI reaches future runs, not the ones already going, and their plugin refuses even that on shared logic.

halt a running job

41See events that arrived but never processed

Catch a silent backlog before the customer calls: work that arrived but never ran has its own screen. On Tray.ai, a webhook burst is answered with a 429 rather than queued.

Open the scenario
NOT DOCUMENTED

Silent backlogs: everything looks healthy, and nothing is moving.

45 · Visibility into webhooks received but not yet processed

The scenarioRidgeway Environmental: 430 pickup reports stalled, trucks already left the yard

Ridgeway Environmental: 430 pickup reports stalled, trucks already left the yard

At 08:10 the dispatcher finds 430 missed-pickup webhooks arrived overnight and never moved past the door. Every status board was green, and the trucks left the yard without the reroutes.

Ask what arrived and never ran: the AI returns the received-but-unprocessed queue, 430 events, and Marlene sees the same view unprompted. Stuck work shows up before a customer notices the gap.

Not something their AI can do. Tray.ai does not document this. We searched the pages listed and swept all three bundles for unprocessed, dead letter and undelivered. On that basis reconstructing what arrived and never ran is manual work rather than a platform behaviour.

list webhooks that arrived and were never processed

42Search every account by the data itself

Type a customer's email or order number and land on the runs that touched it across every account. An hour of log reading becomes a minute. On Tray.ai, cross-account search means a SIEM you buy and operate.

Open the scenario
MANUAL

Correlating a failure across accounts meant reading logs by hand.

46 · Cross-tenant search by the data itself

The scenarioAmbervale Insurance: one claim lost across 74 broker accounts, clock running

Ambervale Insurance: one claim lost across 74 broker accounts, clock running

Claim AV-2291884 was acknowledged to the policyholder but never reached the loss adjuster, and the regulator's clock runs out Monday. Nobody knows which of 74 broker accounts it passed through.

Ask with the claim reference and the AI searches every account at once for that value, returning the runs that touched it. Eoin can run the same search. Correlation across 74 accounts is a query, not a shift.

Not something their AI can do. Not reachable from their AI: its execution tools take one workflow id, and their log filter is scoped to a workflow. Estate-wide search by a value in the payload is an index your team buys, runs and secures, fed by log streaming.

43Ask questions of your own data

A support question that used to need a database ticket and two days gets answered in the meeting. On Tray.ai, SQL reaches files inside a workflow, not your run history.

Open the scenario
MANUAL

Diagnosis stalled waiting for someone with database access.

47 · Ad-hoc data queries to validate a hypothesis

The scenarioNorthfell Polytechnic: 260 students without timetables on day two of term

Northfell Polytechnic: 260 students without timetables on day two of term

The overnight sync left 260 students without timetable records, and a queue is forming at the registry counter on day two of term. The registrar has a theory she cannot test without database access.

Is it the part-time cohort at one campus? The AI answers in seconds with a guardrailed read-only query, and Alison can run the same query herself. Tested in the meeting, not in a database ticket.

Not something their AI can do. Their AI has no query tool for run history or platform metadata. Their SQL reaches files a workflow loaded, not the record of what the workflows did, and it is switched on through a Customer Success conversation.

query the platform directly · read-only

44Per-customer usage, health and volume numbers

Know which customers are heavy, erroring, or growing before renewal talks and capacity planning, per account, on demand. On Tray.ai, no workflow can read usage, and token-to-task conversion comes from support.

Open the scenario
MANUAL

Capacity and billing questions had no ground truth.

48 · Health, usage, and task totals per tenant and per account

The scenarioTrellwood: quarter close, 380 agency accounts, disputed usage invoices

Trellwood: quarter close, 380 agency accounts, disputed usage invoices

The controller is closing the quarter with two customers disputing invoices and one that grew fourfold on its entry plan. The numbers came from three hand-built exports; sign-off is Thursday.

Ask which accounts are heavy, erroring or growing: the AI returns per-account health, usage and task totals across all 380. Deb's team queries the same numbers and exports them to your monitoring stack.

Not something their AI can do. No usage, plan or tenant-health tool sits on their agent surface, and Tray publishes the bound in their own words. A person with Admin or Owner rights reads a dashboard, and the token-to-task conversion comes from support.

45Support works inside an account without passwords

Support sees what the customer sees and fixes it there, without ever asking for a password. On Tray.ai, the runs are visible in your workspace; the scoped support role is not documented.

Open the scenario
MANUAL

Support asking customers for passwords is both a security problem and a delay.

50 · Operating inside a customer account without their credentials

The scenarioRowanbridge: 640 dental practices, and support still asks for logins

Rowanbridge: 640 dental practices, and support still asks for logins

Recall reminders stopped Friday and a practice manager has 90 patients unconfirmed for this week's chairs. The playbook is her login, which your security policy forbids, or two days for an engineer.

The AI switches into the Calgary account's context with its own audited access, sees what the practice manager sees, and fixes the recall automation there. Nadia's team switches in the same way, and no password is ever requested.

Not something their AI can do. No support-access or impersonation tool sits on their agent surface. An owner sets the access window in organisation settings, and a person then assembles one customer's picture from workspace logs, workflow by workflow.

act inside a customer account

At scale, this means

Support stops being the silent tax on your margin. The question every vendor dreads, "what happened for this one customer three weeks ago," has a fixed cost of minutes, answered by one person, with the evidence still there.

Act 7 of 8

What your end customer actually touches.

Your customer sees your product on your domain here; Tray's white-labelling swaps your name into wildcards Tray allocates, and where a vendor accepts a single redirect URL their own page keeps the OAuth callback on auth.tray.io.

Your customer never sees the engine. They see a setup screen, a connect button, a status page, and increasingly, a tool their own AI can call. Whether those surfaces feel like your product or like someone else's is a brand decision you are making when you pick the platform.

46Setup screens that live inside your product

Customers set up the integration inside your product, on your domain, with no second settings screen to build. On Tray.ai, the wizard is a page Tray hosts, iframed from a subdomain support allowlists.

Open the scenario
MANUAL1
Capability 46

Customers were being sent to a third-party integration UI that broke the product experience and advertised the vendor's supplier.

FormApps: platform settings become a customer-facing interface, embedded in your own product, fully white-label

The settings that drive the integration are the interface the customer configures it with. No translation layer, no second UI to build and keep in sync. Your customers never see the platform. They think it is you.

The scenario Lumen's practice managers must connect accounting without ever seeing another company's name.

Lumen's practice managers must connect accounting without ever seeing another company's name.

A practice manager clicks "Connect accounting" in Lumen's settings, authorizes, maps two fields, done, without seeing another company's name. She is trusting Lumen, not buying an integration platform.

Swipe to see the whole diagram ON APIANT app.lumen.vet/settings Connect accounting Lumen's brand, Lumen's domain, settings ARE the UI ON TRAY.AI app.lumen.vet/settings iframe · embedded.tray.io their page inside yours, allowlisted by support and the hostnames are wildcards Tray allocates
On APIANT
  1. Lumen's product lead asks the AI for the connect screen and it builds one: the integration's settings become the customer-facing form, assembled from the element catalog, validation and conditional logic in place, embed code returned. Or she opens the designer and does it herself.
  2. The form and the automation are one artifact, so there is no separate UI project and no mapping layer to drift. It embeds with Lumen's styling and runs on Lumen's own domain from the entry paid tier: the setup flow, the endpoints the integration answers on, all of it.
  3. Fields refresh from the customer's live systems. The practice manager finishes in minutes. The customer's takeaway: "Lumen's integrations are great." Which is the entire point.

The customer's takeaway: "Lumen's integrations are great." Which is the entire point.

On Tray.ai

Not something their AI can do. Not reachable from their AI: the wizard is a page Tray hosts, with no config or wizard tool on their agent surface. Putting it inside your product means support adding your specific subdomain to their allowlist.

Built for this, in the live inventory:/build-formform design tools
Test 01 what does your customer see, and whose name is on the URL
47Your integrations as tools your customers' AI can call

Your customers' AI assistants can drive multi-system work through your product, with an approval gate before anything destructive and a record afterwards. Your domain, every tier. On Tray.ai, every person whose AI calls a tool needs an account in your Tray organisation.

Open the scenario
MANUAL2
Capability 47

Customers now want their own AI agents to reach these systems, and hand-building an interface per client does not scale.

Integrations exposed as callable tools for your customers' AI clients

The scenario A customer's operations director expects her AI assistant to reschedule bookings and notify members.

A customer's operations director expects her AI assistant to reschedule bookings and notify members.

An operations director tells her AI assistant: "Move every Thursday booking at Riverside to Friday and notify the affected members." Your customers judge your product on whether their AI can drive it.

On APIANT
  1. Ask the AI to expose the rescheduling work as a callable tool and it publishes one: any automation, at any depth, a thin pass-through or a multi-step operation spanning several systems, transforming data and enforcing business rules before returning a clean result. Your team can publish it from the editor instead.
  2. Either way the tool inherits what the platform enforces: authentication, throttling, error handling, full request logging, and where you want it, a human approval gate before anything destructive. Served white-label, on your domain, from the first paid tier. Her AI is calling your product's tools.
  3. The bookings move, the members get notified, and the run history shows what her agent did.

The Thursday bookings move, the members get notified, and the audit trail shows exactly what her agent did.

On Tray.ai

Not something their AI can do. Their AI cannot publish a tool: Agent Gateway has no agent-callable surface, it is sold inside a paid add-on, and their staff enable it per organisation. Every person whose AI then calls a tool needs an account in your Tray org.

Built for this, in the live inventory:pattern-mcp-tool
Test 02 judge the automation behind the tool, not the tool listing
48Form building blocks, validation and live data choices

The AI assembles the setup screen, so there is no front-end project: validated input, live choices from the customer's systems, embed code returned. On Tray.ai, wizard validation needs a support flag, and past 100 fields you build the form.

Open the scenario
MANUAL

Configuration UIs were bespoke front-end projects, every time.

53 · Form depth: an element catalog, reusable patterns, validation, live field refresh, embed codes

The scenarioPalletworks: a carrier setup screen promised against a nine-week front-end backlog

Palletworks: a carrier setup screen promised against a nine-week front-end backlog

Palletworks promised its three largest brokers a screen that pulls their live carrier list and validates SCAC codes before anything saves. Its two front-end engineers are nine weeks into a backlog.

The AI assembles the setup screen from an element catalog and saved patterns: input validated before it saves, choices pulled live from the customer's systems, embed code returned. Adjust it in the designer yourself; the same form either way.

Not something their AI can do. Not reachable from their AI: config slots, screen elements and the wizard have no agent tool. Field-level validation is Custom JS behind a support-enabled flag, and past their worked ceiling the answer is a form your front-end team builds.

49Chat agents that actually do the work

The assistant you ship resolves requests instead of deflecting them: real lookups, real writes, an approval gate before anything destructive, full logs. On Tray.ai, the in-product chat surface is an endpoint on a Tray host that you wrap yourself.

Open the scenario
MANUAL

A chatbot that cannot act is a deflection tool, not an integration.

55 · Conversational agents with goals and tools, the whole platform behind them

The scenarioAldergate: a resident agent that answers at 11pm but cannot act

Aldergate: a resident agent that answers at 11pm but cannot act

Aldergate's chat agent handled 6,400 conversations and 2,100 ended as after-hours callbacks. A tenant asks at 11pm to move Thursday's plumbing visit, and all the agent can offer is an on-call number.

The AI builds the agent you ship: explicit goals, scoped tools, each tool an automation you can open and read. Or you wire the goals yourself. It acts through the same governed engine as everything else: real writes, approval gates, full logging.

Not something their AI can do. Their AI has no agent-builder tool. Merlin Agent Builder is sold inside a paid add-on and gated on a conversation on every page of the section, and the in-product chat surface is an HTTP endpoint your team wraps.

50Your brand and domain on every surface

Every surface a customer's IT team inspects, screens, addresses, callbacks, carries your name on every plan. On Tray.ai, the de-branded hostnames are wildcards on apexes Tray allocates.

Open the scenario
MANUAL

An integration layer that shows a supplier's name tells your customer who really built it.

56 · Full white-label: your brand on the interface, your domain on the endpoints

The scenarioFenmark: a 1.4M insurer deal meets question 41's hostname list

Fenmark: a 1.4M insurer deal meets question 41's hostname list

Fenmark is 48 hours from signing a carrier worth 1.4 million a year. Question 41 asks for every hostname claim data touches, and its webhook receiver answers on a domain carrying someone else's name.

Ask the AI which hostnames the integration answers on and it lists them off the connectors and the embed code. The dev and production servers are yours, so the configuration screens, the webhook receivers and the authorization callbacks all answer on your domain from the first paid tier. If you also embed one of our hosted widget scripts, that file is served from ours, and that is the one line on the list you did not write.

Not something their AI can do. No domain or branding tool sits on their agent surface, and there is no CNAME or domain-add flow to drive. The de-branded hostnames are slots in wildcards Tray allocates, and a person asks support for one.

At scale, this means

The integration experience compounds into your brand instead of your supplier's. Every setup flow, every status page, every AI tool call is a moment your product looks finished, in your customer's language, on your domain.

Act 8 of 8

The layer that operates all of the above.

Day two is the AI's job here; Tray's documentation groups Headless as workflows, projects, connectors, authentication, validation, and run and debug, their product page as "Build, Connect, Validate, Configure", and past the debug log six phases have no tool on their agent surface: halting or replaying a run in flight, tuning an alert, shipping one fix to a fleet, comparing or restoring a version, reading tenant health and cost, and carrying a lesson into the next session.

Everything on this page is exposed to AI, but "AI-powered" is the emptiest phrase in the category. The question with teeth: which phases of the integration lifecycle does the AI have real tooling for? Building is one phase. There are seven more.

51AI runbooks for the whole integration lifecycle

One person and the AI cover an integration's whole life, launch through incidents. Elsewhere the AI diagnoses, then a developer does the fixing. On Tray.ai, the agent surface ends at the debug log, and the six phases after it have no tool on it.

Open the scenario
LONGER2
Capability 51

An AI with raw API access improvises. An AI with encoded procedures repeats what works.

A skill set where every skill encodes a procedure a senior integration engineer would follow, spanning setup, build, edit, test, deploy, monitor, support, and incident response

The scenario Day two, live integration: a complaint, a rate limit, a fix to ship.

Day two, live integration: a complaint, a rate limit, a fix to ship.

Day two. A customer reports a discrepancy, an API starts rate-limiting, a fix needs to reach the fleet. The question for the AI is no longer "can you build it" but "how much of this can you handle?"

Swipe to see the whole diagram SETUPBUILDEDITTESTDEPLOYMONITORSUPPORTINCIDENT APIANT TRAY.AI no tool for a run in flight, and none for a fleet push
On APIANT
  1. Ask for it in words and the AI runs the encoded procedure, the same one a senior APIANT engineer follows, with verification steps rather than improvisation. Find the customer's run by searching execution history on her email, read the failing step's data, throttle the carrier connection, map the error at step level and log the suppression, then deploy the fix to the affected accounts.
  2. Deploys and the group kill switch return a plan and write on confirmation. Or do any of it yourself in the console. Either way the change lands on the same artifact, and version history lists what changed and compares it against the version before, which is also how a reversal happens: redeploying a version you kept, on purpose. Build is one procedure out of 42.
  3. Day two has its own: diagnose, alert hygiene, kill switch, fleet upgrade. One person and the AI cover the lifecycle.

One person and the AI cover the lifecycle. Day two looks like day one.

On Tray.ai

Concede this plainly: 24 tools reaching discover, build, validate, fire and debug, with a purpose-built debug loop that is actively maintained and catches a parent run reporting success while a callable inside it failed silently. Their own published capability groups stop where that list stops. A run already moving, an alert rule, a fleet push, a version restore and the usage numbers have no tool on that surface, so each of them leaves the agent and goes to a person.

Built for this, in the live inventory:all 42 skills · 10 workflowsall 138 tools · 10 toolsets
Test 02 ask which lifecycle phases have tools, never how many tools
52Only the tools the current job needs

Give an AI forty similar-looking tools and it picks the wrong one. Here it sees only the handful this job needs. On Tray.ai, focus comes from splitting servers up front and disabling tools by hand.

Open the scenario
MANUAL

Depth and focus are in tension: an AI drowning in tool definitions gets worse, not better.

58 · A deep tool surface, activated on demand

The scenarioHalvard Logistiek: one integration lead retuning load tenders before a 3,400-load weekend

Halvard Logistiek: one integration lead retuning load tenders before a 3,400-load weekend

Friday, 16:40. The integration lead has the AI retune a load-tender mapping inside 61 automations, a change 40 dispatchers need Monday. Every irrelevant tool is another way to reach the wrong one.

Sanne asks for the retune and the session loads that procedure with the tools it needs, the connector and mapping edits, a test run against real data, the alert rules, not all 138. The rest stay one request away when the job widens. Or she makes the same edits in the editor herself, on the same automation either way.

Not something their AI can do. Not something asking changes: the plugin adds no tools, and its skill routing swaps the instructions the model reads, not the catalog behind them. An operator decides how many servers to stand up and switches tools off by hand.

53AI checks the manual before it acts

The AI grounds itself in documented behavior before it acts, rather than in its best guess. Elsewhere the reference is shipped once and ages in place. On Tray.ai, the manual is a corpus the client fetches and a guide file you keep current.

Open the scenario
MANUAL

An agent that guesses at platform behaviour produces plausible nonsense.

59 · The documentation as a corpus the AI consults before acting

The scenarioKentmere College: a waitlist branch added mid-enrollment, 900 enrollments an hour riding on it

Kentmere College: a waitlist branch added mid-enrollment, 900 enrollments an hour riding on it

Day two of the enrolment window, the analyst asks the AI for a waitlist branch. A guess about how the platform treats a trigger firing mid-run, at 900 enrollments an hour, is not discovered quietly.

Dana asks how a scheduled trigger behaves while a run is still in flight. The AI queries the documentation corpus as a step in the procedure, answers from what is documented, and builds the waitlist branch on that. Or she searches the same corpus herself. Either way the branch rests on the platform's behaviour today, not on a guess.

Not something their AI can do. Their Headless surface publishes no documentation tool, so the manual is a corpus the client fetches and a CDK guide file the developer keeps current. Their Helix CLI does ship a documentation tool; the iPaaS surface does not.

/docs · docs_chat

54The AI reports platform bugs it hits

The AI files the platform defect it hits, so it gets fixed instead of papered over by an undocumented workaround. On Tray.ai, the documented route is a support portal and a Slack message.

Open the scenario
MANUAL

Agents silently working around platform bugs means the bugs never get fixed.

60 · A toolchain that reports its own defects

The scenarioTessellate Mutual: silent AI workarounds becoming next hail season's undocumented 2am problem

Tessellate Mutual: silent AI workarounds becoming next hail season's undocumented 2am problem

The platform layer behaves differently than documented, the AI routes around it, and that detour is permanent, undocumented, and a 2am problem next hail season. The supervisor has inherited three.

The AI files the defect itself: a structured report to engineering, autonomously, instead of routing around it and shipping. Or Marla files one from the same session. Either way the detour becomes a record with the defect attached, not an undocumented workaround somebody inherits. The tools get better because the agent using them is also their reviewer.

Not something their AI can do. No tool on their surface files a defect. A person writes it up and gathers the evidence, and the documented channels are the in-app thumbs, Slack and the support portal, none of which returns a tracked item.

/report-mcp-issue

At scale, this means

The AI is not a build accelerator bolted to the front of the lifecycle. It is a colleague with a runbook for all of it, which is why one person can run what used to take a team.

What you just read

Fifty-four capabilities. One pattern.

Every row on this page reduced to the same fork. On APIANT the job was a walkthrough: ask for it, watch it get built at whatever depth the API allows, prove it, ship it, and change it later without a rebuild. On Tray.ai the same job was reachable when someone had already built the piece you needed, at the depth they chose to build it, and priced by how many records moved through it. Not because their product is careless. Their catalogue is large and it reaches a first result quickly, and speed is not the difference: on APIANT a connector for any API, catalogued or not, is a working session, in hours, not quarters. What differs is where that speed stops. Their integrations are assembled from operations that people hand-authored one at a time, so what you can automate is bounded by what someone else already decided to expose, and what it costs grows with the volume you push through it. On APIANT the connector is generated from the API's own documentation and stored as data, which is why depth is not a roadmap request, a missing operation is a working session, and the thing you end up owning is an asset your team can read rather than a subscription to someone else's catalogue. Depth has a second half, and it is how much logic the AI can put in place in one go. It describes a whole automation in a single intent document, branches, loops, subroutine calls and latch groups included, and the platform compiles it, which is why one of our own products runs to 65 automations across 8 folders with shared subroutines and an installer past 100 steps.

The two questions a sharp CTO asks next

Good questions. Better answers.

"What happens when your data model doesn't express something I need?"

Then you write code, in the one place code belongs: a scripting escape hatch that slots in as a single node of the structured document. Code is an optional leaf inside a data document, never the foundation. The loop, the branches, the mappings, the tests around that leaf all remain visible, machine-editable, and compiler-checked; the custom logic is contained to the one spot that genuinely needed it.

Compare the shape of the same answer elsewhere: when the model runs out, the escape hatch is more code on a foundation that is already code. The exception and the rule are indistinguishable. Here, the exception stays the exception, and a decade of production has kept it rare.

"What if I'd rather own the code?"

Own the outcome, and be precise about what owning the artifact costs. A code integration is cheap on day one and priced like a liability thereafter: it is reviewed by whoever has time, it carries a dependency tree that ages, every API drift re-opens it, and its real documentation is the memory of whoever wrote it. Multiply by every integration you will ever ship, then by the years you will run them, then subtract the engineers who will have moved on. That is the asset you would own.

What you own on APIANT is the thing you actually wanted: integrations that run, on your domain, inspectable by your team, provable before they ship, and operable by AI for as long as you run them. The buildings your company works in are owned this way too: you own the use of something built and maintained by people whose whole business is that it never falls down.

The next step is smaller than a sales cycle

Bring us the integration you think can't be done.

The API with no catalog entry, the forty custom fields, the sync that loops, the customer report from three weeks ago. One working session, on your systems, and you watch it built, tested on every branch, and running. Judge the architecture with your own scenario, which is what this page has been asking you to do all along.

Book a working session See the AI operate the platform

Sources for Tray.ai statements

Scenario companies on this page are composite illustrations drawn from real deployment shapes. Company names are fictional and are not customer references. Where a figure comes from a live APIANT deployment it is identified as such and the customer is not named. Every statement about Tray.ai on this page derives from Tray.ai's public documentation, help centre, developer platform docs and pricing page as reviewed in August 2026. Direct quotes are reproduced verbatim for comparison purposes. All product and company names are trademarks of their respective owners. Platform capabilities evolve; verify anything decision-critical against the current versions of the linked pages.