Pređi na sadržaj

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
AkreditivKako izgledaZa šta
API ključown_…Pozivi server-server, CI, skripte
SDK tokensdk_…Pregledački SDK, samo jedan projekat
OAuth pristupni tokenneproziranMCP server i aplikacije trećih strana
Kolačić sesijeVeb aplikacija u vašem pregledaču

Ključ se šalje kao bearer token:

Terminal window
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.anchorLabel

Za 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 required umesto 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.

Neuspesi se vraćaju kao JSON, sa statusom ponovljenim u telu:

{ "message": "Forbidden", "error": "Forbidden", "statusCode": 403 }
StatusZnači
400Zahtev nije prošao validaciju
401Nema akreditiva, ili više ne valja
403Prepoznati ste, ali ovo vam nije dozvoljeno
404Nema takvog objekta, ili nema takve rute
409Objekat 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.anchorLabel

Generisani 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.anchorLabel

Radni prostori i članovi

heading.anchorLabel
MetodPutanja
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
MetodPutanja
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.

MetodPutanja
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
MetodPutanja
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
MetodPutanja
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
MetodPutanja
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
MetodPutanja
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
MetodPutanja
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
MetodPutanja
GET POST/v1/languages
DELETE/v1/languages/{code}

Javne krajnje tačke

heading.anchorLabel

Njima ne treba nikakav akreditiv. Služe javne projekte i OTA distribucije.

MetodPutanjaŠta vraća
GET/public/v1/projectsJavni projekti radnog prostora
GET/public/v1/projects/{id}Jedan javni projekat
GET/public/v1/segments/progressNapredak javnog projekta
GET/public/v1/segments/translations-mapSvi prevodi javnog projekta, grupisani po fajlu i jeziku
GET/public/v1/ota/{accessKey}/manifestVerzija poslednjeg izdanja i jezici
GET/public/v1/ota/{accessKey}/bundlesPaket za sve jezike
GET/public/v1/ota/{accessKey}/bundles/{language}Paket za jedan jezik
GET/public/v1/plansPlanovi 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.

POST /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.

Terminal window
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-data ili text/plain — odbija se kao mogući međusajtovski, osim ako u zaglavlju x-apollo-operation-name ne imenuje operaciju. Šaljite application/json i pitanje se ne postavlja.
  • Dozvola se izvodi iz argumenata. Prosleđujte workspaceId tamo gde ga šema traži, uključujući unutar input objekata; mutacija koja ga izostavi ne može biti autorizovana.