Browse documentation

Type to search the documentation. Press Esc to close.

How do I send handwritten cards from my CRM?

For developers

Scribble has no named CRM connectors. It has three things that make any CRM work: a public API for sending and looking up cards, an inbound hook that turns a JSON POST into a card, and signed outbound webhooks so your CRM can log a card being mailed on the contact's timeline.

On this page

#The three pieces, and which one you need

Choosing an integration route
If you want to…UseNeeds code?
Send a card when a record changes stateAn inbound hookNo — a Flow, a Zap or a workflow action is enough
Send cards from your own backend, with full controlPOST /api/v1/cardsYes
Keep Scribble's address book in step with the CRMPOST /api/v1/contactsYes
Show card mailed on the contact's timelineOutbound webhooksYes — you need an endpoint that verifies a signature

#The pattern that works, in order

  1. Decide what the trigger is, precisely

    Deal moves to closed-won is a trigger. Deal updated is not — it will fire on every note, and every fire is a card and a credit.

  2. Confirm the CRM record actually carries a postal address

    This is where most integrations fail. Sales CRMs are full of contacts with an email, a phone number and no street. Check the field coverage before you build anything.

    You’ll know it worked when You can name the CRM fields that map to line1, city, state and zip for the majority of the records you intend to trigger on.

  3. Start with an inbound hook, not the API

    Even if you intend to write code, a hook proves the whole path in ten minutes: create it under Integrations, curl it once, and see a card appear.

    Prove the path
    curl -X POST https://scribblecards.com/api/v1/hooks/whk_YOURTOKEN \
      -H "Content-Type: application/json" \
      -d '{
        "name": "Dana Okafor",
        "line1": "88 Colin P Kelly Jr St",
        "city": "San Francisco",
        "state": "CA",
        "zip": "94107",
        "message": "Thanks for four great years, Dana."
      }'

    You’ll know it worked when A 201 with a card code, and the card visible under Sent cards.

  4. Move to the API when you need control

    Use POST /api/v1/cards when you need to choose the design per card, set an arrive_on date, or read the status back later. Create a key under Integrations with only the scopes you need.

  5. Decide how you learn a card was mailed

    You can register a webhook endpoint under Integrations → Webhooks and verify the signature on every delivery. Today only card.created and card.held actually fire, and only for cards sent through the API or a hook.

    So for a card mailed entry on a CRM timeline, poll GET /api/v1/cards/{card_code} for the cards you are tracking and watch mailed_at.

    You’ll know it worked when The delivery log on the Integrations screen shows HTTP 200 against your endpoint for a test delivery.

  6. Sync the address book, if you need lists

    If you want to run automations off CRM data — birthdays, renewal dates — push contacts in with POST /api/v1/contacts and always send an external_id. See keeping contacts in sync for the pitfall.

#Common questions

Can I trigger a card from a Salesforce Flow without any code?
Yes. An Outbound Message or an HTTP Callout action pointed at an inbound hook URL, with the recipient's mailing fields in the body, is all it takes.
Can I trigger a card from Shopify?
Yes, through a Shopify Flow HTTP request action or through Zapier. The shipping address on the order carries everything a card needs, which makes Shopify one of the easier sources.
Does Scribble read data out of my CRM?
No. Nothing pulls. Every integration is your system pushing to Scribble, or Scribble pushing an event to an endpoint you registered.

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