Skip to content

HTTPRequest – Structure

{
"Type": "HttpRequest",
"Name": "SendOrder",
"Parameters": {
"Connector": "Shop",
"Url": "/orders",
"Method": "POST",
"Body": {
"invoice": "{{InitialData.Invoice.BT1}}",
"amount": "{{InitialData.Invoice.BG22.BT112}}"
}
}
}
Parameter Default Meaning
Url – Address of the request, e.g. https://api.example.com/orders. With a Connector that has a base URL, a path such as /orders is enough.
Method GET GET, POST, PUT, PATCH, DELETE, HEAD or another HTTP method
Connector – Name of a saved connector. Its sign-in is added to every request, see below.
QueryParameters – Values appended to the URL, correctly encoded: { "q": "is:unread", "top": "20" } gives ?q=is%3Aunread&top=20. A list repeats the name: { "id": ["1", "2"] } gives ?id=1&id=2.
Headers – Headers as an object: { "Accept": "application/json" }. A header whose value is empty (e.g. an unset connector field) is not sent.
Body – Content of the request; its form depends on BodyType, see below. Not sent with GET and HEAD (warning in the result).
BodyType Json Json, Form, Multipart, Text, Xml, File or None
AuthType, AuthToken None Sign-in without a connector, see below
ApiKeyHeader X-API-KEY The header in which AuthType: ApiKey sends the key
TimeoutSeconds 100 Time limit per request in seconds, including reading the response; 0 = no limit. Older workflows with Timeout in milliseconds keep working.
MaxRetries 2 How often a request is sent again after a connection error, a timeout or an overload answer, see below
SuccessStatusCodes 200-299 Status codes that count as success, e.g. "200-299;404", "2xx" or [200, 201]
ResponseFormat Auto How the response goes into Body: Auto, Json, Text or Base64, see below
DownloadPath – Save the response as a file instead, see below
Overwrite true false: an existing file is kept and the download gets the name name (2).pdf
AutoPagination false Fetch further pages automatically, see below
MaxPages 100 At most this many pages per address
Urls – Several addresses as a list, or a placeholder that stands for a list. Each one is requested; Url is then not used.
Parallel, MaxParallelRequests false, 5 With Urls: request up to MaxParallelRequests addresses at once instead of one after the other
RateLimitDelay 0 Pause in milliseconds before each further request (pages, Urls, retries)
FollowRedirects true Follow redirects (up to 10)
IgnoreCertificateErrors false Accept any TLS certificate, e.g. of a server in your own network with a self-made certificate. Only for your own servers.
IfNoneMatch, IfModifiedSince – Conditional request with an ETag or a date (the same as the headers If-None-Match and If-Modified-Since)

All texts, also in Url, Headers, QueryParameters and Body, may contain placeholders.

With a connector (recommended): "Connector": "Name". The credentials stay encrypted in the connector, and the workflow JSON contains only the name.

Connector type What is sent
None no sign-in; only the base URL is used
ApiKey the key in the connector’s header, with its scheme (e.g. Authorization: Bearer <key>)
Basic Authorization: Basic … with user name and password
OAuth2 Authorization: Bearer <access token>. The token is renewed before it expires, and if the server still answers 401, RUNOS renews it and sends the request once more.

Without a connector: AuthType and AuthToken. Values from a connector can be inserted with placeholders, e.g. "AuthToken": "{{connector.Shop.ApiKey}}".

AuthType AuthToken What is sent
Bearer the token or key Authorization: Bearer <token>
Basic user:password (a value without a colon counts as already encoded) Authorization: Basic <Base64>
ApiKey the key X-API-KEY: <key>, or the header in ApiKeyHeader

If both are set, the connector signs in and AuthType is ignored (warning in the result). Another header can always be set in Headers: { "x-api-key": "{{connector.Weather.ApiKey}}" }.

BodyType Body Sent as
Json object or list; or text containing JSON application/json
Form object with the fields; or text already encoded (a=1&b=2) application/x-www-form-urlencoded
Multipart object: text fields, and files as { "File": "C:\\path\\file.pdf" } multipart/form-data
Text text text/plain
Xml text application/xml
File path of a file, sent as it is by its extension (e.g. application/pdf)
None – no content
  • A text that consists of just one placeholder standing for an object or a list is inserted as that object or list, e.g. "Body": { "contacts": "{{Search.Response.Body.value}}" }. Everything else is inserted as text.
  • A number from a placeholder goes into a JSON object as text ("18.3"). If the API needs a number, write the JSON as text: "Body": "{ \"amount\": {{InitialData.Total}} }". That text is sent as written (with a warning if it is not valid JSON).
  • For a file in Multipart, FileName and ContentType can be added: { "File": "{{FilePath}}", "FileName": "invoice.pdf", "ContentType": "application/pdf" }. A list sends several files under one name.
  • A Content-Type in Headers replaces the type from the table, e.g. application/vnd.api+json (except with Multipart, whose type carries the part boundary).
  • Older workflows with "Body": { "Value": … } and BodyType raw or binary keep working.

