# About Input and Output Arguments

> We have exposed the In and Out arguments, you are already used to in Studio, as a way to seamlessly integrate the tools you use, such as various DCMs or BPMs. This means that any process you create can now receive input arguments through the Orchestrator API or interface, as well as return output to all of the aforementioned. Last but not least, this is a stepping stone in linking processes together. This extensibility helps you better integrate UiPath® in your company’s ecosystem.

We have exposed the In and Out arguments, you are already used to in Studio, as a way to seamlessly integrate the tools you use, such as various DCMs or BPMs. This means that any process you create can now receive input arguments through the Orchestrator API or interface, as well as return output to all of the aforementioned. Last but not least, this is a stepping stone in linking processes together. This extensibility helps you better integrate UiPath® in your company’s ecosystem.

:::note
Only the In, Out, and In/Out arguments of the `.xaml` marked as **Main** in Studio are exposed to other apps. The arguments are saved in the `project.json` of a project.
:::

At design time, in Studio, the way you configure your project to accept In or Out arguments, with or without default values, enables you to use them in other third-party apps or Orchestrator. You can only make use of input and output arguments in Orchestrator and other third-party apps if you had added the corresponding arguments in your Studio project beforehand. If no arguments have been added in Studio, the following message is displayed: "Input arguments are not defined for this version.".

The In, Out, or In/Out arguments of a project become input and output arguments when published to Orchestrator. Please note that for In/Out arguments two different arguments are created and displayed in Orchestrator, an input and an output one, with the same name.

## Providing Argument Values

Values can be provided only to input arguments, either using Studio, Orchestrator or the Orchestrator API as follows:

### Studio

As default values, when creating the arguments. A short example can be found [here](https://docs.uipath.com/orchestrator/automation-suite/2.2510/user-guide/example-of-using-input-and-output-arguments#example-of-using-input-and-output-arguments). A default value provided for an argument in Studio can be overwritten in Orchestrator, both at process or job level.

:::note
Default values provided for In arguments in Studio are not displayed in Orchestrator, at any level.
:::

### Orchestrator

* At process level - in the **Arguments** tab of the **View Process** window, as explained [here](https://docs.uipath.com/orchestrator/automation-suite/2.2510/user-guide/managing-processes#managing-processes).
* At job level - in the **Arguments** tab of the **Start Job** window, as explained [here](https://docs.uipath.com/orchestrator/automation-suite/2.2510/user-guide/managing-jobs#managing-jobs).
* At trigger level - in the **Arguments** tab of the **Add trigger** window, as explained [here](https://docs.uipath.com/orchestrator/automation-suite/2.2510/user-guide/managing-triggers#creating-a-trigger).
  :::note
  A value provided for an input arguments at process level in Orchestrator is kept when you update the package, as long as the new package version does not concern arguments' definition. The storage limit for input/output arguments is 1 MB.
  :::

If you provide values for input arguments in Orchestrator, please note that they have to be provided in a JSON format. A few examples of how you can do this:

* **String** - the value has to be provided without quotation marks, such as `string`;
* **Int32** - provide the value as you would any integer, `11`;
* **Boolean** - two radio buttons are displayed to help you select true or false;
* **Double** - provide the value as a floating point value, such as `3.5`;
* **DateTime** - provide the value as a valid JSON, such as `"2012-04-23T18:25:43.511Z"`;
* **Array** - provide values as valid JSON, such as `[1, 1, 2, 3, 5, 8]` or `["firstString", "secondString"]`.
  :::note
  Any type of In argument can be used, yet please keep in mind that only primitives are validated by Orchestrator. When enumerated types (enums) are converted to JSON, each enumeration member is represented by an integer value, rather than by its name. This means the JSON representation of an enum is the numeric value of each member included in the original enumeration.
  :::

### Orchestrator API

* At package level - [to the /odata/Processes/UiPath.Server.Configuration.OData.SetArguments(key='key') endpoint](https://orchestrator.uipath.com/v2019/reference#section-adding-arguments-to-a-package);
* At process level - [as a PATCH request to the /odata/Releases(Id) endpoint](https://orchestrator.uipath.com/v2019/reference#section-changing-the-value-of-the-input-arguments-of-a-specific-process);
* At job level - [as a POST request to the /odata/Jobs/UiPath.Server.Configuration.OData.StartJobs endpoint](https://orchestrator.uipath.com/v2019/reference#section-starting-a-job-with-custom-input-arguments);
* At schedule level - [as a POST request to the /odata/ProcessSchedules endpoint](https://orchestrator.uipath.com/v2019/reference#section-starting-a-schedule-with-input-arguments-values).
  :::note
  For API calls, a maximum of 10,000 characters is accepted for the entire length of the JSON representation of input arguments, including argument names, all the escaped characters, spaces, brackets, and argument values.
  :::

## Displaying Argument Values

The value of an input argument is marked as follows:

* **No value** - No value was provided for the argument at process, job, schedule, or package level (in Studio).
* **Inherited from package** - If the value was provided by default in Studio. This message is displayed in the **Arguments** window of a specific package, as well as the **View Process**,**Start Job**, and **Add Schedule** windows.
* **Inherited from process** - If the value was provided at process level (in the **View Process** window). This message is displayed in the **Start Job** and **Add Schedule** window. In the **View Process** window, the value itself is displayed.

  Figure 1. Argument values

  ![Screenshot with the argument values page](https://dev-assets.cms.uipath.com/assets/images/orchestrator/orchestrator-screenshot-with-the-argument-values-page-226587-2bca00d0.webp)

If input or output argument values exist, they are displayed in the **Job Details** window. The input values are displayed in the aforementioned window in the following cases:

* they were added at the process level;
* they were added at the job level.

You can also view input and output arguments at the package level, in the **Package Versions** window. For more information, see the [Managing Packages](https://docs.uipath.com/orchestrator/automation-suite/2.2510/user-guide/managing-packages#managing-packages).

:::note
Workflows that were created and published to Orchestrator prior to v2018.3 must be re-uploaded with a v2018.3 (or later) Robot so that the In and Out arguments of the `Main.xaml` file can be displayed.
:::

## Argument Permissions

The following are required in relation to input and output arguments in Orchestrator:

* at package level - **View** on Packages;
* at process level - **View** and **Edit** on Processes;
* at job level - **Create** on Jobs;
* at trigger level - **Create** and/or **Edit** on Schedules.
