{"id":194371,"date":"2026-09-03T15:40:41","date_gmt":"2026-09-03T06:40:41","guid":{"rendered":"https:\/\/support.questetra.com\/?p=194371"},"modified":"2026-10-08T11:05:07","modified_gmt":"2026-10-08T02:05:07","slug":"message-start-event-http-gas","status":"publish","type":"post","link":"https:\/\/support.questetra.com\/en\/developer-blog\/message-start-event-http-gas\/","title":{"rendered":"Starting a Case from Outside of Questetra BPM Suite (Google Apps Script Chapter)"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"58\" data-attachment-id=\"113212\" data-permalink=\"https:\/\/support.questetra.com\/en\/developer-blog\/message-start-event-http-browser\/attachment\/professional-banner-new-en\/\" data-orig-file=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2018\/12\/professional-banner-new-en.png?fit=1200%2C68&amp;ssl=1\" data-orig-size=\"1200,68\" data-comments-opened=\"0\" data-image-title=\"professional-banner-new-en\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2018\/12\/professional-banner-new-en.png?fit=1024%2C58&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2018\/12\/professional-banner-new-en-1024x58.png?resize=1024%2C58&#038;ssl=1\" alt=\"\" class=\"wp-image-113212\" srcset=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2018\/12\/professional-banner-new-en.png?resize=1024%2C58&amp;ssl=1 1024w, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2018\/12\/professional-banner-new-en.png?resize=600%2C34&amp;ssl=1 600w, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2018\/12\/professional-banner-new-en.png?resize=768%2C44&amp;ssl=1 768w, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2018\/12\/professional-banner-new-en.png?w=1200&amp;ssl=1 1200w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/support.questetra.com\/en\/developer-blog\/message-start-event-http-browser\/\" target=\"_blank\" rel=\"noopener\">Preparatory Chapter<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/support.questetra.com\/en\/developer-blog\/message-start-event-http-curl\/\" target=\"_blank\" rel=\"noopener\">curl Chapter<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/support.questetra.com\/en\/developer-blog\/message-start-event-http-python\/\" target=\"_blank\" rel=\"noopener\">Python Chapter<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/support.questetra.com\/en\/developer-blog\/message-start-event-http-preupload\/\" target=\"_blank\" rel=\"noopener\">Pre-upload Chapter<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/support.questetra.com\/en\/developer-blog\/message-start-event-http-error\/\" target=\"_blank\" rel=\"noopener\">Error-handling Chapter<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/support.questetra.com\/en\/developer-blog\/debug-http-start\/\" target=\"_blank\" rel=\"noopener\">Debug Chapter<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/support.questetra.com\/en\/developer-blog\/http-case-start-sequential\/\" target=\"_blank\" rel=\"noopener\">Continuous Execution Notes<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/support.questetra.com\/en\/developer-blog\/case-starter-wp-form\/\" target=\"_blank\" rel=\"noopener\">WordPress Form Chapter<\/a><\/li>\n\n\n\n<li><strong>Google Apps Script Chapter<\/strong><\/li>\n\n\n\n<li><a href=\"https:\/\/support.questetra.com\/en\/developer-blog\/message-start-event-webhook-github\/\" data-type=\"link\" data-id=\"https:\/\/support.questetra.com\/en\/developer-blog\/message-start-event-webhook-github\/\">GitHub Chapter<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Inventory lists, client lists, pending tasks lists. There are situations where you want to feed only the rows that currently require action from a table managed in Google Sheets directly into a workflow. Re-entering row data into a Case creation form by hand is tedious and leads to transcription errors.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this article, we will call a [Message Start Event (HTTP)] from Google Apps Script. By clicking a custom menu added to the spreadsheet, you can trigger a Case containing the contents of the selected row. The defining feature of this method is that a person can select which specific row to process into a Case, rather than processing every row mechanically. Using an example of starting a purchase order Case from an inventory list, we will build everything from adding the custom menu to writing the started Case ID back to the row.<\/p>\n\n\n\n<p class=\"has-border-background-color has-background wp-block-paragraph\">This article is part of the series &#8220;Starting Cases from Outside Questetra BPM Suite.&#8221; Configuration of the [Message Start Event (HTTP)] is explained in the &#8220;<a href=\"https:\/\/support.questetra.com\/en\/developer-blog\/message-start-event-http-browser\/\">Preparatory Chapter<\/a>&#8221; installment.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"417\" data-attachment-id=\"194383\" data-permalink=\"https:\/\/support.questetra.com\/en\/developer-blog\/message-start-event-http-gas\/attachment\/gsheet-start-from-selected-row1\/\" data-orig-file=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/gsheet-start-from-selected-row1.png?fit=1373%2C559&amp;ssl=1\" data-orig-size=\"1373,559\" data-comments-opened=\"0\" data-image-title=\"gsheet-start-from-selected-row1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/gsheet-start-from-selected-row1.png?fit=1024%2C417&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/gsheet-start-from-selected-row1.png?resize=1024%2C417&#038;ssl=1\" alt=\"\" class=\"wp-image-194383\" srcset=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/gsheet-start-from-selected-row1.png?resize=1024%2C417&amp;ssl=1 1024w, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/gsheet-start-from-selected-row1.png?resize=600%2C244&amp;ssl=1 600w, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/gsheet-start-from-selected-row1.png?resize=768%2C313&amp;ssl=1 768w, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/gsheet-start-from-selected-row1.png?w=1373&amp;ssl=1 1373w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">Starting a Case from a menu added to the spreadsheet<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Preparation: Information to Note Before Writing the Script<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Place a [Message Start Event (HTTP)] in your workflow app and set up the Data Items to receive data from the sheet. The setup process follows the guide in the Preparatory Chapter. Before writing the script, make a note of the following 3 items:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Request URL (Formatted as <code>https:\/\/...\/System\/Event\/MessageStart\/...\/start<\/code>)<\/li>\n\n\n\n<li>API Key<\/li>\n\n\n\n<li>Field names of the Data Items receiving the data (Names starting with <code>q_<\/code>)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This article proceeds assuming the following Data Items have been created:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Data Item Name<\/strong><\/td><td><strong>Data Type<\/strong><\/td><td><strong>Field Name<\/strong><\/td><\/tr><tr><td>Item Name<\/td><td>String<\/td><td>q_item<\/td><\/tr><tr><td>Model Number<\/td><td>String<\/td><td>q_model<\/td><\/tr><tr><td>Order Quantity<\/td><td>Numeric<\/td><td>q_quantity<\/td><\/tr><tr><td>Requested Delivery Date<\/td><td>Date (Y\/M\/D)<\/td><td>q_dueDate<\/td><\/tr><tr><td>Supplier<\/td><td>String<\/td><td>q_supplier<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Set the data editing permissions to &#8220;Editable&#8221;, including the &#8220;Title&#8221;. The title is sent with the parameter name <code>title<\/code>. Please refer to the following for parameter formats by data type:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/questetra.zendesk.com\/hc\/en-us\/articles\/360016441572\">R2210: Parameters and Sample Settings for HTTP Request Receivers<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/support.questetra.com\/en\/developer-blog\/message-start-event-http-curl\/\">Starting a Case from Outside Questetra BPM Suite (curl Chapter)<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Bypassing Google Apps Script from the IP address filter<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Caution is needed regarding the IP address restrictions explained in the preparation guide when dealing with Google Apps Script. The source IP address used when Google Apps Script sends requests is managed by Google, and users cannot fix it to a static IP. Therefore, you cannot practically specify a specific IP address for the allowed network, so you will need to specify <code>0.0.0.0\/0<\/code> (Allow all). There is no need to loosen your overall system settings. In the IP Address Restrictions under [Message Start Event\/Receive Task Settings], you can target just this start event and specify <code>0.0.0.0\/0<\/code>, leaving restrictions for other URLs intact.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this scenario, endpoint protection relies solely on the API key. Do not generate the API key value manually; let the Modeler auto-generate it (using the [Generate Key] button). Also, do not hardcode it directly into the script\u2014store it in Script Properties as described next.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Note that this setting can only be performed by accounts with System Administrator privileges. This is distinct from app creation permissions, so if you lack these privileges, please consult your System Administrator.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sheet Columns and Write-Back Columns<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Line 1 serves as the header row, and line 2 onwards represents individual records (one item per row). This article assumes the following columns are present:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Item Name<\/li>\n\n\n\n<li>Model Number<\/li>\n\n\n\n<li>Order Quantity<\/li>\n\n\n\n<li>Requested Delivery Date<\/li>\n\n\n\n<li>Supplier<\/li>\n\n\n\n<li>Case ID<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">&#8220;Case ID&#8221; is the column used to write back the ID of the initiated Case. Rows containing a value in this column are considered already processed, preventing Cases from starting again if the menu is clicked repeatedly. This prevents duplicate Cases from being initiated from the same row.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Storing the API Key<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Do not write the API key in the main script body; store it in Script Properties instead. In the Apps Script Editor, go to [Project Settings] &gt; &#8220;Script Properties&#8221; and register the key under the property name <code>QUESTETRA_API_KEY<\/code>. This prevents the API key from being inadvertently exposed when copying and sharing the script code itself.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, anyone shared on the sheet with Edit permissions can open the Apps Script Editor and read the values in Script Properties. Share the sheet with Viewer permissions for users who should not see the API key.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Writing the Script<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Open [Extensions] &gt; [Apps Script] from the spreadsheet menu and paste the following script. Replace <code>ENDPOINT<\/code> with the request URL noted during preparation. If the request URL includes <code>?key=<\/code> or subsequent parameters, use only the portion before <code>?<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">While the preparation guide explains that using this URL as-is sends the API key along with it, the script in this article reads the API key from Script Properties and sends it inside the request body. If <code>?key=<\/code> remains in the URL, the API key will be declared twice, resulting in an error even if the key value is correct.<\/p>\n\n\n\n<div class=\"wp-block-coblocks-accordion\">\n<div class=\"wp-block-coblocks-accordion-item\"><details><summary class=\"wp-block-coblocks-accordion-item__title\">Script (click to open)<\/summary><div class=\"wp-block-coblocks-accordion-item__content\">\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>\nconst ENDPOINT = &#39;https:\/\/example.questetra.net\/System\/Event\/MessageStart\/1234\/0\/start&#39;;\nfunction onOpen() {\n  SpreadsheetApp.getUi()\n    .createMenu(&#39;Questetra BPM Suite&#39;)\n    .addItem(&#39;Start Case from Selected Row&#39;, &#39;startCaseFromSelectedRow&#39;)\n    .addToUi();\n}\nfunction startCaseFromSelectedRow() {\n  const ui = SpreadsheetApp.getUi();\n  const sheet = SpreadsheetApp.getActiveSheet();\n  const row = sheet.getActiveRange().getRow();\n  if (row === 1) {\n    ui.alert(&#39;The header row is selected. Please select a data row.&#39;);\n    return;\n  }\n  const header = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];\n  const values = sheet.getRange(row, 1, 1, sheet.getLastColumn()).getValues()[0];\n  const record = {};\n  header.forEach(function (name, i) { record[name] = values[i]; });\n  if (record[&#39;Case ID&#39;]) {\n    ui.alert(&#39;A case has already been started for this row (Case ID: &#39; + record[&#39;Case ID&#39;] + &#39;).&#39;);\n    return;\n  }\n  const apiKey = PropertiesService.getScriptProperties().getProperty(&#39;QUESTETRA_API_KEY&#39;);\n  if (!apiKey) {\n    ui.alert(&#39;The script property QUESTETRA_API_KEY is not registered.&#39;);\n    return;\n  }\n  const payload = {\n    key: apiKey,\n    title: &#39;Order for &#39; + record[&#39;Item Name&#39;],\n    q_item: record[&#39;Item Name&#39;],\n    q_model: record[&#39;Model Number&#39;],\n    q_quantity: String(record[&#39;Order Quantity&#39;]),\n    q_dueDate: Utilities.formatDate(record[&#39;Requested Delivery Date&#39;], &#39;Asia\/Tokyo&#39;, &#39;yyyy-MM-dd&#39;),\n    q_supplier: record[&#39;Supplier&#39;]\n  };\n  const response = UrlFetchApp.fetch(ENDPOINT, {\n    method: &#39;post&#39;,\n    payload: payload,\n    muteHttpExceptions: true\n  });\n  if (response.getResponseCode() !== 200) {\n    ui.alert(&#39;Failed to start the case.\\nResponse Code: &#39; + response.getResponseCode()\n      + &#39;\\nResponse Content: &#39; + response.getContentText());\n    return;\n  }\n  const caseId = response.getContentText().trim();\n  sheet.getRange(row, header.indexOf(&#39;Case ID&#39;) + 1).setValue(caseId);\n  ui.alert(&#39;Started case successfully (Case ID: &#39; + caseId + &#39;).&#39;);\n}<\/code><\/pre><\/div>\n<\/div><\/details><\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Data is retrieved by column name.<\/strong> Parameters are constructed using the text from the header row, so there is no need to update the script if column order changes. If you rename column headers directly, adjust <code>record['...']<\/code> in the script accordingly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ensure the header &#8220;Case ID&#8221; matches the script string character-for-character.<\/strong> If the space is missing or written differently, both the double-trigger check and the Case ID write-back will fail.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Only the top row of the selection triggers a Case.<\/strong> Even if multiple rows are selected, subsequent rows are ignored.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Order quantity is explicitly converted to string using <code>String()<\/code> before sending.<\/strong> If passed as a numeric primitive into <code>payload<\/code>, <code>20<\/code> is transmitted as <code>20.0<\/code>, causing an error on Data Items set to 0 decimal places. See below for details.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Passing an object to <code>payload<\/code> formats and sends it as <code>application\/x-www-form-urlencoded<\/code>.<\/strong> This format is expected by [Message Start Event (HTTP)].<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><code>muteHttpExceptions: true<\/code> is included.<\/strong> Without this, an error response triggers an uncaught exception on Google Apps Script, preventing you from inspecting error messages returned by Questetra BPM Suite.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Displaying the Menu and Initial Authorization<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>onOpen<\/code> function runs automatically whenever the spreadsheet is opened. Once saved, reloading the spreadsheet adds [Questetra BPM Suite] to the menu bar. Simply saving is sufficient; web app deployment operations are unnecessary.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Services requiring authorization like <code>UrlFetchApp<\/code> cannot be invoked directly within <code>onOpen<\/code>. Keep <code>onOpen<\/code> responsible solely for menu creation, deferring network calls to functions triggered via menu items.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Clicking [Start Case from Selected Row] for the first time displays a Google account authorization prompt. Because the script reads\/writes spreadsheet data and initiates external connections, you will authorize both permissions. Authorization is required once per user executing the script. Assign a project name at the top of the editor prior to running, as this title appears directly on authorization prompts.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1383\" height=\"558\" data-attachment-id=\"194385\" data-permalink=\"https:\/\/support.questetra.com\/en\/developer-blog\/message-start-event-http-gas\/attachment\/gsheet-start-from-selected-row2\/\" data-orig-file=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/gsheet-start-from-selected-row2.png?fit=1383%2C558&amp;ssl=1\" data-orig-size=\"1383,558\" data-comments-opened=\"0\" data-image-title=\"gsheet-start-from-selected-row2\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/gsheet-start-from-selected-row2.png?fit=1024%2C413&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/gsheet-start-from-selected-row2.png?resize=1383%2C558&#038;ssl=1\" alt=\"\" class=\"wp-image-194385\" srcset=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/gsheet-start-from-selected-row2.png?w=1383&amp;ssl=1 1383w, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/gsheet-start-from-selected-row2.png?resize=600%2C242&amp;ssl=1 600w, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/gsheet-start-from-selected-row2.png?resize=1024%2C413&amp;ssl=1 1024w, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/gsheet-start-from-selected-row2.png?resize=768%2C310&amp;ssl=1 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">The ID of the started Case is written back to the row.<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Format of Transmitted Values<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sending cell values directly without formatting may produce unexpected formats.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Dates and Timestamps<\/strong> \u2014 Date values in cells are evaluated as JavaScript Date objects. Convert them to string using <code>Utilities.formatDate(value, 'Asia\/Tokyo', 'yyyy-MM-dd')<\/code> prior to transmission. Empty cells resolve to empty strings instead of Date objects, causing <code>Utilities.formatDate<\/code> to throw an error. For optional columns, evaluate conditionally: <code>record['Requested Delivery Date'] ? Utilities.formatDate(record['Requested Delivery Date'], 'Asia\/Tokyo', 'yyyy-MM-dd') : ''<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Select Options<\/strong> \u2014 For Select-type Data Items, send option IDs rather than display labels. Maintain option IDs directly within sheet columns, or convert display labels to IDs programmatically within the script.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Numbers<\/strong> \u2014 Numeric cell values are retrieved as primitive numbers. Passing them directly into <code>payload<\/code> sends <code>20<\/code> as <code>20.0<\/code>, which triggers an error on Numeric-type Data Items requiring zero decimal places (&#8220;Decimals must be 0&#8221;). Logging via <code>JSON.stringify<\/code> still shows <code>20<\/code>, making this issue tricky to spot. Always cast values to string using <code>String(record['Order Quantity'])<\/code> before sending. Use periods for decimal points. If numbers include formatting like <code>1,234<\/code>, strip commas with <code>String(value).replace(\/,\/g, '')<\/code>. Setting data validation rules on the sheet columns helps prevent non-numeric values entirely.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Troubleshooting<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When response codes other than 200 are returned, the script displays the exact response content. Inspect that message first.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If response code is 403, verify IP Address Restriction settings<\/li>\n\n\n\n<li>If response code is 400 and returns XML, the request format was rejected<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The XML returned with status 400 simply contains <code>&lt;detail&gt;Invalid.&lt;\/detail&gt;<\/code> without specifying root causes. Check the following items in sequence:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Does the API key match the value displayed in Modeler? (Recheck Script Properties)<\/li>\n\n\n\n<li>Is the API key being sent twice? (Ensure <code>?key=<\/code> is stripped from <code>ENDPOINT<\/code>)<\/li>\n\n\n\n<li>Are parameters supplied for all mandatory Data Items?<\/li>\n\n\n\n<li>Do parameter names (starting with <code>q_<\/code>) and value formats match Data item definitions?<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">For detailed procedures on isolating root causes, see the following articles:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/support.questetra.com\/en\/developer-blog\/message-start-event-http-error\/\">Starting a Case from Outside Questetra BPM Suite (Troubleshooting Chapter)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/support.questetra.com\/en\/developer-blog\/debug-http-start\/\">Starting a Case from Outside Questetra BPM Suite (Debug Chapter)<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Reference<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/support.questetra.com\/en\/bpmn-icons\/message-start-event-http\/\">BPMN Element: Message Start Event (HTTP)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/questetra.zendesk.com\/hc\/en-us\/articles\/360016441572\">R2210: Parameters and Sample Settings for HTTP Request Receivers<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Inventory lists, client lists, pending tasks lists. There are situations where you want to feed only the rows that currently require action from a table managed in Google Sheets directly into a workflow. Re-entering row data into a Case creation form by hand is tedious and leads to transcription errors. In this article, we will [&hellip;]<\/p>\n","protected":false},"author":30,"featured_media":196423,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","_uag_custom_page_level_css":"","advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_seo_schema_type":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[296],"tags":[],"faq_section":[],"class_list":["post-194371","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developer-blog"],"jetpack_publicize_connections":[],"uagb_featured_image_src":{"full":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=2816%2C1536&ssl=1",2816,1536,false],"thumbnail":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?resize=440%2C440&ssl=1",440,440,true],"medium":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=578%2C315&ssl=1",578,315,true],"medium_large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=768%2C419&ssl=1",768,419,true],"large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=1024%2C559&ssl=1",1024,559,true],"1536x1536":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=1536%2C838&ssl=1",1536,838,true],"2048x2048":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=2048%2C1117&ssl=1",2048,1117,true],"newspack-article-block-landscape-large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?resize=1200%2C900&ssl=1",1200,900,true],"newspack-article-block-portrait-large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?resize=900%2C1200&ssl=1",900,1200,true],"newspack-article-block-square-large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?resize=1200%2C1200&ssl=1",1200,1200,true],"newspack-article-block-landscape-medium":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?resize=800%2C600&ssl=1",800,600,true],"newspack-article-block-portrait-medium":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?resize=600%2C800&ssl=1",600,800,true],"newspack-article-block-square-medium":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?resize=800%2C800&ssl=1",800,800,true],"newspack-article-block-landscape-intermediate":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?resize=600%2C450&ssl=1",600,450,true],"newspack-article-block-portrait-intermediate":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?resize=450%2C600&ssl=1",450,600,true],"newspack-article-block-square-intermediate":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?resize=600%2C600&ssl=1",600,600,true],"newspack-article-block-landscape-small":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?resize=400%2C300&ssl=1",400,300,true],"newspack-article-block-portrait-small":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?resize=300%2C400&ssl=1",300,400,true],"newspack-article-block-square-small":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?resize=400%2C400&ssl=1",400,400,true],"newspack-article-block-landscape-tiny":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?resize=200%2C150&ssl=1",200,150,true],"newspack-article-block-portrait-tiny":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?resize=150%2C200&ssl=1",150,200,true],"newspack-article-block-square-tiny":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?resize=200%2C200&ssl=1",200,200,true],"newspack-article-block-uncropped":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=1200%2C655&ssl=1",1200,655,true]},"uagb_author_info":{"display_name":"Peter Glover","author_link":"https:\/\/support.questetra.com\/en\/author\/petergloverquestetra\/"},"uagb_comment_info":0,"uagb_excerpt":"Inventory lists, client lists, pending tasks lists. There are situations where you want to feed only the rows that currently require action from a table managed in Google Sheets directly into a workflow. Re-entering row data into a Case creation form by hand is tedious and leads to transcription errors. In this article, we will&hellip;","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9DiIh-Oz1","jetpack-related-posts":[{"id":162101,"url":"https:\/\/support.questetra.com\/en\/developer-blog\/beginner-tutorial-chpt1\/","url_meta":{"origin":194371,"position":0},"title":"Chapter 1: About Questetra BPM Suite","author":"Tomoatsu Horibe","date":"2024-07-18","format":false,"excerpt":"This is an overview of the tutorial. We will explain the overview and advantages of Questetra, as well as the steps to start using the Workflow App, in relation to the contents of each chapter.","rel":"","context":"In &quot;Questetra Developers Blog&quot;","block_context":{"text":"Questetra Developers Blog","link":"https:\/\/support.questetra.com\/ja\/category\/developer-blog\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2024\/06\/beginner-tutorial-eyecatch1200x675-chpt3-04-en-1.png?fit=960%2C540&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2024\/06\/beginner-tutorial-eyecatch1200x675-chpt3-04-en-1.png?fit=960%2C540&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2024\/06\/beginner-tutorial-eyecatch1200x675-chpt3-04-en-1.png?fit=960%2C540&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2024\/06\/beginner-tutorial-eyecatch1200x675-chpt3-04-en-1.png?fit=960%2C540&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":195449,"url":"https:\/\/support.questetra.com\/en\/developer-blog\/http-case-start-sequential\/","url_meta":{"origin":194371,"position":1},"title":"Starting a Case from Outside of Questetra BPM Suite (Continuous Execution Notes)","author":"kobayashi","date":"2026-09-17","format":false,"excerpt":"This section explains how to automatically start multiple cases using a Message Start Event (HTTP\/Webhook) or the REST API.","rel":"","context":"In &quot;Questetra Developers Blog&quot;","block_context":{"text":"Questetra Developers Blog","link":"https:\/\/support.questetra.com\/en\/category\/developer-blog\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=1200%2C655&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=1200%2C655&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=1200%2C655&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=1200%2C655&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=1200%2C655&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":196231,"url":"https:\/\/support.questetra.com\/en\/developer-blog\/message-start-event-http-preupload\/","url_meta":{"origin":194371,"position":2},"title":"Starting a Case from Outside of Questetra BPM Suite (Pre-upload Chapter)","author":"kobayashi","date":"2026-09-28","format":false,"excerpt":"Here are the steps for the pre-upload procedure: First, upload the file to receive an ID, and then send that ID to the [Message Start Event (HTTP)].","rel":"","context":"In &quot;Questetra Developers Blog&quot;","block_context":{"text":"Questetra Developers Blog","link":"https:\/\/support.questetra.com\/en\/category\/developer-blog\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=1200%2C655&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=1200%2C655&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=1200%2C655&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=1200%2C655&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=1200%2C655&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":170753,"url":"https:\/\/support.questetra.com\/en\/developer-blog\/throwing-message-intermediate-event-email-html-markdown\/","url_meta":{"origin":194371,"position":3},"title":"Let\u2019s Send an Email Automatically in the Middle of a Workflow (HTML Email:  Markdown chapter)","author":"Peter Glover","date":"2025-04-01","format":false,"excerpt":"With Questetra BPM Suite Version 16.2, it is now possible to incorporate Markdown and inline images into HTML emails using the Throwing Message Intermediate Event (email). In this article, we will introduce how to incorporate Markdown.","rel":"","context":"In &quot;Questetra Developers Blog&quot;","block_context":{"text":"Questetra Developers Blog","link":"https:\/\/support.questetra.com\/en\/category\/developer-blog\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/03\/%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81.png?fit=1200%2C686&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/03\/%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81.png?fit=1200%2C686&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/03\/%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81.png?fit=1200%2C686&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/03\/%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81.png?fit=1200%2C686&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/03\/%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81.png?fit=1200%2C686&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":172043,"url":"https:\/\/support.questetra.com\/en\/developer-blog\/throwing-message-intermediate-event-email-html-inline-images\/","url_meta":{"origin":194371,"position":4},"title":"Let\u2019s Send an Email Automatically in the Middle of a Workflow (HTML Email: Inline Images chapter)","author":"kobayashi","date":"2025-04-02","format":false,"excerpt":"Following the Markdown edition from the previous article, this time we will introduce how to incorporate images into HTML emails using the Throwing Message Intermediate Event (email).","rel":"","context":"In &quot;Questetra Developers Blog&quot;","block_context":{"text":"Questetra Developers Blog","link":"https:\/\/support.questetra.com\/en\/category\/developer-blog\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/04\/%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%813.png?fit=1200%2C686&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/04\/%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%813.png?fit=1200%2C686&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/04\/%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%813.png?fit=1200%2C686&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/04\/%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%813.png?fit=1200%2C686&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2025\/04\/%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%813.png?fit=1200%2C686&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":147621,"url":"https:\/\/support.questetra.com\/en\/developer-blog\/debug-http-start\/","url_meta":{"origin":194371,"position":5},"title":"Starting a Case from Outside of Questetra BPM Suite (Debug Chapter)","author":"Hirotaka NISHI","date":"2023-06-21","format":false,"excerpt":"How to debug an App that starts triggered by receiving an HTTP request","rel":"","context":"In &quot;Questetra Developers Blog&quot;","block_context":{"text":"Questetra Developers Blog","link":"https:\/\/support.questetra.com\/en\/category\/developer-blog\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=1200%2C655&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=1200%2C655&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=1200%2C655&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=1200%2C655&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=1200%2C655&ssl=1&resize=1050%2C600 3x"},"classes":[]}],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2026\/09\/external-start-en-fi.jpg?fit=2816%2C1536&ssl=1","_links":{"self":[{"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/posts\/194371","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/users\/30"}],"replies":[{"embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/comments?post=194371"}],"version-history":[{"count":26,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/posts\/194371\/revisions"}],"predecessor-version":[{"id":197336,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/posts\/194371\/revisions\/197336"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/media\/196423"}],"wp:attachment":[{"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/media?parent=194371"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/categories?post=194371"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/tags?post=194371"},{"taxonomy":"faq_section","embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/faq_section?post=194371"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}