Unless set in Headers, every request is sent with User-Agent: RUNOS and Accept: */*. Cookies are not kept between requests.

After a connection error, a timeout or one of the status codes 408, 429, 502, 503 and 504, the request is sent again, up to MaxRetries times. The pause grows (1, 2, 4 … seconds); if the server sends Retry-After, RUNOS waits that long (at most a minute). If a retry succeeds, the action succeeds; the failed attempts are warnings in the result.

POST and PATCH are only sent again when the server cannot have processed them: when no connection could be made, and on 429 and 503. After a timeout they are not repeated, so an order, a mail or a booking never arrives twice.

With AutoPagination: true, RUNOS follows the link to the next page as long as the answers succeed: @odata.nextLink (Microsoft Graph), nextLink, next, nextPageUrl, next_page_url, links.next, paging.next, _links.next.href, or the Link header with rel="next".

  • Every page is an entry in Response.Results. Response.Items contains the entries of all pages in one list (from value, items, data, results, records or entries, or the page itself when it is a list), ready for a Loop.
  • A link to another server is not followed, so the sign-in never goes to a third party. A loop of links and MaxPages stop it as well; each with a warning.

With DownloadPath a successful response is saved as a file, and Body stays empty.

  • A folder (the path ends with \ or the folder exists): the file name comes from the server (Content-Disposition) or from the end of the URL; without one it is download. Without an extension, one is added from the content type (.pdf, .json …).
  • A file path: the response is saved under exactly that name.
  • The file is written under a temporary name first and only gets its name once complete; a broken download leaves no half file. Missing folders are created.
  • An error answer (e.g. 404) is not saved; it goes into Body as with every request.
"Response": {
"StatusCode": 200,
"Reason": "OK",
"Url": "https://api.open-meteo.com/v1/forecast?latitude=52.52&longitude=13.41&current_weather=true",
"Headers": { "Content-Type": "application/json; charset=utf-8", "Date": "…" },
"ContentType": "application/json",
"Body": { "current_weather": { "temperature": 18.3, "is_day": 1, … } },
"DownloadedFile": null,
"ElapsedMs": 182.4,
"Results": [ { "Url": "…", "StatusCode": 200, "Status": "OK", "Reason": "OK", "Headers": { … }, "ContentType": "application/json", "Body": { … }, "DownloadedFile": null, "ElapsedMs": 182.4 } ],
"SuccessCount": 1,
"ErrorCount": 0
},
"Meta": { "Method": "GET", "Url": "…", "Connector": null, "Requests": 1, "Retries": 0 }
  • StatusCode, Reason, Url, Headers, ContentType, Body, DownloadedFile and ElapsedMs directly under Response belong to the first response. A following action reads them as {{GetWeather.Response.Body.current_weather.temperature}} or {{GetWeather.Response.Headers.ETag}}.
  • Results contains one entry per response (per page and per address), with Status OK or Error and, on an error, Error. {{Name.Response.Results.Body…}} from older workflows still reads the first response.
  • Body: JSON as an object or list, with its values as the server sent them (numbers stay numbers, true/false stay truth values, dates stay text); any other text as text; empty for an empty answer and with HEAD. Binary content (PDF, images …) is not put into Body, with a warning: save it with DownloadPath, or set ResponseFormat: Base64. Json reads the answer as JSON even without a JSON content type; Text always gives text. A response is kept up to 50 MB; larger ones only with DownloadPath.
  • Errors: an answer with a status code outside SuccessStatusCodes (by default everything but 2xx), a timeout or a connection error makes the action fail. The error names the method, the address, the code and the beginning of the server’s answer, which usually says what was wrong; the whole answer is in Body. As with every action, the run then ends or the workflow’s error handling applies.
  • Secrets: in the result’s parameters AuthToken and the values of headers and query parameters whose name contains e.g. key, token, secret, pass or auth are shown as ***; placeholders such as {{connector.Shop.ApiKey}} stay visible. In Url the values of such query parameters are masked as well.

In the diagram of the workflow editor the action has a form:

  • Request: Method and Address (URL) in one row. Connector lists the saved connectors; the button next to it reads them again. With a connector, a path such as /orders is added to its base URL, and the sign-in comes from the connector. Without a connector, choose under Sign-in None, Bearer token, User + password (AuthToken as user:password) or API key (in a header, default X-API-KEY).
  • Query parameters and Headers as a table of name and value; the empty row at the end adds an entry. A list as value (["a","b"]) repeats a query parameter’s name.
  • Body type: JSON, Form (URL-encoded), Multipart (fields and files), Text, XML, File or No body; hidden for GET and HEAD. Valid JSON is saved as an object, JSON with {{…}} outside quotes (numbers, whole objects) as text. Form and multipart are tables; a file in a multipart body is given as {"File": "C:\\path\\file.pdf"} in the value.
  • Response: Read the body as (Automatic, JSON, Text, Base64), Status codes that count as success (default 200-299), Save the response as a file and Replace an existing file.
  • More options: Time limit (seconds) (default 100, 0 = none), Retries (default 2), Follow redirects, Accept any certificate (only for servers in the local network), Fetch all pages (several pages, entries in Response.Items) with At most pages, Several addresses (one per line) with Several at once and At most at once, Pause before each further request (ms), and If-None-Match and If-Modified-Since.

In the test view you drag values of earlier steps from the Input column into the URL, the tables or the body. Test step really sends the request, also POST, PUT, PATCH and DELETE, and shows the result in the Output column.