Most engineering leads evaluating a localization vendor spend their diligence time on the wrong layer. They look at language coverage, turnaround claims, and pricing tiers, the things a procurement deck foregrounds, and treat the underlying system as a black box you throw files into and get translations back from. That works for a service relationship. For infrastructure you intend to call from a CI pipeline, a content platform, or an autonomous agent that fires off hundreds of requests a day without a human checking each one, you need more detail.
If localization is going to sit in your stack the way a payments processor or an auth provider does, you need to know its object model with the same rigor: what gets created, what state it has, how state transitions, what can fail mid-transition, and what you're responsible for handling on your side. This piece traces a single request through Ollang's execution layer, upload to order to quality check to sign-off, so you can reason about it before you build against it rather than after a retry storm teaches you the hard way.
Where the objects live
Ollang's API surface is organized around a small set of persistent objects: projects, orders, revisions, QC evaluations, and the webhooks that notify you when any of them change state. The platform exposes programmatic uploads, orders, projects, revisions, QC, human review, and webhooks, authenticated by API key. That object model, not a ticket queue or a project manager's inbox, is what you're actually integrating against. The full reference lives in Ollang's API documentation, and it's worth reading before you write a single request, the same way you'd read Stripe's object reference before wiring up billing.
There is also a hosted MCP-style access path for agent-driven invocation, but that is a distinct integration pattern with its own auth flow and is covered elsewhere. This piece stays inside the REST object lifecycle, since that determines how your systems handle state regardless of which client calls it.
The core flow: one request, five state transitions
Strip away the surface area and a single localization job moves through five concrete steps: create translation orders across formats like subtitles, closed captions, AI dubbing, studio dubbing, and document translation; manage orders by checking status, canceling, rerunning, and listing with filters; run QC evaluations for AI-powered quality checks; and handle revisions by creating, viewing, and deleting revision requests against a completed order.
Concretely, the lifecycle looks like this:
- Upload → projectId. A file upload returns a projectId. Every downstream object, every order, every revision, hangs off this ID.
- Order creation → orderId. Creating an order against that project returns one or more orderIds. A single project can spawn multiple orders, one per target language or one per output format, and each order is its own independently trackable unit.
- Poll until completed. You monitor status by polling the order endpoint until it reports "completed." There is no long-lived streaming connection here, state is pulled not pushed unless you've registered a callback.
- Run the quality check. A quality check against the completed order returns scores plus segment-level analysis. This is a distinct object from the order itself, an evaluation record with its own ID, not a field bolted onto the order.
- Report issues via revision. If the QC scores or a human reviewer surface problems, you create revisions to report them. Optionally, the order can be upgraded to a professional linguist review at this stage.
That fifth step is the one engineering teams most often model wrong. A revision is not a support ticket bolted onto the vendor relationship, it is an addressable object with its own create, list, and delete operations scoped to a specific order. A revision can be created, listed, or deleted against a completed order, with delete operating on a specific revision ID within that order. That means your system can track exactly which linguistic issue was raised, when, and whether it was resolved or withdrawn, the kind of auditability a procurement-driven vendor relationship rarely gives you at the API level.
The QC evaluation itself is asynchronous and credit-metered. A QC run accepts criteria like accuracy, fluency, tone, and cultural fit, plus an optional custom prompt and callback URL, and returns an evalId with a credits-used count while processing continues in the background. Design your client to treat that response as a receipt, not a result, the real payload arrives via callback or a follow-up poll.
Querying and paginating the project graph
Once you're running localization at any real volume, "what's the state of everything" becomes as important as "what's the state of this one thing." Ollang's projects endpoint is built for that query pattern rather than requiring you to track every ID yourself. Retrieving all projects returns a paginated list associated with your account, and the endpoint supports query parameters for pagination, sorting, and searching.
In practice that means a request shaped like GET /integration/project?page=1&take=10&orderBy=createdAt&orderDirection=desc&search=video, authenticated with your API key in the request header. The pagination bounds are worth knowing before you architect a sync job: page size must be between 1 and 50, and the sort field accepts common values including id, name, createdAt, and sourceLanguage, with direction set to either ascending or descending. Sorting by sourceLanguage is how you filter or group by language pair programmatically, useful if your pipeline needs to reconcile every open Japanese-source project before a release freeze without paging through the entire account history to find them. Full parameter definitions are on the Retrieve All Projects reference.
