Business toolkits share execution, error, and idempotency behavior while keeping distinct domain contracts.

Canonical tool groups

DomainRead toolsMutation tools
CRMget_contact, search_contactsCreate/update contacts, companies, and deals; add_note
ERP/accountingList/get customers, invoices, bills, and restricted recordsCreate customers/invoices/bills, send invoices, record payments
Payments/billingGet/list payments, customers, invoices, and subscriptionsCreate customers/invoices/payment links/refunds; cancel subscriptions
E-commerceList/get products, orders, and customersCreate/update products, inventory, orders, and fulfillments
Customer supportList/get tickets and conversationsCreate/update/assign tickets and add/send replies

Each generated toolkit page gives the exact supported subset and dotted name.

Provider matrix

ToolkitDomainRepresentative canonical tools
HubSpotCRMsearch_contacts, create_contact, add_note
OdooERP/accountingsearch_erp_records, create_bill, send_invoice
QuickBooksERP/accountinglist_invoices, record_payment, send_invoice
StripePayments/billinglist_payments, create_refund, cancel_subscription
ShopifyE-commercelist_products, update_inventory, create_fulfillment
ZendeskCustomer supportlist_tickets, assign_ticket, add_ticket_reply

Mutation safety

Refunds and subscription cancellation are destructive. Inventory setters overwrite quantities. Sending an invoice or public support reply can notify a customer. Put approval checks before those calls and reuse caller-owned idempotency keys.

Worked example

ts
import { Eyeball } from "@eyeball/sdk";

const eyeball = new Eyeball({
  apiKey: process.env.EYEBALL_API_KEY!,
  baseUrl: process.env.EYEBALL_EXECUTOR_URL!,
});

const contact = await eyeball.tools.run(
  "hubspot.create_contact",
  {
    email: "sam@example.com",
    firstName: "Sam",
    companyName: "Example Restaurant Group",
  },
  {
    userId: "demo_user",
    idempotencyKey: "crm:lead:sam@example.com",
  },
);
console.log(contact);

Check for an existing contact before creating one when provider-side uniqueness is not guaranteed.

See the generated HubSpot reference.