> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chronicle-labs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Service twins

> Simulated services that your agent can read and write through the vendor's API.

export const twinCatalog = {
  "twins": [{
    "aliases": ["team chat", "messaging", "workspace"],
    "api": "Slack Web API",
    "category": "Messaging",
    "domain": "slack.com",
    "id": "slack",
    "name": "Slack",
    "operations": ["conversations.list", "conversations.history", "chat.postMessage", "users.list", "reactions.add", "bookmarks.list"],
    "profile": {
      "apiName": "Slack Web API",
      "apiStyle": "HTTP methods with JSON responses; Events API callbacks",
      "auth": "Scoped OAuth bot or user tokens.",
      "id": "slack",
      "overview": "Slack organizes workplace communication around conversations and message threads. Its Web API supports retrieving context and taking messaging actions, while event subscriptions deliver changes. Token scopes and conversation membership determine which content an integration can read or update.",
      "referenceUrl": "https://docs.slack.dev/apis/web-api/",
      "resources": ["Conversations", "Messages", "Thread replies", "Users", "Reactions", "Files"],
      "scenario": {
        "seed": "Seed #erp-alerts with conflicting invoice messages, a prior investigation thread, and member identities for finance and engineering.",
        "success": "The update references order 7001, distinguishes confirmed facts from open questions, and appears once in the intended channel.",
        "task": "Investigate duplicate invoice issue ENG-2 and post one evidence-based update in #erp-alerts for the billing team."
      },
      "summary": "Coordinate operational decisions across channels, threaded conversations, member identities, and searchable messages with explicit audience context.",
      "workflows": ["Read a channel and its threads before summarizing an incident.", "Post a targeted update with references to the underlying records.", "Resolve participant identities before mentioning the responsible teammate."]
    },
    "summary": "A workspace with channels, members, message history, threads, reactions, and bookmarks.",
    "worldsmith": true
  }, {
    "aliases": ["issue tracking", "tickets", "engineering", "workflows"],
    "api": "Linear GraphQL API",
    "category": "Dev & Code",
    "domain": "linear.app",
    "id": "linear",
    "name": "Linear",
    "operations": ["Issues", "Comments", "Labels", "Projects", "GraphQL filters"],
    "profile": {
      "apiName": "Linear API",
      "apiStyle": "GraphQL over HTTPS; webhooks",
      "auth": "Personal API keys or OAuth 2.0 access tokens.",
      "id": "linear",
      "overview": "Linear exposes its issue tracking model through GraphQL queries and mutations. Issues connect to teams, projects, cycles, labels, and assignees. Workspace-specific workflow states matter when translating a natural-language request into an issue update.",
      "referenceUrl": "https://linear.app/developers/graphql",
      "resources": ["Issues", "Teams", "Projects", "Cycles", "Comments", "Workflow states", "Users"],
      "scenario": {
        "seed": "Seed ENG-2, a similar resolved issue, billing team members, and workflow states that distinguish investigation from completion.",
        "success": "Only ENG-2 receives the intended owner and investigation status; its comment explains the duplicate evidence and remaining work.",
        "task": "Triage ENG-2 as a duplicate-invoice investigation, assign the billing owner, and document evidence without declaring a fix."
      },
      "summary": "Track engineering issues, ownership, workflow states, projects, and discussion history through a connected GraphQL work model.",
      "workflows": ["Find related issues before filing a new defect report.", "Update assignment, priority, and status using the owning team’s states.", "Add investigation evidence as a comment linked to the correct issue."]
    },
    "summary": "An organization with teams, projects, issues, workflow states, labels, and comments.",
    "worldsmith": true
  }, {
    "aliases": ["customer relationship management", "sales", "support cases", "SOQL"],
    "api": "Salesforce REST API",
    "category": "CRM & Sales",
    "domain": "salesforce.com",
    "id": "salesforce",
    "name": "Salesforce",
    "operations": ["sobjects create, read, update, and delete", "SOQL subset via /query"],
    "profile": {
      "apiName": "Salesforce REST API",
      "apiStyle": "REST with JSON or XML; SOQL queries",
      "auth": "OAuth 2.0 access token scoped by the Salesforce user and application.",
      "id": "salesforce",
      "overview": "Salesforce’s REST API exposes standard and custom objects, metadata discovery, and SOQL queries. Record relationships provide customer context across sales and service workflows. Object permissions, field access, and organization configuration determine which records an integration can inspect or modify.",
      "referenceUrl": "https://developer.salesforce.com/docs/platform/api-rest/guide/intro-rest.html",
      "resources": ["Accounts", "Contacts", "Cases", "Opportunities", "Tasks", "Custom objects", "Object metadata"],
      "scenario": {
        "seed": "Seed the case, its account and contact, a similarly numbered unrelated case, and task ownership for the finance team.",
        "success": "The correct case gains evidence and a finance follow-up; its unresolved status and unrelated account fields remain intact throughout the investigation.",
        "task": "Investigate case 00001001 concerning duplicate invoices, record the finance follow-up, and leave the case open until reconciliation is complete."
      },
      "summary": "Connect customer cases, accounts, contacts, opportunities, and custom business records to structured queries and controlled record updates.",
      "workflows": ["Query a case and its account before preparing a billing response.", "Update selected case fields while preserving unrelated customer information.", "Create a follow-up task tied to the correct customer record."]
    },
    "summary": "Accounts, contacts, opportunities, leads, and cases with vendor-style 18-character IDs.",
    "worldsmith": true
  }, {
    "aliases": ["SAP", "S4HANA", "enterprise resource planning", "order management"],
    "api": "SAP OData API",
    "category": "ERP",
    "domain": "sap.com",
    "id": "sap_s4hana",
    "name": "SAP S/4HANA",
    "operations": ["API_BUSINESS_PARTNER", "API_SALES_ORDER_SRV", "CSRF token handshake for writes"],
    "profile": {
      "apiName": "SAP S/4HANA Sales Order and Business Partner APIs",
      "apiStyle": "OData V2 for Sales Order A2X.",
      "auth": "Communication-arrangement credentials, such as Basic authentication; protected OData writes require CSRF tokens.",
      "id": "sap_s4hana",
      "overview": "SAP S/4HANA exposes business processes through service-specific APIs. Sales Order A2X uses OData entities for headers, items, partners, and scheduling. Related business-partner APIs supply customer context, while business configuration determines which changes are valid.",
      "referenceUrl": "https://help.sap.com/docs/SAP_S4HANA_CLOUD/03c04db2a7434731b7fe21dca77440da/17f4a94ed364458ba96b399d43fd1779.html",
      "resources": ["Sales orders", "Sales order items", "Schedule lines", "Order partners", "Business partners", "Customer sales areas"],
      "scenario": {
        "seed": "A customer account, order 7001 with two items, one billing exception, and another valid order that must remain unchanged.",
        "success": "The explanation names the correct order and item, distinguishes observed facts from assumptions, and preserves the original order and customer data.",
        "task": "Investigate order 7001's billing failure, identify the affected item, and prepare an engineering handoff without changing records."
      },
      "summary": "Investigate enterprise sales orders, business partners, and billing exceptions across SAP's structured business records and rules.",
      "workflows": ["Trace a billing exception from an order to its item and customer.", "Check quantities and schedule lines before proposing an order correction.", "Validate business-partner references when preparing a new sales order."]
    },
    "summary": "Business partners, sales orders, and order items, with SAP's business-rule errors.",
    "worldsmith": true
  }, {
    "aliases": ["email", "Google Mail", "inbox"],
    "api": "Gmail API",
    "category": "Email & Calendar",
    "domain": "gmail.com",
    "id": "gmail",
    "name": "Gmail",
    "operations": ["users.messages.list", "users.messages.get", "users.threads.get", "users.labels.list", "Mailbox search queries"],
    "profile": {
      "apiName": "Gmail API",
      "apiStyle": "REST with JSON and MIME message payloads; push notifications",
      "auth": "OAuth 2.0 mailbox scopes; Workspace delegation requires administrator configuration.",
      "id": "gmail",
      "overview": "The Gmail API exposes mailbox resources rather than browser UI actions. Threads group related messages, labels organize mail, and drafts separate preparation from sending. OAuth scopes distinguish reading, modifying, and sending within the authorized user’s mailbox.",
      "referenceUrl": "https://developers.google.com/workspace/gmail/api/reference/rest",
      "resources": ["Messages", "Threads", "Drafts", "Labels", "Attachments", "History records", "Mailbox settings"],
      "scenario": {
        "seed": "Seed an invoice thread with attachments, an unrelated message sharing its subject, customer recipients, and a billing-review label.",
        "success": "The draft uses the correct thread and recipients, references the matching invoice, remains unsent, and does not expose unrelated attachments.",
        "task": "Find the duplicate-invoice email thread and prepare a clarification draft addressed to the customer, leaving the message unsent."
      },
      "summary": "Read and organize mailbox conversations, inspect attachments, and prepare replies using messages, threads, drafts, and labels.",
      "workflows": ["Find an invoice conversation using sender, subject, and message context.", "Create a reply draft that preserves the intended thread and recipients.", "Apply an investigation label while leaving unrelated messages untouched."]
    },
    "summary": "One mailbox with messages, threads, labels, drafts, and attachments.",
    "worldsmith": false
  }, {
    "aliases": ["spreadsheets", "worksheets", "A1 ranges", "cell data"],
    "api": "Google Sheets API v4",
    "category": "Docs & Storage",
    "domain": "google.com",
    "id": "google_sheets",
    "name": "Google Sheets",
    "operations": ["spreadsheets.get", "spreadsheets.values.get", "spreadsheets.values.batchGet", "spreadsheets.values.update", "spreadsheets.values.append", "spreadsheets.values.clear"],
    "profile": {
      "apiName": "Google Sheets API v4",
      "apiStyle": "REST / JSON",
      "auth": "OAuth 2.0 access tokens; service accounts require access to the spreadsheet.",
      "id": "google_sheets",
      "overview": "Google Sheets exposes spreadsheets, individual tabs, and cell ranges through its REST API. Values operations handle table data, while spreadsheet batch updates control structure and formatting. Stable spreadsheet IDs and explicit ranges keep automation attached to the intended document.",
      "referenceUrl": "https://developers.google.com/workspace/sheets/api/guides/concepts",
      "resources": ["Spreadsheets", "Sheets", "Cells", "Named ranges", "Protected ranges", "Developer metadata"],
      "scenario": {
        "seed": "Include invoice and payment tabs, one duplicated invoice identifier, a legitimate repeated customer name, protected headers, and formula-driven totals.",
        "success": "The duplicate row is identified correctly, the surviving invoice matches the payment evidence, and unrelated cells and formulas retain their initial values.",
        "task": "Correct the customer’s duplicated invoice entry in the collections sheet, retaining the original invoice and preserving every formula in the totals columns."
      },
      "summary": "Read and update spreadsheet cells, reconcile operational tables, and preserve formulas while correcting specific records.",
      "workflows": ["Reconcile invoice rows against payment exports without replacing calculated columns.", "Append a weekly operations report to a designated worksheet.", "Repair an incorrect status across matching records using explicit cell ranges."]
    },
    "summary": "Spreadsheets with tabs and cell values, including A1-range reads and writes.",
    "worldsmith": false
  }, {
    "aliases": ["Modernizing Medicine", "EMA", "FHIR", "EHR", "clinical scheduling"],
    "api": "ModMed EMA FHIR v2 gateway with OAuth",
    "category": "Healthcare",
    "domain": "modmed.com",
    "id": "modmed",
    "name": "ModMed",
    "operations": ["58 documented operations", "Patient search, read, create, and update", "Practitioner search", "Appointment slots and booking", "Encounter search"],
    "profile": {
      "apiName": "ModMed EMA Proprietary FHIR API",
      "apiStyle": "FHIR-style REST / JSON",
      "auth": "OAuth 2.0 bearer tokens with authorized practice access.",
      "id": "modmed",
      "overview": "ModMed offers separate certified FHIR and proprietary EMA APIs. The proprietary interface supports operational integrations with practice management and clinical records; access depends on practice authorization. Choose the API family and resource operations before designing a scheduling or intake workflow.",
      "referenceUrl": "https://portal.api.modmed.com/docs/getting-started",
      "resources": ["Patients", "Practitioners", "Locations", "Appointment slots", "Appointments", "Encounters"],
      "scenario": {
        "seed": "Provide two similarly named patients, distinct identifiers, multiple office locations, a requested time window, and one suitable available appointment slot.",
        "success": "Exactly one appointment references the intended patient, practitioner, location, and available slot; no duplicate patient or conflicting booking is created.",
        "task": "Book a synthetic patient's requested follow-up with the correct practitioner and office, using an available slot without creating a duplicate patient."
      },
      "summary": "Explore patient records and appointment workflows through ModMed's practice-authorized EMA interfaces and documented FHIR resources.",
      "workflows": ["Find an existing patient before creating a new intake record.", "Match appointment availability to the requested practitioner and location.", "Retrieve encounter context for an authorized administrative handoff."]
    },
    "summary": "A clinical practice with patients, practitioners, appointment slots, bookings, and encounters.",
    "worldsmith": false
  }, {
    "category": "Dev & Code",
    "domain": "github.com",
    "id": "github",
    "name": "GitHub",
    "profile": {
      "apiName": "GitHub REST API",
      "apiStyle": "Versioned REST with JSON; webhooks",
      "auth": "GitHub App tokens, personal access tokens, or OAuth access tokens.",
      "id": "github",
      "overview": "GitHub’s REST API exposes repository collaboration and automation resources. Pull requests, issue discussions, reviews, and check results provide different pieces of release evidence. GitHub App permissions or token scopes bound access to repositories and individual actions.",
      "referenceUrl": "https://docs.github.com/en/rest",
      "resources": ["Repositories", "Issues", "Pull requests", "Reviews", "Check runs", "Workflow runs", "Releases"],
      "scenario": {
        "seed": "Seed a pull request with a duplicate-invoice patch, one failing check, an outdated approval, and a linked incident.",
        "success": "The agent identifies both blockers, cites their evidence, and leaves the pull request unmerged until the requirements are met.",
        "task": "Review a billing fix pull request and explain whether its checks and approvals justify merging the change."
      },
      "summary": "Inspect repository changes, pull requests, review feedback, and automated checks before deciding how engineering work should progress.",
      "workflows": ["Correlate failing checks with the pull request’s changed files.", "Request review from the correct maintainers with a concise explanation.", "Prepare release notes from merged changes and associated issue references."]
    }
  }, {
    "category": "Dev & Code",
    "domain": "gitlab.com",
    "id": "gitlab",
    "name": "GitLab",
    "profile": {
      "apiName": "GitLab REST API",
      "apiStyle": "REST v4 with JSON; webhooks",
      "auth": "Personal, project, or group access tokens; OAuth 2.0 tokens.",
      "id": "gitlab",
      "overview": "GitLab’s REST API covers projects, planning, code review, and CI/CD. Merge requests and pipelines share project context but use distinct identifiers. Self-managed instances have their own API origin, and project access controls apply to integration requests.",
      "referenceUrl": "https://docs.gitlab.com/api/rest/",
      "resources": ["Projects", "Issues", "Merge requests", "Pipelines", "Jobs", "Notes", "Branches"],
      "scenario": {
        "seed": "Seed two projects with overlapping issue numbers, a billing merge request, failed test jobs, and a successful unrelated pipeline.",
        "success": "The note targets the billing project’s merge request, cites the failing job, and does not confuse project-local identifiers.",
        "task": "Investigate a failed billing pipeline and leave a merge-request note identifying the failing job and appropriate next action."
      },
      "summary": "Connect project issues and merge requests with pipeline evidence, reviewer feedback, and repository changes during delivery decisions.",
      "workflows": ["Trace a failed pipeline to its jobs and associated merge request.", "Add a review note explaining a missing test or deployment prerequisite.", "List unresolved project issues relevant to an upcoming release."]
    }
  }, {
    "category": "Dev & Code",
    "domain": "bitbucket.org",
    "id": "bitbucket",
    "name": "Bitbucket",
    "profile": {
      "apiName": "Bitbucket Cloud REST API",
      "apiStyle": "REST 2.0 with JSON; webhooks",
      "auth": "OAuth 2.0, scoped API tokens, or repository/project/workspace access tokens.",
      "id": "bitbucket",
      "overview": "Bitbucket Cloud provides REST resources for repository collaboration and delivery automation. Workspaces contain repositories, while pull requests connect source and destination branches. Review tasks and build results help distinguish a proposed change from one ready to merge.",
      "referenceUrl": "https://developer.atlassian.com/cloud/bitbucket/rest/intro/",
      "resources": ["Workspaces", "Repositories", "Pull requests", "Comments", "Review tasks", "Pipelines", "Commit statuses"],
      "scenario": {
        "seed": "Seed a repository, an open pull request, a successful old pipeline, a failing current pipeline, and unresolved review tasks.",
        "success": "The assessment uses the latest commit’s pipeline, identifies unresolved tasks, and avoids treating an earlier green build as sufficient.",
        "task": "Determine whether a billing pull request is ready for review after a new commit changes invoice deduplication."
      },
      "summary": "Work with Bitbucket Cloud repositories, pull requests, review comments, build statuses, and pipeline results across workspace boundaries.",
      "workflows": ["Inspect pull-request comments and unresolved review tasks before approval.", "Compare pipeline results with the commit currently under review.", "Post a review comment that links a defect to specific changed code."]
    }
  }, {
    "category": "Dev & Code",
    "domain": "atlassian.com",
    "id": "jira",
    "name": "Jira",
    "profile": {
      "apiName": "Jira Cloud platform REST API",
      "apiStyle": "REST v3 with JSON; webhooks",
      "auth": "OAuth 2.0 or Atlassian email and API token for Basic authentication.",
      "id": "jira",
      "overview": "Jira Cloud’s platform REST API manages issues and their surrounding project configuration. Status changes use workflow transitions rather than arbitrary status text. Field metadata and permissions determine which updates are valid for a specific issue and actor.",
      "referenceUrl": "https://developer.atlassian.com/cloud/jira/platform/rest/v3/intro/",
      "resources": ["Issues", "Projects", "Comments", "Transitions", "Issue fields", "Users", "Issue links"],
      "scenario": {
        "seed": "Seed an incident with custom billing fields, several available transitions, a duplicate issue, and a restricted completion transition.",
        "success": "The agent chooses the valid investigation transition, preserves unrelated fields, and links the duplicate without prematurely resolving either issue.",
        "task": "Move the duplicate-invoice incident into investigation, assign its owner, and preserve the customer-impact details already recorded."
      },
      "summary": "Coordinate project issues, transitions, assignments, comments, and custom fields while respecting each Jira workflow’s allowed next steps.",
      "workflows": ["Find related incidents using project and issue search filters.", "Choose an allowed transition after checking the issue’s current workflow.", "Add investigation notes and link the engineering issue to its duplicate."]
    }
  }, {
    "category": "Dev & Code",
    "domain": "sentry.io",
    "id": "sentry",
    "name": "Sentry",
    "profile": {
      "apiName": "Sentry Web API",
      "apiStyle": "REST with JSON",
      "auth": "Bearer authentication tokens with organization and resource scopes.",
      "id": "sentry",
      "overview": "Sentry’s API exposes error monitoring and application telemetry resources. An issue groups related events, while a release helps correlate failures with a deployment. Investigation can combine these records before assigning ownership or changing an issue’s status.",
      "referenceUrl": "https://docs.sentry.io/api/",
      "resources": ["Organizations", "Projects", "Issues", "Events", "Releases", "Teams", "Alert rules"],
      "scenario": {
        "seed": "Seed two releases, a grouped error issue, events from both versions, and project ownership information for the billing service.",
        "success": "The agent compares event evidence across releases, identifies the affected version accurately, and does not mark the issue resolved without confirmation.",
        "task": "Assess whether the latest billing release introduced a duplicate-invoice error and recommend the next investigation step with evidence."
      },
      "summary": "Investigate application failures using grouped issues, individual error events, releases, and project context before changing triage state.",
      "workflows": ["Compare error events across releases to identify a likely regression.", "Assign an issue to the team responsible for the affected project.", "Summarize frequency and affected users before changing triage status."]
    }
  }, {
    "category": "Dev & Code",
    "domain": "pagerduty.com",
    "id": "pagerduty",
    "name": "PagerDuty",
    "profile": {
      "apiName": "PagerDuty REST API and Events API v2",
      "apiStyle": "REST with JSON; event ingestion and webhooks",
      "auth": "REST API access keys or OAuth tokens; Events API integration routing keys.",
      "id": "pagerduty",
      "overview": "PagerDuty separates incident management through its REST API from event ingestion through the Events API. Services connect alerts to escalation policies and responders. Incident acknowledgment, reassignment, and resolution represent distinct stages in the operational response.",
      "referenceUrl": "https://developer.pagerduty.com/api-reference/",
      "resources": ["Incidents", "Services", "Escalation policies", "Schedules", "On-calls", "Users", "Incident notes"],
      "scenario": {
        "seed": "Seed a triggered incident, its service escalation policy, overlapping schedules, and a second alert for the same underlying fault.",
        "success": "The agent selects the correct current responder, records the duplicate relationship, and does not resolve an incident with ongoing impact.",
        "task": "Triage a billing outage by identifying the responsible on-call responder and documenting evidence while the incident remains active."
      },
      "summary": "Coordinate incident response through service ownership, escalation policies, on-call schedules, responder assignments, and incident status updates.",
      "workflows": ["Find the current on-call responder for an affected service.", "Acknowledge an incident and add a concise investigation note.", "Correlate duplicate alerts before deciding whether an incident is resolved."]
    }
  }, {
    "category": "Dev & Code",
    "domain": "circleci.com",
    "id": "circleci",
    "name": "CircleCI",
    "profile": {
      "apiName": "CircleCI API v2",
      "apiStyle": "REST with JSON",
      "auth": "Personal API token in the Circle-Token header.",
      "id": "circleci",
      "overview": "CircleCI’s v2 API connects pipeline executions to their workflows and jobs. Jobs expose execution details and artifacts, while workflow actions support operational control. Pipeline parameters and project identity are important when distinguishing a retry from a new execution.",
      "referenceUrl": "https://circleci.com/docs/api/v2/",
      "resources": ["Pipelines", "Workflows", "Jobs", "Artifacts", "Test results", "Contexts", "Projects"],
      "scenario": {
        "seed": "Seed a failed workflow with one deterministic assertion failure, a successful setup job, and an artifact containing the test report.",
        "success": "The agent cites the assertion failure and relevant artifact, explains why a blind rerun is insufficient, and leaves execution unchanged.",
        "task": "Inspect a failed invoice-deduplication workflow and determine whether rerunning it is justified by the available job and test evidence."
      },
      "summary": "Inspect pipelines, workflows, jobs, artifacts, and test results to understand build failures and choose a justified recovery action.",
      "workflows": ["Trace a failed workflow to the job and test result responsible.", "Rerun the relevant workflow after confirming the failure is transient.", "Retrieve artifacts needed to explain a build or test regression."]
    }
  }, {
    "category": "Dev & Code",
    "domain": "vercel.com",
    "id": "vercel",
    "name": "Vercel",
    "profile": {
      "apiName": "Vercel REST API",
      "apiStyle": "REST with JSON; webhooks",
      "auth": "Bearer access token or OAuth integration token with appropriate team access.",
      "id": "vercel",
      "overview": "Vercel’s REST API exposes projects, deployments, domains, aliases, and team resources. Deployments have separate build and readiness states. Project and team identifiers keep operations scoped when multiple applications or customers use similar names.",
      "referenceUrl": "https://vercel.com/docs/rest-api",
      "resources": ["Projects", "Deployments", "Deployment events", "Domains", "Aliases", "Environment variables", "Teams"],
      "scenario": {
        "seed": "Seed separate preview and production deployments, a missing-variable build error, project metadata, and an alias pointing at production.",
        "success": "The report identifies the preview failure and correct project, preserves the production alias, and does not expose environment-variable values.",
        "task": "Investigate why the billing preview failed and identify the required configuration change without altering production routing or secrets."
      },
      "summary": "Manage project deployment context, inspect build outcomes, and distinguish preview releases from production routing and domain changes.",
      "workflows": ["Inspect deployment events to explain a failed preview build.", "Check project and team identity before updating deployment configuration.", "Compare production routing with a proposed deployment before promotion."]
    }
  }, {
    "category": "Dev & Code",
    "domain": "netlify.com",
    "id": "netlify",
    "name": "Netlify",
    "profile": {
      "apiName": "Netlify API",
      "apiStyle": "REST with JSON",
      "auth": "Personal access tokens or OAuth 2.0 bearer tokens.",
      "id": "netlify",
      "overview": "Netlify’s API supports site management and deployment workflows, including deploy records and site configuration. A deploy’s build outcome and publication state answer different questions. Account access and token authorization determine which sites an integration can operate on.",
      "referenceUrl": "https://docs.netlify.com/api-and-cli-guides/api-guides/get-started-with-api/",
      "resources": ["Sites", "Deploys", "Builds", "Deploy files", "Forms", "Submissions", "DNS zones"],
      "scenario": {
        "seed": "Seed a production site with one published deploy, a newer failed build, a preview deploy, and a separate similarly named site.",
        "success": "The agent selects the correct site, distinguishes preview from publication, and cites the failed build alongside the last successful deploy.",
        "task": "Explain a failed billing documentation deploy and identify the last published version without changing the live site’s configuration."
      },
      "summary": "Inspect sites, deploys, build configuration, domain settings, and form submissions within Netlify’s account and team model.",
      "workflows": ["Inspect recent deploys to identify the last successful publication.", "Review site configuration when a build starts failing unexpectedly.", "Retrieve form submissions for a specific site and reporting period."]
    }
  }, {
    "category": "Support",
    "domain": "zendesk.com",
    "id": "zendesk",
    "name": "Zendesk",
    "profile": {
      "apiName": "Zendesk Ticketing API",
      "apiStyle": "REST with JSON; webhooks",
      "auth": "OAuth access token or email/token plus API token using Basic authentication.",
      "id": "zendesk",
      "overview": "Zendesk’s Ticketing API connects support tickets to users, organizations, groups, and ticket workflows. Comments can be public replies or internal notes. Ticket status, priority, and assignment capture separate decisions that should follow the customer’s actual situation.",
      "referenceUrl": "https://developer.zendesk.com/api-reference/ticketing/introduction/",
      "resources": ["Tickets", "Ticket comments", "Users", "Organizations", "Groups", "Ticket fields", "Macros"],
      "scenario": {
        "seed": "Seed a ticket with public replies, private notes, an organization account identifier, and another ticket about the same invoice.",
        "success": "The agent assigns the billing group, adds only a private investigation note, and preserves the unresolved ticket and requester details.",
        "task": "Triage a duplicate-invoice complaint, document the conflicting evidence internally, and keep the customer’s ticket open for billing review."
      },
      "summary": "Triage support tickets with requester history, organization context, comments, assignment, and workflow fields in a shared helpdesk.",
      "workflows": ["Read requester history before responding to a recurring billing complaint.", "Route a ticket to the right group and set its priority.", "Add an internal investigation note without sending it to the customer."]
    }
  }, {
    "category": "Support",
    "domain": "intercom.com",
    "id": "intercom",
    "name": "Intercom",
    "profile": {
      "apiName": "Intercom REST API",
      "apiStyle": "Versioned REST with JSON; webhooks",
      "auth": "Private-app access tokens or OAuth 2.0 bearer tokens.",
      "id": "intercom",
      "overview": "Intercom’s REST API represents customer identity separately from conversations and structured tickets. Conversation parts capture replies and internal notes, while teams and admins support handoffs. Regional API hosts and version headers are part of the integration configuration.",
      "referenceUrl": "https://developers.intercom.com/docs/references/rest-api/api.intercom.io",
      "resources": ["Contacts", "Companies", "Conversations", "Tickets", "Admins", "Teams", "Articles"],
      "scenario": {
        "seed": "Seed a contact linked to a company, two conversations with different invoice numbers, and a billing policy article.",
        "success": "The handoff selects the matching invoice conversation, cites the policy accurately, and avoids merging unrelated customer messages or closing the issue.",
        "task": "Handle a customer’s duplicate-invoice message by finding their account context and handing the conversation to the billing team."
      },
      "summary": "Use customer contacts, companies, conversations, tickets, and help content to coordinate contextual support and teammate handoffs.",
      "workflows": ["Find a contact’s existing conversation before opening another support thread.", "Add an internal note and assign the conversation to a specialist.", "Retrieve help content to ground a response in the documented policy."]
    }
  }, {
    "category": "Support",
    "domain": "freshworks.com",
    "id": "freshdesk",
    "name": "Freshdesk",
    "profile": {
      "apiName": "Freshdesk API v2",
      "apiStyle": "REST with JSON",
      "auth": "Personal API key as the Basic-auth username, with a dummy password.",
      "id": "freshdesk",
      "overview": "Freshdesk’s v2 API exposes ticket operations alongside contacts, companies, agents, and groups. Replies and notes are separate conversation actions. Ticket fields and status values supply the structure for consistent routing, prioritization, and resolution reporting.",
      "referenceUrl": "https://developers.freshdesk.com/api/",
      "resources": ["Tickets", "Conversations", "Contacts", "Companies", "Agents", "Groups", "Ticket fields"],
      "scenario": {
        "seed": "Seed an open ticket, customer contact, company record, prior replies, billing group, and a second unrelated urgent ticket.",
        "success": "Only the intended ticket changes assignment and priority; the note remains private and does not claim a refund was issued.",
        "task": "Route an urgent duplicate-invoice ticket to billing and add a private note explaining which customer records need reconciliation."
      },
      "summary": "Manage support tickets, customer contacts, company records, reply history, and agent assignments across a structured helpdesk workflow.",
      "workflows": ["Filter the ticket queue for urgent billing issues requiring review.", "Attach a private note that preserves the investigation’s supporting evidence.", "Update assignment and priority while retaining existing customer information."]
    }
  }, {
    "category": "Support",
    "domain": "front.com",
    "id": "front",
    "name": "Front",
    "profile": {
      "apiName": "Front Core API",
      "apiStyle": "REST with JSON; webhooks",
      "auth": "Scoped API bearer tokens or OAuth 2.0; public integrations use OAuth.",
      "id": "front",
      "overview": "Front’s Core API models shared communication through inboxes, channels, conversations, and messages. Internal comments support team coordination, while drafts separate preparation from sending. Token permissions distinguish reading, writing, deleting, and sending across shared or private resources.",
      "referenceUrl": "https://dev.frontapp.com/reference/introduction",
      "resources": ["Inboxes", "Channels", "Conversations", "Messages", "Drafts", "Comments", "Contacts"],
      "scenario": {
        "seed": "Seed a shared inbox, customer conversation, internal comments, a personal inbox with similar content, and a finance teammate.",
        "success": "The draft belongs to the shared conversation, reflects its latest messages, remains unsent, and the finance handoff preserves private context.",
        "task": "Prepare a billing clarification draft in the shared inbox and hand the conversation to finance without sending the draft."
      },
      "summary": "Coordinate shared inbox conversations, teammates, message drafts, customer contacts, and internal comments without losing channel or audience context.",
      "workflows": ["Find the shared conversation corresponding to a customer’s account.", "Prepare a response draft for a teammate to review before sending.", "Assign a conversation and add an internal handoff comment."]
    }
  }, {
    "category": "Support",
    "domain": "helpscout.com",
    "id": "help_scout",
    "name": "Help Scout",
    "profile": {
      "apiName": "Help Scout Inbox API 2.0",
      "apiStyle": "REST with JSON",
      "auth": "OAuth 2.0 authorization-code or client-credentials flow.",
      "id": "help_scout",
      "overview": "Help Scout’s Inbox API 2.0 exposes conversations and their threads alongside customer and inbox records. Thread types distinguish customer messages, agent replies, and notes. OAuth credentials act within the access of an active Help Scout user.",
      "referenceUrl": "https://developer.helpscout.com/mailbox-api/",
      "resources": ["Conversations", "Threads", "Customers", "Inboxes", "Users", "Tags", "Saved replies"],
      "scenario": {
        "seed": "Seed a customer, conversation threads with a previous reply and a new objection, billing tags, and two support inboxes.",
        "success": "The note addresses the latest objection, stays internal, preserves the conversation’s active state, and assigns the correct billing specialist.",
        "task": "Identify the unresolved invoice question in a customer conversation and leave an internal handoff note for the billing specialist."
      },
      "summary": "Organize customer support through inboxes, conversations, threaded replies, notes, tags, and assigned users with clear communication boundaries.",
      "workflows": ["Read a conversation’s threads before composing a support response.", "Add an internal note and assign the conversation to a teammate.", "Tag recurring billing complaints for consistent queue organization."]
    }
  }, {
    "category": "Support",
    "domain": "gorgias.com",
    "id": "gorgias",
    "name": "Gorgias",
    "profile": {
      "apiName": "Gorgias REST API",
      "apiStyle": "REST with JSON; webhooks",
      "auth": "Email and API key for private apps; OAuth 2.0 for public apps.",
      "id": "gorgias",
      "overview": "Gorgias exposes helpdesk resources for customer communication and commerce support. Tickets organize message history, while customers, tags, and users provide routing context. Commerce data shown in integrations should be distinguished from operations provided by the helpdesk API itself.",
      "referenceUrl": "https://developers.gorgias.com/reference/introduction",
      "resources": ["Tickets", "Messages", "Customers", "Users", "Teams", "Tags", "Integrations"],
      "scenario": {
        "seed": "Seed a customer with two support tickets, message history containing different order numbers, billing tags, and a specialist team.",
        "success": "The agent selects the correct ticket, records the matching order reference, and keeps payment claims consistent with the available evidence.",
        "task": "Triage a shopper’s duplicate-charge ticket and prepare a billing handoff without asserting that a payment refund has occurred."
      },
      "summary": "Connect commerce support tickets, customer identities, messages, tags, and team assignments to the context of a shopper’s request.",
      "workflows": ["Locate a shopper’s existing ticket before creating a duplicate conversation.", "Add a support message or internal note with order references.", "Assign a ticket to a specialist and apply the relevant tags."]
    }
  }, {
    "category": "Support",
    "domain": "crisp.chat",
    "id": "crisp",
    "name": "Crisp",
    "profile": {
      "apiName": "Crisp REST API v1",
      "apiStyle": "REST with JSON; realtime API and webhooks",
      "auth": "Website or plugin token keypair via Basic authentication, with X-Crisp-Tier and applicable scopes.",
      "id": "crisp",
      "overview": "Crisp’s REST API exposes workspace, conversation, and people resources, complemented by realtime and webhook interfaces. Conversation session identifiers keep messages attached to the correct visitor. Website and plugin token types provide different workspace access and scope arrangements.",
      "referenceUrl": "https://docs.crisp.chat/references/rest-api/v1/",
      "resources": ["Websites", "Conversations", "Messages", "People profiles", "Operators", "Segments", "Conversation metadata"],
      "scenario": {
        "seed": "Seed two website workspaces, visitor profiles, similar conversation messages, and operator assignments so session and workspace identity both matter.",
        "success": "The handoff updates only the matching website conversation, preserves its visitor identity, and summarizes the invoice evidence without exposing another account.",
        "task": "Hand a visitor’s duplicate-invoice chat to billing after identifying the relevant account and summarizing the unresolved question."
      },
      "summary": "Manage website conversations, visitor profiles, message history, operator assignments, and support context across Crisp workspaces and chat sessions.",
      "workflows": ["Load a visitor’s conversation history before answering a support question.", "Assign an active conversation to an appropriate support operator.", "Update conversation metadata to preserve account and investigation context."]
    }
  }, {
    "category": "CRM & Sales",
    "domain": "hubspot.com",
    "id": "hubspot",
    "name": "HubSpot",
    "profile": {
      "apiName": "HubSpot CRM APIs",
      "apiStyle": "REST with JSON; webhooks",
      "auth": "OAuth access tokens or private-app access tokens with CRM scopes.",
      "id": "hubspot",
      "overview": "HubSpot’s CRM APIs expose records, typed properties, and associations between objects. Pipelines and stages supply business process context. A useful integration preserves those relationships when enriching a contact, advancing a deal, or recording a customer interaction.",
      "referenceUrl": "https://developers.hubspot.com/docs/api-reference/latest/overview",
      "resources": ["Contacts", "Companies", "Deals", "Tickets", "Properties", "Associations", "Pipelines"],
      "scenario": {
        "seed": "Seed contacts sharing a name, distinct company domains, an open deal, a ticket pipeline, and existing object associations.",
        "success": "The agent matches the customer by reliable identifiers, preserves existing associations, and creates or updates only the intended billing ticket.",
        "task": "Record a billing escalation against an existing customer and associate it with the correct company without creating duplicate contacts."
      },
      "summary": "Connect contacts, companies, deals, tickets, and activities through CRM properties and associations for sales and service workflows.",
      "workflows": ["Find an existing contact and company before creating new CRM records.", "Associate a support ticket with the correct contact and company.", "Update a deal stage only after checking pipeline definitions and evidence."]
    }
  }, {
    "category": "CRM & Sales",
    "domain": "pipedrive.com",
    "id": "pipedrive",
    "name": "Pipedrive",
    "profile": {
      "apiName": "Pipedrive API",
      "apiStyle": "REST with JSON; v1 and v2 endpoints",
      "auth": "API token for a user or OAuth 2.0 access token.",
      "id": "pipedrive",
      "overview": "Pipedrive’s API models the sales process around deals and their associated people, organizations, and activities. Pipeline stages and custom fields define team-specific meaning. Its reference includes v1 and v2 resources, so integrations select versions per endpoint.",
      "referenceUrl": "https://developers.pipedrive.com/docs/api/v1",
      "resources": ["Deals", "Persons", "Organizations", "Activities", "Notes", "Pipelines", "Stages"],
      "scenario": {
        "seed": "Seed a renewal deal, its organization and contact, an unresolved billing note, sales owners, and two pipelines with similar stage names.",
        "success": "The activity links to the correct deal and contact, has the requested owner and date, and leaves the renewal stage unchanged.",
        "task": "Prepare a follow-up activity for a customer whose renewal is blocked by a duplicate-invoice dispute, preserving the current deal stage."
      },
      "summary": "Coordinate sales deals, people, organizations, activities, and pipeline stages while preserving the relationships that make follow-up actionable.",
      "workflows": ["Find a deal’s related organization and contact before scheduling follow-up.", "Create a sales activity with a specific owner and due date.", "Update deal notes without moving its stage beyond the available evidence."]
    }
  }, {
    "category": "CRM & Sales",
    "domain": "zoho.com",
    "id": "zoho_crm",
    "name": "Zoho CRM",
    "profile": {
      "apiName": "Zoho CRM API v8",
      "apiStyle": "REST with JSON; query and bulk APIs",
      "auth": "OAuth 2.0 tokens with module-specific scopes and the appropriate data-center host.",
      "id": "zoho_crm",
      "overview": "Zoho CRM’s APIs expose standard and custom modules alongside field metadata and related records. Module names and organization-specific fields shape requests. OAuth scopes and the account’s data center determine the authorization and API origin used by an integration.",
      "referenceUrl": "https://www.zoho.com/crm/developer/docs/api/v8/",
      "resources": ["Leads", "Contacts", "Accounts", "Deals", "Tasks", "Notes", "Module metadata"],
      "scenario": {
        "seed": "Seed account and contact modules, a custom invoice-reference field, two similarly named accounts, and existing finance tasks for comparison.",
        "success": "The task uses valid field names and the correct account relationship, includes the invoice reference, and does not duplicate an existing follow-up.",
        "task": "Find the customer account affected by duplicate billing and create a finance follow-up using the organization’s configured task fields."
      },
      "summary": "Query CRM modules, records, relationships, activities, and metadata to perform customer updates within Zoho’s configured business model.",
      "workflows": ["Inspect module fields before mapping external billing data into CRM records.", "Find an account’s related contacts and open activities.", "Create a follow-up task and attach an evidence-based account note."]
    }
  }, {
    "category": "CRM & Sales",
    "domain": "close.com",
    "id": "close",
    "name": "Close",
    "profile": {
      "apiName": "Close REST API",
      "apiStyle": "REST with JSON; webhooks and event log",
      "auth": "API keys for internal scripts or OAuth 2.0 for integrations.",
      "id": "close",
      "overview": "Close’s REST API combines CRM records with sales communication and workflow resources. Leads group contacts and opportunities, while activities record interactions. Search and event data help an integration avoid duplicate records and act on the most recent customer context.",
      "referenceUrl": "https://developer.close.com/",
      "resources": ["Leads", "Contacts", "Opportunities", "Tasks", "Activities", "Sequences", "Custom fields"],
      "scenario": {
        "seed": "Seed a lead with multiple contacts, an open opportunity, a recent billing objection, an older positive call note, and pending tasks.",
        "success": "The follow-up reflects the recent objection, links to the correct lead, avoids duplicate tasks, and leaves outbound communication unsent.",
        "task": "Create a finance follow-up for a renewal lead after a customer reports duplicate billing, without sending another sales email."
      },
      "summary": "Coordinate leads, contacts, opportunities, tasks, and communication activities to keep sales follow-up grounded in the customer’s latest interaction.",
      "workflows": ["Locate a lead by contact identifiers before creating another record.", "Record a call note and schedule the agreed follow-up task.", "Review communication activity before changing an opportunity’s status."]
    }
  }, {
    "category": "CRM & Sales",
    "domain": "attio.com",
    "id": "attio",
    "name": "Attio",
    "profile": {
      "apiName": "Attio REST API",
      "apiStyle": "REST with JSON; webhooks",
      "auth": "Scoped bearer access token from an API key or OAuth 2.0.",
      "id": "attio",
      "overview": "Attio’s REST API exposes a configurable CRM model in which objects contain records and lists organize entries. Attributes define typed values and relationships. Integrations can inspect the schema before deciding how to match, enrich, or organize customer records.",
      "referenceUrl": "https://docs.attio.com/rest-api/overview",
      "resources": ["Objects", "Records", "Attributes", "Lists", "List entries", "Notes", "Tasks"],
      "scenario": {
        "seed": "Seed company records with similar names, verified domains, a finance-review list with custom attributes, and an existing entry for another company.",
        "success": "The correct company appears once in the list, its existing record values remain intact, and the task explains the unresolved invoice question.",
        "task": "Add a customer with an unresolved billing dispute to the finance-review list and attach a clear follow-up task."
      },
      "summary": "Work with flexible CRM objects, records, attributes, lists, notes, and tasks while preserving typed relationships and customer identity.",
      "workflows": ["Inspect object attributes before mapping a customer update into the CRM.", "Match a company by domain and update its relevant record values.", "Add a list entry and follow-up task tied to the correct record."]
    }
  }, {
    "category": "CRM & Sales",
    "domain": "outreach.io",
    "id": "outreach",
    "name": "Outreach",
    "profile": {
      "apiName": "Outreach REST API",
      "apiStyle": "REST using JSON:API 1.0; webhooks",
      "auth": "OAuth 2.0 access tokens with application-specific scopes.",
      "id": "outreach",
      "overview": "Outreach’s REST API follows JSON:API conventions, including attributes, relationships, filtering, and included resources. Prospect identity and sequence state guide engagement decisions. OAuth authorization scopes limit which sales records and workflow actions an application can access.",
      "referenceUrl": "https://developers.outreach.io/api",
      "resources": ["Prospects", "Accounts", "Sequences", "Sequence states", "Tasks", "Mailings", "Users"],
      "scenario": {
        "seed": "Seed a prospect, account, active sequence state, recent objection email, assigned owner, and a similarly named prospect at another company.",
        "success": "The task targets the correct prospect and owner, cites the latest objection, and no new sequence enrollment or mailing is created.",
        "task": "Assess a prospect’s recent billing objection and create an owner follow-up instead of adding them to another sales sequence."
      },
      "summary": "Coordinate prospects, accounts, sequences, tasks, and sales communication using explicit resource relationships and scoped engagement permissions.",
      "workflows": ["Find a prospect’s account and current sequence participation before outreach.", "Create a follow-up task for the owner handling a customer objection.", "Inspect recent mailings to avoid an inappropriate or duplicate contact."]
    }
  }, {
    "category": "CRM & Sales",
    "domain": "apollo.io",
    "id": "apollo",
    "name": "Apollo",
    "profile": {
      "apiName": "Apollo API",
      "apiStyle": "REST with JSON",
      "auth": "API key in x-api-key; OAuth 2.0 for partner integrations.",
      "id": "apollo",
      "overview": "Apollo’s API combines prospect discovery and enrichment with workspace contacts, accounts, and sales engagement. Search results and saved contacts serve different purposes. Endpoint availability, credits, and API-key permissions determine which data and actions an integration can use.",
      "referenceUrl": "https://docs.apollo.io/reference/authentication",
      "resources": ["People search results", "Organizations", "Contacts", "Accounts", "Sequences", "Tasks", "Users"],
      "scenario": {
        "seed": "Seed account records, contacts with similar names, role information, an opted-out contact, and existing sales tasks for the target company.",
        "success": "The agent selects the correct company contact, preserves opt-out information, avoids duplicate records, and creates no unrequested sequence enrollment.",
        "task": "Find the existing contact responsible for billing at a customer account and prepare a follow-up without triggering sequence outreach."
      },
      "summary": "Find and enrich business contacts, organize accounts, and coordinate prospecting records with sequence and task context.",
      "workflows": ["Search for relevant business contacts using company and role criteria.", "Check saved contacts before creating a new prospecting record.", "Create a follow-up task without enrolling an opted-out contact."]
    }
  }, {
    "category": "CRM & Sales",
    "domain": "gong.io",
    "id": "gong",
    "name": "Gong",
    "profile": {
      "apiName": "Gong API v2",
      "apiStyle": "REST with JSON",
      "auth": "Access key and secret via Basic authentication, or OAuth bearer token.",
      "id": "gong",
      "overview": "Gong’s public API exposes calls, users, libraries, and selected statistics, with endpoints for transcripts and supported imports. It suits evidence retrieval and conversation analysis. Customer-specific API hosts and permissions determine which recordings and associated information are accessible.",
      "referenceUrl": "https://help.gong.io/apidocs/introduction-2",
      "resources": ["Calls", "Call transcripts", "Call participants", "Users", "Libraries", "User statistics", "CRM imports"],
      "scenario": {
        "seed": "Seed two renewal calls, timestamped transcripts, speaker mappings, and an older conversation whose billing concern was already resolved.",
        "success": "The summary attributes statements to the correct speaker, cites the latest relevant call, and separates unresolved concerns from previously resolved ones.",
        "task": "Identify the customer’s exact billing objection from the latest renewal call and produce a follow-up summary supported by transcript evidence."
      },
      "summary": "Retrieve recorded customer conversations, transcripts, participant identities, and call context to ground sales analysis in specific spoken evidence.",
      "workflows": ["Retrieve transcripts for selected calls within a defined date range.", "Map speaker identifiers to participants before attributing a customer statement.", "Summarize objections with call references for a CRM follow-up."]
    }
  }, {
    "category": "Messaging",
    "domain": "microsoft.com",
    "id": "microsoft_teams",
    "name": "Microsoft Teams",
    "profile": {
      "apiName": "Microsoft Graph Teams APIs",
      "apiStyle": "REST with JSON; change notifications",
      "auth": "Microsoft Entra OAuth 2.0; delegated or application permissions depend on the operation.",
      "id": "microsoft_teams",
      "overview": "Microsoft Graph exposes Teams collaboration resources with endpoint-specific permission requirements. Reading messages, managing channels, and sending messages are different capabilities. Standard message sending uses delegated permissions; app-only access is not a general substitute for sending as a user.",
      "referenceUrl": "https://learn.microsoft.com/en-us/graph/teams-concept-overview",
      "resources": ["Teams", "Channels", "Chats", "Messages", "Replies", "Members", "Tabs"],
      "scenario": {
        "seed": "Seed two teams with similarly named channels, an active incident thread, membership records, and unrelated private conversation content.",
        "success": "The handoff targets the correct team and thread, identifies the responsible owner, and does not copy information from an unrelated conversation.",
        "task": "Prepare a concise billing-incident handoff in the appropriate team channel, using only the customer context visible to that team."
      },
      "summary": "Coordinate team channels, chats, message threads, membership, and shared collaboration context through Microsoft Graph and Teams application interfaces.",
      "workflows": ["Read a channel thread before preparing a customer-incident update.", "Resolve team membership to identify the intended audience and owner.", "Post an approved reply using an identity permitted to send messages."]
    }
  }, {
    "category": "Messaging",
    "domain": "discord.com",
    "id": "discord",
    "name": "Discord",
    "profile": {
      "apiName": "Discord API",
      "apiStyle": "REST with JSON; Gateway WebSocket and interactions",
      "auth": "Bot tokens or OAuth 2.0 bearer tokens, depending on the endpoint.",
      "id": "discord",
      "overview": "Discord combines an HTTP API with Gateway events and interaction callbacks. Guild membership, channel permissions, and privileged intents affect what a bot can observe. Messages and moderation actions should use the correct guild, channel, and authorized application identity.",
      "referenceUrl": "https://docs.discord.com/developers/reference",
      "resources": ["Guilds", "Channels", "Messages", "Members", "Roles", "Interactions", "Webhooks"],
      "scenario": {
        "seed": "Seed a guild with public and private channels, a support thread, member roles, and a similar discussion in another channel.",
        "success": "The response stays in the intended thread, attributes the request correctly, and respects channel visibility and the bot’s permitted actions.",
        "task": "Summarize a billing-support thread for moderators and post the next step in that thread without mentioning unrelated community members."
      },
      "summary": "Build community workflows around guilds, channels, messages, members, roles, and interactions while honoring bot permissions and visibility.",
      "workflows": ["Read a support thread and identify the member requesting assistance.", "Respond to an interaction with a targeted status or next step.", "Route an issue to the correct channel without exposing private context."]
    }
  }, {
    "category": "Messaging",
    "domain": "telegram.org",
    "id": "telegram",
    "name": "Telegram",
    "profile": {
      "apiName": "Telegram Bot API",
      "apiStyle": "HTTP methods returning JSON; polling or webhooks",
      "auth": "Bot token issued by BotFather, included in the API request path.",
      "id": "telegram",
      "overview": "The Telegram Bot API provides HTTPS methods for bot actions and receives updates through polling or webhooks. Bots operate under their own identity. Group privacy settings and chat permissions affect which messages are delivered and which actions are possible.",
      "referenceUrl": "https://core.telegram.org/bots/api",
      "resources": ["Updates", "Messages", "Chats", "Chat members", "Callback queries", "Files", "Inline keyboards"],
      "scenario": {
        "seed": "Seed a private customer chat, a group chat with similar text, a document attachment, and a repeated update delivery.",
        "success": "The bot replies once to the correct chat, requests only the missing reference, and does not leak the attachment to another conversation.",
        "task": "Handle a duplicate-invoice support request received by the bot and ask for the missing reference in the originating conversation."
      },
      "summary": "Handle bot messages, updates, chat identities, inline actions, and attachments with explicit routing between private and group conversations.",
      "workflows": ["Process incoming updates while preserving chat and message identifiers.", "Send a reply with inline choices for a support workflow.", "Retrieve an attached file after confirming it belongs to the right conversation."]
    }
  }, {
    "category": "Messaging",
    "domain": "whatsapp.com",
    "id": "whatsapp_business",
    "name": "WhatsApp Business",
    "profile": {
      "apiName": "WhatsApp Cloud API and Business Management API",
      "apiStyle": "Graph API REST with JSON; webhooks",
      "auth": "Meta user or system-user bearer tokens with WhatsApp permissions.",
      "id": "whatsapp_business",
      "overview": "Meta’s WhatsApp Cloud API sends business messages through Graph API and delivers inbound messages and status updates through webhooks. Business accounts and phone-number IDs provide routing context. Template and messaging-window rules determine which outbound message format is appropriate.",
      "referenceUrl": "https://www.postman.com/meta/whatsapp-business-platform/documentation/wlk6lh4/whatsapp-cloud-api",
      "resources": ["Business accounts", "Business phone numbers", "Messages", "Message templates", "Media", "Business profiles", "Status events"],
      "scenario": {
        "seed": "Seed a customer message webhook, two business phone numbers, approved templates, conversation timing, and a delivery event for an earlier message.",
        "success": "The agent selects the correct recipient and sender, uses the appropriate format, and does not report a newly accepted message as delivered.",
        "task": "Prepare a billing clarification for the correct customer, choosing the permitted message format and preserving the business phone-number identity."
      },
      "summary": "Coordinate business messaging through registered phone numbers, approved templates, media, and delivery events tied to customer conversations.",
      "workflows": ["Handle an inbound customer message from its verified webhook identifiers.", "Select an approved template for an appropriate outbound notification.", "Track delivery status without confusing acceptance with confirmed delivery."]
    }
  }, {
    "category": "Messaging",
    "domain": "twilio.com",
    "id": "twilio",
    "name": "Twilio",
    "profile": {
      "apiName": "Twilio REST APIs",
      "apiStyle": "REST with JSON or XML; webhooks",
      "auth": "API key SID and secret via Basic authentication; account credentials also supported.",
      "id": "twilio",
      "overview": "Twilio’s APIs expose communications resources such as messages and calls, with separate product APIs for specialized workflows. Sending returns a resource whose status can change later. Account and sender configuration connect each communication to its intended origin.",
      "referenceUrl": "https://www.twilio.com/docs/usage/api",
      "resources": ["Messages", "Calls", "Incoming phone numbers", "Messaging services", "Media", "Recordings", "Accounts"],
      "scenario": {
        "seed": "Seed an outbound message, delivery callbacks, sender configuration, a failed unrelated message, and a customer record with a verified phone number.",
        "success": "The agent reports the target message’s actual state, associates callbacks correctly, and avoids treating a queued or accepted message as delivered.",
        "task": "Investigate whether a billing reminder reached the customer and recommend the next step without sending a duplicate notification."
      },
      "summary": "Coordinate programmable messages, calls, phone numbers, and communication status across account-scoped resources and asynchronous delivery events.",
      "workflows": ["Create a message using the intended sender and recipient identities.", "Inspect message status and errors before deciding whether to retry.", "Reconcile callback events with the original message or call resource."]
    }
  }, {
    "category": "Messaging",
    "domain": "zoom.us",
    "id": "zoom",
    "name": "Zoom",
    "profile": {
      "apiName": "Zoom REST API",
      "apiStyle": "REST with JSON; webhooks",
      "auth": "User/account OAuth or Server-to-Server OAuth for internal account integrations.",
      "id": "zoom",
      "overview": "Zoom’s REST APIs cover meeting administration and related resources, while webhooks report lifecycle events. Meeting configuration differs from attendance and recording data. OAuth scopes, account roles, and product access determine which endpoints an application can use.",
      "referenceUrl": "https://developers.zoom.us/docs/api/",
      "resources": ["Meetings", "Meeting registrants", "Users", "Webinars", "Cloud recordings", "Reports", "Webhooks"],
      "scenario": {
        "seed": "Seed host users, an existing meeting with a similar topic, requested attendees, and a daylight-saving boundary in the proposed schedule.",
        "success": "The meeting uses the correct host and absolute start time, includes the requested settings, and leaves the similarly named meeting unchanged.",
        "task": "Prepare a billing review meeting for the designated host and attendees, preserving its requested time zone and access settings."
      },
      "summary": "Manage meeting schedules, registrants, users, recordings, and webinar context through Zoom’s scoped account and user application APIs.",
      "workflows": ["Create or update a meeting with the intended host and time zone.", "Retrieve registrants or attendance context for a specific meeting occurrence.", "Find an available cloud recording without exposing unrelated meeting assets."]
    }
  }, {
    "category": "Email & Calendar",
    "domain": "outlook.com",
    "id": "outlook",
    "name": "Outlook",
    "profile": {
      "apiName": "Microsoft Graph Outlook mail API",
      "apiStyle": "REST with JSON; delta queries and change notifications",
      "auth": "Microsoft Entra OAuth 2.0 with delegated or application mail permissions.",
      "id": "outlook",
      "overview": "Microsoft Graph’s Outlook mail API provides mailbox messages and related resources. Draft creation and sending are separate actions, and messages can move between folders. Delegated or application access must match the mailbox and operation the integration needs.",
      "referenceUrl": "https://learn.microsoft.com/en-us/graph/api/resources/mail-api-overview?view=graph-rest-1.0",
      "resources": ["Messages", "Mail folders", "Attachments", "Message drafts", "Message rules", "Categories", "Subscriptions"],
      "scenario": {
        "seed": "Seed a shared mailbox, folders, an invoice conversation, a similar message in another mailbox, and attachments with distinct customer references.",
        "success": "The draft belongs to the intended mailbox, includes only matching attachments and recipients, and remains unsent without moving unrelated messages.",
        "task": "Prepare an unsent reply to a customer’s billing dispute from the correct shared mailbox and retain the original conversation context."
      },
      "summary": "Work with mailbox folders, messages, drafts, attachments, and categories through Microsoft Graph while preserving recipient and conversation context.",
      "workflows": ["Locate a customer email using folder and message filters.", "Create a reply draft with the intended recipients and attachments.", "Organize a reviewed message without changing unrelated mailbox contents."]
    }
  }, {
    "category": "Email & Calendar",
    "domain": "calendar.google.com",
    "id": "google_calendar",
    "name": "Google Calendar",
    "profile": {
      "apiName": "Google Calendar API",
      "apiStyle": "REST with JSON; push notifications",
      "auth": "OAuth 2.0 calendar scopes; API keys apply only to eligible public data.",
      "id": "google_calendar",
      "overview": "Google Calendar’s API exposes calendar metadata, events, sharing rules, and availability queries. Recurring series and individual instances require different handling. Event updates can notify attendees, making timing, audience, and notification choices part of the requested operation.",
      "referenceUrl": "https://developers.google.com/workspace/calendar/api/v3/reference",
      "resources": ["Calendars", "Calendar list entries", "Events", "Event instances", "Free-busy results", "Access rules", "Settings"],
      "scenario": {
        "seed": "Seed a recurring event, one modified instance, attendee calendars with busy periods, and a requested time in a different time zone.",
        "success": "Only the intended occurrence moves to a mutually available time; the series, attendee list, and requested notification behavior remain correct.",
        "task": "Reschedule only the next billing review occurrence after checking participant availability, preserving the rest of the recurring meeting series."
      },
      "summary": "Coordinate calendars, recurring events, attendees, and free-busy information while preserving time zones and the scope of event changes.",
      "workflows": ["Check attendee availability before proposing a customer review meeting.", "Update one recurring-event instance without changing the whole series.", "Create an event with the requested time zone and attendee notifications."]
    }
  }, {
    "category": "Email & Calendar",
    "domain": "calendly.com",
    "id": "calendly",
    "name": "Calendly",
    "profile": {
      "apiName": "Calendly API v2",
      "apiStyle": "REST with JSON; webhooks and scheduling embeds",
      "auth": "Scoped personal access tokens or OAuth 2.1 for public integrations.",
      "id": "calendly",
      "overview": "Calendly’s API exposes scheduling configuration and booked-event data, with webhooks for invitee changes. Event types identify the meeting being offered; scheduled events represent actual bookings. Booking endpoints and organization-wide access depend on the account’s permissions and plan.",
      "referenceUrl": "https://developer.calendly.com/api-docs/overview/api/reference",
      "resources": ["Users", "Organizations", "Event types", "Available times", "Scheduled events", "Invitees", "Scheduling links"],
      "scenario": {
        "seed": "Seed host event types, available slots, an earlier canceled event, its replacement booking, and invitee records with matching customer identifiers.",
        "success": "The agent proposes the correct event type, identifies the active replacement booking, and does not treat the canceled appointment as upcoming.",
        "task": "Find a suitable billing-review booking option for the customer and identify whether their earlier appointment is still active."
      },
      "summary": "Connect event types, host availability, scheduled meetings, and invitees to booking workflows and accurate customer follow-up.",
      "workflows": ["Find the correct host’s event type and share its scheduling link.", "Inspect available times before creating an invitee through the Scheduling API.", "Reconcile cancellations and replacement bookings when an invitee reschedules."]
    }
  }, {
    "category": "Email & Calendar",
    "domain": "cal.com",
    "id": "cal_com",
    "name": "Cal.com",
    "profile": {
      "apiName": "Cal.com API v2",
      "apiStyle": "REST with JSON; webhooks",
      "auth": "Bearer API keys or supported OAuth access tokens.",
      "id": "cal_com",
      "overview": "Cal.com’s v2 API exposes scheduling resources for booking and managing meetings. Event types define the meeting, schedules describe availability, and bookings represent confirmed reservations. Endpoint version headers and the authenticated user’s access shape how requests are handled.",
      "referenceUrl": "https://cal.com/docs/api-reference/v2/introduction",
      "resources": ["Event types", "Schedules", "Slots", "Bookings", "Attendees", "Teams", "Webhooks"],
      "scenario": {
        "seed": "Seed event types, host schedules, a confirmed booking, conflicting slots, and a second booking belonging to another customer.",
        "success": "The selected booking moves to a valid slot with the correct time zone and attendee details; the unrelated booking stays unchanged.",
        "task": "Reschedule a customer’s billing review into an available slot for the same event type, keeping their attendee details intact."
      },
      "summary": "Coordinate event types, availability schedules, bookable slots, bookings, and attendees across individual hosts and team scheduling workflows.",
      "workflows": ["Retrieve available slots for the intended host and event type.", "Create a booking using the customer’s selected time and details.", "Reschedule or cancel the intended booking without touching another attendee’s meeting."]
    }
  }, {
    "category": "Email & Calendar",
    "domain": "sendgrid.com",
    "id": "sendgrid",
    "name": "SendGrid",
    "profile": {
      "apiName": "SendGrid v3 API",
      "apiStyle": "REST with JSON; Event Webhook",
      "auth": "Bearer API key with endpoint-specific permissions.",
      "id": "sendgrid",
      "overview": "SendGrid’s v3 API includes Mail Send and email-management resources, while the Event Webhook reports message outcomes. Accepted mail is not necessarily delivered. Template versions, sender authentication, and suppression state provide important context for reliable transactional messaging.",
      "referenceUrl": "https://www.twilio.com/docs/sendgrid/api-reference",
      "resources": ["Mail sends", "Dynamic templates", "Template versions", "Sender identities", "Suppressions", "Contacts", "Event records"],
      "scenario": {
        "seed": "Seed a template version, message reference, suppression entry, bounce event, and another customer’s successful delivery using the same template.",
        "success": "The agent identifies the relevant failure evidence, keeps recipients distinct, and does not resend mail or remove suppression without an explicit task.",
        "task": "Investigate an undelivered invoice email and determine whether a template issue, suppression, or delivery failure explains the customer’s report."
      },
      "summary": "Coordinate transactional email, templates, sender configuration, suppression records, and delivery events across SendGrid’s messaging and account APIs.",
      "workflows": ["Choose the correct template version and populate its required fields.", "Check suppression information before initiating a transactional email.", "Reconcile delivery and bounce events with the original message reference."]
    }
  }, {
    "category": "Email & Calendar",
    "domain": "postmarkapp.com",
    "id": "postmark",
    "name": "Postmark",
    "profile": {
      "apiName": "Postmark API",
      "apiStyle": "REST with JSON; webhooks",
      "auth": "X-Postmark-Server-Token for server operations; X-Postmark-Account-Token for account administration.",
      "id": "postmark",
      "overview": "Postmark organizes sending through servers and message streams, with templates and message activity available through its API. Server tokens and account tokens authorize different operations. Delivery, bounce, and complaint data help diagnose outcomes after a send is accepted.",
      "referenceUrl": "https://postmarkapp.com/developer/api/overview",
      "resources": ["Servers", "Message streams", "Messages", "Templates", "Bounces", "Sender signatures", "Domains"],
      "scenario": {
        "seed": "Seed a transactional stream, template, failed message, bounce details, and a successful message sent from a different server.",
        "success": "The diagnosis matches the correct message and server, explains the bounce evidence, and makes no unsupported claim that the customer received the email.",
        "task": "Diagnose why a customer’s invoice notification failed by examining its message activity and the relevant Postmark server and stream."
      },
      "summary": "Manage transactional messages, templates, message streams, delivery evidence, and sender identities with distinct server and account authorization.",
      "workflows": ["Send a transactional message through the intended server and stream.", "Retrieve message activity to explain a delivery or bounce outcome.", "Validate template variables before preparing a customer notification."]
    }
  }, {
    "category": "Email & Calendar",
    "domain": "resend.com",
    "id": "resend",
    "name": "Resend",
    "profile": {
      "apiName": "Resend API",
      "apiStyle": "REST with JSON; webhooks",
      "auth": "Bearer API key with configured permission and optional domain restriction.",
      "id": "resend",
      "overview": "Resend’s API supports transactional sending and related email resources, with webhooks for lifecycle changes. API keys can be restricted by permission and domain. An accepted send has an identifier that should be tracked separately from subsequent delivery or failure events.",
      "referenceUrl": "https://resend.com/docs/api-reference/introduction",
      "resources": ["Emails", "Domains", "Contacts", "Templates", "Broadcasts", "API keys", "Webhooks"],
      "scenario": {
        "seed": "Seed an email identifier, verified sending domain, matching delivery event, delayed unrelated webhook, and the original invoice notification content.",
        "success": "The agent reconciles the existing email with its event, reports the confirmed outcome, and does not create another send for the same notification.",
        "task": "Determine the outcome of an invoice email after an uncertain send response, avoiding a duplicate message to the customer."
      },
      "summary": "Coordinate email sends, verified domains, contacts, templates, and webhook outcomes with explicit recipient and delivery-state handling.",
      "workflows": ["Create an email with the intended verified sender and recipient.", "Retrieve send details before retrying an uncertain email request.", "Associate webhook outcomes with the correct email identifier."]
    }
  }, {
    "category": "Billing & Finance",
    "domain": "stripe.com",
    "id": "stripe",
    "name": "Stripe",
    "profile": {
      "apiName": "Stripe API",
      "apiStyle": "Resource-oriented REST with JSON responses and form-encoded requests for many v1 operations.",
      "auth": "Server-side secret or restricted API keys; the key selects live or sandbox data.",
      "id": "stripe",
      "overview": "Stripe represents billing and payments as linked resources, including PaymentIntents, invoices, and subscriptions. An integration follows each object's lifecycle, checks related charges or refunds, and uses events to reconcile asynchronous changes with its own order records.",
      "referenceUrl": "https://docs.stripe.com/api",
      "resources": ["Customers", "PaymentIntents", "Charges", "Refunds", "Invoices", "Subscriptions", "Events"],
      "scenario": {
        "seed": "Two successful charges share an order reference; a third charge belongs to another order, and one unrelated refund already exists.",
        "success": "Only the duplicate charge is selected, the refund amount matches the authorization, and the report links the surviving payment to the order.",
        "task": "Resolve a reported duplicate payment for order 7001 by identifying the extra successful charge and preparing exactly one authorized refund."
      },
      "summary": "Manage payment lifecycles, invoices, subscriptions, and refunds while keeping customer charges and accounting evidence connected.",
      "workflows": ["Reconcile an invoice's payment status against its PaymentIntent and associated charge.", "Review existing refunds before preparing a partial refund for an order.", "Find subscriptions with unpaid invoices and assemble a customer follow-up."]
    }
  }, {
    "category": "Billing & Finance",
    "domain": "paypal.com",
    "id": "paypal",
    "name": "PayPal",
    "profile": {
      "apiName": "PayPal REST APIs",
      "apiStyle": "REST over HTTPS with JSON request and response bodies.",
      "auth": "OAuth 2.0 bearer access tokens obtained using the application's client ID and client secret.",
      "id": "paypal",
      "overview": "PayPal separates a checkout order from the authorization or capture that moves payment through its lifecycle. Its REST APIs also cover subscriptions, invoices, and disputes, so a support workflow can connect a buyer complaint to the underlying payment evidence.",
      "referenceUrl": "https://developer.paypal.com/api/rest/",
      "resources": ["Orders", "Authorizations", "Captures", "Refunds", "Subscriptions", "Invoices", "Disputes"],
      "scenario": {
        "seed": "An approved order, an uncaptured authorization, a similarly priced completed order, and a support note asking whether funds were collected.",
        "success": "The response identifies the authorization and missing capture, excludes the completed order, and avoids claiming that approval means settlement.",
        "task": "Investigate why order 7001 appears approved but unpaid, then explain the next permitted step without creating a second payment."
      },
      "summary": "Track checkout orders, authorizations, captures, and refunds across PayPal's payment and merchant account workflows.",
      "workflows": ["Check whether an approved checkout order has actually been captured.", "Match a refund request to the capture that funded the purchase.", "Collect invoice and payment evidence for a disputed transaction."]
    }
  }, {
    "category": "Billing & Finance",
    "domain": "squareup.com",
    "id": "square",
    "name": "Square",
    "profile": {
      "apiName": "Square API",
      "apiStyle": "Versioned REST APIs over HTTPS with JSON payloads.",
      "auth": "Bearer access token: scoped OAuth for seller integrations or a personal token for the owner's account.",
      "id": "square",
      "overview": "Square's APIs connect catalog items and variations to orders, payments, and inventory at specific locations. The distinction between an order, its tender, and a stock adjustment matters when an agent investigates fulfillment or customer-service discrepancies.",
      "referenceUrl": "https://developer.squareup.com/reference/square",
      "resources": ["Locations", "Catalog items", "Item variations", "Orders", "Payments", "Refunds", "Inventory counts"],
      "scenario": {
        "seed": "A paid order, two item variations, zero stock at the pickup location, and available stock at a different location.",
        "success": "The answer preserves the successful payment, names the unavailable variation and correct location, and proposes an alternative without falsely marking the order fulfilled.",
        "task": "Investigate a pickup order whose payment succeeded but one item is unavailable at the chosen store, then propose a fulfillment alternative."
      },
      "summary": "Connect retail orders, payments, inventory, and customer records across stores, locations, and point-of-sale commerce workflows.",
      "workflows": ["Match an order to its payment before answering a refund question.", "Compare variation inventory across locations before fulfilling a pickup order.", "Create a customer-facing order summary from catalog and payment records."]
    }
  }, {
    "category": "Billing & Finance",
    "domain": "brex.com",
    "id": "brex",
    "name": "Brex",
    "profile": {
      "apiName": "Brex APIs",
      "apiStyle": "REST APIs with JSON bodies and OpenAPI definitions.",
      "auth": "Scoped user bearer tokens for customer integrations; partner integrations use Brex's separate OAuth flow.",
      "id": "brex",
      "overview": "Brex's APIs expose spending records alongside the people, departments, budgets, and accounts behind them. Expenses and receipts support review workflows, while transactions and payments provide distinct evidence for understanding what was purchased and how funds moved.",
      "referenceUrl": "https://developer.brex.com/",
      "resources": ["Card expenses", "Receipts", "Budgets", "Cards", "Users", "Vendors", "Transactions"],
      "scenario": {
        "seed": "Engineering and Sales users, six card expenses, a receipt policy, three receipt attachments, and two similarly named merchants.",
        "success": "The queue contains only the correct department's qualifying expenses, links each missing receipt to its employee, and leaves payment and card settings unchanged.",
        "task": "Prepare an expense-review queue for Engineering, prioritizing purchases over the receipt threshold and excluding expenses whose receipts are already attached."
      },
      "summary": "Review corporate spending, receipts, budgets, cards, and vendor payments with department and employee context.",
      "workflows": ["Find card expenses missing receipts and group them by employee.", "Compare a transaction with its expense record before assigning an accounting category.", "Review a vendor's payment history before preparing a payment request."]
    }
  }, {
    "category": "Billing & Finance",
    "domain": "ramp.com",
    "id": "ramp",
    "name": "Ramp",
    "profile": {
      "apiName": "Ramp Developer API",
      "apiStyle": "REST API with JSON request and response bodies.",
      "auth": "OAuth 2.0 bearer tokens; client credentials for internal integrations and authorization code for third-party applications.",
      "id": "ramp",
      "overview": "Ramp's developer API links transactions and reimbursements with users, cards, receipts, and accounting data. Bill-pay resources add vendor and payment context. These relationships help finance agents distinguish an employee reimbursement from a purchase already paid on a company card.",
      "referenceUrl": "https://docs.ramp.com/developer-api/v1",
      "resources": ["Transactions", "Cards", "Users", "Reimbursements", "Bills", "Vendors", "Receipts"],
      "scenario": {
        "seed": "A reimbursement and card transaction share merchant, amount, and date; another employee has a legitimate purchase from the same merchant.",
        "success": "The recommendation cites the matching records, distinguishes the other employee's expense, and avoids approving or paying the suspected duplicate.",
        "task": "Review a reimbursement for a software purchase that may already have been charged to a corporate card and prepare an evidence-backed recommendation."
      },
      "summary": "Coordinate card expenses, reimbursements, vendor bills, and accounting synchronization across a company's controlled spending processes.",
      "workflows": ["Compare reimbursement requests with card transactions to identify potential duplicate expenses.", "Prepare accounting exports with the correct vendor and ledger mapping.", "Find bills awaiting action and summarize their approval and payment state."]
    }
  }, {
    "category": "Billing & Finance",
    "domain": "quickbooks.intuit.com",
    "id": "quickbooks",
    "name": "QuickBooks",
    "profile": {
      "apiName": "QuickBooks Online Accounting API",
      "apiStyle": "REST API with JSON resources, queries, and accounting report operations.",
      "auth": "Intuit OAuth 2.0 access tokens, with the connected company's realm ID identifying the accounting context.",
      "id": "quickbooks",
      "overview": "The QuickBooks Online Accounting API exposes customers, vendors, transactions, and reporting data within a connected company. Agents need to distinguish money owed by customers from bills owed to vendors and preserve relationships between payments and the transactions they settle.",
      "referenceUrl": "https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/account",
      "resources": ["Customers", "Vendors", "Invoices", "Bills", "Payments", "Accounts", "Credit memos"],
      "scenario": {
        "seed": "Three overdue invoices, a partially applied payment, a credit memo, two customer records, and one unrelated vendor bill.",
        "success": "The list reports the correct remaining balances, distinguishes receivables from payables, and includes the payment or credit evidence behind each adjustment.",
        "task": "Prepare a collection list for overdue invoices, excluding balances already covered by recorded customer payments or applicable credits."
      },
      "summary": "Reconcile small-business invoices, bills, payments, and ledger accounts using QuickBooks Online's company-specific accounting records.",
      "workflows": ["Match customer payments to open invoices before sending collection reminders.", "Review vendor bills for duplicate invoice numbers and amounts.", "Summarize overdue receivables with customer and transaction references."]
    }
  }, {
    "category": "Billing & Finance",
    "domain": "xero.com",
    "id": "xero",
    "name": "Xero",
    "profile": {
      "apiName": "Xero Accounting API",
      "apiStyle": "REST-style accounting API supporting JSON request and response representations.",
      "auth": "OAuth 2.0 bearer credentials with the connected organization's tenant context.",
      "id": "xero",
      "overview": "Xero's Accounting API exposes transactions and accounting reference data within an organization tenant. It supports invoice and credit-note workflows as well as reporting, making it useful for reconciling customer balances and identifying transactions that need finance review.",
      "referenceUrl": "https://developer.xero.com/documentation/api/accounting/overview",
      "resources": ["Contacts", "Invoices", "Credit notes", "Payments", "Bank transactions", "Accounts", "Reports"],
      "scenario": {
        "seed": "A sales invoice, one partial payment, an allocated credit note, and a second invoice for a similarly named contact.",
        "success": "The explanation computes the remaining balance correctly, cites only the target customer's records, and leaves allocations and invoice status unchanged.",
        "task": "Explain why a customer's overdue balance differs from an invoice total, using the associated payments and credit notes as evidence."
      },
      "summary": "Manage invoices, contacts, credit notes, and bank transactions while preserving organization-specific accounting and payment relationships.",
      "workflows": ["Calculate an invoice's outstanding balance after payments and credit notes.", "Compare contact records before preparing a customer invoice.", "Review bank transactions and account codes for reconciliation exceptions."]
    }
  }, {
    "category": "Billing & Finance",
    "domain": "netsuite.com",
    "id": "netsuite",
    "name": "NetSuite",
    "profile": {
      "apiName": "NetSuite SuiteTalk REST Web Services",
      "apiStyle": "REST record services, SuiteQL queries, and JSON metadata.",
      "auth": "OAuth 2.0 access tokens with an authorized integration record and NetSuite role.",
      "id": "netsuite",
      "overview": "SuiteTalk REST Web Services provides record operations, metadata, and queries for NetSuite. Available fields depend on record schemas and account configuration. SuiteQL helps agents inspect related business records before proposing changes that respect subsidiaries, references, and transaction state.",
      "referenceUrl": "https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/chapter_1540391670.html",
      "resources": ["Customers", "Vendors", "Sales orders", "Invoices", "Purchase orders", "Items", "Subsidiaries"],
      "scenario": {
        "seed": "Two subsidiaries, a customer associated with one subsidiary, an inconsistent invoice, and a correctly linked sales order with matching line items.",
        "success": "The plan identifies the inconsistent reference, cites the supporting records, and avoids submitting an unsupported or destructive transaction correction.",
        "task": "Investigate an invoice assigned to the wrong subsidiary and prepare a correction plan supported by its customer and originating sales order."
      },
      "summary": "Connect customers, vendors, orders, invoices, and accounting records across NetSuite's configurable enterprise resource model.",
      "workflows": ["Trace a customer invoice back to its sales order and subsidiary.", "Check record metadata before constructing a customer or vendor update.", "Query open purchase orders to prepare a supplier follow-up list."]
    }
  }, {
    "category": "Billing & Finance",
    "domain": "bill.com",
    "id": "bill_com",
    "name": "Bill.com",
    "profile": {
      "apiName": "BILL v3 AP & AR API",
      "apiStyle": "REST over HTTPS with JSON payloads.",
      "auth": "AP/AR calls use developer-key and session-ID headers after login; some payment operations require MFA step-up.",
      "id": "bill_com",
      "overview": "BILL's AP and AR APIs expose vendors, bills, approvals, and payment records alongside customer invoicing. API sessions and permissions govern access, and some payment actions require an MFA-trusted session. Spend & Expense uses a separate authentication model.",
      "referenceUrl": "https://developer.bill.com/reference/api-reference-overview",
      "resources": ["Vendors", "Bills", "Bill approvals", "Payments", "Vendor credits", "Customers", "Invoices"],
      "scenario": {
        "seed": "Two vendor bills share an invoice number and amount, one has approval history, and neither has an associated payment.",
        "success": "The recommendation identifies the duplicate pair, preserves approval evidence, and does not create a payment or delete either bill without authorization.",
        "task": "Review two bills with the same vendor invoice number and recommend which record finance should retain before any payment is submitted."
      },
      "summary": "Review vendor bills, approvals, payments, and customer invoices across BILL's accounts-payable and accounts-receivable workflows.",
      "workflows": ["Check bill approvals and existing payments before preparing a vendor payment.", "Detect repeated vendor invoice numbers before creating a new bill.", "Apply customer and invoice context when investigating an unpaid receivable."]
    }
  }, {
    "category": "Billing & Finance",
    "domain": "plaid.com",
    "id": "plaid",
    "name": "Plaid",
    "profile": {
      "apiName": "Plaid API",
      "apiStyle": "JSON API over HTTPS with product-specific endpoints and webhook notifications.",
      "auth": "Client ID and secret authenticate the application; Item access tokens authorize many connection-specific operations.",
      "id": "plaid",
      "overview": "Plaid organizes an institution connection as an Item containing accounts and product-specific data. Transactions can change between pending and posted states, so reconciliation depends on stable identifiers and update handling rather than treating each retrieved row as a new purchase.",
      "referenceUrl": "https://plaid.com/docs/api/",
      "resources": ["Items", "Accounts", "Balances", "Transactions", "Institutions", "Link tokens", "Webhooks"],
      "scenario": {
        "seed": "An Item with two accounts, a pending restaurant transaction, its posted replacement, and an unrelated purchase with the same amount.",
        "success": "The report links the pending and posted records correctly, retains the unrelated purchase, and computes spending without double-counting the restaurant charge.",
        "task": "Reconcile a restaurant purchase that appears once as pending and again as posted, ensuring the expense report counts the purchase only once."
      },
      "summary": "Connect institution accounts, balances, and transaction updates to support reconciliation and financial-data investigation workflows.",
      "workflows": ["Reconcile newly posted transactions with earlier pending versions.", "Identify accounts requiring refreshed user authorization before the next synchronization.", "Group account transactions into an evidence-backed spending summary."]
    }
  }, {
    "category": "Billing & Finance",
    "domain": "expensify.com",
    "id": "expensify",
    "name": "Expensify",
    "profile": {
      "apiName": "Expensify Integration Server API",
      "apiStyle": "HTTP job interface using a JSON requestJobDescription parameter; exports can produce downloadable files.",
      "auth": "Partner user ID and secret, or an OAuth2 access token, inside the job credentials object.",
      "id": "expensify",
      "overview": "Expensify's Integration Server accepts jobs for exporting, creating, retrieving, and updating supported expense-management data. Export jobs can generate files from templates. Policies, report states, and employee relationships determine which expenses belong in an accounting or reimbursement workflow.",
      "referenceUrl": "https://integrations.expensify.com/Integration-Server/doc/",
      "resources": ["Expense reports", "Expenses", "Policies", "Employees", "Categories", "Tags", "Export files"],
      "scenario": {
        "seed": "Two policies, approved and reimbursed reports, several drafts, department tags, and an export template requiring employee and expense-category fields.",
        "success": "The output includes only the requested reports, supplies each required field, and preserves source report status until finance confirms downstream processing.",
        "task": "Prepare an export of approved Engineering expense reports for the current accounting period, excluding reimbursed reports and unfinished employee drafts."
      },
      "summary": "Automate expense-report exports, policy data, employee settings, and reimbursement status through Expensify's job-based integration interface.",
      "workflows": ["Export approved expense reports into an accounting-ready file.", "Synchronize policy categories and tags with finance's coding structure.", "Check report status before recording an external reimbursement result."]
    }
  }, {
    "category": "Commerce",
    "domain": "shopify.com",
    "id": "shopify",
    "name": "Shopify",
    "profile": {
      "apiName": "Shopify GraphQL Admin API",
      "apiStyle": "Versioned GraphQL queries and mutations over HTTPS.",
      "auth": "Store access token in X-Shopify-Access-Token, with the scopes required for the selected resources.",
      "id": "shopify",
      "overview": "Shopify's GraphQL Admin API connects product variants, inventory locations, orders, and fulfillment work. Integrations select the fields they need and follow resource relationships. Queries and mutations can return application errors even when the HTTP response succeeds.",
      "referenceUrl": "https://shopify.dev/docs/api/admin-graphql/latest",
      "resources": ["Products", "Product variants", "Inventory items", "Locations", "Orders", "Fulfillment orders", "Customers"],
      "scenario": {
        "seed": "A two-line order, one completed fulfillment, an open fulfillment order, and stock for the remaining variant at two locations.",
        "success": "The recommendation selects the unfulfilled line and assigned location, cites the existing shipment, and leaves completed fulfillment records unchanged.",
        "task": "Investigate an order with one unfulfilled item, identify the responsible fulfillment location, and prepare the next action without duplicating an existing shipment."
      },
      "summary": "Manage products, inventory, customer orders, and fulfillment through Shopify's store-scoped GraphQL administration API.",
      "workflows": ["Check variant availability at the assigned location before fulfilling an order.", "Compare ordered and fulfilled quantities when investigating a missing shipment.", "Update product metadata without changing unrelated variants or inventory."]
    }
  }, {
    "category": "Commerce",
    "domain": "woocommerce.com",
    "id": "woocommerce",
    "name": "WooCommerce",
    "profile": {
      "apiName": "WooCommerce REST API",
      "apiStyle": "WordPress REST endpoints with JSON resources and standard HTTP methods.",
      "auth": "Consumer key and consumer secret using HTTP Basic authentication over HTTPS, scoped to a WordPress user.",
      "id": "woocommerce",
      "overview": "WooCommerce exposes store-management resources through the WordPress REST API. Product variations carry their own inventory and pricing, while orders include line items, totals, and status. Customer-facing cart and checkout interfaces are separate from these administrative operations.",
      "referenceUrl": "https://developer.woocommerce.com/docs/apis/rest-api/",
      "resources": ["Products", "Product variations", "Orders", "Order notes", "Customers", "Coupons", "Refunds"],
      "scenario": {
        "seed": "One variable product with six size-and-color variations, an approved count of eight blue medium units, and an open customer order.",
        "success": "Only the matching variation's stock quantity changes to eight; prices, other variations, and the existing order remain unchanged.",
        "task": "Correct the stock quantity for the blue medium variant of a shirt after a warehouse count, preserving all other variant quantities."
      },
      "summary": "Manage WordPress store products, variations, orders, customers, and refunds through WooCommerce's authenticated REST interface.",
      "workflows": ["Compare an order's line items with variation stock before fulfillment.", "Add an internal order note documenting a customer-service investigation.", "Review coupon restrictions when explaining an unexpected checkout discount."]
    }
  }, {
    "category": "Commerce",
    "domain": "bigcommerce.com",
    "id": "bigcommerce",
    "name": "BigCommerce",
    "profile": {
      "apiName": "BigCommerce Management APIs",
      "apiStyle": "REST management APIs with JSON; separate GraphQL interfaces serve other use cases.",
      "auth": "Store-scoped OAuth access token in X-Auth-Token, with the required API account scopes.",
      "id": "bigcommerce",
      "overview": "BigCommerce separates store-management APIs from storefront shopping interfaces. Administrative resources connect products and variants to orders, customers, and shipments. Agents handling inventory or fulfillment need to preserve store, product, and variant identifiers across related requests.",
      "referenceUrl": "https://docs.bigcommerce.com/developer/docs/overview/api-fundamentals/api-accounts",
      "resources": ["Products", "Variants", "Categories", "Customers", "Orders", "Shipments", "Inventory"],
      "scenario": {
        "seed": "A three-line order, an existing shipment covering two lines, one remaining physical item, and a warehouse packing confirmation.",
        "success": "The proposed shipment contains only the outstanding item and correct tracking information, with no duplicate shipment or changes to previously fulfilled lines.",
        "task": "Prepare a shipment for the remaining unshipped line of an order, using the provided tracking number and preserving the first shipment."
      },
      "summary": "Coordinate product catalogs, customer orders, inventory, and shipments across BigCommerce's store-management commerce APIs.",
      "workflows": ["Check product and variant details before changing a catalog listing.", "Compare shipped quantities against an order's remaining fulfillment needs.", "Reconcile warehouse inventory with the correct product variant."]
    }
  }, {
    "category": "Commerce",
    "domain": "amazon.com",
    "id": "amazon_seller",
    "name": "Amazon Seller",
    "profile": {
      "apiName": "Amazon Selling Partner API",
      "apiStyle": "REST services, bulk feeds, reports, and notifications.",
      "auth": "Login with Amazon access tokens after seller authorization; restricted operations can require a Restricted Data Token.",
      "id": "amazon_seller",
      "overview": "Amazon's Selling Partner API spans multiple REST services for marketplace operations. Seller authorization, marketplace selection, and application roles determine available data. Listings, catalog items, inventory, and orders represent different layers that must be reconciled during operational investigations.",
      "referenceUrl": "https://developer-docs.amazon.com/sp-api/docs/onboarding-overview",
      "resources": ["Catalog items", "Listings items", "Orders", "Inventory summaries", "Shipments", "Feeds", "Reports"],
      "scenario": {
        "seed": "A submitted inventory feed, processing results with one rejected SKU, two marketplace identifiers, and an unchanged listing for the rejected item.",
        "success": "The explanation identifies the rejected SKU and processing error, preserves marketplace context, and does not report the entire feed as successfully applied.",
        "task": "Investigate why a seller's inventory update did not appear on one marketplace, distinguishing feed acceptance from successful item processing."
      },
      "summary": "Coordinate marketplace listings, orders, inventory, fulfillment, and reporting through Amazon's seller-authorized Selling Partner API.",
      "workflows": ["Compare a seller listing with catalog data to diagnose listing errors.", "Reconcile inventory and order quantities for a selected marketplace.", "Follow feed-processing results before reporting a bulk update as complete."]
    }
  }, {
    "category": "Commerce",
    "domain": "squarespace.com",
    "id": "squarespace",
    "name": "Squarespace",
    "profile": {
      "apiName": "Squarespace Commerce APIs",
      "apiStyle": "REST APIs over HTTPS with JSON resources and webhook notifications.",
      "auth": "Website-specific API key or OAuth access token with resource permissions, sent as a bearer credential.",
      "id": "squarespace",
      "overview": "Squarespace's Commerce APIs expose product and order information alongside inventory, profiles, transactions, and webhook subscriptions. Each credential belongs to a particular website. These APIs support commerce integrations without implying general control over site pages or visual design.",
      "referenceUrl": "https://developers.squarespace.com/commerce-apis/overview",
      "resources": ["Products", "Product variants", "Inventory", "Orders", "Fulfillments", "Profiles", "Transactions"],
      "scenario": {
        "seed": "A paid order containing two product variants, a fulfillment covering only one variant, and a second order from the same customer.",
        "success": "The answer identifies the missing variant and correct order, preserves existing payment records, and avoids assuming the second order supplies the missing shipment.",
        "task": "Investigate a customer report that one product was omitted from a delivery, comparing the order contents with recorded fulfillment information."
      },
      "summary": "Manage website commerce products, stock, orders, and fulfillment using Squarespace's site-specific commerce API resources.",
      "workflows": ["Adjust variant inventory after reconciling a warehouse stock count.", "Read an order and its fulfillment state before answering a delivery question.", "Synchronize product information with an external merchandising system."]
    }
  }, {
    "category": "Product & Analytics",
    "domain": "segment.com",
    "id": "segment",
    "name": "Segment",
    "profile": {
      "apiName": "Segment Public API",
      "apiStyle": "REST management API with resource IDs and JSON payloads.",
      "auth": "Public API access token with workspace permissions; source write keys belong to the separate ingestion interface.",
      "id": "segment",
      "overview": "Segment's Public API manages workspace configuration and resource relationships. It is distinct from the event-ingestion APIs used to send customer activity. A useful administrative workflow checks where source data is routed and whether destination settings match the intended environment.",
      "referenceUrl": "https://docs.segmentapis.com/",
      "resources": ["Workspaces", "Sources", "Destinations", "Warehouses", "Tracking plans", "Source catalogs", "Destination catalogs"],
      "scenario": {
        "seed": "One production source, one staging source, three destination connections, and an approved destination list excluding the experimental analytics workspace.",
        "success": "The report identifies the unapproved production connection, preserves staging configuration, and proposes only the specific routing change required by the policy.",
        "task": "Audit a production source to ensure customer events are routed only to approved destinations, then prepare a configuration change for review."
      },
      "summary": "Manage data sources, destinations, warehouses, and tracking plans across a Segment workspace's customer-data configuration.",
      "workflows": ["Audit which destinations receive events from a production source.", "Compare source and destination settings before enabling a new data route.", "Review tracking-plan configuration for inconsistent event definitions."]
    }
  }, {
    "category": "Product & Analytics",
    "domain": "amplitude.com",
    "id": "amplitude",
    "name": "Amplitude",
    "profile": {
      "apiName": "Amplitude Dashboard REST API",
      "apiStyle": "HTTP analytics endpoints returning JSON query results.",
      "auth": "Project API-key and secret-key credentials for server-side analytics; ingestion uses a separate project-key interface.",
      "id": "amplitude",
      "overview": "Amplitude's Dashboard REST API retrieves chart results and computes event segmentation, funnels, retention, and user activity. Analytical results depend on event definitions, property filters, date ranges, and the project's time zone, which should remain explicit in an investigation.",
      "referenceUrl": "https://www.amplitude.com/docs/apis/analytics/dashboard-rest",
      "resources": ["Events", "User properties", "Charts", "Funnels", "Retention results", "User activity"],
      "scenario": {
        "seed": "Signup and onboarding events for two device segments, a recent release date, and users who began but did not finish onboarding.",
        "success": "The analysis identifies the affected segment and funnel step, reports comparable counts and dates, and distinguishes correlation with the release from proven causation.",
        "task": "Explain a drop in onboarding completion by comparing mobile and desktop funnels over the same reporting period and project time zone."
      },
      "summary": "Analyze product events, funnels, retention, and user activity using Amplitude's project-level analytics and reporting APIs.",
      "workflows": ["Compare checkout funnel conversion across device or country segments.", "Retrieve chart results for a scheduled product-health report.", "Inspect user activity when investigating a failed onboarding sequence."]
    }
  }, {
    "category": "Product & Analytics",
    "domain": "mixpanel.com",
    "id": "mixpanel",
    "name": "Mixpanel",
    "profile": {
      "apiName": "Mixpanel Data and Query APIs",
      "apiStyle": "HTTP APIs for ingestion, querying, export, and profile operations.",
      "auth": "Service-account credentials for supported query/export operations; project tokens identify ingestion traffic.",
      "id": "mixpanel",
      "overview": "Mixpanel exposes different APIs for ingesting events, querying behavior, and managing data. Event names, distinct user identifiers, and property filters shape analysis. Agents should distinguish total event counts from unique users when comparing funnel or engagement results.",
      "referenceUrl": "https://docs.mixpanel.com/reference/overview",
      "resources": ["Events", "User profiles", "Group profiles", "Cohorts", "Funnels", "Annotations"],
      "scenario": {
        "seed": "Signup events include retries from existing distinct IDs, new users, and a separate test-user segment that should be excluded.",
        "success": "The result separates event volume from unique users, excludes test traffic, and explains the increase using the matching identity and date filters.",
        "task": "Determine whether a reported signup increase reflects more users or repeated events, and provide counts for both measures over the same dates."
      },
      "summary": "Investigate product behavior through event queries, user profiles, cohorts, funnels, and exported analytics data.",
      "workflows": ["Compare unique-user conversion across two product funnels.", "Export a defined event window for reconciliation with application records.", "Review profile properties when investigating a cohort membership discrepancy."]
    }
  }, {
    "category": "Product & Analytics",
    "domain": "posthog.com",
    "id": "posthog",
    "name": "PostHog",
    "profile": {
      "apiName": "PostHog API",
      "apiStyle": "REST management and ingestion endpoints, plus structured analytics queries including HogQL.",
      "auth": "Scoped personal API keys for private endpoints; project tokens identify public event ingestion.",
      "id": "posthog",
      "overview": "PostHog combines analytics and product tooling behind project-scoped APIs. Its query interface supports analytical investigations, while management endpoints handle objects such as insights and feature flags. Ingestion credentials and private API credentials serve different purposes and permissions.",
      "referenceUrl": "https://posthog.com/docs/api",
      "resources": ["Events", "Persons", "Cohorts", "Insights", "Dashboards", "Feature flags", "Experiments"],
      "scenario": {
        "seed": "Checkout events, feature-exposure properties, a saved conversion insight, and a release interval with failures concentrated in one group.",
        "success": "The analysis uses comparable groups and dates, cites the relevant counts, and leaves the feature flag unchanged while presenting the evidence for review.",
        "task": "Investigate whether checkout failures increased for users exposed to a feature flag, comparing exposed and unexposed groups during the same period."
      },
      "summary": "Query product events and user behavior while managing insights, dashboards, cohorts, and feature-flag configuration.",
      "workflows": ["Query a conversion funnel and inspect the segment with the largest drop.", "Audit a feature flag's rollout settings before changing exposure.", "Assemble a dashboard from saved insights for a release review."]
    }
  }, {
    "category": "Product & Analytics",
    "domain": "heap.io",
    "id": "heap",
    "name": "Heap",
    "profile": {
      "apiName": "Heap JavaScript and Server-Side APIs",
      "apiStyle": "Browser SDK and JSON ingestion.",
      "auth": "Environment app_id identifies the ingestion target; browser calls use the installed SDK configuration.",
      "id": "heap",
      "overview": "Heap's browser and server APIs add business context to captured behavior. Identity calls connect sessions to a stable user, while server-side tracking records events such as completed purchases. These ingestion interfaces do not imply a general-purpose report-query API.",
      "referenceUrl": "https://developers.heap.io/reference/track-1",
      "resources": ["Custom events", "User identities", "User properties", "Event properties", "Sessions", "Environments"],
      "scenario": {
        "seed": "A backend purchase payload, a stable customer identifier, a Heap environment ID, and two deliveries carrying the same purchase idempotency key.",
        "success": "One purchase event is represented with the correct identity, amount, and order reference, without merging unrelated users or duplicating the completed transaction.",
        "task": "Instrument a completed purchase event using the customer's stable identity and order properties, ensuring a repeated delivery does not duplicate the event."
      },
      "summary": "Enrich behavioral data with custom events, stable user identities, and properties across browser and server activity.",
      "workflows": ["Record a completed backend purchase with its stable user identity.", "Attach subscription-tier properties to an identified user.", "Reset browser identity after logout to keep different users' sessions separate."]
    }
  }, {
    "category": "Product & Analytics",
    "domain": "analytics.google.com",
    "id": "google_analytics",
    "name": "Google Analytics",
    "profile": {
      "apiName": "Google Analytics Data API",
      "apiStyle": "REST and gRPC reporting API with structured report requests.",
      "auth": "Google OAuth 2.0 credentials; the user or service account also needs access to the GA4 property.",
      "id": "google_analytics",
      "overview": "The Google Analytics Data API reads GA4 reporting data. Reports combine compatible dimensions and metrics with date ranges and filters. Property settings affect results, so analysis should identify its scope and distinguish aggregated reports from raw event exports.",
      "referenceUrl": "https://developers.google.com/analytics/devguides/reporting/data/v1",
      "resources": ["Reports", "Realtime reports", "Dimension metadata", "Metric metadata", "Audience exports", "Report rows"],
      "scenario": {
        "seed": "A GA4 property with channel, purchase, and revenue report data; two complete weeks; and a campaign with lower purchase conversion.",
        "success": "The report names the contributing channel, shows revenue and purchase changes for both weeks, and does not confuse traffic volume with revenue.",
        "task": "Explain which acquisition channel drove a week-over-week revenue decline, using matching GA4 property settings and comparable reporting periods."
      },
      "summary": "Retrieve GA4 reports, realtime metrics, dimension metadata, and audience exports for evidence-based website performance analysis.",
      "workflows": ["Compare acquisition channels using consistent metrics and reporting dates.", "Check dimension-metric compatibility before submitting a custom report.", "Monitor realtime activity after deploying a new website flow."]
    }
  }, {
    "category": "Product & Analytics",
    "domain": "hotjar.com",
    "id": "hotjar",
    "name": "Hotjar",
    "profile": {
      "apiName": "Hotjar API",
      "apiStyle": "Resource-oriented JSON HTTP API with cursor pagination.",
      "auth": "OAuth client-credentials access token generated from an API key's client ID and client secret.",
      "id": "hotjar",
      "overview": "Hotjar's HTTP API covers surveys, responses, and user lookup or deletion requests. Browser Events and Identify APIs enrich captured behavior separately. The HTTP reference does not provide general recordings or heatmaps CRUD, and available operations depend on the account's plan.",
      "referenceUrl": "https://help.hotjar.com/hc/en-us/articles/36820005914001-Hotjar-API-Reference",
      "resources": ["Sites", "Surveys", "Survey questions", "Survey responses", "User lookup requests"],
      "scenario": {
        "seed": "A survey with three questions, paginated responses describing payment and address problems, and several responses from a different survey.",
        "success": "The summary includes only the requested survey, links themes to supporting response IDs, avoids personal details, and makes no unsupported recording or heatmap claims.",
        "task": "Summarize checkout complaints from a selected survey, preserving response references and separating recurring themes from isolated feedback without exposing respondent identities."
      },
      "summary": "Export survey feedback and handle user lookup requests through Hotjar's limited, plan-dependent HTTP API.",
      "workflows": ["Export survey responses and group recurring complaints for product review.", "Retrieve survey questions to interpret answer identifiers accurately.", "Prepare a user lookup using the correct site and organization context."]
    }
  }, {
    "category": "Product & Analytics",
    "domain": "launchdarkly.com",
    "id": "launchdarkly",
    "name": "LaunchDarkly",
    "profile": {
      "apiName": "LaunchDarkly REST API",
      "apiStyle": "REST API with JSON resources and supported patch formats.",
      "auth": "Personal or service access token in the Authorization header; SDK keys are separate credentials.",
      "id": "launchdarkly",
      "overview": "LaunchDarkly's REST API manages feature delivery configuration. Projects contain environments, and flags can have different targeting rules in each. This management interface is separate from SDK evaluation, so changing a flag requires the correct environment and access permissions.",
      "referenceUrl": "https://launchdarkly.com/docs/api",
      "resources": ["Projects", "Environments", "Feature flags", "Segments", "Members", "Access tokens", "Audit-log entries"],
      "scenario": {
        "seed": "One project, staging and production environments, an internal-test segment, and a disabled flag with an existing rule for another segment.",
        "success": "Only the staging flag gains the requested internal segment exposure; production and unrelated rules remain unchanged, and the final configuration is reported.",
        "task": "Enable a checkout feature only for the approved internal-test segment in staging, preserving production settings and all other targeting rules."
      },
      "summary": "Manage feature flags, targeting rules, segments, and environments while preserving deliberate rollout boundaries and auditability.",
      "workflows": ["Review targeting rules before expanding a staged feature rollout.", "Compare a flag's configuration between staging and production.", "Audit recent flag changes when investigating unexpected user exposure."]
    }
  }, {
    "category": "Docs & Storage",
    "domain": "notion.so",
    "id": "notion",
    "name": "Notion",
    "profile": {
      "apiName": "Notion API",
      "apiStyle": "REST / JSON",
      "auth": "Bearer token from an internal connection, public OAuth connection, or permitted personal access token.",
      "id": "notion",
      "overview": "Notion's API models documents as pages and blocks, with structured records organized through databases and data sources. Connections see only content they can access. Property updates and block edits serve different purposes, making schema inspection useful before changing a record.",
      "referenceUrl": "https://developers.notion.com/reference/intro",
      "resources": ["Pages", "Blocks", "Databases", "Data sources", "Users", "Comments"],
      "scenario": {
        "seed": "Create an escalation data source, an open the customer page, two conflicting troubleshooting notes, and a later engineering confirmation with a stable page link.",
        "success": "The correct page records the confirmed workaround and source link, its follow-up status changes, and the superseded workaround is not presented as current.",
        "task": "Update the customer’s escalation page with the confirmed export workaround, link the supporting engineering note, and mark the associated follow-up complete."
      },
      "summary": "Search workspace knowledge, update structured pages, and connect task records to the evidence stored in their blocks.",
      "workflows": ["Find an incident runbook and append a verified resolution note.", "Update an onboarding record's owner and status using its property schema.", "Collect related project pages into a referenced weekly review."]
    }
  }, {
    "category": "Docs & Storage",
    "domain": "atlassian.com",
    "id": "confluence",
    "name": "Confluence",
    "profile": {
      "apiName": "Confluence Cloud REST API v2",
      "apiStyle": "REST / JSON",
      "auth": "OAuth 2.0 or supported Atlassian API-token authentication; content permissions still apply.",
      "id": "confluence",
      "overview": "Confluence Cloud's REST APIs expose knowledge organized into spaces and versioned content. Page bodies, labels, comments, and attachments provide context for documentation work. Updates should target the intended page and account for its current version and available permissions.",
      "referenceUrl": "https://developer.atlassian.com/cloud/confluence/rest/v2/intro/",
      "resources": ["Spaces", "Pages", "Blog posts", "Attachments", "Comments", "Labels"],
      "scenario": {
        "seed": "Include an outdated runbook, a newer engineering comment, an approved attachment, similarly named pages in another space, and a current content version.",
        "success": "The intended page contains the approved procedure, preserves unrelated sections, references the evidence, and updates successfully from the current version.",
        "task": "Revise the the customer export runbook with an approved asynchronous export workaround while retaining unrelated troubleshooting sections and the existing page hierarchy."
      },
      "summary": "Maintain team knowledge across spaces, pages, comments, and attachments while respecting content versions and access boundaries.",
      "workflows": ["Update a runbook after a verified incident resolution.", "Locate the latest policy page and cite its supporting attachment.", "Organize related troubleshooting pages using consistent labels."]
    }
  }, {
    "category": "Docs & Storage",
    "domain": "drive.google.com",
    "id": "google_drive",
    "name": "Google Drive",
    "profile": {
      "apiName": "Google Drive API v3",
      "apiStyle": "REST / JSON",
      "auth": "OAuth 2.0 access tokens with Drive scopes and file access.",
      "id": "google_drive",
      "overview": "Google Drive's API manages files and their surrounding metadata rather than editing every document format directly. Folders, permissions, revisions, and change tracking support document workflows. Shared-drive membership and file-level access determine which operations an integration can perform.",
      "referenceUrl": "https://developers.google.com/workspace/drive/api/guides/about-sdk",
      "resources": ["Files", "Folders", "Permissions", "Revisions", "Shared drives", "Changes", "Comments"],
      "scenario": {
        "seed": "Seed draft and signed agreements with similar names, separate customer folders, a verified account-manager address, and existing internal permissions.",
        "success": "The signed document is selected and placed correctly, the intended viewer permission exists, and no public link or unrelated access is introduced.",
        "task": "Locate the customer’s signed renewal agreement, place it in the approved customer folder, and grant the named account manager viewer access."
      },
      "summary": "Find, organize, and share business files using metadata, permissions, revisions, and shared-drive context.",
      "workflows": ["Find a signed agreement using metadata and folder context.", "Move approved documents into the correct customer folder.", "Review file permissions before granting a named collaborator access."]
    }
  }, {
    "category": "Docs & Storage",
    "domain": "dropbox.com",
    "id": "dropbox",
    "name": "Dropbox",
    "profile": {
      "apiName": "Dropbox API v2",
      "apiStyle": "HTTP RPC / JSON and content endpoints",
      "auth": "OAuth 2.0 bearer tokens with selected scopes and file-access boundaries.",
      "id": "dropbox",
      "overview": "Dropbox exposes file operations and sharing through its HTTP API. Applications receive scoped access to an app folder or a broader account namespace. File IDs, revisions, and folder cursors help integrations locate content and follow changes reliably.",
      "referenceUrl": "https://developers.dropbox.com/dbx-file-access-guide",
      "resources": ["Files", "Folders", "Revisions", "Shared links", "Shared folders", "Folder members"],
      "scenario": {
        "seed": "Provide two checklist revisions, a draft in a separate folder, approval evidence, and a handoff folder whose existing membership is internal.",
        "success": "The approved file appears in the handoff location, its content matches the accepted revision, and no new external sharing permission is created.",
        "task": "Find the approved the customer deployment checklist and prepare it for the internal handoff folder without sharing the superseded draft."
      },
      "summary": "Organize shared files, inspect revisions, and manage collaboration using scoped access to Dropbox folders and content.",
      "workflows": ["Locate a current file revision before sending a customer attachment.", "Move reviewed deliverables into a shared project folder.", "Adjust shared-link settings to match the intended audience."]
    }
  }, {
    "category": "Docs & Storage",
    "domain": "box.com",
    "id": "box",
    "name": "Box",
    "profile": {
      "apiName": "Box Content API",
      "apiStyle": "REST / JSON",
      "auth": "OAuth 2.0 bearer access tokens; application configuration determines user or service access.",
      "id": "box",
      "overview": "Box's Content API combines file storage with collaboration and document workflow resources. File versions preserve document history, while collaborations and shared links control access. Metadata and tasks support workflows that need evidence about both the document and its reviewers.",
      "referenceUrl": "https://developer.box.com/reference/",
      "resources": ["Files", "Folders", "File versions", "Collaborations", "Comments", "Tasks", "Metadata"],
      "scenario": {
        "seed": "Include an older addendum, a newly uploaded version, the legal reviewer's user record, existing collaborators, and a note requesting review.",
        "success": "One task targets the correct file, the intended reviewer receives its assignment, and earlier versions and existing collaborations remain intact.",
        "task": "Create a review task for the customer’s latest security addendum and assign the documented legal reviewer without changing the folder's sharing permissions."
      },
      "summary": "Coordinate document reviews with versioned files, folder collaborators, metadata, comments, and file-based task assignments.",
      "workflows": ["Assign a reviewer to an uploaded customer document.", "Locate the latest approved file version using metadata and comments.", "Remove an obsolete collaboration while preserving current project access."]
    }
  }, {
    "category": "Docs & Storage",
    "domain": "onedrive.com",
    "id": "onedrive",
    "name": "OneDrive",
    "profile": {
      "apiName": "Microsoft Graph OneDrive API",
      "apiStyle": "REST / JSON",
      "auth": "Microsoft identity platform OAuth 2.0 tokens with delegated or application permissions.",
      "id": "onedrive",
      "overview": "Microsoft Graph provides a common file interface for personal OneDrive storage and shared document libraries. Drive items represent files and folders. Permission checks, version history, and delta queries help integrations preserve collaboration context while organizing or updating documents.",
      "referenceUrl": "https://learn.microsoft.com/en-us/graph/onedrive-concept-overview",
      "resources": ["Drives", "Drive items", "Folders", "Permissions", "Versions", "Upload sessions", "Delta changes"],
      "scenario": {
        "seed": "Seed personal and shared drives, draft and approved plans, a customer handoff folder, and a similarly named plan for another customer.",
        "success": "The copied item contains the approved plan, resides in the intended shared folder, and its link does not introduce anonymous access.",
        "task": "Copy the customer’s approved rollout plan into the customer handoff folder and return a link that preserves the folder's existing access policy."
      },
      "summary": "Manage Microsoft 365 files through drives, items, permissions, and revisions, including content held in SharePoint libraries.",
      "workflows": ["Find the correct document in a team-backed drive.", "Copy an approved file into a project handoff folder.", "Track changed files and inspect their current sharing permissions."]
    }
  }, {
    "category": "Docs & Storage",
    "domain": "docusign.com",
    "id": "docusign",
    "name": "DocuSign",
    "profile": {
      "apiName": "Docusign eSignature REST API",
      "apiStyle": "REST / JSON",
      "auth": "OAuth 2.0 bearer tokens, using an authorized user or supported JWT grant.",
      "id": "docusign",
      "overview": "Docusign's eSignature API organizes signature workflows around envelopes. Each envelope contains documents, recipients, and tabs describing required fields. Templates standardize recurring agreements, while envelope status and recipient progress distinguish preparation, delivery, signing, and completion.",
      "referenceUrl": "https://developers.docusign.com/docs/esign-rest-api/",
      "resources": ["Envelopes", "Documents", "Recipients", "Tabs", "Templates", "Envelope events"],
      "scenario": {
        "seed": "Provide an approved renewal PDF, two similarly named templates, verified signer addresses, routing requirements, and an explicit instruction to retain draft status.",
        "success": "The draft envelope contains the correct document and recipients, all required tabs are assigned, and no signature request is sent.",
        "task": "Prepare a draft the customer renewal envelope from the approved template, assigning customer and countersigner roles in the documented order."
      },
      "summary": "Prepare signature envelopes with the right documents, recipients, signing fields, and routing order, then track their status.",
      "workflows": ["Prepare an envelope from an approved agreement template.", "Check recipient routing before sending an agreement for signature.", "Retrieve completed documents after every required signer finishes."]
    }
  }, {
    "category": "Docs & Storage",
    "domain": "pandadoc.com",
    "id": "pandadoc",
    "name": "PandaDoc",
    "profile": {
      "apiName": "PandaDoc API",
      "apiStyle": "REST / JSON",
      "auth": "OAuth 2.0 for new integrations; legacy API-key authentication remains documented.",
      "id": "pandadoc",
      "overview": "PandaDoc's API supports document generation, delivery, and status tracking. Templates, content placeholders, recipients, and pricing data turn structured commercial information into a document. Creation and subsequent processing are separate steps, so workflows should inspect readiness before continuing.",
      "referenceUrl": "https://developers.pandadoc.com/reference/about",
      "resources": ["Documents", "Templates", "Recipients", "Contacts", "Content library items", "Document sessions"],
      "scenario": {
        "seed": "Include a current template, an obsolete template, verified recipient details, itemized quantities and discounts, and a required internal review step.",
        "success": "The resulting document uses the approved template and exact terms, identifies the right recipient, and remains unsent for internal review.",
        "task": "Generate the customer’s renewal proposal from the approved template and supplied commercial terms, leaving it ready for human review rather than sending it."
      },
      "summary": "Create proposals from templates, populate recipient roles and pricing, and follow documents through their preparation and signing lifecycle.",
      "workflows": ["Generate a proposal using approved template fields and pricing.", "Verify recipient details before sending a document.", "Monitor document status and retrieve the completed agreement."]
    }
  }, {
    "category": "Docs & Storage",
    "domain": "coda.io",
    "id": "coda",
    "name": "Coda",
    "profile": {
      "apiName": "Coda API v1",
      "apiStyle": "REST / JSON",
      "auth": "Bearer API token with access to the relevant documents.",
      "id": "coda",
      "overview": "Coda's REST API exposes docs containing pages, tables, and rows. Integrations can read structured records, apply row changes, and inspect document metadata. Table identifiers and column schemas are more reliable than display names when a document evolves.",
      "referenceUrl": "https://coda.io/developers/apis/v1",
      "resources": ["Docs", "Pages", "Tables", "Columns", "Rows", "Formulas", "Controls"],
      "scenario": {
        "seed": "Seed a customer table, a linked follow-up table, an open export item, a resolved unrelated item, and a confirmed workaround note.",
        "success": "The intended row has the correct resolution and evidence link, related customer references remain valid, and prior troubleshooting history is preserved.",
        "task": "Resolve the customer’s export follow-up in the operations tracker, link the confirmed workaround, and retain the history of earlier troubleshooting attempts."
      },
      "summary": "Query document tables, update structured rows, and use pages and formulas as context for operational workflows.",
      "workflows": ["Update a project's risk register using evidence from another table.", "Append approved action items to an existing operations tracker.", "Read computed results after submitting a structured row change."]
    }
  }, {
    "category": "Data & Infra",
    "domain": "snowflake.com",
    "id": "snowflake",
    "name": "Snowflake",
    "profile": {
      "apiName": "Snowflake SQL API",
      "apiStyle": "REST interface for SQL statements, execution status, cancellation, and results.",
      "auth": "OAuth access tokens or key-pair JWT authentication, subject to the selected user's role permissions.",
      "id": "snowflake",
      "overview": "Snowflake's SQL API submits statements and exposes their status and results without a persistent database connection. Database, schema, warehouse, and role context shape execution. Larger or asynchronous results require following statement handles and result partitions.",
      "referenceUrl": "https://docs.snowflake.com/en/developer-guide/sql-api/index",
      "resources": ["SQL statements", "Statement handles", "Result sets", "Databases", "Schemas", "Tables", "Warehouses"],
      "scenario": {
        "seed": "Invoice and payment tables, duplicate payment-import rows, multiple currencies, and a reporting period that excludes current-month transactions.",
        "success": "The result identifies the true mismatches, handles duplicate imports and currencies correctly, and includes the SQL and reporting period used.",
        "task": "Reconcile invoice totals against recorded payments for a closed accounting period and identify mismatches without changing the underlying warehouse tables."
      },
      "summary": "Run SQL, inspect statement execution, and retrieve warehouse data through Snowflake's HTTP-based SQL interface.",
      "workflows": ["Run a reconciliation query and retrieve every result partition.", "Inspect a long-running statement before deciding whether to cancel it.", "Compare warehouse records with an operational report using explicit date filters."]
    }
  }, {
    "category": "Data & Infra",
    "domain": "cloud.google.com",
    "id": "bigquery",
    "name": "BigQuery",
    "profile": {
      "apiName": "BigQuery API",
      "apiStyle": "REST API with JSON resources; query execution uses GoogleSQL.",
      "auth": "Google OAuth 2.0 bearer credentials with IAM permissions; service accounts commonly support automation.",
      "id": "bigquery",
      "overview": "BigQuery's API exposes datasets, tables, query jobs, and results. Jobs carry execution context and completion information, while dataset and table metadata describe available data. Reliable analysis respects project permissions, data location, partitions, and the requested reporting window.",
      "referenceUrl": "https://docs.cloud.google.com/bigquery/docs/reference/rest",
      "resources": ["Datasets", "Tables", "Jobs", "Query results", "Routines", "Models"],
      "scenario": {
        "seed": "A partitioned purchases table, daily ingestion metadata, one duplicated batch, and another dataset containing similarly named test tables.",
        "success": "The analysis identifies the duplicated batch and affected date, uses the correct dataset, and reports verified counts without modifying source data.",
        "task": "Find which day's ingestion caused an unexpected jump in purchase totals, limiting the investigation to the requested dataset and reporting week."
      },
      "summary": "Query analytics datasets, inspect jobs, and manage table metadata through BigQuery's project-scoped data APIs.",
      "workflows": ["Inspect table schemas before constructing a query against unfamiliar data.", "Run a partition-bounded analysis and follow its job to completion.", "Compare daily aggregates to identify missing or duplicated ingestion batches."]
    }
  }, {
    "category": "Data & Infra",
    "domain": "databricks.com",
    "id": "databricks",
    "name": "Databricks",
    "profile": {
      "apiName": "Databricks REST APIs",
      "apiStyle": "Versioned REST services with JSON request and response bodies.",
      "auth": "OAuth for users or service principals; personal access tokens are an alternative where supported.",
      "id": "databricks",
      "overview": "Databricks REST APIs automate jobs, compute, SQL execution, and catalog management. A job definition differs from an individual run. Failures can affect a specific task or compute dependency, so diagnosis requires inspecting the workflow's execution state.",
      "referenceUrl": "https://docs.databricks.com/api/workspace/",
      "resources": ["Jobs", "Job runs", "Clusters", "SQL warehouses", "SQL statements", "Catalogs", "Tables"],
      "scenario": {
        "seed": "A job with extraction, transformation, and publication tasks; one failed transformation; completed extraction output; and publication that never started.",
        "success": "The recommendation identifies the failed task and dependency impact, cites its error, and distinguishes unstarted downstream tasks from independent failures.",
        "task": "Diagnose a failed daily ingestion workflow and recommend the smallest recovery action, preserving tasks that have already completed successfully."
      },
      "summary": "Coordinate data jobs, execution runs, SQL warehouses, and catalog resources across a Databricks analytics workspace.",
      "workflows": ["Inspect failed job tasks and their dependencies before requesting a rerun.", "Query a SQL warehouse to verify that an output table is fresh.", "Review catalog and table metadata before granting a data-processing task access."]
    }
  }, {
    "category": "Data & Infra",
    "domain": "aws.amazon.com",
    "id": "redshift",
    "name": "Redshift",
    "profile": {
      "apiName": "Amazon Redshift Data API",
      "apiStyle": "AWS JSON web-service operations for SQL execution and metadata.",
      "auth": "AWS Signature Version 4 with IAM permissions; database access uses supported temporary credentials, Secrets Manager, or IAM Identity Center.",
      "id": "redshift",
      "overview": "The Redshift Data API runs SQL against provisioned clusters or serverless workgroups without managing a persistent database connection. Statement IDs link submission, status, and results. AWS authorization and database authentication are separate parts of the access model.",
      "referenceUrl": "https://docs.aws.amazon.com/redshift-data/latest/APIReference/Welcome.html",
      "resources": ["Statements", "Batch statements", "Result sets", "Databases", "Schemas", "Tables"],
      "scenario": {
        "seed": "A reporting statement that failed on a missing column, a similar successful statement from yesterday, and a changed inventory-table schema.",
        "success": "The answer links the failure to the correct statement and schema change, excludes yesterday's results, and proposes a precise query correction.",
        "task": "Explain an incomplete inventory report by checking its SQL statement status and error details before attempting to retrieve or publish results."
      },
      "summary": "Execute warehouse SQL and inspect asynchronous statement results through the Amazon Redshift Data API.",
      "workflows": ["Submit a reporting query and retrieve results after execution finishes.", "Inspect table metadata before joining unfamiliar warehouse datasets.", "Cancel an identified runaway statement while preserving unrelated queries."]
    }
  }, {
    "category": "Data & Infra",
    "domain": "datadoghq.com",
    "id": "datadog",
    "name": "Datadog",
    "profile": {
      "apiName": "Datadog API",
      "apiStyle": "REST APIs over HTTPS with JSON requests and responses.",
      "auth": "DD-API-KEY plus DD-APPLICATION-KEY for endpoints requiring application permissions; ingestion requirements differ by endpoint.",
      "id": "datadog",
      "overview": "Datadog's API exposes telemetry queries and resources such as monitors, dashboards, and downtimes. Time windows, service tags, and site selection determine the evidence an investigation sees. Alert status should be interpreted alongside the monitor's definition and supporting telemetry.",
      "referenceUrl": "https://docs.datadoghq.com/api/",
      "resources": ["Monitors", "Metrics", "Logs", "Dashboards", "Downtimes", "Service-level objectives", "Events"],
      "scenario": {
        "seed": "A latency monitor, deployment events, checkout metrics, unrelated background-job errors, and logs tagged with the affected production service.",
        "success": "The incident summary cites the matching time window and service evidence, excludes unrelated errors, and leaves monitor thresholds and notification settings unchanged.",
        "task": "Investigate a checkout latency alert by correlating the monitor, recent deployments, and tagged logs within the same fifteen-minute incident window."
      },
      "summary": "Investigate service health using monitors, metrics, logs, events, and operational configuration across Datadog observability data.",
      "workflows": ["Correlate an alert with recent error logs and deployment events.", "Review monitor thresholds before changing a noisy alert.", "Check a maintenance downtime's scope before suppressing notifications."]
    }
  }, {
    "category": "Data & Infra",
    "domain": "newrelic.com",
    "id": "new_relic",
    "name": "New Relic",
    "profile": {
      "apiName": "New Relic NerdGraph API",
      "apiStyle": "GraphQL queries and mutations, including NRQL analytics.",
      "auth": "User API key with relevant account access; ingest keys serve a different purpose.",
      "id": "new_relic",
      "overview": "NerdGraph provides a graph-oriented API for New Relic data and configuration. It can execute NRQL queries and work with entities, dashboards, and alerting resources. Account scope and entity identifiers keep investigations tied to the intended application and environment.",
      "referenceUrl": "https://docs.newrelic.com/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph/",
      "resources": ["Entities", "NRQL query results", "Dashboards", "Alert policies", "NRQL alert conditions", "Notification destinations", "Workflows"],
      "scenario": {
        "seed": "Telemetry for three application entities, one deployment timestamp, a shared alert policy, and elevated errors isolated to the checkout entity.",
        "success": "The report selects the correct account and entity, includes comparable error rates and intervals, and preserves the existing alert policy.",
        "task": "Identify which application contributed most to an account's increased error rate and provide a comparable before-and-after analysis for the deployment window."
      },
      "summary": "Query application telemetry and manage dashboards and alerting through New Relic's NerdGraph GraphQL interface.",
      "workflows": ["Compare application error rates before and after a deployment.", "Retrieve an entity's context before investigating an alert condition.", "Update a dashboard using the correct account and entity references."]
    }
  }, {
    "category": "Data & Infra",
    "domain": "grafana.com",
    "id": "grafana",
    "name": "Grafana",
    "profile": {
      "apiName": "Grafana HTTP APIs",
      "apiStyle": "JSON HTTP APIs, including versioned resource APIs and legacy resource-specific routes.",
      "auth": "Service-account bearer tokens; Grafana OSS also supports Basic authentication for applicable endpoints.",
      "id": "grafana",
      "overview": "Grafana's HTTP APIs expose visualization and operational configuration. Dashboards reference data sources and live within folders with access controls. Resource versions and API groups vary across Grafana releases, so updates need the appropriate endpoint and current object state.",
      "referenceUrl": "https://grafana.com/docs/grafana/latest/developer-resources/api-reference/http-api/",
      "resources": ["Dashboards", "Folders", "Data sources", "Alert rules", "Contact points", "Annotations"],
      "scenario": {
        "seed": "A dashboard with four panels, production and staging data sources, a team folder, and the requested error-rate query.",
        "success": "The dashboard contains exactly one additional panel with the correct query and data source, while its existing panels, permissions, and folder remain intact.",
        "task": "Add a checkout-error panel to the team's existing dashboard, using its production data source and preserving all current panels and folder placement."
      },
      "summary": "Manage observability dashboards, folders, data sources, and alerting resources through Grafana's authenticated HTTP APIs.",
      "workflows": ["Update a dashboard panel while preserving its data-source references.", "Audit folder placement and permissions before publishing an operational dashboard.", "Review alert routing and contact points before changing notifications."]
    }
  }, {
    "category": "Data & Infra",
    "domain": "splunk.com",
    "id": "splunk",
    "name": "Splunk",
    "profile": {
      "apiName": "Splunk Platform REST API",
      "apiStyle": "REST with JSON/XML responses and SPL.",
      "auth": "Splunk authentication bearer token or session key; HTTP Event Collector tokens apply to the separate ingestion interface.",
      "id": "splunk",
      "overview": "Splunk's REST API exposes search execution and management resources. Search jobs have lifecycle state, results, and messages; saved searches define reusable queries. App and user namespaces determine resource visibility and ownership during administrative workflows.",
      "referenceUrl": "https://help.splunk.com/en/splunk-enterprise/rest-api-reference",
      "resources": ["Search jobs", "Indexed events", "Indexes", "Saved searches", "Alerts", "KV Store collections"],
      "scenario": {
        "seed": "Events share a correlation ID across three services, with an initial validation failure, later retries, and unrelated errors outside the incident window.",
        "success": "The timeline identifies the initiating failure, preserves event timestamps and service context, and excludes unrelated events without changing saved searches.",
        "task": "Trace a failed invoice-processing request across indexed application events and identify the first meaningful error rather than repeating downstream symptoms."
      },
      "summary": "Search indexed events and manage search jobs, saved searches, and operational knowledge through Splunk's REST API.",
      "workflows": ["Run a bounded SPL investigation and retrieve completed search results.", "Inspect a saved search's schedule and owner when reports stop arriving.", "Compare related events by correlation ID during incident triage."]
    }
  }, {
    "category": "Data & Infra",
    "domain": "elastic.co",
    "id": "elastic",
    "name": "Elastic",
    "profile": {
      "apiName": "Elasticsearch API",
      "apiStyle": "HTTP JSON, Query DSL, and bulk operations.",
      "auth": "Elasticsearch API keys, bearer tokens, or Basic authentication with appropriate index and cluster privileges.",
      "id": "elastic",
      "overview": "Elasticsearch exposes document operations, search, aggregations, and index-management resources through HTTP APIs. Mappings determine field behavior, while aliases can hide changing physical indexes. Investigations need to distinguish indexing failures from queries that target the wrong field or index.",
      "referenceUrl": "https://www.elastic.co/docs/api/doc/elasticsearch/",
      "resources": ["Indices", "Documents", "Aliases", "Data streams", "Mappings", "Ingest pipelines", "Index templates"],
      "scenario": {
        "seed": "A bulk response with one mapping rejection, an application alias targeting the prior index, and successfully indexed documents in a new index.",
        "success": "The explanation separates the rejected document from the alias mismatch, cites the affected identifiers, and proposes corrections without deleting either index.",
        "task": "Diagnose why newly indexed invoices are absent from search results, checking bulk-item outcomes, mappings, and the alias used by the application."
      },
      "summary": "Search indexed documents, inspect mappings, and manage data organization using Elasticsearch's document and cluster APIs.",
      "workflows": ["Inspect mappings when a search or aggregation returns unexpected results.", "Compare alias targets before directing queries to a new index.", "Review bulk-item errors before reporting an indexing job as successful."]
    }
  }, {
    "category": "Data & Infra",
    "domain": "fivetran.com",
    "id": "fivetran",
    "name": "Fivetran",
    "profile": {
      "apiName": "Fivetran REST API",
      "apiStyle": "REST management API with JSON resources and operational actions.",
      "auth": "API key and secret using HTTP Basic authentication, with permissions determined by the key's access model.",
      "id": "fivetran",
      "overview": "Fivetran's REST API manages replication configuration and operational status. Connections belong to groups and point toward destinations, with schema settings controlling selected data. Agents can inspect synchronization health here and query replicated business records in the destination system.",
      "referenceUrl": "https://fivetran.com/docs/developer-resources/rest-api",
      "resources": ["Connections", "Groups", "Destinations", "Connection schemas", "Users", "Teams"],
      "scenario": {
        "seed": "A connection with recent successful syncs, a newly added source table excluded from schema selection, and a working destination.",
        "success": "The diagnosis identifies the excluded table rather than blaming the destination, cites the relevant configuration, and proposes the minimal schema-selection change.",
        "task": "Investigate a stale finance table by checking the connection's synchronization and schema settings before recommending a recovery action."
      },
      "summary": "Configure data connections, destinations, and schema synchronization while monitoring Fivetran's managed replication pipeline state.",
      "workflows": ["Inspect connection status and setup errors before triggering another sync.", "Review selected schemas and tables before expanding replication scope.", "Compare destination and group settings when onboarding a new source."]
    }
  }, {
    "category": "Data & Infra",
    "domain": "airbyte.com",
    "id": "airbyte",
    "name": "Airbyte",
    "profile": {
      "apiName": "Airbyte API",
      "apiStyle": "REST API with JSON resources for configuration and job operations.",
      "auth": "Application client ID and secret exchanged for an access token; authentication details vary by deployment.",
      "id": "airbyte",
      "overview": "Airbyte's API exposes the configuration and execution of data synchronization. Connections join sources to destinations and select streams, while jobs describe individual runs. A failed job can reflect credentials, schema changes, or stream settings rather than a broken destination.",
      "referenceUrl": "https://reference.airbyte.com/reference/getting-started",
      "resources": ["Workspaces", "Sources", "Destinations", "Connections", "Streams", "Jobs"],
      "scenario": {
        "seed": "A connection with three streams, one failed sync job, a changed orders column, and successful records for the other two streams.",
        "success": "The recommendation identifies the affected stream and schema mismatch, preserves the remaining configuration, and avoids resetting unrelated destination data.",
        "task": "Diagnose why an orders stream stopped syncing after a source schema change, then propose a correction that preserves other working streams."
      },
      "summary": "Manage sources, destinations, connections, and sync jobs across Airbyte's configurable data replication workspaces.",
      "workflows": ["Inspect a failed synchronization job before launching a replacement run.", "Compare source streams with a connection's selected catalog.", "Review source and destination configuration before creating a connection."]
    }
  }, {
    "category": "HR & Ops",
    "domain": "workday.com",
    "id": "workday",
    "name": "Workday",
    "profile": {
      "apiName": "Workday REST Services",
      "apiStyle": "REST / JSON",
      "auth": "OAuth access tokens; domain and business-process security policies govern access.",
      "id": "workday",
      "overview": "Workday's REST services expose workforce resources through tenant-specific security policies. A user's permissions govern both visible records and permitted business-process actions. Workflows should distinguish a worker's current state from requested or future changes before taking an administrative action.",
      "referenceUrl": "https://developer.workday.com/documentation/dan1370797986071/",
      "resources": ["Workers", "Supervisory organizations", "Job profiles", "Positions", "Time-off requests", "Business-process events"],
      "scenario": {
        "seed": "Provide a synthetic worker, current and destination organizations, an approved future-dated transfer, and an older cancelled transfer with similar details.",
        "success": "The handoff cites the approved event and correct effective date, distinguishes current from future reporting lines, and leaves unrelated worker data unchanged.",
        "task": "Prepare an administrative handoff for a documented employee transfer, identifying the correct destination organization, manager, and effective date from approved records."
      },
      "summary": "Navigate worker and organization records, inspect effective changes, and respect the business-process permissions attached to each operation.",
      "workflows": ["Identify the correct manager from a worker's supervisory organization.", "Reconcile an approved transfer with its effective date and worker record.", "Inspect a time-off request without bypassing its approval process."]
    }
  }, {
    "category": "HR & Ops",
    "domain": "bamboohr.com",
    "id": "bamboohr",
    "name": "BambooHR",
    "profile": {
      "apiName": "BambooHR API",
      "apiStyle": "REST / JSON or XML, depending on endpoint",
      "auth": "OAuth 2.0 or API key as the HTTP Basic username.",
      "id": "bamboohr",
      "overview": "BambooHR's API supports employee records, reports, and related HR workflows. API access inherits a user's field and employee permissions. Integrations should inspect available fields and identifiers before changing records, especially when an organization uses custom personnel data.",
      "referenceUrl": "https://documentation.bamboohr.com/docs/getting-started",
      "resources": ["Employees", "Employee fields", "Directory entries", "Reports", "Time-off requests", "Time-off balances"],
      "scenario": {
        "seed": "Include two employees with similar names, unique employee IDs, approved transfer details, valid department values, and unrelated compensation fields.",
        "success": "Only the intended employee's department and title change, the values match the approved transfer, and unrelated personnel fields remain untouched.",
        "task": "Update a synthetic employee's department and job title after a documented transfer, preserving the manager and employment status specified in the request."
      },
      "summary": "Read employee directories, maintain personnel fields, and coordinate time-off information within the authenticated user's permitted access.",
      "workflows": ["Update an employee's documented department after an approved transfer.", "Compile a team directory without requesting restricted personnel fields.", "Reconcile a time-off request with its current status and balance."]
    }
  }, {
    "category": "HR & Ops",
    "domain": "gusto.com",
    "id": "gusto",
    "name": "Gusto",
    "profile": {
      "apiName": "Gusto App Integrations API",
      "apiStyle": "REST / JSON",
      "auth": "OAuth 2.0 with company authorization and approved application scopes.",
      "id": "gusto",
      "overview": "Gusto's App Integrations API connects authorized applications to companies already using Gusto. Company, employee, job, and payroll records provide the context for payroll workflows. Production access is reviewed and scoped, so each integration's approved permissions define its usable operations.",
      "referenceUrl": "https://docs.gusto.com/app-integrations/docs/introduction",
      "resources": ["Companies", "Employees", "Jobs", "Compensations", "Payrolls", "Contractors"],
      "scenario": {
        "seed": "Seed a company, synthetic employees, two payroll periods, job assignments, an approved timesheet, and one discrepant draft payroll entry.",
        "success": "The report names the correct employee, job, period, and hour difference with evidence, and no payroll is submitted or paid.",
        "task": "Identify a mismatch between approved hours and a draft payroll entry, then prepare a correction report for the payroll administrator."
      },
      "summary": "Inspect company payroll context, employee jobs, compensation, and time-off data before preparing payroll-related operational handoffs.",
      "workflows": ["Reconcile approved time data with the intended payroll period.", "Check an employee's jobs and compensation before preparing an exception report.", "Read payroll outcomes for an accounting reconciliation handoff."]
    }
  }, {
    "category": "HR & Ops",
    "domain": "rippling.com",
    "id": "rippling",
    "name": "Rippling",
    "profile": {
      "apiName": "Rippling REST API",
      "apiStyle": "REST / JSON",
      "auth": "Bearer tokens with selected scopes and the creator's permissions.",
      "id": "rippling",
      "overview": "Rippling's REST API exposes company resources with scoped, permission-aware access. Users and workers represent related but distinct identities. Integrations should resolve those relationships before applying changes or comparing employment information across HR, identity, and operational systems.",
      "referenceUrl": "https://developer.rippling.com/documentation/rest-api",
      "resources": ["Users", "Workers", "Departments", "Teams", "Work locations", "Compensation records"],
      "scenario": {
        "seed": "Include a new worker, a linked user, a future start date, a similarly named active employee, and distinct office and remote locations.",
        "success": "The handoff references the intended worker and user IDs, reports the correct start context, and does not alter another employee's record.",
        "task": "Prepare an onboarding handoff for a synthetic new worker, identifying the associated user, department, manager, and work location."
      },
      "summary": "Connect worker, user, organization, and employment records to support consistent administrative workflows across the company.",
      "workflows": ["Resolve a worker to the correct user account for an administrative handoff.", "Compare department and manager data against an approved personnel change.", "Prepare an onboarding checklist using employment and location context."]
    }
  }, {
    "category": "HR & Ops",
    "domain": "deel.com",
    "id": "deel",
    "name": "Deel",
    "profile": {
      "apiName": "Deel API",
      "apiStyle": "REST / JSON",
      "auth": "Scoped bearer API tokens or OAuth 2.0; token type determines the acting identity.",
      "id": "deel",
      "overview": "Deel's API covers worker and contract workflows alongside payroll and financial operations. Different token types represent an organization, individual user, or specific worker. Resource scopes and contract context determine which records an integration can inspect or update.",
      "referenceUrl": "https://developer.deel.com/api/authentication",
      "resources": ["People", "Contracts", "Legal entities", "Teams", "Invoices", "Timesheets", "Milestones"],
      "scenario": {
        "seed": "Seed a synthetic contractor, two active contracts, an invoice under dispute, approved time entries, and a similar invoice from a different period.",
        "success": "The reconciliation identifies the correct contract and period, explains the supported discrepancy, and neither initiates payment nor changes unrelated contract terms.",
        "task": "Investigate a contractor's disputed invoice by matching its contract and billing period to approved timesheets, then produce a documented reconciliation."
      },
      "summary": "Coordinate global workforce records, contracts, invoices, and time submissions with scoped access to the appropriate organization.",
      "workflows": ["Check contract status before preparing a contractor onboarding handoff.", "Compare a submitted timesheet with the relevant contract and period.", "Reconcile invoice data with documented payment or adjustment evidence."]
    }
  }, {
    "category": "HR & Ops",
    "domain": "greenhouse.io",
    "id": "greenhouse",
    "name": "Greenhouse",
    "profile": {
      "apiName": "Greenhouse Harvest API v3",
      "apiStyle": "REST / JSON",
      "auth": "OAuth 2.0: client credentials for custom integrations or authorization code for partners.",
      "id": "greenhouse",
      "overview": "Greenhouse Harvest v3 provides programmatic access to recruiting resources with token-based authentication. Candidates and applications are separate records: one person may have several applications. Changes should follow the intended job context and the explicit action authorized by the recruiting team.",
      "referenceUrl": "https://harvestdocs.greenhouse.io/docs/overview-and-philosophy",
      "resources": ["Candidates", "Applications", "Jobs", "Job posts", "Interviews", "Scorecards", "Offers"],
      "scenario": {
        "seed": "Provide a synthetic candidate with two applications, distinct jobs, current stages, completed interview records, and an explicit recruiter instruction for one application.",
        "success": "Only the authorized application advances to the specified stage, the update is attributable to the request, and the other application remains unchanged.",
        "task": "Apply a recruiter's explicitly approved next-stage instruction to the correct application, preserving the candidate's separate application for another role."
      },
      "summary": "Manage recruiting records across candidates, applications, jobs, and interviews while keeping each hiring workflow attached to the right application.",
      "workflows": ["Find a candidate's application for the requested job before adding an update.", "Record a recruiter-approved application change with supporting context.", "Collect interview completion information for a scheduling handoff."]
    }
  }, {
    "category": "HR & Ops",
    "domain": "lever.co",
    "id": "lever",
    "name": "Lever",
    "profile": {
      "apiName": "Lever API",
      "apiStyle": "REST / JSON",
      "auth": "API key through HTTP Basic authentication or scoped OAuth 2.0 bearer token.",
      "id": "lever",
      "overview": "Lever's API exposes recruiting activity around opportunities associated with candidates. Stage, posting, interview, and feedback context help integrations understand where each opportunity stands. API keys or OAuth scopes control access, including which recruiting updates an application may perform.",
      "referenceUrl": "https://hire.lever.co/developer/documentation",
      "resources": ["Opportunities", "Candidates", "Postings", "Stages", "Notes", "Interviews", "Feedback"],
      "scenario": {
        "seed": "Include two opportunities for the same candidate, separate postings and stages, an approved slot, and an older cancelled scheduling note.",
        "success": "One new note appears on the engineering opportunity with the approved slot and posting context; the other opportunity and its stage remain unchanged.",
        "task": "Add a scheduling note to the synthetic candidate's engineering opportunity, referencing the approved interview slot and the correct job posting."
      },
      "summary": "Follow candidate opportunities through recruiting stages, feedback, interviews, and notes without confusing parallel applications for different roles.",
      "workflows": ["Attach an interview coordination note to the correct opportunity.", "Move an opportunity to a stage explicitly requested by its recruiter.", "Collect feedback completion information for a recruiting handoff."]
    }
  }, {
    "category": "HR & Ops",
    "domain": "ashbyhq.com",
    "id": "ashby",
    "name": "Ashby",
    "profile": {
      "apiName": "Ashby API",
      "apiStyle": "HTTP RPC / JSON",
      "auth": "API key as the HTTP Basic username, with module and endpoint permissions.",
      "id": "ashby",
      "overview": "Ashby's API uses named RPC methods, usually sent as POST requests with JSON bodies. Candidates, applications, jobs, and interviews are connected resources. API-key permissions determine available methods, including whether confidential jobs and projects are visible to the integration.",
      "referenceUrl": "https://developers.ashbyhq.com/reference/introduction",
      "resources": ["Candidates", "Applications", "Jobs", "Job postings", "Interview plans", "Interviews", "Offers"],
      "scenario": {
        "seed": "Seed two candidate records, an application for the target job, an interview plan, current coordination notes, and a recruiter-approved preparation message.",
        "success": "The note is attached to the intended candidate, accurately identifies the target job and preparation details, and existing candidate information is retained.",
        "task": "Add the coordinator's approved interview preparation note to the correct synthetic candidate, preserving existing notes and distinguishing two similarly named applicants."
      },
      "summary": "Work with recruiting candidates, applications, jobs, and interview plans through explicit methods and endpoint-level permissions.",
      "workflows": ["Locate the application linked to a specific candidate and job.", "Add a recruiting note containing verified scheduling information.", "Read a job's interview plan before preparing the next coordination step."]
    }
  }, {
    "category": "HR & Ops",
    "domain": "servicenow.com",
    "id": "servicenow",
    "name": "ServiceNow",
    "profile": {
      "apiName": "ServiceNow REST APIs",
      "apiStyle": "REST / JSON or XML",
      "auth": "OAuth 2.0 or supported Basic authentication, subject to instance access policies.",
      "id": "servicenow",
      "overview": "ServiceNow exposes instance data through REST APIs such as the Table and Attachment APIs. Tables carry records including incidents, requests, and configuration items. Roles, access-control rules, and business logic determine what an integration can read or change.",
      "referenceUrl": "https://www.servicenow.com/docs/r/api-reference/rest-apis/c_TableAPI.html",
      "resources": ["Incidents", "Service requests", "Tasks", "Configuration items", "Users", "Groups", "Attachments"],
      "scenario": {
        "seed": "Provide an open incident, two similar assignment groups, a linked configuration item, troubleshooting notes, and a later engineering confirmation.",
        "success": "The intended incident receives the correct assignment and evidence-based work notes, while priority and resolution state follow the explicit task instructions.",
        "task": "Investigate the customer’s export incident, assign it to the documented application support group, and add work notes explaining the confirmed workaround."
      },
      "summary": "Investigate incidents and service requests with table records, assignment context, work notes, and linked operational evidence.",
      "workflows": ["Route an incident to the assignment group supported by its evidence.", "Append an investigation update to the correct incident's work notes.", "Check a request and its related tasks before reporting completion."]
    }
  }, {
    "category": "HR & Ops",
    "domain": "asana.com",
    "id": "asana",
    "name": "Asana",
    "profile": {
      "apiName": "Asana API",
      "apiStyle": "REST / JSON",
      "auth": "Personal or service-account access token, or OAuth 2.0.",
      "id": "asana",
      "overview": "Asana's API exposes workspaces, projects, tasks, and their relationships. Tasks can carry assignees, due dates, custom fields, and activity stories. A task's memberships matter because the same task can participate in more than one project.",
      "referenceUrl": "https://developers.asana.com/docs/overview",
      "resources": ["Workspaces", "Projects", "Sections", "Tasks", "Subtasks", "Stories", "Custom fields"],
      "scenario": {
        "seed": "Include a customer project, an unassigned follow-up, another project with a similarly named task, approved scheduling details, and an unresolved dependency.",
        "success": "The correct task has the authorized owner, due date, and evidence comment, while its completion state and unresolved dependency remain unchanged.",
        "task": "Update the customer’s rollout follow-up with the approved owner and due date, adding a comment that links the decision record."
      },
      "summary": "Coordinate project tasks, ownership, dependencies, and discussion while keeping updates tied to the correct workspace and project.",
      "workflows": ["Assign an unowned follow-up to the documented project owner.", "Update a task's due date and add a supporting comment.", "Review dependencies before marking a project task complete."]
    }
  }, {
    "category": "HR & Ops",
    "domain": "monday.com",
    "id": "monday",
    "name": "Monday",
    "profile": {
      "apiName": "monday platform API",
      "apiStyle": "GraphQL / JSON",
      "auth": "Personal API token or OAuth 2.0 access token.",
      "id": "monday",
      "overview": "Monday's platform API uses GraphQL to read and mutate work-management data. Boards define columns, groups organize items, and column types determine valid update shapes. Inspect the board schema before changing status, people, date, or connected-record values.",
      "referenceUrl": "https://developer.monday.com/api-reference/docs/basics",
      "resources": ["Workspaces", "Boards", "Groups", "Items", "Subitems", "Columns", "Updates"],
      "scenario": {
        "seed": "Seed a deployment board, typed people and date columns, custom status labels, two similarly named items, and an approved scheduling message.",
        "success": "The intended item contains valid owner and date values and a supporting update; unrelated columns and other board items retain their original values.",
        "task": "Update the customer’s deployment item with the approved owner and scheduled date, then post the scheduling decision as an item update."
      },
      "summary": "Query boards and items, update typed column values, and preserve the structure of team workspaces and groups.",
      "workflows": ["Change an item's status using the board's configured labels.", "Assign an owner and due date from an approved project request.", "Post an update summarizing the evidence behind a workflow change."]
    }
  }, {
    "category": "HR & Ops",
    "domain": "clickup.com",
    "id": "clickup",
    "name": "ClickUp",
    "profile": {
      "apiName": "ClickUp API",
      "apiStyle": "REST / JSON",
      "auth": "Personal API token or OAuth 2.0 token.",
      "id": "clickup",
      "overview": "ClickUp's API organizes work through workspaces, spaces, folders, lists, and tasks. Statuses and custom fields depend on their surrounding configuration. The API's v2 terminology uses team for workspace, so integrations should resolve hierarchy before applying task updates.",
      "referenceUrl": "https://developer.clickup.com/docs/Getting%20Started",
      "resources": ["Workspaces", "Spaces", "Folders", "Lists", "Tasks", "Comments", "Custom fields"],
      "scenario": {
        "seed": "Include two lists with similar task names, list-specific statuses, a deployment parent task, incomplete subtasks, and an approved assignment request.",
        "success": "The intended parent task has the correct owner and due date, the change is documented, and all incomplete subtasks remain open.",
        "task": "Assign the customer’s deployment checklist to the approved owner and add the agreed due date without closing its unfinished subtasks."
      },
      "summary": "Manage tasks and comments within workspace hierarchies, using list-specific statuses, custom fields, and assigned owners.",
      "workflows": ["Route a task to the correct owner within its existing list.", "Set a documented due date and explain the change in a comment.", "Inspect subtasks before reporting that a customer deliverable is complete."]
    }
  }, {
    "category": "HR & Ops",
    "domain": "trello.com",
    "id": "trello",
    "name": "Trello",
    "profile": {
      "apiName": "Trello REST API",
      "apiStyle": "REST / JSON",
      "auth": "Supported OAuth access token or API key and authorized user token.",
      "id": "trello",
      "overview": "Trello's REST API exposes boards, lists, cards, and their associated actions. Cards combine labels, members, dates, and checklists. Moving a card changes its workflow position, while comments and checklist updates capture the supporting work and coordination.",
      "referenceUrl": "https://developer.atlassian.com/cloud/trello/rest/api-group-actions/",
      "resources": ["Boards", "Lists", "Cards", "Checklists", "Labels", "Members", "Actions"],
      "scenario": {
        "seed": "Seed an operations board, investigation and review lists, two customer cards, an incomplete verification checklist, and a later successful verification comment.",
        "success": "The correct card moves to review with the evidence comment, existing checklist items remain intact, and the unrelated customer's card is unchanged.",
        "task": "Move the customer’s verified export-fix card into the review list, retain its checklist history, and add a comment citing the confirmation."
      },
      "summary": "Organize cards across boards and lists, maintain checklists, and keep collaboration history attached to each piece of work.",
      "workflows": ["Move a card to the list named in an approved handoff.", "Assign a member and add a checklist for a recurring process.", "Read card comments before changing an operational status."]
    }
  }, {
    "category": "HR & Ops",
    "domain": "airtable.com",
    "id": "airtable",
    "name": "Airtable",
    "profile": {
      "apiName": "Airtable Web API",
      "apiStyle": "REST / JSON",
      "auth": "Scoped personal access token or OAuth 2.0, with access to the selected bases.",
      "id": "airtable",
      "overview": "Airtable's Web API exposes base records alongside schema and webhook capabilities. Tables may contain typed fields, linked records, attachments, and computed values. Integrations should inspect field definitions and use stable record identifiers when matching or updating business data.",
      "referenceUrl": "https://airtable.com/developers/web/api/introduction",
      "resources": ["Bases", "Tables", "Fields", "Records", "Views", "Webhooks", "Attachments"],
      "scenario": {
        "seed": "Include customer and invoice tables, linked records, duplicate invoice identifiers, a legitimate second invoice, calculated totals, and a canonical-record instruction.",
        "success": "The canonical invoice remains linked correctly, the duplicate is handled as instructed, and the legitimate invoice and calculated fields are preserved.",
        "task": "Reconcile a duplicated the customer invoice in the billing base, retaining its linked customer and the finance team's approved canonical record."
      },
      "summary": "Read and update structured records across bases and tables, preserving linked relationships and each field's schema.",
      "workflows": ["Update an order record while preserving its linked customer reference.", "Find duplicate operational records using a stable external identifier.", "Append approved intake data without replacing computed fields."]
    }
  }, {
    "category": "Marketing",
    "domain": "mailchimp.com",
    "id": "mailchimp",
    "name": "Mailchimp",
    "profile": {
      "apiName": "Mailchimp Marketing API v3",
      "apiStyle": "REST / JSON",
      "auth": "API key or OAuth 2.0 token through supported Basic or bearer authentication.",
      "id": "mailchimp",
      "overview": "Mailchimp's Marketing API connects audience data with campaigns and their reporting. Member status, tags, and segmentation affect who receives communications. Authentication is tied to an authorized account user, and requests must use the account's correct data-center endpoint.",
      "referenceUrl": "https://mailchimp.com/developer/marketing/docs/fundamentals/",
      "resources": ["Audiences", "Members", "Tags", "Segments", "Campaigns", "Templates", "Reports"],
      "scenario": {
        "seed": "Seed an audience with subscribed and unsubscribed contacts, customer tags, duplicate-looking names, a renewal eligibility list, and a draft campaign.",
        "success": "Only the intended eligible contacts receive the review tag, existing subscription states remain unchanged, and the campaign is not sent.",
        "task": "Tag the customer’s eligible renewal contacts for review while preserving unsubscribed members and leaving the renewal campaign as a draft."
      },
      "summary": "Maintain audience records, segments, campaign drafts, and subscription context for coordinated customer communications and reporting.",
      "workflows": ["Update a member's operational tags without changing their subscription consent.", "Prepare a campaign draft for a documented audience segment.", "Read campaign reports to investigate a delivery or engagement question."]
    }
  }, {
    "category": "Marketing",
    "domain": "klaviyo.com",
    "id": "klaviyo",
    "name": "Klaviyo",
    "profile": {
      "apiName": "Klaviyo API",
      "apiStyle": "REST / JSON:API-style resources",
      "auth": "Scoped private API key or OAuth for server APIs; public keys serve client APIs.",
      "id": "klaviyo",
      "overview": "Klaviyo's APIs expose customer data and marketing resources with scoped authentication. Profiles can belong to lists or calculated segments, while events describe behavior. Subscription state is a separate concern, so changing profile data or membership should not silently change consent.",
      "referenceUrl": "https://developers.klaviyo.com/en/v2026-04-15/docs/authenticate_",
      "resources": ["Profiles", "Events", "Metrics", "Lists", "Segments", "Campaigns", "Templates"],
      "scenario": {
        "seed": "Provide profiles, customer identifiers, an account-renewal list, subscription states, and a similarly named contact belonging to another company.",
        "success": "The report includes only the intended contacts, accurately distinguishes membership from consent, cites exclusions, and makes no subscription changes.",
        "task": "Prepare a renewal-review audience for the customer’s account contacts, explaining why each contact is included or excluded without changing subscription consent."
      },
      "summary": "Connect customer profiles, behavioral events, lists, and segments while keeping subscription consent distinct from audience membership.",
      "workflows": ["Update customer profile properties from a verified account change.", "Inspect list membership and subscription state before preparing an audience.", "Record a documented event with the correct customer identity."]
    }
  }, {
    "category": "Marketing",
    "domain": "customer.io",
    "id": "customer_io",
    "name": "Customer.io",
    "profile": {
      "apiName": "Customer.io Track and App APIs",
      "apiStyle": "REST / JSON",
      "auth": "Track: HTTP Basic with Site ID and API key. App: scoped bearer token.",
      "id": "customer_io",
      "overview": "Customer.io separates APIs for ingesting customer activity from APIs for operating on application data. The Track API handles people and events; the App API supports other workspace operations. Their authentication schemes differ, and both require the correct regional endpoint.",
      "referenceUrl": "https://docs.customer.io/integrations/api/track/",
      "resources": ["People", "Events", "Objects", "Relationships", "Segments", "Campaigns", "Transactional messages"],
      "scenario": {
        "seed": "Include customer profiles, stable identifiers, setup evidence, an existing completion event, outdated attributes, and another customer with a similar email address.",
        "success": "Only the intended profile receives the supported attribute correction, the existing event is not duplicated, and no explicit message-send operation occurs.",
        "task": "Correct a synthetic customer's onboarding attribute after verifying the completed setup milestone, without replaying events or triggering a duplicate notification."
      },
      "summary": "Update customer attributes and behavioral events, then inspect the messaging context used by Customer.io journeys and transactional workflows.",
      "workflows": ["Update an onboarding attribute after a verified customer milestone.", "Record an event against the intended customer identifier.", "Inspect campaign or message context before preparing a support explanation."]
    }
  }, {
    "category": "Marketing",
    "domain": "braze.com",
    "id": "braze",
    "name": "Braze",
    "profile": {
      "apiName": "Braze REST API",
      "apiStyle": "REST / JSON",
      "auth": "Workspace REST API key with permissions for the requested endpoints.",
      "id": "braze",
      "overview": "Braze's REST API supports user updates, messaging operations, exports, and campaign inspection. Each workspace has its own API keys and service endpoint. API permissions are assigned per endpoint, while user identifiers connect incoming attributes and events to the correct profile.",
      "referenceUrl": "https://www.braze.com/docs/api/basics",
      "resources": ["User profiles", "Custom events", "Purchases", "Campaigns", "Canvases", "Subscription groups", "Catalogs"],
      "scenario": {
        "seed": "Seed external user identifiers, two similar profiles, an approved account-tier change, subscription-group memberships, and an existing scheduled campaign.",
        "success": "The correct profile has the approved support tier, subscription memberships remain unchanged, and the scheduled campaign is neither duplicated nor modified.",
        "task": "Correct the customer’s support-tier attribute on the intended customer profile, preserving subscription settings and explaining the verified account evidence."
      },
      "summary": "Manage customer attributes, events, subscriptions, and campaign context across a workspace's configured messaging channels and APIs.",
      "workflows": ["Correct a customer attribute after checking its external identifier.", "Inspect campaign details and scheduled sends before an operational handoff.", "Review subscription-group state before preparing a communication audience."]
    }
  }, {
    "category": "Marketing",
    "domain": "iterable.com",
    "id": "iterable",
    "name": "Iterable",
    "profile": {
      "apiName": "Iterable API",
      "apiStyle": "REST / JSON",
      "auth": "Project API key in an Api-Key header; permissions depend on key type.",
      "id": "iterable",
      "overview": "Iterable's REST API operates within a specific project and data center. API-key types and permissions determine which profile, event, and messaging actions are available. User identity and existing activity should be checked before recording events or changing campaign-related data.",
      "referenceUrl": "https://support.iterable.com/hc/en-us/articles/41044692130196-Getting-Started-with-Iterable-s-API",
      "resources": ["Users", "Events", "Lists", "Templates", "Campaigns", "Journeys", "Catalog items"],
      "scenario": {
        "seed": "Include a target user, another profile with a similar email, current plan fields, an approval record, and existing subscription preferences.",
        "success": "The intended user's plan reflects the approval, its identity and messaging preferences are preserved, and no campaign or journey is explicitly triggered.",
        "task": "Update a synthetic customer's plan attribute after an approved account change, retaining their existing profile identifiers and messaging preferences."
      },
      "summary": "Connect customer profiles, events, lists, templates, and campaign data for coordinated lifecycle messaging and operational analysis.",
      "workflows": ["Update a user profile from verified account information.", "Record a milestone event after checking for an existing event.", "Inspect a campaign and its template before preparing a messaging handoff."]
    }
  }, {
    "category": "Marketing",
    "domain": "typeform.com",
    "id": "typeform",
    "name": "Typeform",
    "profile": {
      "apiName": "Typeform Create, Responses, and Webhooks APIs",
      "apiStyle": "REST / JSON",
      "auth": "Personal access token or OAuth 2.0 token with the required scopes.",
      "id": "typeform",
      "overview": "Typeform provides separate APIs for form creation, response retrieval, and webhook configuration. Forms define question references and answer structures, while responses capture submissions. Stable field identifiers help integrations interpret answers accurately even when visible question wording changes.",
      "referenceUrl": "https://www.typeform.com/developers/get-started/",
      "resources": ["Forms", "Fields", "Responses", "Workspaces", "Themes", "Images", "Webhooks"],
      "scenario": {
        "seed": "Seed an intake form with stable field references, a completed the customer response, a partial response, and a later wording change to one question.",
        "success": "The summary maps answers to the correct questions, uses the completed response, identifies missing information, and does not invent unsubmitted answers.",
        "task": "Summarize the customer’s completed support-intake response, distinguishing its requested export format from similarly worded questions and incomplete submissions."
      },
      "summary": "Build forms, inspect questions and responses, and connect submitted answers to downstream workflows through APIs and webhooks.",
      "workflows": ["Read intake responses and map answers using stable field references.", "Create a form from an approved set of questions.", "Configure a webhook for the intended form and receiving application."]
    }
  }, {
    "category": "Marketing",
    "domain": "surveymonkey.com",
    "id": "surveymonkey",
    "name": "SurveyMonkey",
    "profile": {
      "apiName": "SurveyMonkey API v3",
      "apiStyle": "REST / JSON",
      "auth": "OAuth 2.0 bearer access token with survey and response scopes.",
      "id": "surveymonkey",
      "overview": "SurveyMonkey's REST API exposes surveys and their collection workflows. Pages and questions define the questionnaire, collectors define distribution, and responses contain submitted answers. OAuth scopes and account capabilities determine which survey data and operations an integration can access.",
      "referenceUrl": "https://api.surveymonkey.com/v3/docs",
      "resources": ["Surveys", "Pages", "Questions", "Collectors", "Responses", "Contacts", "Contact lists"],
      "scenario": {
        "seed": "Include two surveys, multiple collectors, completed and partial responses, coded question identifiers, and an explicit list of questions to summarize.",
        "success": "The report uses the correct survey and collector, maps answers accurately, excludes incomplete submissions as instructed, and avoids unsupported conclusions.",
        "task": "Summarize the customer’s post-incident survey responses from the designated collector, separating completed submissions from incomplete feedback and unrelated campaigns."
      },
      "summary": "Manage survey structure, collectors, and submitted responses, preserving the relationship between each questionnaire and its distribution channel.",
      "workflows": ["Read completed responses for a specific survey and collector.", "Prepare a survey from an approved question structure.", "Inspect collector settings before producing a response-analysis handoff."]
    }
  }, {
    "category": "Security & Identity",
    "domain": "okta.com",
    "id": "okta",
    "name": "Okta",
    "profile": {
      "apiName": "Okta Management APIs",
      "apiStyle": "REST with JSON and cursor pagination",
      "auth": "Scoped OAuth 2.0 access tokens or an API token using the SSWS scheme.",
      "id": "okta",
      "overview": "Okta exposes organization-level identity and access management through its management APIs. Users, groups, applications, and policies have distinct lifecycles. System Log events provide evidence for investigating access changes and checking that an administrative action affected the intended identity.",
      "referenceUrl": "https://developer.okta.com/docs/reference/core-okta-api/",
      "resources": ["Users", "Groups", "Applications", "Application assignments", "Policies", "System Log events"],
      "scenario": {
        "seed": "Seed two employees with similar names, department groups, application assignments, and an approval identifying the correct employee.",
        "success": "Only the approved identity gains the required group membership; unrelated access stays unchanged and the result cites the user ID.",
        "task": "Resolve an employee’s missing finance application access using the approved department assignment, then verify the result."
      },
      "summary": "Manage workforce identities, application assignments, group membership, and access decisions with a record of administrative activity.",
      "workflows": ["Compare a user’s current application assignments with their department’s access requirements.", "Investigate a failed access request using identity status and System Log evidence.", "Apply an approved group membership change and verify the resulting assignment."]
    }
  }, {
    "category": "Security & Identity",
    "domain": "auth0.com",
    "id": "auth0",
    "name": "Auth0",
    "profile": {
      "apiName": "Auth0 Management API v2",
      "apiStyle": "REST with JSON",
      "auth": "Management API bearer access token with the required audience and scopes.",
      "id": "auth0",
      "overview": "Auth0 separates user authentication from tenant administration. Its Management API handles user profiles, applications, connections, organizations, and access configuration. Management tokens carry permissions for specific administrative operations; an application login token is not a substitute for a Management API token.",
      "referenceUrl": "https://auth0.com/docs/api/management/v2",
      "resources": ["Users", "Applications", "Connections", "Organizations", "Roles", "Permissions", "Logs"],
      "scenario": {
        "seed": "Seed matching email addresses in different connections, two organizations, a missing role assignment, and recent failed login events.",
        "success": "The agent identifies the right connection and organization, explains the missing role, and avoids modifying the unrelated identity.",
        "task": "Investigate why a customer cannot access their organization and propose the smallest authorized membership or role correction."
      },
      "summary": "Inspect customer identities, application connections, organization membership, and role assignments across a tenant’s authentication configuration.",
      "workflows": ["Find the correct customer identity across database and federated connections.", "Review organization membership and role assignments before changing application access.", "Investigate login failures using user details and authentication log records."]
    }
  }, {
    "category": "Security & Identity",
    "domain": "1password.com",
    "id": "1password",
    "name": "1Password",
    "profile": {
      "apiName": "1Password Connect Server API",
      "apiStyle": "REST with JSON through a deployed Connect server",
      "auth": "Connect bearer access token with access to the required vaults.",
      "id": "1password",
      "overview": "1Password Connect provides a REST interface to vaults and items from infrastructure you control. Item fields, sections, and attached files retain their structure. The Connect access token determines which vaults the integration can use, making vault selection part of every operation.",
      "referenceUrl": "https://www.1password.dev/connect/api-reference",
      "resources": ["Vaults", "Items", "Item fields", "Item sections", "Files", "API activity"],
      "scenario": {
        "seed": "Seed separate staging and production vaults with similarly titled items, field identifiers, and an approved staging-only change.",
        "success": "Only the intended staging metadata changes; secret values remain absent from the agent’s explanation and the production item is unchanged.",
        "task": "Update the staging application’s credential metadata without changing the production item or exposing secret values in the response."
      },
      "summary": "Work with vaults, secret items, and attached files through a private Connect server with explicit vault access.",
      "workflows": ["Locate an application credential in the designated vault using its item metadata.", "Update a selected item’s fields while preserving unrelated sections and values.", "Review API activity to trace which item operations an integration performed."]
    }
  }, {
    "category": "Security & Identity",
    "domain": "vanta.com",
    "id": "vanta",
    "name": "Vanta",
    "profile": {
      "apiName": "Vanta Manage API",
      "apiStyle": "REST with JSON",
      "auth": "OAuth 2.0 client credentials exchanged for a scoped bearer access token.",
      "id": "vanta",
      "overview": "Vanta’s APIs expose compliance program data and workflows for collecting evidence, managing documents, and investigating failed tests. Controls, documents, and resource-level results provide different evidence. Updating a document does not by itself demonstrate that every associated control has passed.",
      "referenceUrl": "https://developer.vanta.com/",
      "resources": ["Controls", "Tests", "Documents", "Document uploads", "People", "Security tasks"],
      "scenario": {
        "seed": "Seed an access-review document, two similarly named controls, an approved evidence file, and a failed test awaiting separate remediation.",
        "success": "The correct document receives the evidence, the unrelated control is unchanged, and the agent reports the unresolved test separately.",
        "task": "Prepare the requested access-review evidence for an audit and identify outstanding work before submitting the document for review."
      },
      "summary": "Connect compliance controls, evidence documents, personnel, and test results to the operational work needed for an audit.",
      "workflows": ["Trace a failed test to the resources responsible for its result.", "Collect a requested evidence file and attach it to the correct compliance document.", "Review control ownership and outstanding document work before an audit checkpoint."]
    }
  }, {
    "category": "Security & Identity",
    "domain": "drata.com",
    "id": "drata",
    "name": "Drata",
    "profile": {
      "apiName": "Drata Public API",
      "apiStyle": "Versioned REST with JSON",
      "auth": "OAuth 2.0 client credentials or a scoped API key, as configured for the integration.",
      "id": "drata",
      "overview": "Drata exposes compliance data through its public API with permissions scoped to the requested resources and operations. Control mappings and evidence records help connect audit work to its source. Resource access should follow the API version and permissions configured for the integration.",
      "referenceUrl": "https://developers.drata.com/",
      "resources": ["Controls", "Evidence", "Personnel", "Risks", "Vendors"],
      "scenario": {
        "seed": "Seed related controls, a current review file, an outdated evidence record, and owner details for the outstanding work.",
        "success": "The agent selects the correct control, distinguishes current evidence from outdated records, and assigns a specific follow-up to the appropriate owner.",
        "task": "Review evidence for an access control and identify which missing or outdated records prevent the audit package from being complete."
      },
      "summary": "Review controls, evidence, personnel, and risk records to coordinate compliance work and track its supporting documentation.",
      "workflows": ["Identify controls whose supporting evidence needs attention.", "Associate an approved evidence record with the intended control.", "Prepare a risk review using the current risk details and responsible owners."]
    }
  }, {
    "category": "Design & Web",
    "domain": "figma.com",
    "id": "figma",
    "name": "Figma",
    "profile": {
      "apiName": "Figma REST API",
      "apiStyle": "REST with JSON; webhooks",
      "auth": "Scoped access tokens or OAuth 2.0 tokens.",
      "id": "figma",
      "overview": "Figma’s REST API exposes file structure as nodes with properties and supports resources such as images, versions, components, and comments. File inspection and review workflows can use these stable references. General canvas editing is a separate concern from retrieving file data.",
      "referenceUrl": "https://developers.figma.com/docs/rest-api/",
      "resources": ["Files", "Nodes", "Images", "File versions", "Components", "Styles", "Comments"],
      "scenario": {
        "seed": "Seed two file versions, an error-state frame, a component reference, and an existing comment discussing the previous iteration.",
        "success": "The comment references the correct frame and current version, explains the missing guidance, and does not repeat the existing feedback.",
        "task": "Review the invoice error state and leave a precise comment about the missing retry guidance in the approved design file."
      },
      "summary": "Read design files, inspect components and styles, and connect review comments to the exact interface elements under discussion.",
      "workflows": ["Inspect the relevant file nodes before explaining a design implementation requirement.", "Compare design versions and summarize changes that affect an engineering task.", "Leave a review comment tied to the correct file and design context."]
    }
  }, {
    "category": "Design & Web",
    "domain": "miro.com",
    "id": "miro",
    "name": "Miro",
    "profile": {
      "apiName": "Miro REST API v2",
      "apiStyle": "REST with JSON",
      "auth": "OAuth 2.0 authorization code flow with scopes for the required board actions.",
      "id": "miro",
      "overview": "Miro’s REST API works with boards and their content on behalf of an authorized user. Board items have their own identifiers and spatial context. OAuth scopes determine permitted actions, so reading a board and modifying its content require the appropriate access.",
      "referenceUrl": "https://developers.miro.com/reference/overview",
      "resources": ["Boards", "Frames", "Sticky notes", "Shapes", "Connectors", "Board members"],
      "scenario": {
        "seed": "Seed an incident frame with duplicate observations, owner names, existing action notes, and a separate frame from an unrelated workshop.",
        "success": "New actions reflect distinct problems, carry the correct owners, avoid duplicates, and remain inside the designated frame.",
        "task": "Turn the billing incident retrospective into three clear follow-up actions in the designated action frame."
      },
      "summary": "Organize collaborative boards with frames, sticky notes, shapes, and connectors while preserving the relationships between ideas.",
      "workflows": ["Read a workshop frame and group related observations into themes.", "Create follow-up sticky notes with clear owners and preserve their board context.", "Trace connected items before summarizing a process or decision flow."]
    }
  }, {
    "category": "Design & Web",
    "domain": "canva.com",
    "id": "canva",
    "name": "Canva",
    "profile": {
      "apiName": "Canva Connect APIs",
      "apiStyle": "REST with JSON and asynchronous jobs",
      "auth": "OAuth 2.0 authorization code flow with PKCE and scoped access tokens.",
      "id": "canva",
      "overview": "Canva Connect APIs let an integration exchange creative assets and designs with Canva. Imports and exports can involve asynchronous jobs, while folders and design identifiers preserve context. Access is granted on a user’s behalf and depends on the integration’s scopes.",
      "referenceUrl": "https://www.canva.dev/docs/connect/",
      "resources": ["Assets", "Designs", "Folders", "Design imports", "Export jobs", "Comments"],
      "scenario": {
        "seed": "Seed draft and approved designs with similar names, an explicit approval reference, and export responses that move from pending to complete.",
        "success": "The approved design is selected, the export uses the requested format, and the agent waits for a completed result before reporting success.",
        "task": "Export the approved invoice-resolution explainer as the requested format and return a completed download rather than a pending job."
      },
      "summary": "Coordinate assets, designs, folders, and export jobs to turn approved creative materials into the requested deliverables.",
      "workflows": ["Upload an approved image asset and organize it in the intended folder.", "Find the correct design before requesting its export.", "Track an export job to completion and return the resulting deliverable."]
    }
  }, {
    "category": "Design & Web",
    "domain": "webflow.com",
    "id": "webflow",
    "name": "Webflow",
    "profile": {
      "apiName": "Webflow Data API v2",
      "apiStyle": "REST with JSON; webhooks",
      "auth": "Scoped site tokens or OAuth access tokens; workspace tokens support read-only access.",
      "id": "webflow",
      "overview": "Webflow’s Data API exposes site data and content workflows outside the visual Designer. CMS collections define the fields used by their items, and staged changes have a publishing lifecycle. Site identity, locale, and item status matter when preparing content for release.",
      "referenceUrl": "https://developers.webflow.com/data/reference/rest-introduction",
      "resources": ["Sites", "Pages", "CMS collections", "Collection items", "Assets", "Locales"],
      "scenario": {
        "seed": "Seed English and French FAQ items, a collection schema, an approved correction, and an unrelated draft awaiting separate approval.",
        "success": "Only the designated English item receives the correction and publishing action; the French content and unrelated draft remain unchanged.",
        "task": "Correct an approved billing FAQ entry in the English locale and publish only that requested content change."
      },
      "summary": "Manage site content, CMS collections, assets, and publishing steps with a clear distinction between staged and live changes.",
      "workflows": ["Inspect a collection’s field schema before creating or updating an item.", "Prepare content changes in the correct site and locale.", "Publish approved content and verify the live result using the item’s status."]
    }
  }, {
    "category": "Design & Web",
    "domain": "wordpress.com",
    "id": "wordpress",
    "name": "WordPress",
    "profile": {
      "apiName": "WordPress REST API",
      "apiStyle": "REST with JSON",
      "auth": "Application Passwords with HTTP Basic over HTTPS; cookie and nonce authentication within WordPress.",
      "id": "wordpress",
      "overview": "WordPress exposes site content through its REST API, with permissions inherited from the authenticated account. Posts and pages include publication state, authorship, and taxonomy relationships. Media and revision references let an agent work with content without treating rendered HTML as the source of truth.",
      "referenceUrl": "https://developer.wordpress.org/rest-api/",
      "resources": ["Posts", "Pages", "Media", "Categories", "Tags", "Users", "Revisions"],
      "scenario": {
        "seed": "Seed a published article, a draft with a similar title, category IDs, revision history, and the exact approved text change.",
        "success": "The published article contains the approved correction, keeps its taxonomy and authorship, and the companion draft remains unpublished.",
        "task": "Update the billing troubleshooting article with an approved explanation while keeping an unapproved companion post in draft."
      },
      "summary": "Create and review structured website content across posts, pages, media, taxonomies, and publication states.",
      "workflows": ["Find an existing article and inspect its current publication state before editing.", "Attach the intended media and taxonomy terms to a draft.", "Compare revisions and publish only content with the required approval."]
    }
  }, {
    "category": "Design & Web",
    "domain": "contentful.com",
    "id": "contentful",
    "name": "Contentful",
    "profile": {
      "apiName": "Contentful Content Management API",
      "apiStyle": "REST with JSON and version-aware updates",
      "auth": "Content management personal access token or OAuth access token.",
      "id": "contentful",
      "overview": "Contentful’s Content Management API manages content in spaces and environments. Content types define entry fields, locales carry translated values, and version numbers protect updates from conflicts. Delivery APIs serve published content, while management operations prepare, update, and publish it.",
      "referenceUrl": "https://www.contentful.com/developers/docs/references/content-management-api/overview/",
      "resources": ["Spaces", "Environments", "Content types", "Entries", "Assets", "Locales"],
      "scenario": {
        "seed": "Seed staging and production environments, localized notice entries, a linked asset, and a version conflict on the first update attempt.",
        "success": "The agent refreshes the conflicted entry, preserves unrelated changes and locales, and confines its update to the designated staging entry.",
        "task": "Apply the approved English billing notice in the staging environment without overwriting a concurrent edit or publishing production content."
      },
      "summary": "Maintain structured entries and assets across content models, locales, environments, and publishing workflows.",
      "workflows": ["Read the content model and current entry version before preparing a field update.", "Resolve linked entries and assets when assembling a content change.", "Publish an approved entry in the intended environment and verify its state."]
    }
  }, {
    "category": "Design & Web",
    "domain": "loom.com",
    "id": "loom",
    "name": "Loom",
    "profile": {
      "apiName": "Loom recordSDK Standard",
      "apiStyle": "Browser JavaScript SDK with recording and upload events",
      "auth": "Public application ID for the configured domain, with the SDK’s user sign-in flow.",
      "id": "loom",
      "overview": "Loom’s documented recordSDK provides browser recording controls and event callbacks. The Standard SDK is initialized with a public application ID and checks browser support before recording. Upload completion and the user’s insertion action are separate events in the integration flow.",
      "referenceUrl": "https://dev.loom.com/docs/record-sdk/details/api",
      "resources": ["Recorder instances", "Recording sessions", "Video metadata", "Upload events", "Insert events"],
      "scenario": {
        "seed": "Seed a target investigation, recorder events for a canceled capture, and a second recording with completed upload and insertion events.",
        "success": "Only the selected, completed recording is attached to the correct task; the canceled capture produces no attachment or false success message.",
        "task": "Attach a recorded reproduction of the invoice error to its investigation task after the recording has uploaded and been selected."
      },
      "summary": "Capture a recording in an application and attach the resulting video through the recorder’s completion and insertion events.",
      "workflows": ["Check browser recording support before offering the capture action.", "Wait for the completed upload before attaching returned video metadata.", "Use the selected video’s insertion event to associate it with the intended task."]
    }
  }],
  "version": 1
};

