Skip to content

Zapier integration

NativPost does not have a native Zapier app yet, but the API is fully usable through Zapier’s built-in Webhooks by Zapier action.

  1. In Zapier, choose your trigger (Google Sheets, Airtable, Typeform, whatever fires content ideas).

  2. Add an action step: Webhooks by Zapier → POST.

  3. Configure the request:

    • URL: https://app.nativpost.com/api/v1/content

    • Payload type: json

    • Data:

      KeyValue
      captionmapped from your trigger
      content_typetext_only
      target_platforms["twitter","linkedin"] (raw JSON)
    • Headers:

      HeaderValue
      AuthorizationBearer np_live_... (paste your key)
      Content-Typeapplication/json

    Field names to get right: the copy goes in caption (not body_text), destinations go in target_platforms (not platforms), and X’s platform id is twitter (not x). caption is the only required field.

  4. Test the step. You should get back a content object with status: "draft" and a UUID id.

  5. To skip review and go straight to scheduled, add a second Webhooks by Zapier → Custom Request step using method PATCH against https://app.nativpost.com/api/v1/content/{{id}} with body {"status":"scheduled","scheduled_for":"..."}. The plain POST action cannot send PATCH.

Attaching media works the same way — add a media_urls key holding a raw JSON array of absolute URLs. Zapier cannot upload files to NativPost; the URLs must already be reachable.

Inbound: receive NativPost events in Zapier

Section titled “Inbound: receive NativPost events in Zapier”
  1. In Zapier, create a Zap with the Webhooks by Zapier → Catch Hook trigger.

  2. Copy the unique catch URL Zapier gives you.

  3. In the NativPost dashboard, go to Settings → Webhooks, add an endpoint pointed at that URL, and subscribe it to the events you want.

    The API cannot create webhook endpoints — GET /api/v1/webhooks is read-only, so this step has no curl equivalent. Confirm it registered with:

    Terminal window
    curl -sS https://app.nativpost.com/api/v1/webhooks \
    -H "Authorization: Bearer $NATIVPOST_API_KEY"
  4. There is no test-fire endpoint. To populate Zapier’s sample payload, create a throwaway draft over the API — that fires content.created immediately, and Zapier picks it up.

Leaving the endpoint’s event list empty subscribes it to every event, including ones added in future releases. Name the events explicitly unless you want that.

The Catch Hook trigger does not run custom code. If you need signature verification, chain a Code by Zapier step that reads the NativPost-Signature header from the trigger step and rejects the run if it does not match. The Node snippet in Signature verification drops in almost verbatim.

Two other headers come along: NativPost-Event mirrors the event name for cheap routing, and NativPost-Delivery-Id uniquely identifies the attempt.

NativPost attempts each delivery once, with a 10-second timeout, and does not retry. A Zap that is slow to acknowledge simply misses the event — so treat the webhook as a nudge and re-read state over the API rather than trusting it as the sole record.

In the other direction, Zapier retries failed POSTs aggressively. The API applies no rate limit and no idempotency key, so a retried step creates a second content object. If a Zap can fan out, add a Delay by Zapier step or a dedupe lookup before the POST.