HTTPRequest – Structure
{ "Type": "HttpRequest", "Name": "SendOrder", "Parameters": { "Connector": "Shop", "Url": "/orders", "Method": "POST", "Body": { "invoice": "{{InitialData.Invoice.BT1}}", "amount": "{{InitialData.Invoice.BG22.BT112}}" } }}Parameters
Section titled “Parameters”| 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.
Sign-in
Section titled “Sign-in”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,FileNameandContentTypecan be added:{ "File": "{{FilePath}}", "FileName": "invoice.pdf", "ContentType": "application/pdf" }. A list sends several files under one name. - A
Content-TypeinHeadersreplaces the type from the table, e.g.application/vnd.api+json(except withMultipart, whose type carries the part boundary). - Older workflows with
"Body": { "Value": … }andBodyTyperaworbinarykeep working.
Unless set in Headers, every request is sent with User-Agent: RUNOS and Accept: */*. Cookies are not kept between requests.
Retries
Section titled “Retries”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.
Several pages
Section titled “Several pages”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.Itemscontains the entries of all pages in one list (fromvalue,items,data,results,recordsorentries, 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
MaxPagesstop it as well; each with a warning.
Downloads
Section titled “Downloads”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 isdownload. 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
Bodyas with every request.
Result
Section titled “Result”"Response": { "StatusCode": 200, "Reason": "OK", "Url": "https://api.open-meteo.com/v1/forecast?latitude=52.52&longitude=13.41¤t_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,DownloadedFileandElapsedMsdirectly underResponsebelong to the first response. A following action reads them as{{GetWeather.Response.Body.current_weather.temperature}}or{{GetWeather.Response.Headers.ETag}}.Resultscontains one entry per response (per page and per address), withStatusOKorErrorand, 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/falsestay truth values, dates stay text); any other text as text; empty for an empty answer and withHEAD. Binary content (PDF, images …) is not put intoBody, with a warning: save it withDownloadPath, or setResponseFormat: Base64.Jsonreads the answer as JSON even without a JSON content type;Textalways gives text. A response is kept up to 50 MB; larger ones only withDownloadPath.- 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 inBody. As with every action, the run then ends or the workflow’s error handling applies. - Secrets: in the result’s parameters
AuthTokenand the values of headers and query parameters whose name contains e.g.key,token,secret,passorauthare shown as***; placeholders such as{{connector.Shop.ApiKey}}stay visible. InUrlthe values of such query parameters are masked as well.
Form in the editor
Section titled “Form in the editor”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
/ordersis 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 (AuthTokenasuser:password) or API key (in a header, defaultX-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
GETandHEAD. 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 inResponse.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), andIf-None-MatchandIf-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.
