Listing localization (async)

AI-translate a listing into target locales — 15 credits per locale.

Updated 2026-05-24
3 min read

Localize a project's store listing from a source locale into up to 6 target locales in a single call. The translation is culturally aware (not just literal) and respects per-store ASO limits.

Async. Returns 202 + job_id; poll /api/v1/jobs/:id for progress. 15 credits per locale, deducted from the project's billing organization. 5–15 seconds per locale.

Kick off a translation

bash
POST /api/v1/projects/:projectId/listings/localize
Content-Type: application/json

{
  "store_type": "appstore",
  "source_locale": "en-US",
  "target_locales": ["tr-TR", "de-DE", "es-ES"],
  "save_to_db": true
}

# Scope: store:write
# Returns 202 + { job_id, status: "pending", type: "listing_localization", poll_url, target_locales }

Poll for completion

bash
GET /api/v1/jobs/:jobId

# Status progression: pending → processing → completed | failed
# Progress: { completed: N, total: target_locales.length }
# Result on completion includes per-locale translation output and credits_used

Notes

  • source_locale must exist as a listing for the project + store. If not, you get 422 SOURCE_NOT_FOUND.
  • Credits are deducted only for locales that successfully translate. Failed locales don't charge.
  • With save_to_db: false you get the translations in result.results but no DB writes — useful for dry runs.
  • Maximum 6 target_locales per call to stay inside the 120-second background budget.