---
title: "Install Application"
method: POST
path: "/applications/installations"
tags: ["Applications"]
---

# Install Application

`POST /applications/installations`

## Request

- Base URL: `https://api.crowdin.com/api/v2`
- URL: `https://api.crowdin.com/api/v2/applications/installations`
- Auth: none declared
- TypeScript: <https://skmtc.dev/crowdin/apis/crowdin-enterprise-api-v2/docs/applications/installations/post.ts> (a function with typed inputs; its response is checked against the schema)

**Required scopes:** `application.installation` (Read and Write).

Install an application either from a hosted manifest URL or from its manifest content.<br><br>**Note:** Any application - with or without a backend, and regardless of whether it is published to the Crowdin Store - can be installed from a manifest URL (the manifest only needs to be reachable at that URL). Installing from manifest content is supported only for serverless apps - apps that run entirely in the browser with no backend (no `baseUrl`).

## Request body

- union
  - ApplicationInstallationCreateForm: Install an application by fetching its manifest from a URL.
    - `url` string, required: Manifest URL
    - `permissions` ApplicationsInstallationsPermissions
      - `user` ApplicationsInstallationsPermissionsUser: Use modules permissions instead
        - `value` 'owner' | 'managers' | 'all' | 'guests' | 'restricted'
        - `ids` integer[]: Ids is available only for restricted value
      - `project` ApplicationsInstallationsPermissionsProject
        - `value` 'own' | 'restricted'
        - `ids` integer[]
    - `modules` ApplicationsInstallationsModulesCreateModule[]
      - `key` string
      - `permissions` ApplicationsInstallationsModulesModulePermissions
        - `user` ApplicationsInstallationsModulePermissionsUser
          - `value` 'owner' | 'managers' | 'all' | 'guests' | 'restricted': __Note__: For exporters, the `all` value will be set
          - `ids` integer[]: Ids is only available for restricted value
    - `assignAgent` boolean: Assign Agent as a manager to all existing projects
    - `manifestHash` string: Hash of the app manifest as it was loaded for review before installation. If provided and the manifest currently served at `url` differs, the installation is rejected with 409 and nothing is installed
  - ApplicationInstallationCreateFromManifestForm: Install an application by sending its manifest content inline (instead of a hosted manifest URL). Symmetric to the URL form: `manifest` replaces `url`, while `permissions` and per-module `modules` permissions stay at the root. The server always generates an opaque identifier; clients cannot supply one.
    - `manifest` ApplicationManifest, required: The inline manifest that declares the app - the same document install-from-URL fetches from `url`. Supported only for serverless apps - apps that run entirely in the browser with no backend (no `baseUrl`).
      - `name` string, required: Display name of the application
      - `description` string: Short description of what the application does
      - `logo` string: Relative URL (within the application bundle) of the application logo
      - `scopes` string[]: OAuth scopes granted to the app for host-proxied Crowdin API calls.<br><br>Available scopes: `*`, `language`, `user`, `team`, `notification`, `custom_language`, `group`, `tm`, `glossary`, `style-guide`, `mt`, `ai`, `ai.provider`, `ai.prompt`, `ai.proxy`, `ai.translate`, `automation`, `automation.rule`, `automation.rule.execution`, `webhook`, `project`, `project.settings`, `project.member`, `project.status`, `project.status.issue`, `project.status.progress`, `project.status.qa-check`, `project.source`, `project.source.file`, `project.source.string`, `project.translation`, `project.screenshot`, `project.webhook`, `project.task`, `project.dictionary`, `project.report`, `project.advisor`, `client`, `vendor`, `field`, `security-log`, `application`, `application.installation`, `application.proxy`, `application.consent`, `application.storage`, `organization`, `custom-spellchecker`, `external-qa-check`.<br><br>Each scope supports `:read` and `:write` modifiers (e.g. `project:read`, `project:write`); without a modifier the scope grants both.
      - `stringBasedAvailable` boolean: Whether the app is offered in string-based projects (in addition to file-based projects).
      - `modules` object, required: UI module definitions: an object whose keys are UI module types and whose values are arrays of module definitions.<br><br>`url` is not allowed (these apps have no `baseUrl`).<br><br>Allowed module types: `editor-right-panel`, `editor-translations-panel`, `editor-asset-panel`, `editor-background-worker`, `editor-button`, `project-tools`, `project-menu`, `project-menu-crowdsource`, `project-reports`, `group-reports`, `project-integrations`, `profile-resources-menu`, `profile-settings-menu`, `organization-menu`, `organization-settings-menu`, `organization-menu-crowdsource`, `modal`, `chat`, `context-menu`, `navbar-extension`.<br><br>For `context-menu` modules only the `modal` and `redirect` option types are supported (`new_tab` needs a page outside the app bundle, which serverless apps cannot serve).<br><br>An `editor-button` must point (`options.module`) at an existing module of the type its `options.type` opens: `panel` opens `editor-right-panel`, `modal` opens `modal`, `event` opens `editor-right-panel` or `editor-background-worker`. Its key must not reuse a key of those module types, and it must share at least one `environments` entry with its target.
      - `default_permissions` ApplicationDefaultPermissions
        - `user` 'owner' | 'managers' | 'all' | 'guests': Which users the app is available to by default
        - `project` 'own' | 'restricted': Which projects the app is available in by default
      - `bundle` union: Where the app is loaded from. Either Crowdin hosts the app in its own storage (`internal`) or the app is served from an external URL such as a local dev server (`external`).
        - ApplicationBundleInternal
          - `mode` 'internal', required: The app is hosted by Crowdin in its own storage (no external URL).
        - ApplicationBundleExternal
          - `mode` 'external', required: The app is served from an external URL (e.g. a local dev server).
          - `url` string, required: URL the app is served from; for local development this is your dev server, e.g. `http://localhost:8080/`.
    - `permissions` ApplicationsInstallationsPermissions
      - `user` ApplicationsInstallationsPermissionsUser: Use modules permissions instead
        - `value` 'owner' | 'managers' | 'all' | 'guests' | 'restricted'
        - `ids` integer[]: Ids is available only for restricted value
      - `project` ApplicationsInstallationsPermissionsProject
        - `value` 'own' | 'restricted'
        - `ids` integer[]
    - `modules` ApplicationsInstallationsModulesCreateModule[]
      - `key` string
      - `permissions` ApplicationsInstallationsModulesModulePermissions
        - `user` ApplicationsInstallationsModulePermissionsUser
          - `value` 'owner' | 'managers' | 'all' | 'guests' | 'restricted': __Note__: For exporters, the `all` value will be set
          - `ids` integer[]: Ids is only available for restricted value

