Submit now, get notified when done

No polling loops HMAC webhook verification Auto-retry on failure

Built for production workloads

Async processing with reliable delivery, security, and automatic retries.

Non-Blocking Submissions

Get a jobId back immediately. Your application keeps running while Parselyze processes in the background.

Job Status Polling

Check the status and progress of any job at any time via a simple GET request using the jobId.

Webhook Delivery

Receive the full extraction result at your endpoint the moment processing completes.

HMAC Signature Verification

Every webhook delivery is signed with HMAC-SHA256. Verify authenticity in one SDK call.

Automatic Retry

Failed deliveries are retried. No dropped results.

Full Result in Payload

The complete extraction result is included in the webhook body. No second API call needed.

Integration in minutes

Two patterns: poll for the result, or let the webhook deliver it to you.

Submit and poll

Node.js / SDK
import { Parselyze } from 'parselyze-node';

const parselyze = new Parselyze('plz_your_api_key');

// Submit asynchronously — returns immediately
const job = await parselyze.documents.parseAsync({
  file: './invoice.pdf',
  templateId: 'tpl_your_template_id',
});

console.log(job.jobId); // "job_abc123"
console.log(job.status); // "pending"

// Poll for result
const result = await parselyze.jobs.get(job.jobId);

if (result.status === 'completed') {
  console.log(result.result);
}

Receive via webhook

Express.js webhook handler
import express from 'express';
import { Parselyze } from 'parselyze-node';

const parselyze = new Parselyze('plz_your_api_key', 'your_webhook_secret');
const app = express();

app.post(
  '/webhook',
  express.raw({ type: 'application/json' }),
  (req, res) => {
    const signature = req.headers['x-parselyze-signature'] as string;
    const isValid = parselyze.webhooks.verifySignature(req.body, signature);

    if (!isValid) {
      return res.status(400).send('Invalid signature');
    }

    const event = JSON.parse(req.body.toString());
    console.log('Job completed:', event.jobId);
    console.log('Result:', event.result);

    res.status(200).send('OK');
  },
);

Ship background document processing today

50 pages/month free · No credit card required