# HTTP

## Utility

### ASYNC Has Internet Check

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FR7vJSygPKLTtw5fXu3JE%2FHasInternet.png?alt=media&#x26;token=1c09f6c3-e6e7-433b-8239-e049fa623c9c" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### ASYNC Has Internet Check

## Overview

This utility checks whether the user's system is currently connected to the internet. It does this by performing a lightweight HTTP request to [**https://www.google.com**](https://www.google.com/). If the request is successful, the node returns **true** otherwise, it returns **false**.

## Inputs

**None.**

## Outputs

* **Success** – Executes If the user has a valid internet connection.
* **False** – Executes If the user does not have a valid internet connection.
* **Has Internet** – A Boolean output: **true** if the system is online, **false** otherwise.
  {% endhint %}

***

## ASYNC

### ASYNC HTTP(S) Request

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2F2nK01TiDQTEiec9JCJI1%2FHTTP(S).png?alt=media&#x26;token=43123710-fda2-404c-8eac-f367e37a1519" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### ASYNC HTTP(S) Request&#x20;

## Overview

Send a **HTTP(S)** request to the specified URL using one of several supported request types. This node is useful for interacting with **RESTful APIs**, **web services**, or **cloud-hosted endpoints**. Automatically parses the response data into a **JSON** output.

You can send requests with or without a body, specify the timeout, and receive detailed information back, including status code, content type, and response headers. Useful for game server communication, cloud saves, analytics, player profile data, etc.

If you’re expecting a binary response, the node will automatically detect **binary-only** data and place it into the **Out Binary Data** output.&#x20;

**Note**: If the response contains binary content *inside a JSON structure*, it will still be delivered through **Out Json** as part of the parsed JSON payload.<br>

## Supported Request Types

* **GET**– Retrieves data from the server (**default**).
* **POST** – Sends data to the server, typically for creating new resources.
* **PUT** – Sends data to update/replace a resource.
* **PATCH** – Partially updates an existing resource.
* **DELETE** – Deletes a resource on the server.
* **HEAD** – Retrieves headers only (no body).
* **TRACE** – Echoes the received request (**used for diagnostics**).

## Inputs

