---
title: "Clone AI Prompt"
method: POST
path: "/users/{userId}/ai/prompts/{aiPromptId}/clones"
tags: ["AI"]
---

# Clone AI Prompt

`POST /users/{userId}/ai/prompts/{aiPromptId}/clones`

## Request

- Base URL: `https://api.crowdin.com/api/v2`
- URL: `https://api.crowdin.com/api/v2/users/{userId}/ai/prompts/{aiPromptId}/clones`
- Auth: none declared
- TypeScript: <https://skmtc.dev/crowdin/apis/crowdin-api-v2/docs/users/:userId/ai/prompts/:aiPromptId/clones/post.ts> (a function with typed inputs; its response is checked against the schema)

**Required scopes:** `ai.prompt` (Read and Write).

## Path parameters

- `userId` integer, required
- `aiPromptId` integer, required

## Request body

- AiPromptCloneForm
  - `name` string: AI prompt name

## Response `201`

AI prompt was cloned successfully

- CrowdinAiPromptResource: 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` CrowdinAiPrompt, required
    - `id` integer
    - `name` string
    - `action` string
    - `aiProviderId` integer, nullable
    - `aiModelId` string, nullable
    - `isEnabled` boolean
    - `enabledProjectIds` integer[]
    - `config` union
      - object: AI prompt configuration
        - `mode` 'basic', required
        - `companyDescription` string: Use field `snippets` instead
        - `projectDescription` string: Use field `snippets` instead
        - `audienceDescription` string: Use field `snippets` instead
        - `customPlaceholders` string[]: Use field `snippets` instead
        - `snippets` string[]: Array of snippets. Get via [List AI Snippets](#operation/api.ai.snippets.getMany)
        - `otherLanguageTranslations` object
          - `isEnabled` boolean
          - `languageIds` string[]: Array of language ids. Get via [List Supported Languages](#operation/api.languages.getMany)
        - `glossaryTerms` boolean
        - `tmSuggestions` boolean
        - `fileContent` boolean
        - `fileContext` boolean
        - `generateFileSummary` boolean
        - `screenshots` boolean
        - `projectContext` boolean
        - `publicProjectDescription` boolean: Deprecated. Use field `projectContext` instead
        - `siblingsStrings` boolean
        - `retryOnQaIssues` boolean
      - object: AI prompt configuration
        - `mode` 'basic', required
        - `evaluationSteps` string[], required
        - `customPlaceholders` string[]: Use field `snippets` instead
        - `snippets` string[]
        - `glossaryTerms` boolean
        - `tmSuggestions` boolean
        - `fileContext` boolean
        - `screenshots` boolean
        - `projectContext` boolean
        - `publicProjectDescription` boolean: Deprecated. Use field `projectContext` instead
      - object: AI prompt configuration
        - `mode` 'advanced', required
        - `generateFileSummary` boolean
        - `glossaryTerms` boolean
        - `tmSuggestions` boolean
        - `screenshots` boolean
        - `prompt` string, required
        - `otherLanguageTranslations` object: __Note:__ Not available for QA check action
          - `isEnabled` boolean
          - `languageIds` string[]: Array of language ids. Get via [List Supported Languages](#operation/api.languages.getMany)
        - `retryOnQaIssues` boolean: Available only for pre-translate action
      - object: AI prompt configuration
        - `mode` 'external', required
        - `identifier` string, required: Application identifier. Get via [List Applications](#operation/api.applications.installations.getMany)
        - `key` string, required: Module key
        - `options` object: Options to compile the prompt. Get from configurator
        - `retryOnQaIssues` boolean: Available only for pre-translate action and may be disabled by AI prompt provider
    - `promptPreview` string, nullable
    - `isFineTuningAvailable` boolean
    - `createdBy` integer, nullable: Identifier of the user who created the prompt
    - `updatedBy` integer, nullable: Identifier of the user who last updated the prompt
    - `lastUsedBy` integer, nullable: Identifier of the user who last used the prompt
    - `lastUsedAt` string, date-time, nullable: Date and time when the prompt was last used
    - `usageCount` integer: Total number of times the prompt has been used
    - `createdAt` string, date-time
    - `updatedAt` string, date-time

## Other responses

- `400`: Invalid Request Parameters
- `401`: Unauthorized
- `403`: Forbidden
- `404`: AI prompt with specified user id and id was not found
- `405`: Method Not Allowed

## Changes

- **2026-11-06** `27aae7751699`: 1 breaking, 23 info
  - added the new path request parameter `aiPromptId`
  - added the optional property `allOf[subschema #2]/data/allOf[subschema #1: AI Prompt]/createdBy` to the response with the `201` status
  - added the optional property `allOf[subschema #2]/data/allOf[subschema #1: AI Prompt]/lastUsedAt` to the response with the `201` status
  - added the optional property `allOf[subschema #2]/data/allOf[subschema #1: AI Prompt]/lastUsedBy` to the response with the `201` status
  - …20 more

[Operation history](https://skmtc.dev/crowdin/apis/crowdin-api-v2/changes/users/:userId/ai/prompts/:aiPromptId/clones/post.md)

---

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