

```json
{
  "openapi": "3.0.1",
  "info": {
    "title": "Application Linking",
    "description": " # Overview\nThe Application Linking API provides HTML pages and JSON endpoints to share authenticated data across Asset Manager applications.\n# Deeplink Sharing Service\nThe Deeplink Sharing Service allows you to save and fetch custom data structure through sharable URLs.\n# Unity Hub Activation Service\nThe Unity Hub Activation Service provides HTML pages to activate the Unity Hub and trigger a wide range of operations for local Unity projects: \r\n- create a new project \r\n- install a package \r\n- download an asset \r\n- forward a URL to a C# namespace deeplink handler\n\r\nWhen applicable, fallback instructions are displayed in the HTML body of the response and provides an alternate clickable URL to support earlier versions of the Unity Editor.\n\r\nNative apps and local processes are expected to use the unityhub://editor/* URL scheme directly to activate the Unity Hub without opening a browser, avoiding an additional confirmation prompt.\n# Unity Hub Activation Service - shortened URLs\nAll URLs supported by the Unity Hub Activation Service have a shortened version for easier sharing and usability. \r\n- `https://link.unity.com/hub/project/*` \r\n- `https://link.unity.com/hub/editor/*` \r\n- `https://link.unity.com/hub/package-manager/*`\n# URL Redirection Service\nThe URL Redirection service provides an endpoint that returns web application URLs for an Asset Manager Services deployment.\n# Authentication Service\nThe Authentication Service provides HTML pages and JSON endpoints that allow applications to initiate and complete browser-based sign-in flows with supported identity providers. Proof Key Code Exchange (PKCE)-compliant, it allows apps, web apps, and Command Line Interface (CLI) tools to acquire a JSON Web Token (JWT) for accessing Asset Manager and other Unity Cloud Services endpoints.\n# Useful Links\n\r\n- [Unity Hub manual about deeplinking support for local projects](https://docs.unity3d.com/hub/manual/DeeplinkingSupport.html) \r\n- [Unity Editor C# API about DeeplinkHandlerAttribute](https://docs.unity3d.com/6000.3/Documentation/ScriptReference/DeeplinkHandlerAttribute-ctor.html) \r\n- [Unity Cloud Deep Linking package documentation](https://docs.unity3d.com/Packages/com.unity.cloud.deep-linking@latest)\n# About HTML redirection to external process\n\r\nPlease note that redirection from an HTML page to a native app or a local process always requires the user's confirmation to proceed. ",
    "contact": {
      "name": "API Support",
      "x-slack-channel": "#unity-cloud-support"
    },
    "license": {
      "name": "Unity Legal",
      "url": "https://unity.com/legal"
    },
    "version": "v1.0.0"
  },
  "servers": [
    {
      "url": "https://staging.services.api.unity.com",
      "description": "Staging"
    },
    {
      "url": "https://services.api.unity.com",
      "description": "Production"
    }
  ],
  "paths": {
    "/app-linking/v1/login/redirect/{redirectHint}/{authenticationDomain}/{processId}": {
      "get": {
        "security": [
          {}
        ],
        "tags": [
          "Authentication Service"
        ],
        "summary": "Redirect the user to the authentication authority to initiate a login request.",
        "operationId": "RedirectToAuthenticationDomainForProcess",
        "parameters": [
          {
            "name": "redirectHint",
            "in": "path",
            "description": "The redirect hint contains either an absolute HTTP URL, an HTTP loopback URL, a channel URL, or a custom scheme URL to activate the application that initiated the login action.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "authenticationDomain",
            "in": "path",
            "description": "The URL-encoded authentication domain to redirect the user for manual authentication as part of the login process.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "processId",
            "in": "path",
            "description": "A unique processId identifying a running application on the device.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Return an HTML document that instructs the user to manually approve a login operation in the application that initiated the login request.",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/HTMLRedirectionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/app-linking/v1/signout/completed/{redirectHint}/{processId}": {
      "get": {
        "security": [
          {}
        ],
        "tags": [
          "Authentication Service"
        ],
        "summary": "Redirect the user who has signed out to the application that initiated the sign out action.",
        "operationId": "RedirectSignoutToProcess",
        "parameters": [
          {
            "name": "redirectHint",
            "in": "path",
            "description": "The redirect hint contains either an absolute HTTP URL, an HTTP loopback URL, a channel URL or a custom scheme URL to activate the application that initiated the signout action.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "processId",
            "in": "path",
            "description": "A unique processId identifying a running application on the device.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Return an HTML document with redirection code to activate the installed application on the device. If the redirect hint is a channel URL or an HTTP loopback URL, then the redirection code is removed from the HTML document and user will be provided with manual instructions.",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/HTMLRedirectionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/app-linking/v1/link/{redirectHint}/{token}": {
      "get": {
        "security": [
          {}
        ],
        "tags": [
          "Deeplink Sharing Service"
        ],
        "summary": "Redirect the unique shared link to an installed application destination.",
        "operationId": "RedirectDeepLink",
        "parameters": [
          {
            "name": "redirectHint",
            "in": "path",
            "description": "The redirect hint contains the custom URI scheme that uiquely identifies an application on a device.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "token",
            "in": "path",
            "description": "Unique application link for a resource id, a resource type, and query parameters.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Return an HTML document with redirection code to activate the installed application on the device with the shared link.",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/HTMLRedirectionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/app-linking/v1/channels": {
      "post": {
        "security": [
          {}
        ],
        "tags": [
          "Authentication Service"
        ],
        "summary": "Create a unique channel identifier.",
        "operationId": "CreateChannel",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChannelRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return a unique channel identifier."
          },
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateChannelResponse"
                }
              }
            }
          }
        }
      }
    },
    "/app-linking/v1/channels/{channelId}": {
      "put": {
        "security": [
          {}
        ],
        "tags": [
          "Authentication Service"
        ],
        "summary": "Update a response in a uniquely identified channel.",
        "operationId": "UpdateChannel",
        "parameters": [
          {
            "name": "channelId",
            "in": "path",
            "description": "Unique channel identifier.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateChannelRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return an OK status if the request response is updated on the uniquely identified channel."
          }
        }
      },
      "get": {
        "security": [
          {}
        ],
        "tags": [
          "Authentication Service"
        ],
        "summary": "Get the request and the request response of a uniquely identified channel.",
        "operationId": "GetChannel",
        "parameters": [
          {
            "name": "channelId",
            "in": "path",
            "description": "Unique channel identifier.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Return the request and the request response of a uniquely identified channel.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetChannelResponse"
                }
              }
            }
          }
        }
      }
    },
    "/app-linking/v1/links/{linkToken}": {
      "get": {
        "tags": [
          "Deeplink Sharing Service"
        ],
        "summary": "Get the resource id, resource type, and query parameters of an application link token.",
        "operationId": "GetDeepLink",
        "parameters": [
          {
            "name": "linkToken",
            "in": "path",
            "description": "Unique token to retrieve the resource id, resource type, and query parameters of an application link.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Return the resource id, resource type, and query parameters from an application link token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetDeepLinkResponse"
                }
              }
            }
          },
          "403": {
            "description": "Return forbidden if user does not have read access to requested resource id."
          }
        }
      }
    },
    "/app-linking/v1/links": {
      "post": {
        "tags": [
          "Deeplink Sharing Service"
        ],
        "summary": "Create a unique application link token for a resource id, a resource type, and query parameters.",
        "operationId": "CreateDeepLink",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDeepLinkRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateDeepLinkResponse"
                }
              }
            }
          },
          "403": {
            "description": "Returns forbidden if user does not have write access to requested resource id."
          }
        }
      }
    },
    "/app-linking/v1/web-app-urls": {
      "get": {
        "security": [
          {}
        ],
        "tags": [
          "URL Redirection Service"
        ],
        "summary": "Get the absolute base URL of web applications supported on the current service provider.",
        "operationId": "GetDeepLink",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Returns a dictionary of web applications base URL.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetWebAppUrlsResponse"
                }
              }
            }
          }
        }
      }
    },
    "/app-linking/v1/hub/package-manager/{assetTypeAction}/{assetIdentifier}": {
      "get": {
        "security": [
          {}
        ],
        "tags": [
          "Unity Hub Activation Service"
        ],
        "summary": "Activate the Unity Hub with the intention to select a local project to download an asset or install a unity package.",
        "description": "<br /><br />Shortened URL:<br />`https://link.unity.com/hub/package-manager/{assetTypeAction}/{assetIdentifier}`",
        "operationId": "HubRedirectPackageManager",
        "parameters": [
          {
            "name": "assetTypeAction",
            "in": "path",
            "description": "Use '/download/' segment value for an asset store asset, and use '/install/' segment value for a unity package.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "assetIdentifier",
            "in": "path",
            "description": "Use the numeric asset identifier segment value for an asset store asset (ex: '/475680'), and use the namespace of the unity package  (ex: '/com.unity.cloud.assets') or with an optional version (ex: '/com.unity.cloud.assets@1.10.0') as the segment value for unity packages.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Return an HTML document that activate the Unity Hub.",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/HTMLRedirectionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/app-linking/v1/hub/project/new": {
      "get": {
        "security": [
          {}
        ],
        "tags": [
          "Unity Hub Activation Service"
        ],
        "summary": "Activate the Unity Hub with the intention to display the 'Create new project' interface.",
        "description": "<br /><br />Shortened URL:<br />https://link.unity.com/hub/project/new",
        "operationId": "HubRedirectProjectNew",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Return an HTML document that activate the Unity Hub.",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/HTMLRedirectionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/app-linking/v1/hub/project/new/package-manager/{assetTypeAction}/{assetIdentifier}": {
      "get": {
        "security": [
          {}
        ],
        "tags": [
          "Unity Hub Activation Service"
        ],
        "summary": "Activate the Unity Hub with the intention to open the package manager in a newly created local project.",
        "description": "Once the local project is created and opened in the Unity Editor, display the package manager to install a package or download an asset.<br /><br />Shortened URL:<br />`https://link.unity.com/hub/project/new/package-manager/{assetTypeAction}/{assetIdentifier}`",
        "operationId": "HubRedirectProjectNewPackageManager",
        "parameters": [
          {
            "name": "assetTypeAction",
            "in": "path",
            "description": "Use '/download/' segment value for asset store asset, and use '/install/' segment value for unity packages.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "assetIdentifier",
            "in": "path",
            "description": "Use the numeric asset identifier segment value for an asset store asset (ex: '/475680'), and use the namespace of the unity package  (ex: '/com.unity.cloud.assets') or with an optional version (ex: '/com.unity.cloud.assets@1.10.0') as the segment value for unity packages.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Return an HTML document that activate the Unity Hub.",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/HTMLRedirectionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/app-linking/v1/hub/project/{cloudProjectId}/package-manager/{assetTypeAction}/{assetIdentifier}": {
      "get": {
        "security": [
          {}
        ],
        "tags": [
          "Unity Hub Activation Service"
        ],
        "summary": "Activate the Unity Hub with the intention to open the package manager of a local project linked to the specified cloud project.",
        "description": "Once the local project is activated in the Unity Editor, display the package manager to install a package or download an asset.<br /><br />Shortened URL:<br />`https://link.unity.com/hub/project/{cloudProjectId}/package-manager/{assetTypeAction}/{assetIdentifier}`",
        "operationId": "HubRedirectProjectCloudConnectedPackageManager",
        "parameters": [
          {
            "name": "cloudProjectId",
            "in": "path",
            "description": "The connected cloud project id to look for in the local project list.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "assetTypeAction",
            "in": "path",
            "description": "Use '/download/' segment value for asset store asset, and use '/install/' segment value for unity packages.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "assetIdentifier",
            "in": "path",
            "description": "Use the numeric asset identifier segment value for an asset store asset (ex: '/475680'), and use the namespace of the unity package  (ex: '/com.unity.cloud.assets') or with an optional version (ex: '/com.unity.cloud.assets@1.10.0') as the segment value for unity packages.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Return an HTML document that activate the Unity Hub.",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/HTMLRedirectionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/app-linking/v1/hub/editor/{handlerNamespace}/{customSegmentValue1}/{customSegmentValue2}/{customSegmentValue3}/{customSegmentValue4}": {
      "get": {
        "security": [
          {}
        ],
        "tags": [
          "Unity Hub Activation Service"
        ],
        "summary": "Activate the Unity Hub with the intention to forward a URL to a user selected local project in a Unity Editor.",
        "description": "<br /><br />Shortened URL:<br />`https://link.unity.com/hub/editor/{handlerNamespace}/{customSegmentValue1}/{customSegmentValue2}/{customSegmentValue3}/{customSegmentValue4}`",
        "operationId": "HubRedirectEditorUrl",
        "parameters": [
          {
            "name": "handlerNamespace",
            "in": "path",
            "description": "The C# handler namespace of a DeeplinkHandlerAttribute decorated method to receive the URL for processing.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customSegmentValue1",
            "in": "path",
            "description": "Any custom URL route segment value.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customSegmentValue2",
            "in": "path",
            "description": "Any custom URL route segment value.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customSegmentValue3",
            "in": "path",
            "description": "Any custom URL route segment value.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customSegmentValue4",
            "in": "path",
            "description": "Any custom URL route segment value.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Return an HTML document that activate the Unity Hub.",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/HTMLRedirectionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/app-linking/v1/hub/project/{cloudProjectId}/{handlerNamespace}/{customSegmentValue1}/{customSegmentValue2}/{customSegmentValue3}/{customSegmentValue4}": {
      "get": {
        "security": [
          {}
        ],
        "tags": [
          "Unity Hub Activation Service"
        ],
        "summary": "Activate the Unity Hub with the intention to forward a URL to a local project linked to the specified cloud project.",
        "description": "<br /><br />Shortened URL:<br />`https://link.unity.com/hub/project/{cloudProjectId}/{handlerNamespace}/{customSegmentValue1}/{customSegmentValue2}/{customSegmentValue3}/{customSegmentValue4}`",
        "operationId": "HubRedirectProjectCloudConnectedEditorUrl",
        "parameters": [
          {
            "name": "cloudProjectId",
            "in": "path",
            "description": "The connected cloud project id to look for in the local project list.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "handlerNamespace",
            "in": "path",
            "description": "The C# handler namespace of a DeeplinkHandlerAttribute decorated method to receive the URL for processing.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customSegmentValue1",
            "in": "path",
            "description": "Any custom URL route segment value.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customSegmentValue2",
            "in": "path",
            "description": "Any custom URL route segment value.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customSegmentValue3",
            "in": "path",
            "description": "Any custom URL route segment value.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customSegmentValue4",
            "in": "path",
            "description": "Any custom URL route segment value.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Return an HTML document that activate the Unity Hub.",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/HTMLRedirectionResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "CreateDeepLinkRequest": {
        "type": "object",
        "properties": {
          "ResourceId": {
            "description": "The Resource Identifier.",
            "type": "string",
            "nullable": true
          },
          "ResourceType": {
            "description": "The Resource Type: Project, Asset, Dataset or NotSupported.",
            "type": "string",
            "nullable": true
          },
          "QueryArguments": {
            "description": "A URL query parameters formatted string.",
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateDeepLinkResponse": {
        "type": "object",
        "properties": {
          "Url": {
            "description": "A unique application link to a resource.",
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ChannelRequest": {
        "type": "object",
        "properties": {
          "AppName": {
            "description": "The name of the application making the channel request.",
            "type": "string",
            "nullable": true
          },
          "Request": {
            "description": "The action requesting a channel response from an external process. An action can be common for different external processes. External processes are expected to support more than one action",
            "type": "string",
            "nullable": true
          },
          "RequestData": {
            "description": "The channel request parameters.",
            "type": "object",
            "properties": {
              "Content": {
                "description": "The serialized json body of the parameters for the request.",
                "type": "string",
                "nullable": true
              }
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateChannelResponse": {
        "type": "object",
        "properties": {
          "Id": {
            "description": "The created channel unique identifier.",
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateChannelRequest": {
        "type": "object",
        "properties": {
          "Response": {
            "description": "The response to the request. The value 'unauthorized' can be returned as a response if the request processor cannot authenticate the user making the request.",
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GetChannelResponse": {
        "type": "object",
        "properties": {
          "Id": {
            "description": "The unique identifier of the channel.",
            "type": "string",
            "nullable": true
          },
          "Request": {
            "description": "The original request that created the unique channel.",
            "type": "object",
            "items": {
              "$ref": "#/components/schemas/ChannelRequest"
            },
            "nullable": true
          },
          "Response": {
            "description": "The response to the request. The value 'unauthorized' can be returned as a response if the request processor cannot authenticate the user making the request.",
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GetChannelResponseRequest": {
        "type": "object",
        "properties": {
          "ResourceId": {
            "description": "The Resource Identifier.",
            "type": "string",
            "nullable": true
          },
          "ResourceType": {
            "description": "The Resource Type: Project, Asset, Dataset or NotSupported.",
            "type": "string",
            "nullable": true
          },
          "QueryArguments": {
            "description": "A URL query parameters formatted string.",
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GetDeepLinkResponse": {
        "type": "object",
        "properties": {
          "ResourceId": {
            "description": "The Resource Identifier.",
            "type": "string",
            "nullable": true
          },
          "ResourceType": {
            "description": "The Resource Type: Project, Asset, Dataset or NotSupported.",
            "type": "string",
            "nullable": true
          },
          "QueryArguments": {
            "description": "A URL query parameters formatted string.",
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GetWebAppUrlsResponse": {
        "type": "object",
        "properties": {
          "docs": {
            "description": "The documentation absolute base URL.",
            "type": "string",
            "nullable": true
          },
          "asset-manager": {
            "description": "The asset manager dashboard absolute base URL.",
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "HTMLRedirectionResponse": {
        "type": "string",
        "description": "An HTML document with a meta header to refresh the page to the redirected application. The HTML document displays the operation status and fallback instructions, if required.",
        "nullable": true,
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "Bearer": {
        "type": "http",
        "description": "JWT authorization header using Bearer schema.",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    }
  },
  "security": [
    {
      "Bearer": []
    }
  ],
  "tags": [
    {
      "name": "Deeplink Sharing Service",
      "description": "Save and fetch custom data structure through sharable URLs."
    },
    {
      "name": "Unity Hub Activation Service",
      "description": "Access navigation endpoints to activate the Unity Hub."
    },
    {
      "name": "Authentication Service",
      "description": "Access navigation endpoints to authenticate a user through the standard PKCE browser login flow."
    },
    {
      "name": "URL Redirection Service",
      "description": "Retrieve navigation endpoints to open available web applications."
    }
  ]
}
```