Καλώς Ήρθατε Ξανά

Συνδεθείτε για πρόσβαση στα έγγραφα και τις υπογραφές σας

ή συνεχίστε με email
Ξεχάσατε τον κωδικό;
API v1 · Σταθερό

WHAT A PDF! API Προγραμματιστών

Επεξεργαστείτε PDF σε κλίμακα από την εφαρμογή σας. Συμπιέστε, συγχωνεύστε, διαχωρίστε και κάντε OCR μέσω καθαρού REST interface με πιστοποίηση Bearer-token και όρια ρυθμού ανά πλάνο.

Γρήγορη εκκίνηση

Τρία βήματα για την πρώτη σας κλήση API.

  1. Δημιουργήστε ένα κλειδί API από Λογαριασμός › Κλειδιά API
  2. Στείλτε ένα multipart/form-data POST σε ένα από τα v1 endpoints με Authorization: Bearer header.
  3. Εξετάστε την απόκριση JSON — οι επιτυχείς κλήσεις επιστρέφουν ένα υπογεγραμμένο URL λήψης που ισχύει για 15 λεπτά.

Base URL

https://whatapdf.com/api/v1

Πιστοποίηση

Κάθε αίτημα πρέπει να περιλαμβάνει ένα Authorization header με το κλειδί API σας ως Bearer token.

Authorization: Bearer pdn_live_a1b2c3d4e5f6...
Κρατήστε τα live κλειδιά σας μυστικά. Αντιμετωπίστε τα όπως τους κωδικούς πρόσβασης. Ποτέ μην τα κάνετε commit σε source control ή τα εκθέτετε σε client-side κώδικα.

Μορφές κλειδιού

  • pdn_live_<32 hex> — Κλειδί παραγωγής. Μετράει στο όριο ρυθμού του πλάνου σας.
  • pdn_test_<32 hex> — Δοκιμαστικό κλειδί. Ίδιο όριο ρυθμού· χρήσιμο για διάκριση περιβαλλόντων στα logs.

Όρια ρυθμού

Τα όρια ρυθμού υπολογίζονται ανά χρήστη, ανά κυλιόμενο παράθυρο 1 ώρας. Κάθε απόκριση περιλαμβάνει headers X-RateLimit-* ώστε να μπορείτε να σχεδιάζετε τις επανάληψεις σας.

ΠλάνοΑιτήματα / ώρα
Free10
Premium1,000
Business5,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" }
}

Κωδικοί σφάλματος

CodeHTTPΣημασία
unauthorized401Κλειδί API που λείπει, είναι κακοδιαμορφωμένο ή έχει ανακληθεί.
rate_limited429Υπέρβαση ωριαίου ορίου ρυθμού για το πλάνο σας.
invalid_input400Το σώμα του αιτήματος ή οι παράμετροι απέτυχαν στην επικύρωση.
payload_too_large413Το αρχείο ή το συνδυασμένο payload υπερβαίνει το όριο μεγέθους του πλάνου σας.
internal_error500Απρόσμενο σφάλμα server. Ασφαλές για επανάληψη με backoff.

POST /compress

Συμπιέζει ένα PDF χρησιμοποιώντας Ghostscript όταν είναι διαθέσιμο, με fallback σε FPDI. Επιστρέφει υπογεγραμμένο URL λήψης.

POSThttps://whatapdf.com/api/v1/compress

Παράμετροι (multipart/form-data)

ΌνομαΤύποςΠεριγραφή
file *fileΑρχείο PDF προς συμπίεση.
levelstringΠροεπιλογή συμπίεσης. 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 σε ένα ενιαίο έγγραφο με τη σειρά μεταφόρτωσης.

POSThttps://whatapdf.com/api/v1/merge

Παράμετροι

ΌνομαΤύποςΠεριγραφή
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 λήψης.

POSThttps://whatapdf.com/api/v1/split

Παράμετροι

ΌνομαΤύποςΠεριγραφή
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+ γλώσσες.

POSThttps://whatapdf.com/api/v1/ocr

Παράμετροι

ΌνομαΤύποςΠεριγραφή
image *fileΕικόνα για OCR (PNG, JPEG, TIFF, WebP ή BMP).
languagestringΚωδικός γλώσσας 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);
WHAT A PDF! για Gmail - Επέκταση Chrome

Ανοίξτε τα συνημμένα PDF του Gmail απευθείας στο WHAT A PDF!. Επεξεργαστείτε, υπογράψτε και μετατρέψτε τα PDF σας αμέσως!

Εγκατάσταση δωρεάν επέκτασης

Wait — don't miss out!

Subscribe for free PDF tips, new tools, and feature updates delivered to your inbox.

No spam ever. Unsubscribe anytime.