Γρήγορη εκκίνηση
Τρία βήματα για την πρώτη σας κλήση API.
- Δημιουργήστε ένα κλειδί API από Λογαριασμός › Κλειδιά API
- Στείλτε ένα multipart/form-data POST σε ένα από τα v1 endpoints με Authorization: Bearer header.
- Εξετάστε την απόκριση JSON — οι επιτυχείς κλήσεις επιστρέφουν ένα υπογεγραμμένο URL λήψης που ισχύει για 15 λεπτά.
Base URL
Πιστοποίηση
Κάθε αίτημα πρέπει να περιλαμβάνει ένα Authorization header με το κλειδί API σας ως Bearer token.
Authorization: Bearer pdn_live_a1b2c3d4e5f6...Μορφές κλειδιού
pdn_live_<32 hex>— Κλειδί παραγωγής. Μετράει στο όριο ρυθμού του πλάνου σας.pdn_test_<32 hex>— Δοκιμαστικό κλειδί. Ίδιο όριο ρυθμού· χρήσιμο για διάκριση περιβαλλόντων στα logs.
Όρια ρυθμού
Τα όρια ρυθμού υπολογίζονται ανά χρήστη, ανά κυλιόμενο παράθυρο 1 ώρας. Κάθε απόκριση περιλαμβάνει headers X-RateLimit-* ώστε να μπορείτε να σχεδιάζετε τις επανάληψεις σας.
| Πλάνο | Αιτήματα / ώρα |
|---|---|
| Free | 10 |
| Premium | 1,000 |
| Business | 5,000 |
| Enterprise | Απεριόριστο |
Headers απόκρισης
X-RateLimit-Limit— Το ωριαίο όριο του πλάνου σας.X-RateLimit-Remaining— Κλήσεις που απομένουν στο τρέχον παράθυρο.X-RateLimit-Reset— Unix timestamp όταν επαναφέρεται το παράθυρο.Retry-After— Δευτερόλεπτα αναμονής, αποστέλλεται μόνο σε αποκρίσεις 429.
Σφάλματα
Όλα τα σφάλματα επιστρέφονται ως JSON με σταθερό κωδικό και αναγνώσιμο μήνυμα.
{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded for your plan (free: 10/hour)."
},
"meta": { "request_id": "8f9a2b3c1d4e5f6a" }
}Κωδικοί σφάλματος
| Code | HTTP | Σημασία |
|---|---|---|
unauthorized | 401 | Κλειδί API που λείπει, είναι κακοδιαμορφωμένο ή έχει ανακληθεί. |
rate_limited | 429 | Υπέρβαση ωριαίου ορίου ρυθμού για το πλάνο σας. |
invalid_input | 400 | Το σώμα του αιτήματος ή οι παράμετροι απέτυχαν στην επικύρωση. |
payload_too_large | 413 | Το αρχείο ή το συνδυασμένο payload υπερβαίνει το όριο μεγέθους του πλάνου σας. |
internal_error | 500 | Απρόσμενο σφάλμα server. Ασφαλές για επανάληψη με backoff. |
POST /compress
Συμπιέζει ένα PDF χρησιμοποιώντας Ghostscript όταν είναι διαθέσιμο, με fallback σε FPDI. Επιστρέφει υπογεγραμμένο URL λήψης.
Παράμετροι (multipart/form-data)
| Όνομα | Τύπος | Περιγραφή |
|---|---|---|
| file * | file | Αρχείο PDF προς συμπίεση. |
| level | string | Προεπιλογή συμπίεσης. low, medium, high |
Παραδείγματα κώδικα
curl -X POST https://whatapdf.com/api/v1/compress \
-H "Authorization: Bearer pdn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-F "[email protected]" \
-F "level=medium"const form = new FormData();
form.append('file', fileInput.files[0]);
form.append('level', 'medium');
const res = await fetch('https://whatapdf.com/api/v1/compress', {
method: 'POST',
headers: { 'Authorization': 'Bearer pdn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' },
body: form,
});
const json = await res.json();
console.log(json.data.download.url);import requests
with open('input.pdf', 'rb') as f:
r = requests.post(
'https://whatapdf.com/api/v1/compress',
headers={'Authorization': 'Bearer pdn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'},
files={'file': f},
data={'level': 'medium'},
)
print(r.json())<?php
$ch = curl_init('https://whatapdf.com/api/v1/compress');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer pdn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'],
CURLOPT_POSTFIELDS => [
'file' => new CURLFile('input.pdf', 'application/pdf'),
'level' => 'medium',
],
]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($res);Παράδειγμα απόκρισης
{
"data": {
"filename": "report_compressed.pdf",
"original_size": 5242880,
"compressed_size": 2621440,
"savings_percent": 50.0,
"method": "ghostscript",
"download": {
"url": "/api/get-pdf.php?file=...&exp=...&sig=...",
"expires_in": 900
}
},
"meta": { "request_id": "8f9a2b3c1d4e5f6a" }
}POST /merge
Συγχωνεύει 2–20 PDF σε ένα ενιαίο έγγραφο με τη σειρά μεταφόρτωσης.
Παράμετροι
| Όνομα | Τύπος | Περιγραφή |
|---|---|---|
| files[] * | file[] | Δύο ή περισσότερα αρχεία PDF (multipart πίνακας). |
Παραδείγματα κώδικα
curl -X POST https://whatapdf.com/api/v1/merge \
-H "Authorization: Bearer pdn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-F "files[][email protected]" \
-F "files[][email protected]" \
-F "files[][email protected]"const form = new FormData();
for (const f of fileInput.files) form.append('files[]', f);
const res = await fetch('https://whatapdf.com/api/v1/merge', {
method: 'POST',
headers: { 'Authorization': 'Bearer pdn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' },
body: form,
});
console.log(await res.json());import requests
files = [
('files[]', open('a.pdf', 'rb')),
('files[]', open('b.pdf', 'rb')),
('files[]', open('c.pdf', 'rb')),
]
r = requests.post(
'https://whatapdf.com/api/v1/merge',
headers={'Authorization': 'Bearer pdn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'},
files=files,
)
print(r.json())<?php
$ch = curl_init('https://whatapdf.com/api/v1/merge');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer pdn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'],
CURLOPT_POSTFIELDS => [
'files[0]' => new CURLFile('a.pdf', 'application/pdf'),
'files[1]' => new CURLFile('b.pdf', 'application/pdf'),
'files[2]' => new CURLFile('c.pdf', 'application/pdf'),
],
]);
echo curl_exec($ch);
curl_close($ch);POST /split
Διαχωρίζει ένα PDF σε ένα ή περισσότερα μέρη βάσει εύρους σελίδων. Κάθε μέρος επιστρέφεται με το δικό του υπογεγραμμένο URL λήψης.
Παράμετροι
| Όνομα | Τύπος | Περιγραφή |
|---|---|---|
| file * | file | Αρχείο PDF προέλευσης. |
| ranges * | string | Εύρη σελίδων χωρισμένα με κόμμα. Ένα εύρος = ένα μέρος εξόδου. e.g. 1-3,5,7-9 |
Παραδείγματα κώδικα
curl -X POST https://whatapdf.com/api/v1/split \
-H "Authorization: Bearer pdn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-F "[email protected]" \
-F "ranges=1-3,5,7-9"const form = new FormData();
form.append('file', fileInput.files[0]);
form.append('ranges', '1-3,5,7-9');
const res = await fetch('https://whatapdf.com/api/v1/split', {
method: 'POST',
headers: { 'Authorization': 'Bearer pdn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' },
body: form,
});
console.log(await res.json());import requests
with open('input.pdf', 'rb') as f:
r = requests.post(
'https://whatapdf.com/api/v1/split',
headers={'Authorization': 'Bearer pdn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'},
files={'file': f},
data={'ranges': '1-3,5,7-9'},
)
for part in r.json()['data']['parts']:
print(part['pages'], part['download']['url'])<?php
$ch = curl_init('https://whatapdf.com/api/v1/split');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer pdn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'],
CURLOPT_POSTFIELDS => [
'file' => new CURLFile('input.pdf', 'application/pdf'),
'ranges' => '1-3,5,7-9',
],
]);
print_r(json_decode(curl_exec($ch), true));
curl_close($ch);POST /ocr
Εξάγει κείμενο από εικόνα χρησιμοποιώντας Tesseract OCR. Υποστηρίζει 20+ γλώσσες.
Παράμετροι
| Όνομα | Τύπος | Περιγραφή |
|---|---|---|
| image * | file | Εικόνα για OCR (PNG, JPEG, TIFF, WebP ή BMP). |
| language | string | Κωδικός γλώσσας Tesseract. Προεπιλογή eng |
Παραδείγματα κώδικα
curl -X POST https://whatapdf.com/api/v1/ocr \
-H "Authorization: Bearer pdn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-F "[email protected]" \
-F "language=eng"const form = new FormData();
form.append('image', imageInput.files[0]);
form.append('language', 'eng');
const res = await fetch('https://whatapdf.com/api/v1/ocr', {
method: 'POST',
headers: { 'Authorization': 'Bearer pdn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' },
body: form,
});
const { data } = await res.json();
console.log(data.text);import requests
with open('scan.png', 'rb') as f:
r = requests.post(
'https://whatapdf.com/api/v1/ocr',
headers={'Authorization': 'Bearer pdn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'},
files={'image': f},
data={'language': 'eng'},
)
print(r.json()['data']['text'])<?php
$ch = curl_init('https://whatapdf.com/api/v1/ocr');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer pdn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'],
CURLOPT_POSTFIELDS => [
'image' => new CURLFile('scan.png', 'image/png'),
'language' => 'eng',
],
]);
$res = json_decode(curl_exec($ch), true);
echo $res['data']['text'];
curl_close($ch);