Having issues with AI tool input for Google Sheets append row – “Received tool input did not match expected schema”

I’m working on a workflow using n8n Cloud (v1.89.2) and running into this error when trying to append a new row to a Google Sheet via an AI tool call:

Received tool input did not match expected schema

The failing step is an Append Row action using the create_new_order tool connected to Google Sheets.


:brain: Context:

The system prompt section (tool definition) looks like this:

{
  "name": "create_new_order",
  "description": "Registers a new order in the 'Orders' sheet. If pairs_no ≥ 4, free pickup is activated.",
  "parameters": {
    "type": "object",
    "properties": {
      "Status": { 
        "type": "string",
        "description": "Initial order status, default is Received"
      },
      "user_id": { 
        "type": "string",
        "description": "Unique user identifier",
        "memory": "user_id"
      },
      "user_name": { 
        "type": "string",
        "description": "Customer's full name",
        "memory": "name"
      },
      "address": { 
        "type": "string",
        "description": "Pickup/delivery address",
        "memory": "address"
      },
      "zip": { 
        "type": "string",
        "description": "Postal code",
        "memory": "zip"
      },
      "phone": { 
        "type": "string",
        "description": "Customer's phone number",
        "memory": "phone"
      },
      "pairs_no": { 
        "type": "string", 
        "description": "Total number of shoe pairs",
        "memory": "num_pairs"
      },
      "unit_price": { 
        "type": "string",
        "description": "Price per pair of shoes",
        "memory": "price"
      },
      "total_price": { 
        "type": "string",
        "description": "Total order price (pairs_no * unit_price)",
        "memory": "price"
      }
    },
    "required": ["Status","user_id","user_name","address","zip","phone","pairs_no","unit_price","total_price"]
  }
}

:camera_flash: Google Sheets step setup:

Here’s what the create_new_order step looks like (Mapping Column Mode: manual):

Values to Send:

  • status {{ $fromAI(“status”) }}
  • user_id {{ $fromAI(“user_id”) }}
  • user_name {{ $fromAI(“user_name”) }}
  • address {{ $fromAI(“address”) }}
  • zip {{ $fromAI(“zip”) }}
  • phone {{ $fromAI(“phone”) }}
  • pairs_no {{ $fromAI(“pairs_no”) }}
  • unit_price {{ $fromAI(“unit_price”) }}
  • total_price {{ $fromAI(“total_price”) }}

:mag: What I’ve tried:

  • Confirmed all parameter names match the schema
  • All values use fromAI(), e.g. {{ $fromAI(“status”) }}
  • Tried hardcoding one value — same result
  • Tested changing Status → status (lowercase) in both schema and UI — still failing

:brain: Running:

n8n Cloud
Version: 1.89.2
AI Step Version: v4.1 mini

:bulb: Question:

What’s causing this tool input schema mismatch? Any advice or tips would be super appreciated :pray:

Solved!

Turned out the schema mismatch was just me being inconsistent :see_no_evil:

I reviewed every place where the fields appear (system-prompt tool definition, AI mapping expressions, and Google-Sheets column names) and made sure names and data-types are identical everywhere:

  • all keys in lower-case → status, user_id, pairs_no, …
  • numbers really defined as “type”: “number” (not “string”)
  • booleans as “boolean”
  • Google-Sheets node now maps exactly the same names.

After that quick clean-up the Append Row step runs without the “Received tool input did not match expected schema” error. Posting in case someone else hits the same wall—double-check the field names and types across every module and you’re good. :muscle:

1 Like