Consistent Error Response Structure

Tool execution errors now return a standardized response format across all failure types. Previously, the data field was empty on errors—now it always includes status_code and message, matching the structure of successful responses.

What Changed

All error responses from tool execution now include:

  • data.status_code: HTTP status code (or null for non-HTTP errors)
  • data.message: Detailed error message
  • error: Same detailed message at the top level

Before vs After

Previous error response:

1{
2 "data": {},
3 "successfull": false,
4 "error": "404 Client Error: Not Found for url: ...",
5}

New error response:

1{
2 "data": {
3 "http_error": "404 Client Error: Not Found for url: ...",
4 "status_code": 404,
5 "message": "Resource not found: The requested item does not exist"
6 },
7 "successfull": false,
8 "error": "Resource not found: The requested item does not exist",
9}

Why This Matters

  • Easier parsing: Agents and code can reliably access error details from data.message without special-casing empty data objects
  • Better debugging: Detailed error messages replace generic HTTP error strings
  • Consistent schema: Same response shape whether the tool succeeds or fails

Union Types Preserved in Tool Schemas

Tool schemas now use standard JSON Schema anyOf for union types, providing accurate type information for LLMs and code generators.

What Changed

Two changes affect how types appear in request/response schemas:

ChangeScopeDescription
Nullable fieldsAll toolkitsFields that accept null now use anyOf: [{type}, {type: "null"}] instead of type + nullable: true
Multi-type fields157 toolkitsFields accepting multiple value types (e.g., string | number) preserve the full anyOf array instead of flattening to the first type

CRM & Sales

active_campaign, apollo, attio, autobound, capsule_crm, firmao, forcemanager, gong, hubspot, instantly, intercom, kommo, leadfeeder, lever, magnetic, pipedrive, pipeline_crm, salesforce, salesforce_service_cloud, zoominfo

Marketing & Email

active_trail, beamer, delighted, dripcel, enginemailer, mailerlite, moosend, mopinion, sendspark, toneden

Communication & Collaboration

chmeetings, discord, helpdesk, helpwise, missive, slack, textit

Productivity & Project Management

basecamp, clicksend, clientary, dart, fibery, monday, notion, onedesk, productboard, rocketlane, todoist

Developer Tools & APIs

algolia, anonyflow, api_ninjas, api_sports, apify, appdrag, backendless, browserless, bubble, cloudconvert, cloudinary, cloudlayer, convertapi, databricks, datadog, datarobot, deepseek, deployhq, digital_ocean, docmosis, docugenerate, encodian, gitea, gitlab, globalping, groqcloud, hookdeck, hyperbrowser, imgbb, imgix, kibana, neutrino, npm, openai, openrouter, parsera, parseur, phantombuster, pinecone, prismic, procfu, replicate, scrape_do, serpapi, shotstack, snowflake, supabase, tavily, v0, vercel, writer, zenrows

E-commerce & Payments

brex, btcpay_server, coupa, flutterwave, gift_up, lemon_squeezy, quaderno, ramp, shopify, stripe, zoho_invoice

HR & Recruiting

ashby, bamboohr, recruitee

Data & Analytics

amplitude, census_bureau, college_football_data, currencyscoop, diffbot, ip2location, mixpanel, nasa, rosette_text_analytics, securitytrails, textrazor, twelve_data

Documents & Files

carbone, doc_certs, documenso, dropbox, excel, files_com, grist, pdf_co, share_point

Design & Media

canva, canvas, claid_ai, deepimage, heygen, metatextai

Customer Support

freshdesk, retently, servicem8, sevdesk, storeganise

Calendar & Scheduling

calendly, deadline_funnel, etermin, googlecalendar

Social Media

facebook, instagram, reddit

Location & Maps

addresszen, geoapify, google_maps, mapbox

Email Verification & Validation

clearout, icypeas, neverbounce, zerobounce

Other Integrations

bitwarden, canny, cardly, castingwords, confluence, formdesk, getform, habitica, headout, highergov, jira, keen_io, landbot, moonclerk, one_drive, outlook, googlesheets, resend, ritekit, sms_alert, tapfiliate, thanks_io, uptimerobot

Before vs After

For example, the GOOGLECALENDAR_GET_CURRENT_DATE_TIME request schema changes: Previous (only a single type):

1{
2 "timezone": {
3 "default": 0,
4 "description": "Timezone specification...",
5 "title": "Timezone",
6 "type": "string"
7 }
8}

Now (Union types preserved):

1{
2 "timezone": {
3 "anyOf": [
4 { "type": "string" },
5 { "type": "number" }
6 ],
7 "default": 0,
8 "description": "Timezone specification...",
9 "title": "Timezone"
10 }
11}

Similarly, nullable fields like page_token in GOOGLECALENDAR_LIST_CALENDARS:

Previous:

1{
2 "page_token": {
3 "default": null,
4 "description": "Token for the page of results to return...",
5 "nullable": true,
6 "title": "Page Token",
7 "type": "string"
8 }
9}

Now:

1{
2 "page_token": {
3 "anyOf": [
4 { "type": "string" },
5 { "type": "null" }
6 ],
7 "default": null,
8 "description": "Token for the page of results to return...",
9 "title": "Page Token"
10 }
11}

Why This Matters

  • Accurate schemas: LLMs and code generators see the full set of allowed types
  • Better validation: Input validation can now correctly accept all valid types, not just the first one