export const TwinProfile = ({name, category, profile}) => <div className="chronicle-catalog-profile">
    <div>
      <p className="chronicle-catalog-category">{category}</p>
      <p className="chronicle-catalog-overview">{profile.overview}</p>
    </div>
    <div className="chronicle-catalog-section">
      <h3>Key resources</h3>
      <ul className="chronicle-catalog-resources" aria-label={`${name} resources`}>
        {profile.resources.map(resource => <li key={resource}>{resource}</li>)}
      </ul>
    </div>
    <div className="chronicle-catalog-section">
      <h3>Workflows to explore</h3>
      <ul className="chronicle-catalog-workflows">
        {profile.workflows.map(workflow => <li key={workflow}>{workflow}</li>)}
      </ul>
    </div>
    <div className="chronicle-catalog-section">
      <h3>Vendor API</h3>
      <dl className="chronicle-catalog-api">
        <div><dt>API</dt><dd>{profile.apiName}</dd></div>
        <div><dt>Interface</dt><dd>{profile.apiStyle}</dd></div>
        <div><dt>Authentication</dt><dd>{profile.auth}</dd></div>
      </dl>
      <a href={profile.referenceUrl} target="_blank" rel="noopener noreferrer">
        {name} developer reference<span aria-hidden="true"> ↗</span>
      </a>
    </div>
    <div className="chronicle-catalog-scenario">
      <h3>Example evaluation</h3>
      <dl>
        <div><dt>Agent task</dt><dd>{profile.scenario.task}</dd></div>
        <div><dt>Seed data</dt><dd>{profile.scenario.seed}</dd></div>
        <div><dt>Success criteria</dt><dd>{profile.scenario.success}</dd></div>
      </dl>
    </div>
  </div>;

