Zapier does not list a Trends API app. Official help covers unknown endpoints with API by Zapier or Webhooks by Zapier. The call is still POST https://api.trendsapi.ai/api. The envelope body is a JSON string and must be parsed a second time. Contract: the API reference. Caps: pricing.

API by Zapier holds the header

Create a connection whose static header is Authorization with value Bearer <api_key>. Official Zapier docs put that secret on the connection, not in a step field. The JSON body still needs mode, source, and keyword. The key is not a body field. Header rules are on authentication.

Webhooks by Zapier can send the same header. Official Zapier text says those values live on the Zap. Anyone with edit access can read them. Use that path only for a throwaway test.

Custom Request for nested JSON

percent_growth is ["12M"], not a string. Official Webhooks help says the simple POST action flattens pairs and that nested JSON belongs on Custom Request. Data field:

{"mode":"get_growth","source":"google search","keyword":"bitcoin","percent_growth":["12M"]}

A live board uses mode get_top_trends and type Google Trends. Do not put keyword on that call. Mode notes sit on get_growth and get_top_trends.

Code by Zapier parses body

const outer = JSON.parse(inputData.raw || "{}");
const data = typeof outer.body === "string" ? JSON.parse(outer.body) : outer;
output = [{ data }];

Map inputData.raw from the HTTP step if Zapier already parsed the envelope. Guard the type. A second JSON.parse on an object throws. After this step, Slack or Sheets can read results[0].growth. Empty charts after a green Zap usually mean the string body was never opened. That step is on parse the body.