ForHosting KIT · Translation

Translate a CSV

A product spreadsheet mixes things that should never change — SKUs, prices, timestamps — with things that always should, like a description or a marketing blurb. This endpoint lets you point at exactly which columns are language and which are data, then translates only the first kind.

● StablePer request + per cell$0.003
Use it from WebAPIEmailApp soonTelegram soon

Run this on our servers with your account. Free tools run in your browser; this one bills your KIT balance per the price above.

The problem with whole-sheet translation

Run an entire CSV export through a generic translator and it will cheerfully try to translate a SKU code, mangle a date format, or turn a currency symbol into something your accounting system doesn't recognize. A product catalog with a title column, a description column, and a dozen numeric and categorical columns needs surgical translation, not a blanket pass — which is exactly what translate.csv is built to do, because you specify the target columns up front.

Column selection and everything else

You submit the CSV along with a list of column names or indexes to translate and the target language. Rows, row order, and every untouched column — ids, prices, dates, category codes, boolean flags — pass through byte-for-byte identical to the source. The header row itself can optionally be translated or left as-is, since some pipelines key off the English header names downstream.

How the request runs

POST to /translate/csv and the task queues immediately, returning a task_id while translation happens in the background — useful for catalogs with thousands of rows that would otherwise tie up a request for minutes. The finished CSV, same column order and same row count as the source, arrives through a signed webhook call or a signed link valid for 24 hours.

Where CSV translation actually gets used

Spreadsheets are the lowest common denominator of business data — exported from a database, edited in a spreadsheet program, re-imported somewhere else — which means a huge share of real-world localization work happens in CSV form long before anyone writes it into a proper CMS. Marketplace product feeds, CRM export files, and inventory sheets destined for a regional storefront are rarely clean JSON; they're CSVs with a mix of language columns and business logic columns tangled together. Because pricing is per cell rather than per row or per file, translating a 10,000-row catalog with two language columns costs the same per unit as translating a 10-row test file with the same two columns, so a team can validate the mapping on a handful of rows before committing the whole export.

Marketplace product feed

A seller translates the title and description columns of a 5,000-row product feed into Spanish while leaving SKU, price and stock columns untouched.

CRM export localization

A sales team translates the notes column of a CRM export for a regional team, keeping contact IDs, dates and pipeline stage codes exactly as exported.

Multilingual inventory sheet

A retailer with warehouses in three countries translates only the product-name column of a shared inventory CSV into each local language.

Survey response review

A research team translates the open-text answer column of a survey export so reviewers in another country can read responses without touching the respondent-ID or score columns.

How do I translate a CSV file with the API?

POST the CSV, the column names or indexes to translate, and the target language to /translate/csv, keep the returned task_id, and retrieve the file by webhook or a signed link valid for 24 hours.

Is the CSV translation API free?

No, there's no free tier or trial; it costs $0.003 per request plus $0.0135 per translated cell, and a failed task is never charged.

Can I choose which columns get translated?

Yes, you specify the exact columns to translate; every other column, including IDs, prices and dates, passes through unchanged.

Does it preserve row order and column order?

Yes, the returned CSV has the same row count, row order and column order as the file you submitted.

Will it translate the header row?

You can choose to translate the header row or leave it as-is, since some downstream systems key off the original header names.

Can I translate very large CSV files?

Yes, catalogs with thousands of rows are processed asynchronously in the background, and pricing per cell keeps cost proportional to the actual amount of text translated.

Is this endpoint live?

Yes, /translate/csv is live and accepting requests now.

What happens to my CSV data after translation?

Source and translated files are deleted after the retention window and are never used for training.

Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.

POSThttps://api.kit.forhosting.com/translate/csv

Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, and soon from our app, email and Telegram.

curl -X POST https://api.kit.forhosting.com/translate/csv \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input":"…"}'
{
  "input": "…"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "translate.csv",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.

Per request$0.003
Per cell$0.0135

Published price — no tokens, no invented credits. A failed task is never charged.

max_tokens20000
HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.
422task_failedThe task failed after 3 retries. You are never charged for it.

Read the full KIT documentation →