export const TwinCatalog = ({twins}) => {
  const [query, setQuery] = useState("");
  const [category, setCategory] = useState("");
  const [creation, setCreation] = useState("");
  const [page, setPage] = useState(1);
  const [pageInput, setPageInput] = useState("1");
  const [failedLogos, setFailedLogos] = useState({});
  const searchRef = useRef(null);
  const resultsRef = useRef(null);
  const pageSize = 12;
  const index = useMemo(() => {
    const normalize = value => value.toLocaleLowerCase("en").normalize("NFKD").replace(/[\u0300-\u036f]/g, "").replace(/[_/\-]+/g, " ");
    return twins.map(twin => ({
      ...twin,
      search: normalize([twin.id, twin.name, twin.category, twin.summary, twin.api, ...twin.aliases || [], ...twin.operations || [], twin.profile?.summary, twin.profile?.overview, twin.profile?.apiName, twin.profile?.apiStyle, ...twin.profile?.resources || [], ...twin.profile?.workflows || [], twin.profile?.scenario?.task].join(" "))
    })).sort((a, b) => a.name.localeCompare(b.name, "en") || a.id.localeCompare(b.id, "en"));
  }, [twins]);
  const categories = useMemo(() => [...new Set(index.map(twin => twin.category))].sort(), [index]);
  const results = useMemo(() => {
    const terms = query.trim().toLocaleLowerCase("en").normalize("NFKD").replace(/[\u0300-\u036f]/g, "").replace(/[_/\-]+/g, " ").split(/\s+/).filter(Boolean);
    return index.filter(twin => (!category || twin.category === category) && (!creation || (creation === "worldsmith" ? twin.worldsmith === true : twin.worldsmith === false)) && terms.every(term => twin.search.includes(term)));
  }, [index, query, category, creation]);
  const pageCount = Math.max(1, Math.ceil(results.length / pageSize));
  const currentPage = Math.min(page, pageCount);
  const start = (currentPage - 1) * pageSize;
  const visible = results.slice(start, start + pageSize);
  const filtered = Boolean(query || category || creation);
  const resetPage = () => {
    setPage(1);
    setPageInput("1");
  };
  const resetFilters = () => {
    setQuery("");
    setCategory("");
    setCreation("");
    resetPage();
    searchRef.current?.focus();
  };
  const goToPage = nextPage => {
    const next = Math.max(1, Math.min(pageCount, nextPage));
    setPage(next);
    setPageInput(String(next));
    resultsRef.current?.focus({
      preventScroll: true
    });
    resultsRef.current?.scrollIntoView({
      block: "start"
    });
  };
  return <div className="chronicle-catalog not-prose" aria-label="Twin catalog" role="region">
      <div className="chronicle-catalog-controls">
        <label className="chronicle-catalog-search">
          <span>Search twins</span>
          <input ref={searchRef} type="search" value={query} placeholder="Search services, resources, or workflows…" onChange={event => {
    setQuery(event.target.value);
    resetPage();
  }} aria-controls="twin-catalog-results" autoComplete="off" />
        </label>
        <div className="chronicle-catalog-filters">
          <div className="chronicle-catalog-field">
            <label htmlFor="twin-catalog-category">Category</label>
            <select id="twin-catalog-category" value={category} onChange={event => {
    setCategory(event.target.value);
    resetPage();
  }} aria-controls="twin-catalog-results">
              <option value="">All categories</option>
              {categories.map(item => <option key={item} value={item}>{item}</option>)}
            </select>
          </div>
          <div className="chronicle-catalog-field">
            <label htmlFor="twin-catalog-creation">Available in</label>
            <select id="twin-catalog-creation" value={creation} onChange={event => {
    setCreation(event.target.value);
    resetPage();
  }} aria-controls="twin-catalog-results">
              <option value="">All twins</option>
              <option value="worldsmith">Worldsmith</option>
              <option value="standalone">Standalone only</option>
            </select>
          </div>
        </div>
      </div>

      <div className="chronicle-catalog-result-bar" ref={resultsRef} tabIndex={-1}>
        <p role="status" aria-live="polite" aria-atomic="true">
          {`${results.length.toLocaleString()}${filtered ? ` of ${index.length.toLocaleString()}` : ""} ${(!filtered ? results.length : index.length) === 1 ? "twin" : "twins"}`}
        </p>
        <div>
          {filtered && <button type="button" onClick={resetFilters}>Clear filters</button>}
          <span className="chronicle-catalog-sort">Name A–Z</span>
        </div>
      </div>

      <div id="twin-catalog-results">
        {results.length === 0 ? <div className="chronicle-catalog-empty">
            <p>{filtered ? "No twins match these filters." : "No twins are listed yet."}</p>
            <p>{filtered ? "Try a service name, a broader capability, or another category." : "Check back as more services are added."}</p>
            {filtered && <button type="button" onClick={resetFilters}>Clear filters</button>}
          </div> : <ul className="chronicle-catalog-list" aria-label="Service twin catalog">
            {visible.map(twin => {
    const hasDetails = Boolean(twin.profile || twin.api || twin.operations?.length || twin.docsUrl);
    const hasRuntime = typeof twin.worldsmith === "boolean";
    const row = <span className="chronicle-catalog-row">
                    <span className="chronicle-catalog-logo" aria-hidden="true">
                      {failedLogos[twin.domain] ? <span>{twin.name.slice(0, 1)}</span> : <img src={`https://img.logo.dev/${twin.domain}?token=pk_KUdn1PMmSYCZmOzzW8W04A&size=96&format=webp&fallback=404`} alt="" width="28" height="28" loading="lazy" decoding="async" onError={() => setFailedLogos(previous => ({
      ...previous,
      [twin.domain]: true
    }))} />}
                    </span>
                    <span className="chronicle-catalog-copy">
                      <span className="chronicle-catalog-name">{twin.name}</span>
                      <span className="chronicle-catalog-description">{twin.profile?.summary || twin.summary || twin.category}</span>
                    </span>
                    {hasRuntime && <span className="chronicle-catalog-availability" data-worldsmith={twin.worldsmith}>
                      {twin.worldsmith ? "Worldsmith" : "Standalone"}
                    </span>}
                    {hasDetails && <span className="chronicle-catalog-chevron" aria-hidden="true">+</span>}
                  </span>;
    return <li key={twin.id} data-twin-id={twin.id}>
                {hasDetails ? <details className="chronicle-catalog-entry">
                  <summary>{row}</summary>
                  <div className="chronicle-catalog-detail">
                    {twin.profile && <TwinProfile name={twin.name} category={twin.category} profile={twin.profile} />}
                    {(hasRuntime || twin.api || twin.operations?.length) && <div className="chronicle-catalog-runtime">
                    <h3>Twin connection</h3>
                    <dl>
                      {hasRuntime && <div><dt>Service ID</dt><dd><code>{twin.id}</code></dd></div>}
                      <div><dt>Category</dt><dd>{twin.category}</dd></div>
                      {twin.api && <div><dt>API</dt><dd>{twin.api}</dd></div>}
                      {twin.operations?.length > 0 && <div><dt>Capabilities</dt><dd>{twin.operations.join(" · ")}</dd></div>}
                      {hasRuntime && <div><dt>Create with</dt><dd>{twin.worldsmith ? "Worldsmith or a standalone twin" : "A standalone twin"}</dd></div>}
                    </dl>
                    </div>}
                    {(twin.docsUrl || hasRuntime) && <a href={twin.docsUrl || "/api-reference/twins#connect-an-agent-to-a-twin"}>
                      {twin.docsUrl ? `Read the ${twin.name} reference` : "Connect your agent"}<span aria-hidden="true"> ↗</span>
                    </a>}
                  </div>
                </details> : <div className="chronicle-catalog-static">{row}</div>}
              </li>;
  })}
          </ul>}
      </div>

      {results.length > 0 && <div className="chronicle-catalog-footer">
          <p>Showing {(start + 1).toLocaleString()}–{Math.min(start + pageSize, results.length).toLocaleString()} of {results.length.toLocaleString()}</p>
          {pageCount > 1 && <nav aria-label="Twin catalog pages">
              <button type="button" disabled={currentPage === 1} onClick={() => goToPage(currentPage - 1)}>Previous</button>
              <form onSubmit={event => {
    event.preventDefault();
    const next = Number(pageInput);
    if (Number.isInteger(next) && next >= 1 && next <= pageCount) goToPage(next);
  }}>
                <label>Page <input type="number" min="1" max={pageCount} step="1" required value={pageInput} onChange={event => setPageInput(event.target.value)} /></label>
                <span>of {pageCount.toLocaleString()}</span>
                <button type="submit">Go</button>
              </form>
              <button type="button" disabled={currentPage === pageCount} onClick={() => goToPage(currentPage + 1)}>Next</button>
            </nav>}
        </div>}
    </div>;
};

