REST i GraphQL API
Sve što veb aplikacija radi ide kroz isti javni API koji i vi možete pozivati. Postoje dva ulaza — REST za automatizaciju i GraphQL, koji koristi sama aplikacija — i oba stoje iza iste autentifikacije i istih provera dozvola.
Osnovna adresa: https://api.ownlate.com
Autentifikacija
heading.anchorLabel| Akreditiv | Kako izgleda | Za šta |
|---|---|---|
| API ključ | own_… | Pozivi server-server, CI, skripte |
| SDK token | sdk_… | Pregledački SDK, samo jedan projekat |
| OAuth pristupni token | neproziran | MCP server i aplikacije trećih strana |
| Kolačić sesije | — | Veb aplikacija u vašem pregledaču |
Ključ se šalje kao bearer token:
curl "https://api.ownlate.com/v1/workspaces" \ -H "Authorization: Bearer $OWNLATE_API_KEY"Ključeve pravite pod Profil → API ključevi. Ključ se prikazuje jednom, pri kreiranju, a posle se vidi samo njegov prefiks. Svaki ključ nosi:
- Opsege — kodove dozvola kojima sme da se služi; oni samo sužavaju ono što već imate, nikad ne proširuju.
- Opcioni rok — nakon kog ključ prestaje da radi.
Opoziv ključa dejstvuje odmah. Same kodove dozvola vidite u Članovi i pristup.
Kako se odlučuje o dozvoli
heading.anchorLabelZa svaki poziv server prvo utvrđuje o kom je radnom prostoru reč, pa upoređuje ono što pozivalac ima sa tim:
- Prostor se uzima iz putanje. Query string i telo se pri tome ne gledaju, pa krajnja tačka čija putanja ne imenuje prostor odbija sa
Workspace ID is requiredumesto da pogađa. - API ključ ili OAuth token sužavaju dalje: dozvola van njihovih opsega, ili prostor van onih za koje su izdati, odbijaju se pre nego što se prostor uopšte pita.
- Anoniman pozivalac dobija ono što bi video viewer — i ništa više.
- Otvoreni projekat dodatno prima predloge od bilo koga prijavljenog.
Greške
heading.anchorLabelNeuspesi se vraćaju kao JSON, sa statusom ponovljenim u telu:
{ "message": "Forbidden", "error": "Forbidden", "statusCode": 403 }| Status | Znači |
|---|---|
400 | Zahtev nije prošao validaciju |
401 | Nema akreditiva, ili više ne valja |
403 | Prepoznati ste, ali ovo vam nije dozvoljeno |
404 | Nema takvog objekta, ili nema takve rute |
409 | Objekat nije u stanju koje to dozvoljava — odobravanje već odobrenog |
Telo zahteva ograničeno je na 1 MB. Za veće fajlove podelite otpremanje po fajlovima.
Interaktivna referenca
heading.anchorLabelGenerisani OpenAPI dokument servira se na /swagger-json, a aplikacija ga prikazuje na platform.ownlate.com/docs/swagger. Pravi se iz servera koji radi, pa nikada ne zaostaje za onim što je objavljeno.
Krajnje tačke
heading.anchorLabelRadni prostori i članovi
heading.anchorLabel| Metod | Putanja |
|---|---|
GET POST | /v1/workspaces |
GET PUT | /v1/workspaces/{workspaceId} |
GET | /v1/workspaces/{workspaceId}/audit-log |
POST | /v1/workspaces/{workspaceId}/sync-word-usage |
GET | /v1/workspaces/{workspaceId}/users/me/permissions |
GET POST | /v1/workspaces/{workspaceId}/members |
DELETE | /v1/workspaces/{workspaceId}/members/{userId} |
GET | /v1/workspaces/users/lookup |
GET PUT | /v1/workspaces/levels/{level} |
GET POST | /v1/workspaces/api-keys |
DELETE | /v1/workspaces/api-keys/{keyId} |
GET | /v1/users/me |
Projekti
heading.anchorLabel| Metod | Putanja |
|---|---|
GET POST | /v1/workspaces/{workspaceId}/projects |
GET PUT DELETE | /v1/workspaces/{workspaceId}/projects/{id} |
PUT | /v1/workspaces/{workspaceId}/projects/{id}/restore |
DELETE | /v1/workspaces/{workspaceId}/projects/{id}/permanent |
DELETE arhivira projekat, permanent uništava već arhivirani.
Fajlovi
heading.anchorLabel| Metod | Putanja |
|---|---|
GET POST | /v1/workspaces/{workspaceId}/translation-files |
POST | /v1/workspaces/{workspaceId}/translation-files/upload |
PUT DELETE | /v1/workspaces/{workspaceId}/translation-files/{id} |
POST | /v1/workspaces/{workspaceId}/translation-files/rename-folder |
POST | /v1/workspaces/{workspaceId}/translation-files/merge-duplicates |
Segmenti i prevodi
heading.anchorLabel| Metod | Putanja |
|---|---|
GET POST | /v1/workspaces/{workspaceId}/segments |
GET DELETE | /v1/workspaces/{workspaceId}/segments/{id} |
PUT | /v1/workspaces/{workspaceId}/segments/{id}/translate |
PUT | /v1/workspaces/{workspaceId}/segments/{id}/draft |
PUT | /v1/workspaces/{workspaceId}/segments/{id}/source-text |
PUT | /v1/workspaces/{workspaceId}/segments/{id}/translations/{language}/review |
PUT | /v1/workspaces/{workspaceId}/segments/{id}/translations/{language}/approve |
PUT | /v1/workspaces/{workspaceId}/segments/{id}/translations/{language}/reject |
POST | /v1/workspaces/{workspaceId}/segments/{id}/auto-translate |
GET | /v1/workspaces/{workspaceId}/segments/{id}/qa |
POST | /v1/workspaces/{workspaceId}/segments/approve-all |
POST | /v1/workspaces/{workspaceId}/segments/reject-all |
POST | /v1/workspaces/{workspaceId}/segments/pre-translate |
GET | /v1/workspaces/{workspaceId}/segments/progress |
GET | /v1/workspaces/{workspaceId}/segments/analytics |
GET | /v1/workspaces/{workspaceId}/segments/by-keys |
GET | /v1/workspaces/{workspaceId}/segments/translation-memory |
GET | /v1/workspaces/{workspaceId}/segments/export |
GET | /v1/workspaces/{workspaceId}/segments/export-zip |
Glosar, komentari i istorija
heading.anchorLabel| Metod | Putanja |
|---|---|
GET POST | /v1/workspaces/{workspaceId}/glossary |
PUT DELETE | /v1/workspaces/{workspaceId}/glossary/{id} |
GET | /v1/workspaces/{workspaceId}/glossary/matches |
GET POST | /v1/workspaces/{workspaceId}/comments |
DELETE | /v1/workspaces/{workspaceId}/comments/{id} |
GET | /v1/workspaces/{workspaceId}/translation-history/{segmentId} |
Izdanja i distribucija
heading.anchorLabel| Metod | Putanja |
|---|---|
GET POST | /v1/workspaces/{workspaceId}/releases |
DELETE | /v1/workspaces/{workspaceId}/releases/{id} |
GET | /v1/workspaces/{workspaceId}/releases/distribution |
POST | /v1/workspaces/{workspaceId}/releases/distribution/regenerate |
Integracije
heading.anchorLabel| Metod | Putanja |
|---|---|
POST | /v1/workspaces/{workspaceId}/integrations |
GET | /v1/workspaces/{workspaceId}/integrations/by-project/{projectId} |
GET PUT DELETE | /v1/workspaces/{workspaceId}/integrations/{id} |
PATCH | /v1/workspaces/{workspaceId}/integrations/{id}/activate |
PATCH | /v1/workspaces/{workspaceId}/integrations/{id}/pause |
PATCH | /v1/workspaces/{workspaceId}/integrations/{id}/sync |
PATCH | /v1/workspaces/{workspaceId}/integrations/{id}/test |
POST | /v1/workspaces/{workspaceId}/integrations/test-direct |
POST | /v1/workspaces/{workspaceId}/integrations/{id}/create-pr |
Planovi i naplata
heading.anchorLabel| Metod | Putanja |
|---|---|
GET | /v1/plans |
GET | /v1/payment/providers |
GET | /v1/workspaces/{workspaceId}/subscription |
PUT | /v1/workspaces/{workspaceId}/subscription/plan |
POST | /v1/workspaces/{workspaceId}/subscription/checkout |
POST | /v1/workspaces/{workspaceId}/subscription/portal |
Jezici
heading.anchorLabel| Metod | Putanja |
|---|---|
GET POST | /v1/languages |
DELETE | /v1/languages/{code} |
Javne krajnje tačke
heading.anchorLabelNjima ne treba nikakav akreditiv. Služe javne projekte i OTA distribucije.
| Metod | Putanja | Šta vraća |
|---|---|---|
GET | /public/v1/projects | Javni projekti radnog prostora |
GET | /public/v1/projects/{id} | Jedan javni projekat |
GET | /public/v1/segments/progress | Napredak javnog projekta |
GET | /public/v1/segments/translations-map | Svi prevodi javnog projekta, grupisani po fajlu i jeziku |
GET | /public/v1/ota/{accessKey}/manifest | Verzija poslednjeg izdanja i jezici |
GET | /public/v1/ota/{accessKey}/bundles | Paket za sve jezike |
GET | /public/v1/ota/{accessKey}/bundles/{language} | Paket za jedan jezik |
GET | /public/v1/plans | Planovi sa cenama |
GET | /public/v1/workspaces/{workspaceId} | Javni podaci o radnom prostoru |
The SDK endpoints — /public/v1/sdk/segments and /public/v1/sdk/segments/{id}/translations/{lang} — need an SDK token rather than an API key. See SDK and clients.
SDK krajnje tačke — /public/v1/sdk/segments i /public/v1/sdk/segments/{id}/translations/{lang} — traže SDK token, ne API ključ. Vidite SDK i klijenti.
GraphQL
heading.anchorLabelPOST /graphql nosi iste operacije koje koristi veb aplikacija, a to je više nego što REST izlaže: pozivi, zadaci, predlozi, obaveštenja, QA pravila, SDK tokeni, unosi memorije prevoda i analitički upiti.
curl -X POST https://api.ownlate.com/graphql \ -H "Authorization: Bearer $OWNLATE_API_KEY" \ -H 'Content-Type: application/json' \ -d '{"query":"query($id:ID!){ project(id:$id){ name progress { language progress } } }","variables":{"id":"…"}}'Dve stvari koje vredi znati pre nego što tamo uperite klijenta:
- Tip sadržaja je bitan. Zahtev koji izgleda kao da je mogao doći iz HTML forme —
application/x-www-form-urlencoded,multipart/form-datailitext/plain— odbija se kao mogući međusajtovski, osim ako u zaglavljux-apollo-operation-namene imenuje operaciju. Šaljiteapplication/jsoni pitanje se ne postavlja. - Dozvola se izvodi iz argumenata. Prosleđujte
workspaceIdtamo gde ga šema traži, uključujući unutarinputobjekata; mutacija koja ga izostavi ne može biti autorizovana.