Dokumentacja API
REST API ConvertFly pozwala programowo konwertować, optymalizować i przekształcać pliki. Buduj potoki konwersji z zadań i kroków: zaimportuj plik, przetwórz go i wyeksportuj wynik w jednym żądaniu.
https://convertfly.io/api/v1Wszystkie endpointy są względne wobec tego bazowego adresu URL. Żądania i odpowiedzi używają formatu JSON. Wszystkie znaczniki czasu są w UTC, w formacie ISO 8601.
Uwierzytelnianie
Każde żądanie musi zawierać klucz API w nagłówku Authorization. Klucze mają prefiks cvfly_sk_ i możesz je utworzyć w swoim panelu.
Authorization: Bearer cvfly_sk_live_abc123def456...Wskazówka dotycząca bezpieczeństwa: nigdy nie umieszczaj kluczy API w kodzie po stronie klienta. Przechowuj je w zmiennych środowiskowych i wywołuj API ze swojego serwera.
Uprawnienia kluczy
Uprawnienia kluczy API można ograniczyć do wybranych operacji. Klucz utworzony bez listy uprawnień otrzymuje uprawnienia domyślne.
| Uprawnienie | Dostęp |
|---|---|
| job:read | Odczyt zadań(domyślne) |
| job:write | Tworzenie, anulowanie, ponawianie i usuwanie zadań oraz ich kroków(domyślne) |
| task:read | Odczyt kroków(domyślne) |
| convert | Uruchamianie konwersji(domyślne) |
| api-key:read | Wyświetlanie kluczy API |
| api-key:write | Tworzenie i unieważnianie kluczy API |
| webhook:read | Wyświetlanie webhooków |
| webhook:write | Tworzenie i usuwanie webhooków |
Szybki start
Przekonwertuj PDF na DOCX w trzech krokach: utwórz zadanie, poczekaj na jego zakończenie i pobierz wynik.
Utwórz zadanie konwersji
curl -X POST https://convertfly.io/api/v1/jobs \
-H "Authorization: Bearer cvfly_sk_live_abc123..." \
-H "Content-Type: application/json" \
-d '{
"tasks": {
"import-file": {
"operation": "import/url",
"url": "https://example.com/report.pdf"
},
"convert": {
"operation": "convert",
"input": ["import-file"],
"output_format": "docx"
},
"export": {
"operation": "export/url",
"input": ["convert"]
}
}
}'const res = await fetch("https://convertfly.io/api/v1/jobs", {
method: "POST",
headers: {
"Authorization": "Bearer cvfly_sk_live_abc123...",
"Content-Type": "application/json",
},
body: JSON.stringify({
tasks: {
"import-file": {
operation: "import/url",
url: "https://example.com/report.pdf",
},
convert: {
operation: "convert",
input: ["import-file"],
output_format: "docx",
},
export: {
operation: "export/url",
input: ["convert"],
},
},
}),
});
const job = await res.json();
console.log(job.id); // "cmxr9k2p0..."
console.log(job.status); // "processing"import requests
resp = requests.post(
"https://convertfly.io/api/v1/jobs",
headers={"Authorization": "Bearer cvfly_sk_live_abc123..."},
json={
"tasks": {
"import-file": {
"operation": "import/url",
"url": "https://example.com/report.pdf",
},
"convert": {
"operation": "convert",
"input": ["import-file"],
"output_format": "docx",
},
"export": {
"operation": "export/url",
"input": ["convert"],
},
}
},
)
job = resp.json()
print(job["id"]) # "cmxr9k2p0..."
print(job["status"]) # "processing"Poczekaj na zakończenie
Sprawdzaj status zadania lub użyj webhooków, aby otrzymywać powiadomienia w czasie rzeczywistym.
curl https://convertfly.io/api/v1/jobs/job_7kX9mP2qR \
-H "Authorization: Bearer cvfly_sk_live_abc123..."{
"id": "cmxr9k2p0",
"status": "finished",
"created_at": "2026-04-03T10:30:00Z",
"tasks": [
{
"name": "export",
"operation": "export/url",
"status": "finished",
"result": {
"files": [
{ "url": "https://files.convertfly.io/d/cmv.../result.docx?e=...&s=..." }
]
}
}
]
}Pobierz wynik
Użyj adresu URL z wyniku kroku eksportu. Linki do pobrania są ważne przez 1 godzinę; pliki są usuwane 24 godziny po przesłaniu.
curl -o result.docx "https://files.convertfly.io/d/..."Zadania (jobs)
Zadanie (job) to kontener na jeden lub więcej kroków (tasks), które tworzą potok konwersji. Kroki w zadaniu są wykonywane w kolejności zależności: każdy krok może odwoływać się do wyniku poprzedniego kroku przez pole input.
Idea potoku
Typowy potok wygląda tak: import/url -> convert -> export/url. Możesz też łączyć wiele operacji: import -> convert -> optimize -> watermark -> export.
Statusy zadań
| Status | Opis |
|---|---|
| waiting | Zadanie utworzone, w kolejce do przetworzenia |
| processing | Co najmniej jeden krok jest w trakcie wykonywania |
| finished | Wszystkie kroki zakończyły się powodzeniem |
| error | Co najmniej jeden krok zakończył się błędem |
Utwórz zadanie
/api/v1/jobstagstringOpcjonalna etykieta do porządkowania zadań (np. batch-2026-04).
tasksobjectwymaganeMapa nazw kroków na definicje kroków. Nazwy kroków muszą być unikalne w obrębie zadania.
webhook_urlstringAdres URL, na który zostanie wysłane zdarzenie job.finished lub job.failed po zakończeniu zadania.
curl -X POST https://convertfly.io/api/v1/jobs \
-H "Authorization: Bearer cvfly_sk_..." \
-H "Content-Type: application/json" \
-d '{
"tag": "invoice-batch",
"tasks": {
"import-file": {
"operation": "import/url",
"url": "https://example.com/invoice.pdf"
},
"to-png": {
"operation": "convert",
"input": ["import-file"],
"output_format": "png",
"options": { "density": 300 }
},
"export": {
"operation": "export/url",
"input": ["to-png"]
}
}
}'{
"id": "cmxr9k2p0",
"tag": "invoice-batch",
"status": "processing",
"created_at": "2026-04-03T10:30:00Z",
"tasks": [
{ "name": "import-file", "operation": "import/url", "status": "finished" },
{ "name": "to-png", "operation": "convert", "status": "processing" },
{ "name": "export", "operation": "export/url", "status": "waiting" }
]
}Przykład: scalanie plików w jeden PDF
Operacja merge łączy dwa lub więcej plików wejściowych (PDF i/lub obrazy) w jeden PDF. Podaj nazwy kroków wejściowych w odpowiedniej kolejności w tablicy input.
curl -X POST https://convertfly.io/api/v1/jobs \
-H "Authorization: Bearer cvfly_sk_..." \
-H "Content-Type: application/json" \
-d '{
"tasks": {
"cover": {
"operation": "import/url",
"url": "https://example.com/cover.png"
},
"report": {
"operation": "import/url",
"url": "https://example.com/report.pdf"
},
"merge-all": {
"operation": "merge",
"input": ["cover", "report"]
},
"export": {
"operation": "export/url",
"input": ["merge-all"]
}
}
}'Przykład: zrzut strony internetowej
Operacja capture-website nie wymaga kroku wejściowego: renderuje publiczny adres URL do PDF, PNG lub JPG.
curl -X POST https://convertfly.io/api/v1/jobs \
-H "Authorization: Bearer cvfly_sk_..." \
-H "Content-Type: application/json" \
-d '{
"tasks": {
"capture": {
"operation": "capture-website",
"url": "https://example.com",
"output_format": "pdf",
"width": 1280
},
"export": {
"operation": "export/url",
"input": ["capture"]
}
}
}'Pobierz zadanie
/api/v1/jobs/:idPobierz szczegóły zadania i status wszystkich jego kroków.
curl https://convertfly.io/api/v1/jobs/job_7kX9mP2qR \
-H "Authorization: Bearer cvfly_sk_..."Wyświetl zadania
/api/v1/jobspageintegerNumer strony, od 1. Domyślnie: 1.
limitintegerLiczba wyników na stronę, 1-100. Domyślnie: 20.
statusstringFiltruj według statusu: WAITING, PROCESSING, FINISHED, ERROR.
tagstringFiltruj według etykiety.
curl "https://convertfly.io/api/v1/jobs?status=finished&per_page=5" \
-H "Authorization: Bearer cvfly_sk_..."{
"data": [ ... ],
"links": { "first": "?page=1&per_page=5", "last": "?page=9&per_page=5", "prev": null, "next": "?page=2&per_page=5" },
"meta": {
"page": 1,
"per_page": 5,
"total": 42
}
}Usuń zadanie
/api/v1/jobs/:idUsuń zadanie i wszystkie powiązane z nim pliki. Trwające kroki zostaną anulowane. Tej operacji nie można cofnąć.
curl -X DELETE https://convertfly.io/api/v1/jobs/job_7kX9mP2qR \
-H "Authorization: Bearer cvfly_sk_..."Czekaj na zakończenie
/api/v1/jobs/:id/waitEndpoint long-polling, który blokuje odpowiedź, dopóki zadanie nie osiągnie stanu końcowego (FINISHED lub ERROR). Po 300 sekundach zwraca 202 Accepted, jeśli zadanie jest nadal przetwarzane.
curl "https://convertfly.io/api/v1/jobs/job_7kX9mP2qR/wait?timeout=120" \
-H "Authorization: Bearer cvfly_sk_..."Kroki (tasks)
Kroki (tasks) to poszczególne etapy w ramach zadania. Każdy krok ma nazwę (klucz w obiekcie tasks), pole operation i opcjonalnie tablicę input z nazwami poprzednich kroków.
Pola kroku
| Pole | Typ | Opis |
|---|---|---|
| operation | string | Operacja do wykonania (zob. Operacje) |
| input | string[] | Nazwy kroków, których wynik ma posłużyć jako dane wejściowe |
| output_format | string | Format docelowy dla operacji convert |
| options | object | Ustawienia właściwe dla operacji (jakość, gęstość itd.) |
Wyświetl kroki zadania
/api/v1/jobs/:id/tasks{
"data": [
{
"name": "import-file",
"operation": "import/url",
"status": "finished",
"result": { "file_id": "file_Xk9m..." }
},
{
"name": "convert",
"operation": "convert",
"status": "finished",
"result": { "file_id": "file_Pm3n..." }
}
]
}Pobierz krok
/api/v1/jobs/:job_id/tasks/:task_nameAnuluj krok
/api/v1/jobs/:job_id/tasks/:task_name/cancelAnuluj trwający lub oczekujący krok. Kroki, które od niego zależą, również zostaną anulowane.
Ponów nieudany krok
/api/v1/jobs/:job_id/tasks/:task_name/retryPonów krok o statusie ERROR. Jeśli krok jest płatny, ponownie zużywa kredyty.
Przesyłanie plików
Pliki można przekazać do ConvertFly na trzy sposoby. Wybierz ten, który najlepiej pasuje do Twojego przypadku.
Import z adresu URL
Najprostsza metoda. ConvertFly pobiera plik z publicznie dostępnego adresu URL.
{
"import-file": {
"operation": "import/url",
"url": "https://example.com/document.pdf",
"filename": "document.pdf",
"headers": {
"Authorization": "Bearer your-external-token"
}
}
}Bezpośrednie przesyłanie (podpisany URL)
Dla plików na Twoim komputerze. Proces ma dwa etapy: najpierw utwórz krok, aby uzyskać podpisany adres URL do przesłania, a następnie wyślij plik metodą PUT na ten adres.
{
"upload-file": {
"operation": "import/upload",
"filename": "photo.jpg"
}
}# The task result will contain the presigned URL
curl -X PUT "https://files.convertfly.io/convertfly-files/..." \
-H "Content-Type: image/jpeg" \
--data-binary @photo.jpgImport z Base64
Dla małych plików (poniżej 10 MB). Umieść zawartość pliku bezpośrednio w żądaniu.
{
"import-file": {
"operation": "import/base64",
"file": "JVBERi0xLjQKJcOkw7zD...",
"filename": "document.pdf"
}
}| Metoda | Maks. rozmiar | Najlepsza do |
|---|---|---|
| import/url | 5 GB | Plików już dostępnych online |
| import/upload | 5 GB | Plików lokalnych, dużych plików |
| import/base64 | 10 MB | Małych plików, bezpośrednio w żądaniu |
Opcje konwersji
Każda operacja obsługuje własne opcje. Poniżej znajdziesz wszystkie dostępne operacje i pary formatów dla konwersji.
Dostępne operacje
| Operacja | Opis | Kredyty |
|---|---|---|
| import/upload | Prześlij plik przez podpisany URL | 0 |
| import/url | Zaimportuj plik z adresu URL | 0 |
| import/base64 | Zaimportuj plik z danych base64 | 0 |
| convert | Konwertuj między formatami | 1-4 |
| optimize | Skompresuj/zoptymalizuj plik | 1 |
| thumbnail | Wygeneruj miniaturę podglądu | 1 |
| merge | Scal kilka plików PDF i/lub obrazów w jeden PDF | 1 |
| watermark | Dodaj tekstowy lub graficzny znak wodny do obrazów, filmów lub PDF | 1 |
| split | Wyodrębnij strony z pliku PDF lub podziel go na jeden PDF na stronę (ZIP) | 1 |
| rotate | Obróć strony pliku PDF o 90, 180 lub 270 stopni | 1 |
| resize | Zmień rozmiar obrazu według szerokości, wysokości lub procentu, zachowując proporcje | 1 |
| gif | Zamień fragment wideo w animowany GIF (początek, czas trwania, fps, szerokość) | 2 |
| ocr | Rozpoznaj tekst w PDF lub obrazach (14 języków, te same co na stronie OCR) | 3 |
| capture-website | Zapisz publiczną stronę internetową jako PDF, PNG lub JPG | 1 |
| metadata | Wyodrębnij metadane pliku | 1 |
| export/url | Uzyskaj podpisany URL do pobrania | 0 |
| export/s3 | Eksportuj bezpośrednio do swojego zasobnika S3 | 0 |
Obsługiwane pary formatów
Popularne konwersje. Format jest wykrywany automatycznie na podstawie pliku, ale możesz też jawnie ustawić input_format.
| Kategoria | Formaty wejściowe | Formaty wyjściowe |
|---|---|---|
| Dokumenty | pdf, docx, doc, odt, rtf, txt, html | pdf, docx, odt, rtf, txt, html |
| Arkusze kalkulacyjne | xlsx, xls, ods, csv | xlsx, ods, csv, pdf |
| Prezentacje | pptx, ppt, odp | pptx, odp, pdf |
| Obrazy | jpg, png, gif, bmp, tiff, webp, svg, heic | jpg, png, gif, bmp, tiff, webp |
| Wideo | mp4, avi, mov, mkv, webm | mp4, avi, mov, mkv, webm, gif |
| Dźwięk | mp3, wav, ogg, flac, aac, m4a | mp3, wav, ogg, flac, aac |
Opcje jakości i przetwarzania
Przekaż je w obiekcie options kroku convert.
qualityintegerJakość wyniku dla formatów stratnych (1-100). Domyślnie: 85.
densityintegerDPI przy konwersji dokumentu na obraz. Domyślnie: 150.
widthintegerZmień szerokość na podaną liczbę pikseli. Zachowuje proporcje, jeśli pominięto height.
heightintegerZmień wysokość na podaną liczbę pikseli. Zachowuje proporcje, jeśli pominięto width.
pagesstringZakres stron dla operacji na dokumentach. Np. 1-5, 1,3,5, all.
{
"convert-hq": {
"operation": "convert",
"input": ["import-file"],
"output_format": "png",
"options": {
"density": 300,
"quality": 95
}
}
}Webhooki
Zarejestruj adresy URL webhooków, aby otrzymywać powiadomienia w czasie rzeczywistym, gdy zmienia się status zadań lub kroków. Wszystkie treści są podpisane HMAC-SHA256, dzięki czemu możesz sprawdzić, że pochodzą od ConvertFly.
Utwórz webhook
/api/v1/webhooksurlstringwymaganeAdres HTTPS, na który będą wysyłane zdarzenia webhooka.
eventsstring[]wymaganeTypy zdarzeń do subskrypcji.
curl -X POST https://convertfly.io/api/v1/webhooks \
-H "Authorization: Bearer cvfly_sk_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-app.com/webhooks/convertfly",
"events": ["job.finished", "job.failed"]
}'{
"data": {
"id": "wh_Abc123...",
"url": "https://your-app.com/webhooks/convertfly",
"events": ["job.finished", "job.failed"],
"signing_secret": "whsec_9f8e7d6c5b4a...",
"created_at": "2026-04-03T10:30:00Z"
}
}Wyświetl webhooki
/api/v1/webhooksUsuń webhook
/api/v1/webhooks/:idTypy zdarzeń
| Zdarzenie | Wyzwalacz |
|---|---|
| job.finished | Wszystkie kroki zadania zakończyły się powodzeniem |
| job.failed | Co najmniej jeden krok zakończył się błędem, zadanie ma stan ERROR |
| task.finished | Pojedynczy krok został zakończony |
| task.failed | Pojedynczy krok zakończył się błędem |
Treść webhooka
{
"event": "job.finished",
"timestamp": "2026-04-03T10:31:15Z",
"data": {
"id": "job_7kX9mP2qR",
"status": "finished",
"tasks": { ... }
}
}Weryfikacja podpisów
Każde żądanie webhooka zawiera dwa nagłówki: X-Webhook-Signature i X-Webhook-Timestamp. Zweryfikuj je, aby mieć pewność, że treść wysłał ConvertFly i nie została zmieniona.
import crypto from "crypto";
function verifyWebhook(rawBody, signature, timestamp, secret) {
const signedContent = timestamp + "." + rawBody;
const expected = "v1=" + crypto
.createHmac("sha256", secret)
.update(signedContent)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signature)
);
}import hmac, hashlib
def verify_webhook(raw_body: bytes, signature: str, timestamp: str, secret: str) -> bool:
signed_content = f"{timestamp}.{raw_body.decode()}"
expected = "v1=" + hmac.new(
secret.encode(), signed_content.encode(), hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)Klucze API
Zarządzaj kluczami API programowo. Kluczami możesz też zarządzać w panelu.
Utwórz klucz API
/api/v1/api-keysnamestringwymaganeOpisowa nazwa klucza.
scopesstring[]Przyznawane uprawnienia. Domyślnie: ["*"] (pełny dostęp).
{
"data": {
"id": "key_Xk9m...",
"name": "production-server",
"key": "cvfly_sk_live_abc123def456...",
"scopes": ["*"],
"created_at": "2026-04-03T10:30:00Z"
}
}Ważne: pełny klucz API jest wyświetlany tylko raz, w chwili utworzenia. Przechowuj go w bezpiecznym miejscu, ponieważ nie będzie można go ponownie pobrać.
Wyświetl klucze API
/api/v1/api-keysUnieważnij klucz API
/api/v1/api-keys/:idNatychmiast unieważnia klucz. Wszystkie żądania z jego użyciem zwrócą 401.
Limity żądań
Liczba żądań API jest ograniczona dla każdego klucza API, aby zapewnić uczciwe korzystanie. Po przekroczeniu limitu żądania zwracają 429 Too Many Requests.
Limit domyślny
Każdy klucz API pozwala na 100 żądań na godzinę. Aktualny limit i okno czasowe klucza są zwracane jako rate_limit i rate_limit_window (w sekundach) podczas wyświetlania listy kluczy. Skontaktuj się z nami, jeśli Twoja integracja potrzebuje wyższego limitu.
Nagłówki odpowiedzi
Każda odpowiedź na żądanie wykonane z kluczem API zawiera te nagłówki:
X-RateLimit-LimitnagłówekMaksymalna liczba żądań dozwolona w bieżącym oknie.
X-RateLimit-RemainingnagłówekLiczba żądań pozostałych w bieżącym oknie.
X-RateLimit-ResetnagłówekZnacznik czasu Unix, w którym okno zostanie zresetowane.
Retry-AfternagłówekLiczba sekund oczekiwania przed ponowieniem (tylko w odpowiedziach 429).
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1743681600
Retry-After: 3600
{
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. 100 requests per 3600s allowed."
}Błędy
ConvertFly używa standardowych kodów statusu HTTP. Wszystkie odpowiedzi z błędem mają jednolity format z kodem code czytelnym dla maszyn i komunikatem message czytelnym dla ludzi.
Format odpowiedzi z błędem
{
"code": "INVALID_DATA",
"message": "Missing required field: output_format",
"details": {
"field": "output_format",
"reason": "required"
}
}Kody błędów
| Kod | HTTP | Opis |
|---|---|---|
| INVALID_DATA | 400 | Nieprawidłowa treść żądania lub parametry |
| UNAUTHENTICATED | 401 | Brak klucza API lub klucz nieprawidłowy |
| FORBIDDEN | 403 | Klucz API nie ma uprawnienia wymaganego do tej operacji |
| NOT_FOUND | 404 | Zasób nie istnieje lub został usunięty |
| CONFLICT | 409 | Zasób już istnieje lub operacja jest sprzeczna z bieżącym stanem |
| PAYLOAD_TOO_LARGE | 413 | Treść żądania przekracza maksymalny dozwolony rozmiar |
| UNSUPPORTED_FORMAT | 422 | Żądana konwersja nie jest obsługiwana |
| RATE_LIMIT_EXCEEDED | 429 | Przekroczono limit żądań, zob. Limity żądań |
| INSUFFICIENT_CREDITS | 402 | Za mało kredytów, aby wykonać operację |
| SERVER_ERROR | 500 | Wewnętrzny błąd serwera: ponów próbę lub skontaktuj się z pomocą |
| UNAVAILABLE | 503 | Usługa chwilowo niedostępna: spróbuj ponownie za moment |
Obsługa błędów
const res = await fetch("https://convertfly.io/api/v1/jobs", {
method: "POST",
headers: {
"Authorization": "Bearer cvfly_sk_...",
"Content-Type": "application/json",
},
body: JSON.stringify({ tasks: { /* ... */ } }),
});
if (!res.ok) {
const error = await res.json();
console.error(`[${error.code}] ${error.message}`);
// "[INVALID_DATA] Missing required field: output_format"
return;
}
const { data: job } = await res.json();Kredyty
Każda operacja kosztuje określoną liczbę kredytów. Operacje importu i eksportu są bezpłatne. Pozostałe saldo jest podawane w każdej odpowiedzi API w nagłówku X-Credits-Remaining.
Koszt w kredytach według typu konwersji
| Operacja | Koszt | Przykłady |
|---|---|---|
| Import / eksport | Bezpłatnie | import/url, import/upload, export/url, export/s3 |
| Konwersja obrazów | 1 kredyt | jpg na png, webp na gif, heic na jpg |
| Konwersja dźwięku | 1 kredyt | mp3 na wav, flac na aac |
| Dokument na PDF | 1 kredyt | txt na pdf, html na pdf, md na pdf |
| Office na PDF | 2 kredyty | docx na pdf, pptx na pdf, xlsx na pdf |
| Konwersja wideo | 2 kredyty | mp4 na webm, mov na mp4 |
| PDF na Office | 4 kredyty | pdf na docx, pdf na pptx |
| Optymalizacja | 1 kredyt | Kompresja obrazów i PDF |
| Miniatura | 1 kredyt | Generowanie obrazu podglądu |
| Scalanie | 1 kredyt | Łączenie wielu plików PDF |
| Znak wodny | 1 kredyt | Nakładka tekstowa lub graficzna |
| Podziel PDF | 1 kredyt | Wyodrębnij strony 1-3, 7 lub jeden plik na stronę |
| Obróć PDF | 1 kredyt | Obróć wszystkie strony lub wybrane |
| Zmień rozmiar obrazu | 1 kredyt | 1200 px szerokości, 50 procent |
| Kreator GIF | 2 kredyty | fragment mp4 do gif, ta sama cena co konwersja wideo |
| Zrzut strony | 1 kredyt | Renderowanie adresu URL do PDF lub obrazu |
| OCR | 3 kredyty | Przeszukiwalny skan PDF |
| Metadane | 1 kredyt | Wyodrębnianie informacji o pliku |
Sprawdzanie salda
Każda odpowiedź API zawiera nagłówek X-Credits-Remaining z Twoim bieżącym saldem.
HTTP/1.1 201 Created
Content-Type: application/json
X-Credits-Remaining: 9847
X-Credits-Used: 2Gdy saldo jest zbyt niskie, aby wykonać zadanie, API zwraca 402 z kodem błędu INSUFFICIENT_CREDITS. Doładuj kredyty w panelu płatności.
Środowisko testowe
Klucze testowe (sandbox) pozwalają zbudować i przetestować integrację od początku do końca bez wydawania kredytów. Utwórz klucz z "sandbox": true; ma on prefiks cf_test_ zamiast cvfly_sk_. Wszystko działa tak jak w środowisku produkcyjnym, z trzema różnicami.
| Kredyty | Nigdy nie są pobierane. Twoje saldo pozostaje nienaruszone. |
| Rozmiar pliku | Pliki wejściowe są ograniczone do 5 MB. |
| Wynik | Obrazy, filmy i pliki PDF mają znak wodny „ConvertFly SANDBOX”. |
curl -X POST https://convertfly.io/api/v1/api-keys \
-H "Authorization: Bearer YOUR_LIVE_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Sandbox", "sandbox": true}'
# Response includes: "key": "cf_test_...", "is_sandbox": trueChcesz zacząć?
Załóż bezpłatne konto i przetestuj API z kluczem testowym, bez żadnych opłat.