developer docs

Endpoints

Projects

List your projects and read one, with the languages it translates into.

Projects are created and set up in the dashboard. Over the API they are read: to find the one a chapter goes into, and to see what it will do with it.

List projects

GET/api/v1/projects

Every project of the workspace that is not in the trash, the one with the newest chapter first.

Shell
curl https://tinypica.com/api/v1/projects \
  -H "Authorization: Bearer $TINYPICA_KEY"
Answer
[
  {
    "id": "0cf217a0-c404-4fd7-8732-5f83b9e766ca",
    "translationGroupId": "46f5fe4d-7be4-48e4-99a9-3a0f2c440c04",
    "name": "Pepper & Carrot",
    "sourceLanguage": "fr",
    "readingDirection": "ltr",
    "kind": "comic",
    "processSteps": "full",
    "translationModel": null,
    "seriesProfile": null,
    "coverKey": null,
    "deletedAt": null,
    "createdAt": "2026-09-28T12:46:50.415Z",
    "targetLanguages": [
      { "projectId": "0cf217a0-…", "languageCode": "en", "addedAt": "2026-09-28T12:46:50.445Z" },
      { "projectId": "0cf217a0-…", "languageCode": "es", "addedAt": "2026-09-28T12:46:50.459Z" }
    ],
    "lastChapterAt": 1790599610526,
    "chapterCount": 1
  }
]
Type
interface Project {
  id: string
  name: string
  kind: 'comic' | 'novel'
  sourceLanguage: string
  readingDirection: 'ltr' | 'rtl' | 'vertical'
  processSteps: 'text' | 'translate' | 'clean' | 'full'
  translationModel: string | null
  createdAt: string
}

interface ProjectListItem extends Project {
  targetLanguages: { languageCode: string, addedAt: string }[]
  chapterCount: number
  lastChapterAt: number | null // milliseconds since 1970
}
FieldTypeWhat it is
idstringThe project's id, for the chapter routes.
namestring
kindstringcomic takes page images, novel takes text.
sourceLanguagestringThe language the chapters are written in, as a two-letter code.
readingDirectionstringltr, rtl or vertical.
processStepsstringHow far a page is taken: text (read), translate, clean (the art erased) or full (lettered). Decides which files a chapter has.
translationModelstring or nullThe model that translates; null is the default.
targetLanguagesarrayThe languages every chapter is translated into: languageCode, and when it was added.
chapterCountnumberChapters not in the trash.
lastChapterAtnumber or nullWhen the newest chapter was created, in milliseconds since 1970. The one time not given as an ISO string.
createdAtstringISO 8601.

The other fields are the dashboard's: seriesProfile is what the translation is told about the series, and coverKey names the cover image, which the API does not serve.

Get a project

GET/api/v1/projects/:id

One project, with the fields it has in the list, less targetLanguages, chapterCount and lastChapterAt. A project that does not exist, is in the trash or is another workspace's is a 404, Project not found.

Shell
curl https://tinypica.com/api/v1/projects/$PROJECT \
  -H "Authorization: Bearer $TINYPICA_KEY"

A project's chapters are listed by GET /projects/:id/chapters.