A **twin** is a running simulation of one service with its own records,
API endpoint, and token. Your agent talks to it exactly as it would talk to the
real service. Writes stick, and Chronicle records every request and every
changed record.

## Catalog

Find a service by name, resource, or the workflow you want to test. Expand any
twin for its overview, vendor API, key resources, and an example evaluation
with seed data and success criteria. **Worldsmith** twins can join a generated
world with shared people and linked records.

<TwinCatalog twins={twinCatalog.twins} />

The [Twins API](/api-reference/twins#methods) lists the models and exact service
IDs available to your deployment. Try the calls your agent needs against a
running twin before building a large test suite.

## Use a twin

In a launched world, open **Twins** and select a running service.

1. Configure your API client with the twin's **base URL** and **API token**.
2. Read or update records using the service's normal API paths and the IDs
   returned by the twin.
3. Open **Worldsmith → Timeline** to inspect requests, responses, and state changes.

For a standalone twin, open **Twins → Spin up twin**, choose a service, and wait
for **Running**. See the [Twins API](/api-reference/twins) for the same steps in code.

## Reset or stop

**Reset** throws away runtime changes and restores the original seed. Pause
your agent first, reset, and wait for the twin to show **Running** again.
**Stop** shuts it down. Twins also stop on their own when their lifetime
(default 72 hours) ends.

## Twins in evaluations

The twins you see in the dashboard are for exploring. When you run an
evaluation, every trial gets its own fresh twins built from the saved world,
and Chronicle hands your agent their URLs and tokens as environment variables.
Nothing you did in the dashboard twins carries over, and nothing one trial does
affects the next.

See [Connect your agent](/platform/agents) for how the agent receives those
credentials.