## Response `201`

Application Installation was successfully created

- ApplicationInstallationResource: Base schema of resource container. Container is a wrapper object that contains payload in required `data` property and provides space for adding any other metadata.
  - `data` ApplicationInstallationResponseModel, required: Application Installation Response Model
    - `identifier` string
    - `name` string
    - `installedBy` object, nullable
      - `id` integer
      - `username` string
      - `fullName` string
      - `avatarUrl` string
    - `description` string, nullable
    - `logo` string
    - `logoUrl` string, nullable: Absolute URL the logo is served from.
    - `agent` object, nullable
      - `id` integer
      - `username` string
      - `fullName` string
      - `avatarUrl` string
    - `baseUrl` string, nullable
    - `manifestUrl` string, nullable
    - `manifest` object, nullable: The manifest of the installation as authored - the application fields and module definitions as they were installed or last updated, without server-resolved values. `null` for applications installed from a manifest URL
    - `createdAt` string, date-time, nullable
    - `manifestUpdatedAt` string, date-time, nullable: When the installation's manifest was last synced
    - `isManifestOutdated` boolean: Whether the installed manifest is outdated compared to the latest available manifest
    - `modules` union[]
      - union
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `name` string
          - `description` string, nullable
          - `url` string
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `modes` object
          - `scopes` object
          - `iframe` object
          - `fileNamePattern` string
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `modes` object
          - `scopes` object
          - `iframe` object
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `scopes` object
          - `iframe` object
          - `severity` 'high' | 'medium' | 'low'
          - `category` 'context'
          - `refreshPolicy` 'hourly' | 'daily'
          - `title` string
          - `summary` string, nullable: Short one-line summary shown on the inspector card chrome below the title.
          - `recheckUrl` string, nullable
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `scopes` object, nullable
          - `configuratorIframe` object, nullable
          - `compileUrl` string
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `chatCompletionsUrl` string
          - `modelsUrl` string
          - `scopes` object
          - `iframe` object
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `name` string
          - `placement` 'header-alert' | 'glossary': Where the module is allowed to place its announcements
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `scopes` object, nullable
          - `identifier` string
          - `inputSchemaUrl` string, nullable
          - `outputSchemaUrl` string, nullable
          - `iframe` object, nullable
          - `executeUrl` string
          - `validateSettingsUrl` string, nullable
          - `invocationWaitMode` 'sync' | 'taskToken', nullable
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `scopes` object, nullable
          - `iframe` object
          - `logo` string, nullable
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `name` string
          - `mode` string
          - `baseUrl` string
          - `options` object
          - `signaturePatterns` object
          - `description` string
        - object: Class CrowdsourcePanelModuleResponseModel
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `scopes` object
          - `iframe` object
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `name` string
          - `logoUrl` string
          - `signaturePatterns` object
          - `fileType` string
          - `multilingual` boolean
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `name` string
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `modes` object
          - `scopes` object
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `modes` string[]
          - `options` object
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `modes` object
          - `scopes` object
          - `iframe` object
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `getBatchSizeUrl` string
          - `runQaCheckUrl` string
          - `supportsSynchronousRun` boolean: If `true`, the app is called while a translation is being saved and can refuse the save. If `false`, the app is called after the translation is saved and can only report an issue.
          - `scopes` object, nullable
          - `iframe` object, nullable
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `name` string
          - `logoUrl` string
          - `signaturePatterns` object
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `scopes` object
          - `iframe` object
        - object
          - `key` string
          - `name` string
          - `type` string
          - `data` object
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `scopes` object
          - `iframe` object
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `scopes` object
          - `iframe` object
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `scopes` object
          - `iframe` object
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `scopes` object
          - `iframe` object
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `scopes` object
          - `iframe` object
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `scopes` object
          - `iframe` object
        - object
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `scopes` object
          - `iframe` object
        - object: Class WorkflowStepTypeModuleResponseModel
          - `key` string
          - `type` string
          - `data` object
          - `permissions` ApplicationsInstallationsModulesModulePermissions
            - `user` ApplicationsInstallationsModulePermissionsUser
              - …
          - `authenticationType` string
          - `identifier` string
          - `updateSettingsUrl` string, nullable
          - `deleteSettingsUrl` string, nullable
          - `editorMode` string, nullable
          - `boundaries` object
          - `scopes` object, nullable
          - `iframe` object, nullable
    - `scopes` string[]
    - `permissions` ApplicationsInstallationsPermissions
      - `user` ApplicationsInstallationsPermissionsUser: Use modules permissions instead
        - `value` 'owner' | 'managers' | 'all' | 'guests' | 'restricted'
        - `ids` integer[]: Ids is available only for restricted value
      - `project` ApplicationsInstallationsPermissionsProject
        - `value` 'own' | 'restricted'
        - `ids` integer[]
    - `defaultPermissions` ApplicationsInstallationsDefaultPermissions
      - `user` 'owner'
      - `project` 'own'
    - `limitReached` boolean
    - `stringBasedAvailable` boolean
    - `bundle` union: Where the app is loaded from. Either Crowdin hosts the app in its own storage (`internal`) or the app is served from an external URL such as a local dev server (`external`).
      - ApplicationBundleInternal
        - `mode` 'internal', required: The app is hosted by Crowdin in its own storage (no external URL).
      - ApplicationBundleExternal
        - `mode` 'external', required: The app is served from an external URL (e.g. a local dev server).
        - `url` string, required: URL the app is served from; for local development this is your dev server, e.g. `http://localhost:8080/`.

## Other responses

- `400`: Invalid Request Parameters
- `401`: Unauthorized
- `403`: Forbidden
- `405`: Method Not Allowed
- `409`: The manifest at `url` no longer matches `manifestHash`

---

[API](https://skmtc.dev/crowdin/apis/crowdin-enterprise-api-v2.md) - [All operations](https://skmtc.dev/crowdin/apis/crowdin-enterprise-api-v2/llms.txt) - [OpenAPI document](https://skmtc.dev/crowdin/apis/crowdin-enterprise-api-v2/revisions/dc68744c5384?raw)
