> ## Documentation Index
> Fetch the complete documentation index at: https://developers.phrase.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Merge a branch

> Merge an existing branch back into its base branch.

The merge runs asynchronously. The branch transitions to `merging_branch` and settles in `merged`, `merge_error`, or `merge_conflict` once the background job completes; the response body for this request is empty. Poll the branch resource to observe the final state.

A branch cannot be merged while it still has open jobs or open translation orders attached to its branch project — in that case the request is rejected with `409 Conflict`. A branch whose current `state` does not allow a merge is rejected with `422 Unprocessable Entity`.

Requires the Branching feature to be enabled on the account.

*Note: Merging a branch may take several minutes depending on diff size.*




## OpenAPI

````yaml /openapi/phrase-strings.json patch /projects/{project_id}/branches/{name}/merge
openapi: 3.0.3
info:
  title: Phrase Strings API Reference
  version: 2.0.0
  description: >-
    Phrase Strings is a translation management platform for software projects.
    You can collaborate on language file translation with your team or order
    translations through our platform. The API allows you to import locale
    files, download locale files, tag keys or interact in other ways with the
    localization data stored in Phrase Strings for your account.
  contact:
    name: Phrase Support
    url: https://developers.phrase.com/api/
    email: support@phrase.com
  x-logo:
    url: https://developers.phrase.com/images/phrase-logo.svg
    backgroundColor: '#03eab3'
    altText: Phrase Strings
  termsOfService: https://phrase.com/terms/
  license:
    name: MIT
    url: https://choosealicense.com/licenses/mit/
servers:
  - url: https://api.phrase.com/v2
    description: EU production server
  - url: https://api.us.app.phrase.com/v2
    description: US production server
security:
  - Token: []
  - Basic: []
