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

# Batch card translations

> Fetch card-level translations for many apps in one locale for catalog rendering.

**`POST`** `https://api-datahub.octoparse.com/v1/data-apps/translations/lookup`

Authentication: optional.

Fetches card-level translation fields for many apps in one locale. Designed for catalog pages that render mixed-locale cards without N+1 reads.

## Request

### Request body

<ParamField body="locale" type="string" required>
  Target locale, for example `ja-JP`.
</ParamField>

<ParamField body="apps" type="array" required>
  App references (`app_<hex>` or `<namespace>/<app_name>`).
</ParamField>

### Example request

```bash theme={null}
curl -X POST   -H "Authorization: Bearer $OCTOPARSE_API_KEY"   -H "Content-Type: application/json"   -d '{"locale":"ja-JP","apps":["carol/probe-b","carol/reviews-query"]}'   "https://api-datahub.octoparse.com/v1/data-apps/translations/lookup"
```

## Response

### 200 success

```json theme={null}
{
  "data": {
    "locale": "ja-JP",
    "items": [
      {
        "app_id": "app_abc",
        "name": "Review search",
        "summary": "Search product reviews",
        "found": true
      }
    ]
  }
}
```

Apps without an overlay still appear with `found: false` so the client can fall back to source text.

### Errors

| HTTP | `code`          | `category`      | Description                 |
| ---- | --------------- | --------------- | --------------------------- |
| 400  | `invalid-input` | `invalid_input` | Body is invalid.            |
| 401  | `unauthorized`  | `forbidden`     | Missing or invalid API key. |

Error responses use `{"error": {code, category, message, retryable}}`. See <a href="/docs/en/datahub/api/reference/introduction#errors">Errors</a>.

## Client libraries

The Python and JavaScript SDKs do not wrap this endpoint yet. Call REST directly.
