Skip to main content
Browse documentation

Type to search the documentation. Press Esc to close.

How do I send a handwritten card from Zapier or Make?

No code needed

Use the public Scribble app on Zapier, currently in beta, or the Scribble app on Make. In Zapier, choose Send Card; in Make, choose Send a handwritten card. Map the recipient's US mailing address and message from your trigger. An inbound hook is another option: create one under Integrations and send the recipient's details to its URL as JSON. The steps below cover that hook setup.

On this page
  1. Choose a connection

    Use the native Scribble action in Zapier or Make if it fits your workflow. The steps below use an HTTP hook instead. Both need a full US mailing address and credits.

  2. Create the hook in Scribble

    Open Integrations. Under Send a card from anything, choose New hook URL. Name it after the workflow.

    Set the design, message template, Signed by and Handwriting. An incoming message or handwriting overrides the saved value. Choose Create hook URL and copy the private URL.

    A hook message template
    Congratulations, {{first_name}} — everyone at
    {{sender_name}} is glad the {{deal_name}} deal came
    through.

    You’ll know it worked when The hook appears in the list with a URL like https://scribblecards.com/api/v1/hooks/whk_.... Copy it now: it is shown once and stored hashed.

  3. Check the hook is live

    Paste the URL into a browser. A GET returns a small JSON object confirming the hook is live and showing an example payload — some tools verify an endpoint by fetching it before they will let you save it, so this is deliberate.

    GET on a hook URL
    {
      "object": "inbound_hook",
      "ready": true,
      "message": "This hook is live. POST a JSON body with a recipient to send a card.",
      "example": {
        "name": "Priya Raman",
        "line1": "1 Fifth Avenue",
        "city": "New York",
        "state": "NY",
        "zip": "10003",
        "message": "Congratulations from all of us."
      }
    }
  4. Add a Webhooks by Zapier action

    Action event: POST. URL: your hook URL. Payload type: JSON.

    Add one data field per value below, mapping each to the right field from your trigger step.

    Testing this POST creates a real paid card. Use your own address. For retries, use a Custom Request action if you need to set an Idempotency-Key header; use the same source-event ID on every retry.

    Zapier data fields
    name        → {{Contact Full Name}}
    line1       → {{Mailing Street}}
    line2       → {{Mailing Suite}}          (optional)
    city        → {{Mailing City}}
    state       → {{Mailing State}}          two letters, e.g. NY
    zip         → {{Mailing Postal Code}}    five digits
    deal_name   → {{Deal Name}}              used by the template
    reference   → {{Deal ID}}                echoed back, for your records

    You’ll know it worked when Zapier's test returns a 201 and a body containing a card code like SC-2CR9793 and an arrives_between window.

  5. Handle the failures you will actually get

    Add a filter step before the POST so the Zap only fires when the address fields are present. A 422 from Scribble means the card was not created and nothing was charged, but a Zap that fails half the time is a Zap nobody trusts.

  6. Turn it on and watch the first few

    Scribble's Integrations screen logs every call it receives with the status and the reason. Check it after the first real trigger.

    You’ll know it worked when The hook shows a cards sent count and a last fired timestamp.

#The fields a hook accepts

The hook is deliberately forgiving about shape, because Zapier's field mapper is not. All of these work:

Recipient fields accepted by an inbound hook
FieldAlso accepted asRequired
namefirst_name + last_nameYes
line1address1Yes
line2address2No
city—Yes
state—Yes, two letters
zippostal_codeYes, five digits or ZIP+4
country—No, defaults to US
message—Only if the hook has no message template
arrive_on—No, YYYY-MM-DD
referenceidNo. Echoed back so you can correlate.

Fields can be at the top level or nested inside a recipient object — both are read, so a flat Zapier field map works without a wrapper. The full contract is in the inbound hook reference.

#When it goes wrong

Errors a hook returns, and what they mean
StatusCodeWhat to do
401invalid_hookThe URL is wrong or the hook was deleted. Copy it again from Integrations.
403hook_disabledThe hook was paused. Turn it back on under Integrations.
422invalid_recipientA required address field is missing or malformed. The message names the fields.
422template_incompleteYour payload has no value for a field the message template uses. Send that field, or send a finished message instead.
402no_creditsThe balance is empty. Nothing was created; top up and re-run the Zap.

Last checked against the product on . Something wrong or missing? Tell us.