Why am I Not Getting the 'Values' Configurable Prop when Calling '/v1/connect/:project_id/actions/google_sheets-add-single-row'?

This topic was automatically generated from Slack. You can find the original thread here.

Hi! when i call: /v1/connect/:project_id/actions/google_sheets-add-single-row I am not getting the values configurable prop.

What I get in the thread :thread:

I get:

{
  "data": {
    "name": "Add Single Row",
    "description": "Add a single row of data to Google Sheets. [See the documentation](https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/append)",
    "component_type": "action",
    "version": "2.1.13",
    "key": "google_sheets-add-single-row",
    "configurable_props": [
      {
        "name": "googleSheets",
        "type": "app",
        "app": "google_sheets"
      },
      {
        "name": "drive",
        "type": "string",
        "label": "Drive",
        "description": "Defaults to `My Drive`. To select a [Shared Drive](https://support.google.com/a/users/answer/9310351) instead, select it from this list.",
        "optional": true,
        "default": "My Drive",
        "remoteOptions": true
      },
      {
        "name": "sheetId",
        "type": "string",
        "label": "Spreadsheet ID",
        "description": "Select a spreadsheet or provide a spreadsheet ID",
        "useQuery": true,
        "remoteOptions": true,
        "reloadProps": true
      },
      {
        "name": "worksheetId",
        "type": "string",
        "label": "Worksheet ID",
        "description": "Select a worksheet or enter a custom expression. When referencing a spreadsheet dynamically, you must provide a custom expression for the worksheet.",
        "remoteOptions": true,
        "reloadProps": true
      },
      {
        "name": "hasHeaders",
        "type": "boolean",
        "label": "Does the first row of the sheet have headers?",
        "description": "If the first row of your document has headers, we'll retrieve them to make it easy to enter the value for each column. Note: When using a dynamic reference for the worksheet ID (e.g. `{{steps.foo.$return_value}}`), this setting is ignored.",
        "reloadProps": true
      }
    ]
  }
}

and if i set the values manually, when executing I get:

{
    "os": [
      {
        "k": "error",
        "ts": 1750728174336,
        "err": {
          "name": "TypeError",
          "stack": "TypeError: Cannot read properties of undefined (reading 'oauth_access_token')\n    at Object.drive (file:///tmp/__pdg__/dist/code/e4207de98c73060cf90653524592081661abecd9e78d47c101ab55bdc7e8c265/node_modules/.pnpm/@pipedream+google_drive@1.0.0/node_modules/@pipedream/google_drive/google_drive.app.mjs:285:34)\n    at Object.getFile (file:///tmp/__pdg__/dist/code/e4207de98c73060cf90653524592081661abecd9e78d47c101ab55bdc7e8c265/node_modules/.pnpm/@pipedream+google_drive@1.0.0/node_modules/@pipedream/google_drive/google_drive.app.mjs:795:26)\n    at Object.run (file:///tmp/__pdg__/dist/code/e4207de98c73060cf90653524592081661abecd9e78d47c101ab55bdc7e8c265/code/actions/add-single-row/add-single-row.mjs:131:57)\n    at file:///var/task/component_maker.mjs:165:42\n    at captureObservations (/var/task/node_modules/@lambda-v2/component-runtime/src/captureObservations.js:28:11)\n    at run (file:///var/task/component_maker.mjs:155:26)\n    at async MessagePort.<anonymous> (file:///var/task/component_maker.mjs:193:9)",
          "message": "Cannot read properties of undefined (reading 'oauth_access_token')"
        }
      }
    ],
    "exports": {}
  }

transformed props to camel case

{
    "actionId": "google_sheets-add-single-row",
    "resolvedProps": {
      "drive": "My Drive",
      "values": [
        "1",
        "2",
        "3",
        "4"
      ],
      "sheetId": "2iFypYQsxFR4-u3nflHgXZ-LCa7rQdLp8wqB-V5NaasE",
      "worksheetId": 0
    }
  }

now getting:


{
        "k": "error",
        "ts": 1750728896524,
        "err": {
          "name": "Error",
          "stack": "Error: undefined is not an array or an array-like\n    at Object.sanitizedArray (file:///tmp/__pdg__/dist/code/e4207de98c73060cf90653524592081661abecd9e78d47c101ab55bdc7e8c265/code/google_sheets.app.mjs:177:13)\n    at Object.run (file:///tmp/__pdg__/dist/code/e4207de98c73060cf90653524592081661abecd9e78d47c101ab55bdc7e8c265/code/actions/add-single-row/add-single-row.mjs:152:33)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async file:///var/task/component_maker.mjs:165:11\n    at async captureObservations (/var/task/node_modules/@lambda-v2/component-runtime/src/captureObservations.js:28:5)\n    at async run (file:///var/task/component_maker.mjs:155:20)\n    at async MessagePort.<anonymous> (file:///var/task/component_maker.mjs:193:9)",
          "message": "undefined is not an array or an array-like"
        }
      }

