PDF extraction

How to send Discord notifications for PDF processing

Use Discord webhooks, Zapier, Make, n8n, or a small adapter to post okraPDF ready and failed events into a channel.

May 18, 2026 2 min read okraPDF

Discord is useful for communities, creator operations, small teams, and internal alert channels. Use it for human notifications: a PDF is ready, a parse failed, a document needs review, or a workflow produced a downloadable result.

This is API-feasible today. Discord’s webhook documentation describes incoming webhooks for posting messages into channels. The key implementation detail is that Discord expects a Discord-shaped payload with fields such as content or embeds. A raw okraPDF event should be transformed before posting to Discord.

Choose the Discord path

PathBest forNotes
Discord incoming webhook plus adapterDirect engineering setupMost control
ZapierFast no-code setupGood for simple messages
MakeBranching and formattingGood for multiple channels
n8nSelf-hosted workflowsGood for custom logic

Do not use Discord for sensitive financial data unless your workspace policies allow it. Post links and summaries, not full extracted payloads.

Create the Discord webhook

In Discord:

  1. Open the server settings or channel integrations.
  2. Create a webhook for the target channel.
  3. Copy the webhook URL.
  4. Store it as a secret.

Anyone with the webhook URL can post into the channel, so treat it like an API key.

Build the message

For document.processed, send a compact notification:

{
  "content": "PDF ready: invoice-1042.pdf\nOpen: https://..."
}

For richer messages, use embeds:

{
  "embeds": [
    {
      "title": "PDF ready: invoice-1042.pdf",
      "url": "https://...",
      "fields": [
        { "name": "Document ID", "value": "doc_...", "inline": true },
        { "name": "Status", "value": "ready", "inline": true }
      ]
    }
  ]
}

Keep messages concise. If a PDF generated 200 extracted rows, link to the data table instead of pasting the rows.

Adapter endpoint setup

For a direct API setup:

  1. okraPDF sends document.processed and document.failed to your endpoint.
  2. Your endpoint verifies X-Okra-Signature.
  3. Your endpoint checks idempotency by event ID.
  4. Your endpoint maps okraPDF fields into Discord content or embeds.
  5. Your endpoint POSTs to the Discord webhook URL.
  6. Your endpoint returns 2xx after Discord accepts the message.

This is usually less than a page of code, but it is worth doing correctly. Signature verification prevents strangers from using your okraPDF endpoint as a Discord posting proxy.

Zapier setup

  1. Trigger: okraPDF PDF Ready or Webhooks by Zapier Catch Hook.
  2. Action: Discord Send Channel Message.
  3. Map filename, status, hosted URL, and key extracted fields.
  4. Add a second Zap for document.failed.

Use Zapier when non-engineers need to own the workflow.

Make or n8n setup

Make:

  1. Custom webhook receives okraPDF.
  2. Router splits document.processed and document.failed.
  3. Discord module or HTTP module sends the message.

n8n:

  1. Webhook node receives okraPDF.
  2. IF node checks body.type.
  3. Set node creates a Discord payload.
  4. HTTP Request node POSTs to Discord.

Channel strategy

Use separate channels for different signal levels:

  • #pdf-ready for low-volume ready alerts
  • #pdf-failures for operational exceptions
  • #customer-docs for customer-facing document updates

Avoid high-volume per-page alerts. Discord notifications should help a person decide what to do next.