> This page is for Developer.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.bigcommerce.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.bigcommerce.com/_mcp/server.

# Translations for Product URLs

> **Note**
>
> The Translations Admin GraphQL API for managing product URL translations is available on Stencil storefronts only.

The following entities are translatable for product URLs:

* Product URL Path
  * URL path as `url_path` — The URL path of the product on the storefront

## Resource fields

The entities listed above are referenced differently based on resource type and must use the following values in the queries outlined below:

| Entity Type      | `resourceType`      | `resourceId` Format                      |
| ---------------- | ------------------- | ---------------------------------------- |
| Product URL Path | `PRODUCT_URL_PATHS` | `bc/store/productUrlPath/{{product_id}}` |

## Querying Product URL Translations (Storefront API)

Data is returned in the current locale determined by the context (e.g., `Accept-Language` header, channel language settings, or site subfolder). Product URLs on the storefront reflect the translated URL path; when translations exist for the requested locale, those translated values are returned.

## Managing Product URL Translations (Admin API)

Product URL translation management (list, update, delete) is available via the Admin GraphQL API. These mutations and queries are not available on the Storefront API.

### Query a List of Product URL Translations

#### Request

The request below uses several variables for reusability. Replace `{{channel_id}}` and `{{locale_code}}` with the appropriate values for your use case.

This query returns a paginated list of translations with a maximum of 50 results per request. Use the `cursor` from the response in a subsequent request to fetch more results.

**`Example query: Query a list of translations`**

```graphql title="Example query: Query a list of translations" showLineNumbers={false}
GRAPHQL https://api.bigcommerce.com/stores/{{store_hash}}/graphql
X-Auth-Token: {{token}}

query {
  store {
    translations(filters: {
        resourceType: PRODUCT_URL_PATHS,
        channelId: "bc/store/channel/{{channel_id}}",
        localeId: "bc/store/locale/{{locale_code}}"
      } first: 50) {
      edges {
        node {
          resourceId
          fields {
            fieldName
            original
            translation
          }
        }
        cursor
      }
      pageInfo {
        hasNextPage
        hasPreviousPage
        startCursor
        endCursor
      }
    }
  }
}
```

#### Response

**`Example query: Query a list of product URL translations`**

```json title="Example query: Query a list of product URL translations" showLineNumbers={false}
{
  "data": {
    "store": {
      "translations": {
        "edges": [
          {
            "node": {
              "resourceId": "bc/store/productUrlPath/77",
              "fields": [
                {
                  "fieldName": "url_path",
                  "original": "/fog-linen-chambray-towel-beige-stripe/",
                  "translation": "/fr-fog-linen-chambray-towel-beige-stripe/"
                }
              ]
            },
            "cursor": "Nzc="
          },
          {
            "node": {
              "resourceId": "bc/store/productUrlPath/80",
              "fields": [
                {
                  "fieldName": "url_path",
                  "original": "/orbit-terrarium-large/",
                  "translation": "/fr-orbit-terrarium-large/"
                }
              ]
            },
            "cursor": "ODA="
          }
        ],
        "pageInfo": {
          "hasNextPage": false,
          "hasPreviousPage": false,
          "startCursor": "Nzc=",
          "endCursor": "ODA="
        }
      }
    }
  }
}
```

### Query a Product URL Translation by Resource ID

The request below uses several variables for reusability. Replace `{{resourceId}}`, `{{channel_id}}`, and `{{locale_code}}` with appropriate values for your use case. Make sure `resourceId` follows the format from the [Resource fields](#resource-fields) table.

#### Request

**`Example query: Query a product URL translation by id`**

```graphql title="Example query: Query a product URL translation by id" showLineNumbers={false}
GRAPHQL https://api.bigcommerce.com/stores/{{store_hash}}/graphql
X-Auth-Token: {{token}}

query {
  store {
    translations(filters: {
      resourceType: PRODUCT_URL_PATHS,
      channelId: "bc/store/channel/{{channel_id}}",
      localeId: "bc/store/locale/{{locale_code}}",
      resourceIds: ["{{resourceId}}"]
    }) {
      edges {
        node {
          resourceId
          fields {
            fieldName
            original
            translation
          }
        }
        cursor
      }
    }
  }
}
```

#### Response

**`Example query: Query a product URL translation by id`**

```json title="Example query: Query a product URL translation by id" showLineNumbers={false}
{
  "data": {
    "store": {
      "translations": {
        "edges": [
          {
            "node": {
              "resourceId": "bc/store/productUrlPath/111",
              "fields": [
                {
                  "fieldName": "url_path",
                  "original": "/fog-linen-chambray-towel-beige-stripe/",
                  "translation": "/fr-fog-linen-chambray-towel-beige-stripe/"
                }
              ]
            },
            "cursor": "MTEx"
          }
        ]
      }
    }
  }
}
```

### Update a Product URL Translation

#### Request

**`Example mutation: Update a product URL translation`**

```graphql title="Example mutation: Update a product URL translation" showLineNumbers={false}
GRAPHQL https://api.bigcommerce.com/stores/{{store_hash}}/graphql
X-Auth-Token: {{token}}

mutation {
  translation {
    updateTranslations(input: {
      resourceType: PRODUCT_URL_PATHS,
      channelId: "bc/store/channel/{{channel_id}}",
      localeId: "bc/store/locale/{{locale_code}}",
      entities: [
        {
          resourceId: "bc/store/productUrlPath/111",
          fields: [
            { fieldName: "url_path", value: "/path" }
          ]
        }
      ]
    }) {
      __typename
      errors {
        __typename
        ... on Error {
          message
        }
      }
    }
  }
}
```

#### Response

**`Example mutation: Update a product URL translation`**

```json title="Example mutation: Update a product URL translation" showLineNumbers={false}
{
  "data": {
    "translation": {
      "updateTranslations": {
        "__typename": "UpdateTranslationsResult",
        "errors": []
      }
    }
  }
}
```

### Delete a Product URL Translation

#### Request

**`Example mutation: Delete a product URL translation`**

```graphql title="Example mutation: Delete a product URL translation" showLineNumbers={false}
GRAPHQL https://api.bigcommerce.com/stores/{{store_hash}}/graphql
X-Auth-Token: {{token}}

mutation {
  translation {
    deleteTranslations(input: {
      resourceType: PRODUCT_URL_PATHS,
      channelId: "bc/store/channel/{{channel_id}}",
      localeId: "bc/store/locale/{{locale_code}}",
      resources: [
        {
          resourceId: "bc/store/productUrlPath/111",
          fields: ["url_path"]
        }
      ]
    }) {
      __typename
      errors {
        __typename
        ... on Error {
          message
        }
      }
    }
  }
}
```

#### Response

**`Example mutation: Delete a product URL translation`**

```json title="Example mutation: Delete a product URL translation" showLineNumbers={false}
{
  "data": {
    "translation": {
      "deleteTranslations": {
        "__typename": "DeleteTranslationsResult",
        "errors": []
      }
    }
  }
}
```