hacking your ui a little bit i found this that configurableProps has a different value in your front for this action:

{
...
  "configurableProps": [
    {
      "app": "google_sheets",
      "name": "googleSheets",
      "type": "app"
    },
    {
      "name": "drive",
      "type": "string",
      "label": "Drive",
      "default": "My Drive",
      "optional": true,
      "description": "Defaults to `My Drive`. To select a [Shared Drive](https://support.google.com/a/users/answer/9310351) instead, select it from this list.",
      "remoteOptions": true
    },
    {
      "name": "sheetId",
      "type": "string",
      "label": "Spreadsheet ID",
      "useQuery": true,
      "description": "Select a spreadsheet or provide a spreadsheet ID",
      "reloadProps": true,
      "remoteOptions": true
    },
    {
      "name": "worksheetId",
      "type": "string",
      "label": "Worksheet ID",
      "description": "Select a worksheet or enter a custom expression. When referencing a spreadsheet dynamically, you must provide a custom expression for the worksheet.",
      "reloadProps": true,
      "remoteOptions": true
    },
    {
      "name": "hasHeaders",
      "type": "boolean",
      "label": "Does the first row of the sheet have headers?",
      "description": "If the first row of your document has headers, we'll retrieve them to make it easy to enter the value for each column. Note: When using a dynamic reference for the worksheet ID (e.g. `{{steps.foo.$return_value}}`), this setting is ignored.",
      "reloadProps": true
    },
    {
      "name": "headerError",
      "type": "string",
      "label": "Header Fetch Error",
      "hidden": true,
      "optional": true,
      "description": "Unable to fetch headers: Could not find a header row. Please either add headers and click \"Refresh fields\" or set 'Does the first row of the sheet have headers?' to false.. Using simple column input instead."
    },
    {
      "name": "myColumnData",
      "type": "string[]",
      "label": "Values",
      "description": "Provide a value for each cell of the row. Google Sheets accepts strings, numbers and boolean values for each cell. To set a cell to an empty value, pass an empty string."
    }
  ],
...
}

in this page: Add Pipedream MCP to your app or agent — Pipedream

found this:

how do you pass the data? :thinking_face:

Are you using MCP or the Connect API / SDK directly?

I believe that’s a dynamic prop, so you have to reloadProps in order for that prop to get surfaced in the definition: https://pipedream.com/docs/connect/components/#configure-dynamic-props

Connect API!

Will try, thanks!

from the UI perspective, working! but when executing action I am still getting an error.

I am sending to /v1/connect/:project_id/actions/run" :

{external_user_id: "some_uuid", id: "google_sheets-add-single-row", configured_props: {"drive" => "My Drive", "sheetId" => "the_sheet_id", "worksheetId" => 0, "myColumnData" => ["1", "2"], "googleSheets" => {authProvisionId: "the_auth_provision_id"}}}

and getting:

{"exports" => {}, "os" => [{"ts" => 1750731787797, "k" => "error", "err" => {"name" => "Error", "message" => "undefined is not an array or an array-like", "stack" => "Error: undefined is not an array or an array-like\n    at Object.sanitizedArray (file:///tmp/__pdg__/dist/code/e4207de98c73060cf90653524592081661abecd9e78d47c101ab55bdc7e8c265/code/google_sheets.app.mjs:177:13)\n    at Object.run (file:///tmp/__pdg__/dist/code/e4207de98c73060cf90653524592081661abecd9e78d47c101ab55bdc7e8c265/code/actions/add-single-row/add-single-row.mjs:152:33)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async file:///var/task/component_maker.mjs:165:11\n    at async captureObservations (/var/task/node_modules/@lambda-v2/component-runtime/src/captureObservations.js:28:5)\n    at async run (file:///var/task/component_maker.mjs:155:20)\n    at async MessagePort.anonymous (file:///var/task/component_maker.mjs:193:9)"}}]}

(Ruby hashes :slightly_smiling_face: )

Passed dynamic_props_id and it worked. Thanks!

I’m curious btw, what part of the docs had you looked at earlier where you hadn’t seen references to dynamic props ID? Just thinking about how we can improve our documentation wherever possible.

to be honest, copy pasted the docs to Claude Code :slightly_smiling_face: I didn’t read all of it.

my bad!

Not a problem at all! I love it. We’re redoing all of our docs now and are working to make them a lot more LLM-friendly!