tags:
  - name: Accounts
  - name: Authorizations
    description: >
      The endpoints provided by the Authorizations API are **only accessible via
      Basic authentication with email and password**.


      When creating a new authorization, the new access token for this
      authorization will be returned in the immediate response but not later,
      due to security reasons. When accessing authorizations later, you will
      only see the last eight chars of the token in plain text
      (`token_last_eight`) and the SHA256 digest of the token for reference
      (`hashed_token`).


      For instructions on how authorization in general works, see our [Auth
      Guide](#overview--authentication).


      ### Scopes


      When creating or updating an OAuth authorization, you can define a list of
      scopes to limit the access that can be performed by that authorization.


      #### Available Scopes


      <div class="table-responsive">
        <table class="basic-table">
          <thead>
            <tr class="basic-table__row basic-table__row--header">
              <th class="basic-table__cell basic-table__cell--header">Scope</th>
              <th class="basic-table__cell basic-table__cell--header">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td class="basic-table__cell"><code>read</code></td>
              <td class="basic-table__cell">Read projects, locales, keys, translations, orders</td>
            </tr>
            <tr>
              <td class="basic-table__cell"><code>write</code></td>
              <td class="basic-table__cell">Write projects, locales, keys, translations but not orders</td>
            </tr>
            <tr>
              <td class="basic-table__cell"><code>orders.create</code></td>
              <td class="basic-table__cell">Create and confirm orders</td>
            </tr>
            <tr>
              <td class="basic-table__cell"><code>team.manage</code></td>
              <td class="basic-table__cell">Manage invitations and members</td>
            </tr>
          </tbody>
        </table>
      </div>
  - name: Blacklisted Keys
  - name: Branches
    description: >
      ### Branch creation


      Branches will be created asynchronously. State of branch creation is
      returned as state.


      #### Available States


      <div class="table-responsive">
        <table class="basic-table">
          <thead>
            <tr class="basic-table__row basic-table__row--header">
              <th class="basic-table__cell basic-table__cell--header">State</th>
              <th class="basic-table__cell basic-table__cell--header">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td class="basic-table__cell"><code>initialized</code></td>
              <td class="basic-table__cell">Data received.</td>
            </tr>
            <tr>
              <td class="basic-table__cell"><code>processing</code></td>
              <td class="basic-table__cell">Branch is currently creating.</td>
            </tr>
            <tr>
              <td class="basic-table__cell"><code>success</code></td>
              <td class="basic-table__cell">Branch was created successfully</td>
            </tr>
            <tr>
              <td class="basic-table__cell"><code>error</code></td>
              <td class="basic-table__cell">Branch creation failed.</td>
            </tr>
          </tbody>
        </table>
      </div>
  - name: Comments
  - name: Comment Reactions
  - name: Comment Replies
  - name: Custom Metadata
  - name: Distributions
  - name: Documents
  - name: Figma Attachments
  - name: Formats
  - name: Glossaries
  - name: Glossary Terms
  - name: Glossary Term Translations
  - name: ICU
  - name: Invitations
    description: >
      With the invitation endpoint you can [manage and invite
      users](https://support.phrase.com/hc/en-us/articles/5709742418716) to
      Phrase Strings via API. A user can have the role Manager, Developer or
      Translator each with its own access rights. Developers and translators
      need resources like projects and locales assigned in order to access them.
  - name: Job Annotations
    description: >
      The job annotations endpoints allow you to create, update and delete
      annotations for jobs and job locales. Annotations are used to add metadata
      to a job or job locale.
  - name: Job Comments
  - name: Job Locales
  - name: Job Template Locales
  - name: Job Templates
  - name: Jobs
  - name: Key Format Annotations
  - name: Keys
  - name: Linked Keys
  - name: Locales
  - name: Locale Downloads
  - name: Members
    description: >
      With the members endpoints you can do basic [team and user
      management](https://support.phrase.com/hc/en-us/articles/5709742418716)
      via API. A user can have the role Manager, Developer or Translator each
      with its own access rights. Developers and translators need resources like
      projects and locales assigned in order to access them.
  - name: Notifications
  - name: Notification Groups
  - name: Orders
    description: >
      ### List of categories [TextMaster]


      When ordering translations from TextMaster, you need to specify a category
      ID along with your order. See this list for information on the category ID
      and their equivalent description.


      <div class="table-responsive">
        <table class="basic-table">
          <thead>
            <tr class="basic-table__row basic-table__row--header">
              <th class="basic-table__cell basic-table__cell--header">Category ID</th>
              <th class="basic-table__cell basic-table__cell--header">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr><td class="basic-table__cell">C001</td><td class="basic-table__cell">Agriculture</td></tr>
            <tr><td class="basic-table__cell">C002</td><td class="basic-table__cell">Aerospace</td></tr>
            <tr><td class="basic-table__cell">C003</td><td class="basic-table__cell">Animals/Pets/Plants</td></tr>
            <tr><td class="basic-table__cell">C004</td><td class="basic-table__cell">Arts/Culture/Literature</td></tr>
            <tr><td class="basic-table__cell">C005</td><td class="basic-table__cell">Automotive/Transportation</td></tr>
            <tr><td class="basic-table__cell">C006</td><td class="basic-table__cell">Computers/Technology/Software</td></tr>
            <tr><td class="basic-table__cell">C007</td><td class="basic-table__cell">Telecom</td></tr>
            <tr><td class="basic-table__cell">C008</td><td class="basic-table__cell">Real Estate/Construction/Building</td></tr>
            <tr><td class="basic-table__cell">C009</td><td class="basic-table__cell">Consumer Goods</td></tr>
            <tr><td class="basic-table__cell">C010</td><td class="basic-table__cell">Education</td></tr>
            <tr><td class="basic-table__cell">C011</td><td class="basic-table__cell">Entertainment</td></tr>
            <tr><td class="basic-table__cell">C012</td><td class="basic-table__cell">Ecology/Environment</td></tr>
            <tr><td class="basic-table__cell">C013</td><td class="basic-table__cell">Health/Biotechnology/Pharma</td></tr>
            <tr><td class="basic-table__cell">C014</td><td class="basic-table__cell">Internet</td></tr>
            <tr><td class="basic-table__cell">C015</td><td class="basic-table__cell">Policy/Government/Public</td></tr>
            <tr><td class="basic-table__cell">C016</td><td class="basic-table__cell">Publishing/Media/Communication</td></tr>
            <tr><td class="basic-table__cell">C017</td><td class="basic-table__cell">Religion</td></tr>
            <tr><td class="basic-table__cell">C018</td><td class="basic-table__cell">Food/Beverages</td></tr>
            <tr><td class="basic-table__cell">C019</td><td class="basic-table__cell">Retail</td></tr>
            <tr><td class="basic-table__cell">C020</td><td class="basic-table__cell">Fashion/Luxury/Textiles</td></tr>
            <tr><td class="basic-table__cell">C021</td><td class="basic-table__cell">Travel/Tourism</td></tr>
            <tr><td class="basic-table__cell">C022</td><td class="basic-table__cell">Natural Resources/Energy</td></tr>
            <tr><td class="basic-table__cell">C023</td><td class="basic-table__cell">Banking/Financial Services/Insurance</td></tr>
            <tr><td class="basic-table__cell">C024</td><td class="basic-table__cell">Legal Affairs/Tax/Law</td></tr>
            <tr><td class="basic-table__cell">C025</td><td class="basic-table__cell">Raw Materials/Industrial Goods</td></tr>
            <tr><td class="basic-table__cell">C026</td><td class="basic-table__cell">Lifestyle/Leisure/Hobbies</td></tr>
            <tr><td class="basic-table__cell">C027</td><td class="basic-table__cell">Sports</td></tr>
            <tr><td class="basic-table__cell">C028</td><td class="basic-table__cell">Home/Family/Friends/Children</td></tr>
            <tr><td class="basic-table__cell">C029</td><td class="basic-table__cell">Economy/Financial Markets</td></tr>
            <tr><td class="basic-table__cell">C030</td><td class="basic-table__cell">Science</td></tr>
            <tr><td class="basic-table__cell">C031</td><td class="basic-table__cell">Human Resources/Employment</td></tr>
            <tr><td class="basic-table__cell">C032</td><td class="basic-table__cell">Adult (Pornography, Violence, etc.)</td></tr>
          </tbody>
        </table>
      </div>
  - name: Organization Job Template Locales
  - name: Organization Job Templates
  - name: Projects
  - name: Quality
  - name: Releases
  - name: Release Triggers
  - name: Repo Syncs
    description: >
      The Repo Syncs API allows you to synchronize your Phrase projects with
      your code repositories.

      You can import translations from your repository to Phrase and export
      translations from Phrase to your repository.
  - name: Repo Sync Events
  - name: Reports
  - name: Search
  - name: Screenshot Markers
  - name: Screenshots
  - name: Spaces
  - name: Style guides
  - name: Tags
  - name: Teams
  - name: Translations
  - name: Uploads
    description: >
      ### Formats


      We support all common localization file formats. For a detailed overview,
      see our [Format
      Guide](https://support.phrase.com/hc/en-us/sections/6111343326364).


      ### Processing


      Uploads will be processed asynchronously and thus the data might not be
      imported yet although the upload is completed. Therefore we recommend to
      evaluate the returned <code>state</code> field for information on the
      import progress.


      #### Available States


      <div class="table-responsive">
        <table class="basic-table">
          <thead>
            <tr class="basic-table__row basic-table__row--header">
              <th class="basic-table__cell basic-table__cell--header">State</th>
              <th class="basic-table__cell basic-table__cell--header">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td class="basic-table__cell"><code>initialized</code></td>
              <td class="basic-table__cell">Data received.</td>
            </tr>
            <tr>
              <td class="basic-table__cell"><code>waiting_for_preview</code></td>
              <td class="basic-table__cell">Upload is waiting for preview to be finished.</td>
            </tr>
            <tr>
              <td class="basic-table__cell"><code>waiting</code></td>
              <td class="basic-table__cell">Upload is waiting for processing.</td>
            </tr>
            <tr>
              <td class="basic-table__cell"><code>processing</code></td>
              <td class="basic-table__cell">Upload is being processed, data is currently imported.</td>
            </tr>
            <tr>
              <td class="basic-table__cell"><code>success</code></td>
              <td class="basic-table__cell">Upload is complete and all data is imported.</td>
            </tr>
            <tr>
              <td class="basic-table__cell"><code>error</code></td>
              <td class="basic-table__cell">Upload or import process failed.</td>
            </tr>
          </tbody>
        </table>
      </div>
  - name: Users
  - name: Variables
  - name: Versions / History
  - name: Webhooks
  - name: Webhook Deliveries
paths:
  /projects/{project_id}/branches/{name}/merge:
    patch:
      tags:
        - Branches
      summary: Merge a branch
      description: >
        Merge an existing branch back into its base branch.


        The merge runs asynchronously. The branch transitions to
        `merging_branch` and settles in `merged`, `merge_error`, or
        `merge_conflict` once the background job completes; the response body
        for this request is empty. Poll the branch resource to observe the final
        state.


        A branch cannot be merged while it still has open jobs or open
        translation orders attached to its branch project — in that case the
        request is rejected with `409 Conflict`. A branch whose current `state`
        does not allow a merge is rejected with `422 Unprocessable Entity`.


        Requires the Branching feature to be enabled on the account.


        *Note: Merging a branch may take several minutes depending on diff
        size.*
      operationId: branch/merge
      parameters:
        - $ref: '#/components/parameters/X-PhraseApp-OTP'
        - $ref: '#/components/parameters/project_id'
        - $ref: '#/components/parameters/name'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: branch/merge/parameters
              properties:
                strategy:
                  description: >
                    Conflict resolution strategy applied when the branch and its
                    base have diverged. `use_main` keeps the values from the
                    base branch; `use_branch` keeps the values from the branch
                    being merged.
                  type: string
                  enum:
                    - use_main
                    - use_branch
                  example: use_main
      responses:
        '200':
          description: >-
            OK. The merge has been scheduled. The response body is empty;
            observe progress by polling the branch resource.
          headers:
            X-Rate-Limit-Limit:
              $ref: '#/components/headers/X-Rate-Limit-Limit'
            X-Rate-Limit-Remaining:
              $ref: '#/components/headers/X-Rate-Limit-Remaining'
            X-Rate-Limit-Reset:
              $ref: '#/components/headers/X-Rate-Limit-Reset'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
          description: >-
            Forbidden. Returned when the access token lacks the `write` scope,
            when the user is not allowed to merge this branch, or when the
            Branching feature is not available on the account.
        '404':
          $ref: '#/components/responses/404'
        '409':
          $ref: '#/components/responses/409'
          description: >-
            Conflict. The branch has open jobs or open translation orders. The
            response body lists the blockers, for example
            `{"errors":["open_jobs","open_orders"]}`. Close or complete the
            listed resources before retrying.
        '422':
          $ref: '#/components/responses/422'
        '429':
          $ref: '#/components/responses/429'
      x-code-samples:
        - lang: Curl
          source: >-
            curl
            "https://api.phrase.com/v2/projects/:project_id/branches/:name/merge"
            \
              -u USERNAME_OR_ACCESS_TOKEN \
              -X PATCH \
              -d '{"strategy":"use_main"}' \
              -H 'Content-Type: application/json'
        - lang: CLI v2
          source: |-
            phrase branches merge \
            --project_id <project_id> \
            --name <name> \
            --data '{"strategy":"use_main"}' \
            --access_token <token>
components:
  parameters:
    X-PhraseApp-OTP:
      in: header
      name: X-PhraseApp-OTP
      description: Two-Factor-Authentication token (optional)
      required: false
      allowEmptyValue: false
      schema:
        type: string
    project_id:
      in: path
      name: project_id
      description: Project ID
      required: true
      schema:
        type: string
    name:
      in: path
      name: name
      description: name
      required: true
      schema:
        type: string
  headers:
    X-Rate-Limit-Limit:
      description: The number of allowed requests in the current period
      schema:
        type: integer
    X-Rate-Limit-Remaining:
      description: The number of remaining requests in the current period
      schema:
        type: integer
    X-Rate-Limit-Reset:
      description: >-
        Timestamp of end of current time period as UNIX timestamp, see [Rate
        Limiting](/en/api/strings/pagination#rate-limiting)
      schema:
        type: integer
  responses:
    '400':
      description: >-
        Bad request. The request could not be parsed or a parameter failed
        validation. Verify the request body, the content type, and the parameter
        types, then retry.
      headers:
        X-Rate-Limit-Limit:
          $ref: '#/components/headers/X-Rate-Limit-Limit'
        X-Rate-Limit-Remaining:
          $ref: '#/components/headers/X-Rate-Limit-Remaining'
        X-Rate-Limit-Reset:
          $ref: '#/components/headers/X-Rate-Limit-Reset'
    '401':
      description: >-
        Unauthorized. Authentication failed because the access token is missing,
        expired, or invalid. Supply a valid access token and retry.
    '403':
      description: >-
        Forbidden. The credentials are valid but not permitted for this request:
        the access token may lack the required scope, the user may lack
        permission on the resource, or the account plan may not include the
        feature. Use a token with the required scope on an account and user that
        hold the necessary permissions.
      headers:
        X-Rate-Limit-Limit:
          $ref: '#/components/headers/X-Rate-Limit-Limit'
        X-Rate-Limit-Remaining:
          $ref: '#/components/headers/X-Rate-Limit-Remaining'
        X-Rate-Limit-Reset:
          $ref: '#/components/headers/X-Rate-Limit-Reset'
    '404':
      description: >-
        Not found. The requested resource does not exist or is not visible to
        the authenticated user. Verify the identifiers in the request path and
        that the token has access to them, then retry.
      headers:
        X-Rate-Limit-Limit:
          $ref: '#/components/headers/X-Rate-Limit-Limit'
        X-Rate-Limit-Remaining:
          $ref: '#/components/headers/X-Rate-Limit-Remaining'
        X-Rate-Limit-Reset:
          $ref: '#/components/headers/X-Rate-Limit-Reset'
    '409':
      description: >-
        Conflict. The request conflicts with the current state of the resource.
        Reconcile the conflicting state and retry.
      headers:
        X-Rate-Limit-Limit:
          $ref: '#/components/headers/X-Rate-Limit-Limit'
        X-Rate-Limit-Remaining:
          $ref: '#/components/headers/X-Rate-Limit-Remaining'
        X-Rate-Limit-Reset:
          $ref: '#/components/headers/X-Rate-Limit-Reset'
    '422':
      description: >-
        Unprocessable entity. The request was well-formed but failed validation.
        The response body lists each offending field in the `errors` array, with
        its resource, field, and a human-readable message. Correct the listed
        fields and retry.
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
              errors:
                type: array
                items:
                  type: object
                  properties:
                    resource:
                      type: string
                    field:
                      type: string
                    message:
                      type: string
            example:
              message: Validation Failed
              errors:
                - resource: Resource
                  field: name
                  message: can't be blank
      headers:
        X-Rate-Limit-Limit:
          $ref: '#/components/headers/X-Rate-Limit-Limit'
        X-Rate-Limit-Remaining:
          $ref: '#/components/headers/X-Rate-Limit-Remaining'
        X-Rate-Limit-Reset:
          $ref: '#/components/headers/X-Rate-Limit-Reset'
    '429':
      description: >-
        Too many requests. The rate limit has been exceeded. Wait until the time
        indicated by the `X-Rate-Limit-Reset` response header before retrying.
      headers:
        X-Rate-Limit-Limit:
          $ref: '#/components/headers/X-Rate-Limit-Limit'
        X-Rate-Limit-Remaining:
          $ref: '#/components/headers/X-Rate-Limit-Remaining'
        X-Rate-Limit-Reset:
          $ref: '#/components/headers/X-Rate-Limit-Reset'
  securitySchemes:
    Token:
      type: apiKey
      in: header
      name: Authorization
      description: Enter your token in the format `token TOKEN`
    Basic:
      type: http
      scheme: basic

````