* **URL** – The full URL to send the request to.
* **Request Type** – Select the HTTP verb from the supported types above.
* **Timeout** – Duration (**in seconds**) to wait for a server response before failing.
* [**Request Body**](https://doc.uforge.co.uk/structs#make-download-settings) – (**Optional**) JSON data or payload to send with the request (used with **POST**, **PUT**, **PATCH**). And header definition.

## Outputs

* **On Success** – Triggered when a valid response is received.
* **On Progress** – Fires as the request is actively processed.
* **On Streamed** – Fires as chunked responses are recieved. **SSE** or **binary only** data.
* **On Failed** – Triggered if the request fails.
* **Out Json** – Parsed JSON response object.
* **Out Binary Data** - If binary-only data is detected, it will be provided here for direct access.
* **Response Code** – The response code from the server.
* **Content Type** – The Content-Type header of the server response.
* **Response Headers** – An array of all headers returned by the server.

**Note:** If an error occurs during the HTTP request. Either from the server or within the node itself. An error message will be returned as a JSON response for you to handle in "**Out Json**".
{% endhint %}

***

### ASYNC Download File

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FiOAIPcoqj7giL9oICKzb%2FDownloadFile.png?alt=media&#x26;token=5c105664-5ff9-422d-ad15-9ec41e1980b8" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### ASYNC Download File

## Overview

Send a **HTTP(S)** **file download** request to a specified URL. This node can either return the raw **binary data** of the file or save the file directly to the user’s machine, depending on the **Download Settings** provided.

## Inputs

* **URL** – The full **HTTP/HTTPS** address of the file to be downloaded.
* **Timeout** – How long (**in seconds**) to wait before the request times out.
* [**Download Settings**](https://doc.uforge.co.uk/structs#make-download-settings) – Optional structure to define how the downloaded file will be handled after download has finished, and header definition.

## Outputs

* **On Success** – Executes when the file download completes successfully.
* **On Progress** – Called as the download progresses. Useful for tracking progress percentage.
* **On Failed** – Executes if the download fails.
* **Download Percentage** – A float value between 0.0 and 100 representing the progress of the download.
* **Response Code** – The response code from the server.
* **Downloaded Binary Data** – The raw binary file data. Only available if file is not directly saved to disk.
* **Response Headers** – An array of all headers returned by the server.
  {% endhint %}

***

### ASYNC Upload Multipart File

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FMtAFr5boeO9sjvg3YYPe%2FUploadMultipartFile.png?alt=media&#x26;token=4b870d69-5d17-4565-8754-cb325944a506" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### ASYNC Upload Multipart File

## Overview

Send a **multipart/form-data  upload request** to a specified URL. It allows uploading one or more binary files (**e.g. images, logs, audio, Videos**) to an external API using the **multipart/form-data** format. The request is fully customizable via **Upload Settings** and supports attaching extra headers and multipart fields.&#x20;

The server's response is parsed and returned as a **JSON** object.

## Inputs

* **URL** – The target endpoint to send the file upload request to.
* **Timeout** – How long (**in seconds**) to wait before the request times out.
* [**Upload Settings**](https://doc.uforge.co.uk/structs#make-httprequest-settings) – A structure that defines how the request is configured, including custom headers and option to choose a random or defined boundary.
* [**File Data**](https://doc.uforge.co.uk/structs#make-upload-file-data) – An array of file definitions. Each entry in this array represents a single file to be uploaded and includes all of its corresponding settings. Each file definition also supports its own individual **multipart form data**, allowing for precise control over how each file is handled in the request.

## Outputs

* **On Success** – Triggered when the file upload is successfully completed and a valid response is received.
* **On Progress** – Called as data is being uploaded.
* **On Failed** – Triggered when the request fails.
* **Out Json** – The parsed server response.
* **Response Code** – The response code from the server.
* **Content Type** – The Content-Type header of the server response.
* **Response Headers** – An array of all headers returned by the server.

**Note:** If an error occurs during the **Multipart upload request**. Either from the server or within the node itself. An error message will be returned as a JSON response for you to handle.
{% endhint %}

***

### ASYNC Multipart Request

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2F5ubdIKvEDrXkQCDN6lmC%2FMultiPartRequest.png?alt=media&#x26;token=b2346216-2b0f-4b26-97a0-d70e879bf4c6" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### ASYNC Multipart Request

## Overview

Send a **multipart/form-data HTTP request** to a specified URL. It's commonly used to transmit structured data in separate parts. Ideal for **form** submissions or **API payloads**. The multipart request is configured using the "**Multipart Data"** struct. Which allows full control over **headers**, boundaries. And last but not least the core Multipart data.

## Inputs

* **URL** – The endpoint to which the multipart request is sent.
* **Timeout** – How long (**in seconds**) to wait before the request times out.
* [**Multipart Data**](https://doc.uforge.co.uk/structs#make-multipart-http-data) – Structured multipart data built using **Make Multipart HTTPData**. This includes parts (fields or files), optional custom headers, and multipart boundary configuration.

## Outputs

* **On Success** – Triggered when the server responds with a successful HTTP code.
* **On Progress** – Fires as data is being sent.
* **On Failed** – Triggered when the request fails or times out.
* **Out Json** – A parsed JSON object returned by the server.
* **Response Code** – The response code from the server.
* **Content Type** – The Content-Type header of the server response.
* **Response Headers** – An array of all headers returned by the server.

**Note:** If an error occurs during the **Multipart request**. Either from the server or within the node itself. An error message will be returned as a JSON response for you to handle.
{% endhint %}

***

## Functions that are shared between non ASYNC HTTP(S) Nodes

### Add Headers To Request

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FSXV0rrzgme34ExA1CuKm%2FAddHeaderToRequest.png?alt=media&#x26;token=c9b721a6-bd75-478a-9aac-e8c760090b1c" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Add Header To Request

## Overview

This utility node adds one or more **HTTP headers** to an existing HTTP request object. Headers are used to provide more information about the request. Such as authorization tokens, content types, client identifiers, or custom metadata. This is essential when communicating with APIs that require specific headers for access or formatting. This node must be called before the request is sent.

## Inputs

* **Target** – The **HTTP(S)** request object we want to set the headers for. The target node must be a child of class "**HTTPProxyBase**"
* **New Headers** – A map of headers to be added.

## Outputs

* **Success** – Returns **true** if the headers were successfully added to the request. Otherwise, returns **false.**
  {% endhint %}

***

### Remove Header From Request

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FYsnrvfgVZSP3WMbHDFhH%2FRemoveHeaderFromRequest.png?alt=media&#x26;token=0e85a00e-5213-44d5-becb-aa6da8b096ee" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Remove Header From Request

## Overview

This utility node removes a specified **HTTP(S)** header from an existing **HTTP(S)** request object provided by the "**Target**" input pin. Individual Headers are removed by specifying their key name. This can be useful when modifying or removing a single header from the existing request. This node must be called before the request is sent.

## Inputs

* **Target** – The **HTTP(S)** request object we want to remove the header for. The target node must be a child of class "**HTTPProxyBase**"
* **Key** – The name of the HTTP header to remove.

## Outputs

* **Success** – Returns **true** if the headers were successfully removed from the request. Otherwise, returns **false.**
  {% endhint %}

***

### Set New Timeout

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2F3ccfCH2PImliq4upZwKb%2FSetNewTimeout.png?alt=media&#x26;token=43187789-f5db-43c6-aa13-ffba55ead963" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Set New Timeout

## Overview

This utility node overrides the current timeout duration for a specific **HTTP(S)** request. The timeout defines how long (**in seconds**) the request will wait for a server response before being considered failed. This is particularly useful for adjusting responsiveness in low-latency or slow-network scenarios. This node must be called before the request is sent.

## Inputs

* **Target** – The **HTTP(S)** request object we want to set a new timeout for. The target node must be a child of class "**HTTPProxyBase**"
* **New Timeout** – Timeout duration in **seconds**.

## Outputs

None.
{% endhint %}

***

### Set New URL

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2F3eGTQkSR5surA5ft4ChZ%2FSetNewURL.png?alt=media&#x26;token=8357f003-bca3-4e04-937d-615bf325732b" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Set New URL

## Overview

This node updates the **target URL** of an existing **HTTP(S)** request. It allows you to dynamically modify the endpoint address that the request will be sent to. Useful when when reusing request logic with variable endpoints or having a dynamic endpoint input. This node must be called before the request is sent.

## Inputs

* **Target** – The **HTTP(S)** request object we want to set a new URL  for. The target node must be a child of class "**HTTPProxyBase**"
* **New URL** – A string representing the new destination URL.

## Outputs

None.
{% endhint %}

***

### Process HTTP Request

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FqMQZpwWuhgAct5bpk10r%2FProcessHTTPRequest.png?alt=media&#x26;token=83e2da27-b111-4bbf-bc2c-65b6ac9819d6" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

#### Process HTTP Request

## Overview

This node finalizes and sends a constructed **HTTP(S)** request to its desired URL using the settings and data you've defined prior to sending the request. It is the final step in sending the request and must be called after all modifications (e.g., setting URL, headers, timeout) are complete.

## Inputs

* **Target** – The **HTTP(S)** request object we want to set a new URL  for. The target node must be a child of class "**HTTPProxyBase**"

## Outputs

* **Success** – Returns **true** if the request was successfully sent to the endpoint. Otherwise returns **false.**
  {% endhint %}

***

### Cancel HTTP Request

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2F4yrmPmJR5vl1boAtY0Lb%2FCancelHTTPRequest.png?alt=media&#x26;token=72c62016-2012-4f7e-8a82-b2a08b3a0bf0" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Cancel HTTP Request

## Overview

This node cancels an **in-progress HTTP(S) request** tied to a given request object. If the request is currently executing or pending, it will be immediately terminated and treated as failed. This is useful for cases where the result is no longer needed.

## Inputs

* **Target** – The **HTTP(S)** request object we want to set a new URL  for. The target node must be a child of class "**HTTPProxyBase**"

## Outputs

* **Success** – Returns **true** if the request was successfully cancelled. Otherwise returns **false.**
  {% endhint %}

***

## Non ASNYC HTTP(S) Request

### Create New HTTP Request

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FVnI88XrysRv8GAoofJyg%2FCreateNewHTTPRequest.png?alt=media&#x26;token=10742dc7-875c-4e0b-aadc-258e22c739c2" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Create New HTTP Request

## Overview

This node mirrors the functionality of the [**ASYNC** version](#async-http-s-request) but creates a new **non-ASYNC** **HTTP(S)** request instance. Since it is **non-ASYNC**, the request does not need to be sent immediately after creation. The node outputs an "**HTTPProxy"** object, which can be manually configured and executed. It is typically used in scenarios where developers need direct control over request execution, progress tracking, and the ability to cancel the request.

## Supported Request Types

* **GET**– Retrieves data from the server (**default**).
* **POST** – Sends data to the server, typically for creating new resources.
* **PUT** – Sends data to update/replace a resource.
* **PATCH** – Partially updates an existing resource.
* **DELETE** – Deletes a resource on the server.
* **HEAD** – Retrieves headers only (no body).
* **TRACE** – Echoes the received request (**used for diagnostics**).

## Inputs

* **URL** – The full URL to send the request to.
* **Request Type** – Select the HTTP verb from the supported types above.
* **Timeout** – Duration (**in seconds**) to wait for a server response before failing.
* [**Request Body**](https://doc.uforge.co.uk/structs#make-httprequest-settings) – (**Optional**) JSON data or payload to send with the request (used with **POST**, **PUT**, **PATCH**). And header definition.

## Outputs

* **Success -** Returns **true** if the request was created successfully. Otherwise, returns **false**.
* **Out HTTPRequest** - A proxy instance referencing your **HTTP(S)** request, which must be configured before execution.
  {% endhint %}

***

### Set HTTP Request Body

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FN9iz0A4Tbb3vIDTKirAJ%2FSetHTTPRequestBody.png?alt=media&#x26;token=17c5f20f-f116-4e45-acd7-de09e0168af1" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Set HTTP Request Body

## Overview

This node overrides the **HTTP(S)** request body with the new provided body. It will fully override the body. This is useful for cases where the full body is dynamically populated and needs to be updated. This node must be called before the request is sent.

## Inputs

* **Target** – The **HTTP(S)** request object we want to override the body for. The target node must be a child of class "**HTTPProxy**"
* [N**ew Request Body**](https://doc.uforge.co.uk/structs#make-http-body) – The new struct that will contain the new body of the request. This will override the current body of the request with the new passed in struct.

## Outputs

**None.**
{% endhint %}

***

### Set HTTP Request Type

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FQfonD8Gox47xdiOPD76i%2FSetHTTPRequestType.png?alt=media&#x26;token=8a26a772-e70e-409a-a1dd-79a11eed50a3" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Set HTTP Request Type

## Overview

This node overrides the **HTTP(S)** Verb for the specified request. This is a fundamental part of defining how the request will behave and interact with an API endpoint. This is a useful node if the Verb of the **HTTP(S)** request needs to change dynamically. This node must be called before the request is sent.

## Supported Request Types

* **GET**– Retrieves data from the server (**default**).
* **POST** – Sends data to the server, typically for creating new resources.
* **PUT** – Sends data to update/replace a resource.
* **PATCH** – Partially updates an existing resource.
* **DELETE** – Deletes a resource on the server.
* **HEAD** – Retrieves headers only (no body).
* **TRACE** – Echoes the received request (**used for diagnostics**).

## Inputs

* **Target** – The **HTTP(S)** request object we want to override the Request type for. The target node must be a child of class "**HTTPProxy**"
* **New Request Type**– The new request type to override the target **HTTP(S) proxy** request.

## Outputs

**None.**
{% endhint %}

***

### Delegate - OnSuccess

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FqyBVL4EkxKT5HemMsAac%2FHTTPOnSuccess.png?alt=media&#x26;token=b6b68fa2-cdd6-48f7-adb0-6bd652635cfa" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Delegate OnSuccess

## Overview

This node is used to bind a and listen to the event **On Success,** for [non ASYNC **HTTP(S)** request](#create-new-http-request). When the **HTTP** request completes successfully, the bound event is triggered and supplied you with the response data. The event must be bound **before** the request is initiated to ensure proper tracking during execution.

## Inputs

* **Target** – The **HTTP(S)** request object we want to bind the delegate from. The target node must be a child of class "**HTTPProxy**"

## Outputs

* **Out Json** – Parsed JSON response object.
* **Out Binary Data** - If binary-only data is detected, it will be provided here for direct access.
* **Response Code** – The response code from the server.
* **Content Type** – The Content-Type header of the server response.
* **Response Headers** – An array of all headers returned by the server.
  {% endhint %}

***

### Delegate - OnProgress

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2Fhgc69pILTfgPkhdhcdHy%2FHTTPOnProgress.png?alt=media&#x26;token=8a36a6a7-fb59-4af6-b3d4-5feb9c63ccd1" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Delegate OnProgress

## Overview

This node is used to bind and listen to the **On Progress** event for [non-ASYNC **HTTP(S)** requests](#create-new-http-request). It allows you to monitor and respond to the progress of an ongoing **HTTP** request. The event must be bound **before** the request is initiated to ensure proper tracking during execution.

## Inputs

* **Target** – The **HTTP(S)** request object we want to bind the delegate from. The target node must be a child of class "**HTTPProxy**"

## Outputs

* **Out Json –** Parsed JSON response object.
* **Out Binary Data** - If binary-only data is detected, it will be provided here for direct access.
* **Response Code** – The response code from the server.
  {% endhint %}

### Delegate - OnStreamed

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2Fcw8fBJxG1Itht1XZWKR0%2FOnStreamed.png?alt=media&#x26;token=a03944da-d6fb-49a6-baf1-321b377d3ec8" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Delegate OnStreamed

## Overview

This node is used to bind to and listen for the **On Streamed** event for [non-ASYNC HTTP(S) requests](#create-new-http-request). It allows you to receive streamed responses from a server. The event can trigger multiple times as complete chunks of the response are received.

## Inputs

* **Target** – The **HTTP(S)** request object we want to bind the delegate from. The target node must be a child of class "**HTTPProxy**"

## Outputs

* **Out Json** – Used for **SSE** (**Server-Sent Events**) responses. Events are encoded as JSON, allowing you to extract and use the data.
* **Out Binary Data** – Contains the raw binary data. Use this if you are expecting a binary-only response.
  {% endhint %}

***

***

### Delegate - OnFailed

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FbQT69YdQ9cBtvOyufIk1%2FHTTPOnFailed.png?alt=media&#x26;token=d7ec1585-d475-4921-8bda-6321e9984d69" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Delegate OnFailed

## Overview

This node is used to bind and listen to the **On Failed** event for [non-ASYNC **HTTP(S)** requests.](#create-new-http-request) If the request fails, either due to a network error, timeout, invalid endpoint, or server-side issue. The bound custom event will be triggered, allowing you to handle the failure. The input pins do not have to be populated with creation of this proxy object.

## Inputs

* **Target** – The **HTTP(S)** request object we want to bind the delegate from. The target node must be a child of class "**HTTPProxy**"

## Outputs

* **Out Json** – Parsed JSON response object.
* **Out Binary Data** - If binary-only data is detected, it will be provided here for direct access.
* **Response Code** – The response code from the server.
* **Content Type** – The Content-Type header of the server response.
* **Response Headers** – An array of all headers returned by the server.

**Note:** If an error occurs during the **HTTP Request**. Either from the server or within the node itself. An error message will be returned as a JSON response for you to handle.
{% endhint %}

***

## Non ASNYC Multipart Request

### Create New Multipart Request

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FCJYYOxcEjIudWJf4odts%2FCreateNewMultipartRequest.png?alt=media&#x26;token=0fc7fb1a-424f-46e4-8d7f-d3a41497209d" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Create New Multipart Request

## Overview

This node mirrors the functionality of the [ASYNC **multipart**](#async-multipart-request) variant but creates a new **non-ASYNC** **HTTP(S) multipart request** instance. Since it is **non-ASYNC**, the request does not need to be sent immediately after creation.&#x20;

The node outputs an **MultipartProxy** object, which can be manually configured and executed at a later time. This setup is ideal for developers who require direct control over how the request is  sent, tracked and potentially cancelled. The input pins do not have to be populated with creation of this proxy object.

## Inputs

* **URL** – The target URL to which the multipart request will be sent.
* **Timeout** – Duration (**in seconds**) to wait for a server response before failing.
* [**Multipart Data**](https://doc.uforge.co.uk/structs#make-multipart-http-data) – Struct multipart data to be sent with the request. This includes the main body of the request.

## Outputs

* **Success -** Returns **true** if the request was created successfully. Otherwise, returns **false**.
* **Out Multipart Request** - A proxy instance referencing your **Multipart** request, which must be configured before execution.
  {% endhint %}

***

### Add Multi-part Data To Request

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FySFSjKnggmtwNzTGcTrJ%2FAddMultipartDataToRequest.png?alt=media&#x26;token=7e511675-96e2-4614-8549-660d3b18368d" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Add Multi-part Data To Request

## Overview

This node appends additional multipart data to an existing **multipart HTTP request**. It is used in scenarios where you need to include more multipart fields after the initial request object has been constructed. This node must be called before the request is sent.

## Inputs

* **Target** – The multipart request object to which the new multipart data will be appended. The target node must be a child of the "**MultipartProxy"** class.
* **New Multipart Data** – A map that holds key-value pairs. This map represents the new multipart data you want to add to your request.

## Outputs

* **Success -** Returns **true** if the request was created successfully. Otherwise, returns **false**.
  {% endhint %}

***

### Toggle Random Boundary&#x20;

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FkOG67Ah3Kjur5hbKbVKA%2FToggleRandomBoundary.png?alt=media&#x26;token=6e0fabac-a234-4ebc-849e-05307d61606a" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Toggle Random Boundary

## Overview

This node toggles the "**Random Boundary**" setting used in **multipart** **HTTP** requests. Boundaries are required in multipart formats to separate parts of the request payload. When enabled, a randomly generated boundary will be used. when disabled, a custom boundary must be supplied. This node must be called before the request is sent.

## Inputs

* **Target** – The multipart request object to which the new random boundary bool set. The target node must be a child of the "**MultipartProxy"** class.
* **New Random Boundary -** Set to **true** to enable random boundary generation, set to **false** to disable it, requiring manual boundary configuration.

## Outputs

None.
{% endhint %}

***

### Set Random Boundary

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FmhgnAvozkb8QSePExdW1%2FSetRandomBoundary.png?alt=media&#x26;token=0278b0ae-b922-44e8-a744-410a801c6798" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Set Random Boundary

## Overview

This node sets a custom boundary string for a **multipart HTTP request**. **Multipart** boundaries are used to define where each part of the payload begins and ends. This node gives you manual control over the boundary value when random generation is disabled. This node must be called before the request is sent.

**Note:** This node has no effect if the "**Random Boundary**" setting is enabled. To use this node effectively, make sure **random boundary** generation is turned off using the [**Toggle Random Boundary**](#toggle-random-boundary) node, or in the request body.

## Inputs

* **Target** – The multipart request object to which the new boundary will be set. The target node must be a child of the "**MultipartProxy"** class.
* **New Boundary -** A custom string value to use as the **multipart boundary**. Must follow proper boundary formatting.

## Outputs

None.
{% endhint %}

***

### Set Request Data

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FW6wqnXchYR2sb6kENH9p%2FSetRequestData.png?alt=media&#x26;token=1f3eda88-96c8-4052-8414-43cc9f03cf4f" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Set Request Data

## Overview

This node overrides the entire **multipart body** of a **multipart HTTP reques**t with new **multipart data**. It is used when you want to fully replace the request's contents with a new set of multipart data.

This is ideal for situations where you've generated multipart data externally or want to reuse predefined data across multiple requests. This node must be called before the request is sent.

## Inputs

* **Target** – The multipart request object whose data is to be overridden. The target must be a child of "**MultipartProxy"** class.
* [**New Multipart Data**](https://doc.uforge.co.uk/structs#make-multipart-http-data) **-** The new multipart data that will completely replace the current **multipart payload**.

## Outputs

None.
{% endhint %}

***

### Delegate - OnSuccess

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FqD18iSQj02nZO27C0Rhn%2FMultipartOnSuccess.png?alt=media&#x26;token=6fb177b7-adcd-4318-b31b-8a1491ff90d1" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Delegate OnSuccess

## Overview

This node is used to bind a and listen to the event **On Success,** for non ASYNC **multipart HTTP** request. When the **multipart HTTP reques**t completes successfully, the bound event is triggered and supplied you with the response data. The event must be bound **before** the request is initiated to ensure proper tracking during execution.

## Inputs

* **Target** – The **multipart HTTP reques**t object we want to bind the delegate from. The target node must be a child of class "MultipartProxy"

## Outputs

* **Out Json** – Parsed JSON response object.
* **Response Code** – The response code from the server.
* **Content Type** – The Content-Type header of the server response.
* **Response Headers** – An array of all headers returned by the server.
  {% endhint %}

***

### Delegate - OnProgress

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2F2wYpbLnkzk29x5Xnoc5Y%2FMultipartOnProgress.png?alt=media&#x26;token=ae928637-34bf-465e-9bb8-35d9e933b61d" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Delegate OnProgress

## Overview

This node is used to bind and listen to the **On Progress** event for non-ASYNC **multipart HTTP** requests. It allows you to monitor and respond to the progress of an ongoing **multipart HTTP** request. The event must be bound **before** the request is initiated to ensure proper tracking during execution.

## Inputs

* **Target** – The **multipart HTTP reques**t object we want to bind the delegate from. The target node must be a child of class "MultipartProxy"

## Outputs

* **Out Json** – Parsed JSON response object.
* **Response Code** – The response code from the server.
  {% endhint %}

***

### Delegate - OnFailed

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2Fav9rCvTCM1vovTW4PJ6J%2FMultipartOnFailed.png?alt=media&#x26;token=ef9d8550-c410-41d5-b0c6-df58a944ff0b" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Delegate OnFailed

## Overview

This node is used to bind and listen to the **On Failed** event for non-ASYNC **multipart HTTP** requests. If the request fails, either due to a network error, timeout, invalid endpoint, or server-side issue. The bound custom event will be triggered, allowing you to handle the failure. The input pins do not have to be populated with creation of this proxy object.

## Inputs

* **Target** – The **multipart HTTP reques**t object we want to bind the delegate from. The target node must be a child of class "MultipartProxy"

## Outputs

* **Out Json** – Parsed JSON response object.
* **Response Code** – The response code from the server.
* **Content Type** – The Content-Type header of the server response.
* **Response Headers** – An array of all headers returned by the server.

**Note:** If an error occurs during the **Multipart request**. Either from the server or within the node itself. An error message will be returned as a JSON response for you to handle.
{% endhint %}

***

## Non ASNYC Upload Multipart Request

### Create New Upload Multipart Request

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FYR9vgGGHB06Yl28ad1lG%2FCreateNewUploadMultipartRequest.png?alt=media&#x26;token=f2c3ba9b-7faa-460d-b0ad-e1a7881e0b3b" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Create New Upload Multipart Request

## Overview

This node mirrors the functionality of the [ASYNC **multipart Upload** ](#async-upload-multipart-file)variant but creates a new **non-ASYNC** **upload multipart HTTP** request object. It is specifically designed to send binary files and associated metadata to a specified URL via a **multipart request format**. Unlike regular multipart requests, this version includes dedicated support for file data structures and upload configuration.

The node outputs a "**MultipartUploadProxy"** object that can be further customized before executing the upload.

## Inputs

* **URL** – The target URL to which the multipart request will be sent.
* **Timeout** – Duration (**in seconds**) to wait for a server response before failing.
* [**Upload Settings**](https://doc.uforge.co.uk/structs#make-httprequest-settings) **-** A struct that contains core configuration settings for the request, such as boundary definitions and headers.
* [**File Data**](https://doc.uforge.co.uk/structs#make-upload-file-data) **-** The primary array containing all the necessary information to construct the upload request. Each entry in the array represents a separate file to be uploaded.

## Outputs

* **Success -** Returns **true** if the request was created successfully. Otherwise, returns **false**.
* **Out Multipart Request** - A proxy instance referencing your "**MultipartUploadProxy"** request, which must be configured before execution.
  {% endhint %}

***

### Set File Data

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FJXxDprR2EIX5U7iWVX04%2FSetFileData.png?alt=media&#x26;token=90a673e8-2a4b-45f4-86e7-3eed58edc7f8" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Set File Data

## Overview

This node overrides the primary array holding all the files you wish to upload with the new passed in array data. It is typically used when you want to replace all files with new data. This node must be called before the request is sent.

## Inputs

* **Target** – The Upload multipart request object whose data is to be overridden. The target must be a child of "**MultipartUploadProxy"** class.
* [**New File Data**](https://doc.uforge.co.uk/structs#make-upload-file-data) **-** The new array containing individual file data that will override the existing data.

## Outputs

None.
{% endhint %}

***

### Add File Binary Data

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FroZaJXGHlTZ1eycZMxwt%2FAddFileBinaryData.png?alt=media&#x26;token=571b7ae9-e882-4086-ba70-c60924f452e1" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Add File Binary Data

## Overview

This node appends a single binary file entry to the internal file data array used in a **multi-part upload HTTP request**. Unlike [ **Set File Data**](#set-file-data), which replaces the entire array, this node allows incremental addition of individual files without overriding existing entries. Useful when constructing file uploads dynamically.

## Inputs

* **Target** – The multipart request instance to which the new binary file will be added. The target must be a child of "**MultipartUploadProxy"** class.
* [**New File Data**](https://doc.uforge.co.uk/structs#make-upload-file-data) **-** The data for the new file to be uploaded. This includes metadata such as file name, content type, and the binary payload.

## Outputs

None.
{% endhint %}

***

### Set Upload Settings

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FBS2JQ2Q8GGZak1rxvGh2%2FSetUploadSettings.png?alt=media&#x26;token=ac5438a8-7c37-4393-bdba-0b76311f0438" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Set Upload Settings

## Overview

This node overrides the current upload configuration of a **multipart upload request** by applying a new set of upload settings. These settings control how the **multipart HTTP Upload request** will behave. Such as the boundary string used or headers.

## Inputs

* **Target** – The multipart request instance whose settings will be overridden. The target must be a child of "**MultipartUploadProxy"** class.
* [**New Upload Settings**](https://doc.uforge.co.uk/structs#make-httprequest-settings) **-** The new settings structure containing configuration for the **Multipart Upload Request.**

## Outputs

None.
{% endhint %}

***

### Toggle Random Boundary&#x20;

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FjGVekRpT3LNyXS2iaew5%2FToggleRandomBoundaryUpload.png?alt=media&#x26;token=963c4d03-2351-4206-b988-92b3602edc92" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Toggle Random Boundary

## Overview

This node toggles the "**Random Boundary**" setting used in **multi-part upload HTTP** requests. Boundaries are required in multipart formats to separate parts of the request payload. When enabled, a randomly generated boundary will be used. when disabled, a custom boundary must be supplied. This node must be called before the request is sent.

## Inputs

* **Target**– The multipart request object to which the new random boundary bool set. The target node must be a child of the "**MultipartUploadProxy"** class.
* **New Random Boundary**: Set to **true** to enable random boundary generation, set to **false** to disable it, requiring manual boundary configuration.

## Outputs

None.
{% endhint %}

***

### Set Random Boundary

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FlVXAnIAvm4gqh2FjYGMw%2FSetRandomBoundaryUpload.png?alt=media&#x26;token=ed0c515a-1eb0-496a-b339-1171a2a65321" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Set Random Boundary

## Overview

This node sets a custom boundary string for a **multi-part upload HTTP request**. **Multipart** boundaries are used to define where each part of the payload begins and ends. This node gives you manual control over the boundary value when random generation is disabled. This node must be called before the request is sent.

**Note:** This node has no effect if the "**Random Boundary**" setting is enabled. To use this node effectively, make sure **random boundary** generation is turned off using the [**Toggle Random Boundary**](#toggle-random-boundary-2) node, or in the request body.

## Inputs

* **Target**– The multipart request object to which the new boundary will be set. The target node must be a child of the "**MultipartUploadProxy"** class.
* **New Boundary:** A custom string value to use as the **multipart boundary**. Must follow proper boundary formatting.

## Outputs

None.
{% endhint %}

***

### Delegate - OnSuccess

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2FqD18iSQj02nZO27C0Rhn%2FMultipartOnSuccess.png?alt=media&#x26;token=6fb177b7-adcd-4318-b31b-8a1491ff90d1" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Delegate OnSuccess

## Overview

This node is used to bind a and listen to the event **On Success,** for non ASYNC **multi-part upload HTTP** request. When the **multi-part upload HTTP reques**t completes successfully, the bound event is triggered and supplied you with the response data. The event must be bound **before** the request is initiated to ensure proper tracking during execution.

## Inputs

* **Target** – The **multi-part upload HTTP reques**t object we want to bind the delegate from. The target node must be a child of class "**MultipartUploadProxy**"

## Outputs

* **Out Json** – Parsed JSON response object.
* **Response Code** – The HTTP status code.
* **Content Type** – The Content-Type header of the server response.
* **Response Headers** – An array of all headers returned by the server.
  {% endhint %}

***

### Delegate - OnProgress

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2F2wYpbLnkzk29x5Xnoc5Y%2FMultipartOnProgress.png?alt=media&#x26;token=ae928637-34bf-465e-9bb8-35d9e933b61d" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Delegate OnProgress

## Overview

This node is used to bind and listen to the **On Progress** event for non-ASYNC **multi-part upload HTTP** requests. It allows you to monitor and respond to the progress of an ongoing **multi-part upload HTTP** request. The event must be bound **before** the request is initiated to ensure proper tracking during execution.

## Inputs

* **Target** – The **multi-part upload HTTP reques**t object we want to bind the delegate from. The target node must be a child of class "**MultipartUploadProxy**"

## Outputs

**None.**
{% endhint %}

***

### Delegate - OnFailed

<div data-full-width="false"><figure><img src="https://1493671685-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHQWpDyCKZeCL1Ky9OYvt%2Fuploads%2Fav9rCvTCM1vovTW4PJ6J%2FMultipartOnFailed.png?alt=media&#x26;token=ef9d8550-c410-41d5-b0c6-df58a944ff0b" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}

### Delegate OnFailed

## Overview

This node is used to bind and listen to the **On Failed** event for non-ASYNC **multi-part upload HTTP** requests. If the request fails, either due to a network error, timeout, invalid endpoint, or server-side issue. The bound custom event will be triggered, allowing you to handle the failure. The input pins do not have to be populated with creation of this proxy object.

## Inputs

* **Target** – The **multi-part upload HTTP reques**t object we want to bind the delegate from. The target node must be a child of class "**MultipartUploadProxy**"

## Outputs

* **Out Json** – Parsed JSON response object.
* **Response Code** – The HTTP status code.
* **Content Type** – The Content-Type header of the server response.
* **Response Headers** – An array of all headers returned by the server.

**Note:** If an error occurs during the **Multipart upload request**. Either from the server or within the node itself. An error message will be returned as a JSON response for you to handle.
{% endhint %}
