API
Те же инструменты, что и на сайте, только из вашей программы. Три шага: загрузить файл, создать задачу, забрать результат.
Ключ доступа
Ключ создаётся в аккаунте и передаётся заголовком. Ключ виден один раз при создании — сохраните его сразу.
Authorization: Bearer sk_ваш_ключЗа минуту
1. Загружаем файл. Тело запроса — сам файл, без multipart. Тип определяется по содержимому, а не по расширению.
curl -X POST "https://formatika.app/api/v1/uploads?toolId=image.convert&filename=photo.png" \
-H "Authorization: Bearer $FORMATIKA_KEY" \
-H "Content-Type: application/octet-stream" \
--data-binary @photo.png
# {"id":"up_…","filename":"photo.png","mime":"image/png","bytes":820428}2. Создаём задачу. Параметры проверяются схемой того инструмента, который вы указали.
curl -X POST "https://formatika.app/api/v1/jobs" \
-H "Authorization: Bearer $FORMATIKA_KEY" \
-H "Content-Type: application/json" \
-d '{
"toolId": "image.convert",
"uploadIds": ["up_…"],
"params": { "format": "webp", "quality": 82 }
}'
# {"id":"job_…","status":"QUEUED","toolId":"image.convert","credits":0}3. Опрашиваем состояние раз в секунду. Когда статус станет DONE, в files придут ссылки на результат — они подписаны и живут 15 минут.
curl "https://formatika.app/api/v1/jobs/job_…" -H "Authorization: Bearer $FORMATIKA_KEY"
# {"status":"DONE","progress":100,
# "files":[{"filename":"photo.webp","bytes":9352,"url":"/api/v1/files/…?exp=…&sig=…"}]}
curl -O -J "https://formatika.app/api/v1/files/…?exp=…&sig=…"Нормы и кредиты
Бесплатно: 10 задач в сутки без аккаунта и 50 с аккаунтом. Сверх нормы задача выполняется за кредиты, при регистрации начисляется 50. Сколько списано — в поле credits ответа.
Инструменты
image.convertКонвертер изображений- Принимает:
- image/*, .heic, .heif, .avif
- Лимит:
- 30 × 50 МБ
Параметры
format· enum (jpeg | png | webp | avif | tiff)quality· number · default 82resize· group · optionalstripMetadata· boolean · default true
image.resizeИзменить размер изображения- Принимает:
- image/*, .heic, .heif, .avif
- Лимит:
- 30 × 50 МБ
Параметры
width· number · optionalheight· number · optionalfit· enum (inside | cover | contain) · default "inside"format· enum (same | jpeg | png | webp) · default "same"quality· number · default 85
image.compressСжать изображение- Принимает:
- image/*, .heic, .heif, .avif
- Лимит:
- 30 × 50 МБ
Параметры
targetKb· number · optionalquality· number · default 75format· enum (same | jpeg | webp) · default "same"maxWidth· number · optional
image.cropОбрезать изображение- Принимает:
- image/*, .heic, .heif, .avif
- Лимит:
- 30 × 50 МБ
Параметры
aspect· enum (1:1 | 4:3 | 3:4 | 16:9 | 9:16 | 3:2 | 2:3) · default "1:1"position· enum (center | top | bottom | left | right) · default "center"format· enum (same | jpeg | png | webp) · default "same"quality· number · default 88
image.rotateПовернуть изображение- Принимает:
- image/*, .heic, .heif, .avif
- Лимит:
- 30 × 50 МБ
Параметры
angle· enum (0 | 90 | 180 | 270) · default "90"flipHorizontal· boolean · default falseflipVertical· boolean · default falseformat· enum (same | jpeg | png | webp) · default "same"
audio.convertКонвертер аудио- Принимает:
- audio/*, .m4a, .opus, .aac, .wma
- Лимит:
- 10 × 200 МБ
Параметры
format· enum (mp3 | aac | opus | flac | wav | ogg)bitrateKbps· number · default 192mono· boolean · default falsesampleRate· enum (22050 | 44100 | 48000 | same) · default "same"
audio.extractИзвлечь звук из видео- Принимает:
- video/*, .mkv, .webm, .mov, .avi, .m4v
- Лимит:
- 5 × 500 МБ
Параметры
format· enum (same | mp3 | aac | opus | wav) · default "same"bitrateKbps· number · default 192
audio.trimОбрезать аудио- Принимает:
- audio/*, .m4a, .opus, .aac
- Лимит:
- 10 × 200 МБ
Параметры
start· string · default "0"end· string · optionalreencode· boolean · default falsefade· boolean · default false
audio.normalizeВыровнять громкость- Принимает:
- audio/*, .m4a, .opus, .aac
- Лимит:
- 10 × 200 МБ
Параметры
target· enum (-23 | -16 | -14) · default "-16"truePeak· number · default -1.5
pdf.mergeОбъединить PDF- Принимает:
- application/pdf, .pdf
- Лимит:
- 30 × 100 МБ
Параметры
keepMetadata· boolean · default false
pdf.splitРазделить PDF- Принимает:
- application/pdf, .pdf
- Лимит:
- 5 × 100 МБ
Параметры
mode· enum (ranges | each) · default "ranges"pages· string · default "1"
Ошибки
Наружу приходит код, а не текст: сообщение вы собираете сами, на своём языке. HTTP-статус соответствует коду.