Send a handwritten card from a Pipedrive automation
When a deal is won, mail the customer a card written with a real pen. A Pipedrive automation's webhook action sends the deal's details; one relay step in n8n or Zapier calls the notecardHQ API. There is no notecardHQ app to install.
Why a relay step
Pipedrive's automation webhook takes an endpoint URL and, if the endpoint needs them, authentication credentials; the action then sends a body you build from Pipedrive fields (source). Pipedrive's help article does not mention custom headers (source), and its webhook API documents only HTTP Basic auth credentials (source). notecardHQ needs Authorization: Bearer and an Idempotency-Key that is different for every deal, so a retry never mails twice. Neither is documented for Pipedrive's action, so Pipedrive sends the deal to a relay step that adds both.
What you need
- A Pipedrive plan with automations. Pipedrive's webhook article says webhooks in automations need the Advanced plan or higher (source); its automations article says Growth and higher (source). Check which name your plan uses.
- A global admin: only global admins can create automation webhooks. Once created, any user's changes can trigger them (source).
- n8n, or a Zapier plan that includes Webhooks by Zapier triggers.
- A notecardHQ API key, test key first.
The relay: n8n
- Add a Webhook node, method
POST. The node can require Basic auth, Header auth or JWT from callers (source); pick Basic auth with a username and a long random password, and enter the same pair as the webhook's credentials in Pipedrive. - Copy the node's production URL. n8n registers it when you publish the workflow (source). The fields Pipedrive sends arrive as
$json.body(source). - Add an HTTP Request node set up as in the n8n recipe:
POST https://you.notecardhq.com/api/v1/notes, a Header Auth credential withAuthorization=Bearer YOUR_API_KEY, Retry On Fail on, and these two parts mapped from the incoming body:
Before the HTTP Request node, add a filter that stops any request whose id is empty, so records without an id never share one key.
Idempotency-Key: pipedrive:deal-won:{{ $json.body.id }}
{
"externalId": "{{ $json.body.id }}",
"recipient": {
"firstName": "{{ $json.body.firstName }}",
"lastName": "{{ $json.body.lastName }}",
"businessName": "{{ $json.body.company }}",
"address1": "{{ $json.body.address1 }}",
"address2": "{{ $json.body.address2 }}",
"city": "{{ $json.body.city }}",
"state": "{{ $json.body.state }}",
"postalCode": "{{ $json.body.postalCode }}",
"country": "{{ ({ 'United States': 'US', 'Canada': 'CA', 'United Kingdom': 'GB' })[$json.body.country] ?? $json.body.country }}"
},
"content": "Hi {{ $json.body.firstName }},\n\nThank you for choosing us.\n\nThe team"
}
Prefer Zapier? A Webhooks by Zapier Catch Hook trigger gives you a URL to POST to (source) and is included on Zapier's Professional, Team and Enterprise plans, not Free (source). Follow it with the Custom Request action from the Zapier recipe, using pipedrive:deal-won: plus the incoming id as the Idempotency-Key.
The Pipedrive side
- Create the webhook. On the Webhooks settings page choose + Webhooks, then Automation webhook, and give it a clear name (source). The endpoint URL must end with
/,&,?or=, and the action adds a path to it (source). For an n8n URL, enter everything up to and including the last slash here, for examplehttps://n8n.example.com/webhook/, and the rest as the path in step 3. - Trigger. Pipedrive automations start on a deal, person, activity, lead, organization or project being added, updated or deleted (source). Use a deal updated trigger, then add a condition (source) for the change that should send a card, such as the deal being won.
- Action. Add the webhook action, select your webhook, method
POST, and the path. Build the body with the key-value builder, picking Pipedrive fields from the field button (source):
key value (picked with the field button)
id the deal's ID
firstName the contact person's first name
lastName the contact person's last name
company the organization's name
address1 the field that holds the street address
city the field that holds the city
state the field that holds the state
postalCode the field that holds the ZIP or postal code
country the field that holds the country
The request notecardHQ receives
POST https://you.notecardhq.com/api/v1/notes
Authorization: Bearer mos_test_...
Content-Type: application/json
Idempotency-Key: pipedrive:deal-won:4821
{
"externalId": "4821",
"recipient": {
"firstName": "Sam", "lastName": "Lee", "businessName": "Acme",
"address1": "123 Main St", "address2": "",
"city": "Austin", "state": "TX", "postalCode": "78701", "country": "US"
},
"content": "Hi Sam,\n\nThank you for choosing us.\n\nThe team"
}
A stable Idempotency-Key
The relay builds the key from the event and the deal id: pipedrive:deal-won:4821. If the deal is reopened and won again, or the request is retried, notecardHQ returns the original note instead of writing a second card. To thank a person once across all their deals, send the person id as id instead.
Build with a test key
Create a test key (mos_test_) under Integrations in the portal and use it until the whole flow works. A test key runs the same validation as a live key, but the note is never written, mailed or billed. Then switch to your live key and send one card to your own address before you turn the automation on for customers.
Limits and gotchas
- Webhook requests run within Pipedrive's automation execution limits; when those are reached, webhook requests are paused (source).
- If the webhook stops working or loses its authentication, the automation run fails (source).
- An existing ordinary webhook cannot be reused for automations, and the action cannot be added until an automation webhook exists (source).
- The country must reach notecardHQ as a two-letter code. The relay maps a few country names; add the ones you mail to.
- The message is written exactly as sent, up to 500 characters including the greeting and sign-off.
Errors
- 401. Missing or wrong key. Fix the key; do not retry.
- 409. The Idempotency-Key was already used with a different body. Stop and check; never change the key to get past it.
- 422. A missing field, a character the pen cannot write in the note (for example an emoji; accented letters are written without the accent), or an undeliverable US address. Nothing was created; fix the data.
- 429 or 5xx. Temporary. Retry with the same key and the same body.
Vendor details checked on October 26, 2026 against Pipedrive automation webhooks, Pipedrive automations, Pipedrive webhooks API, n8n Webhook node, Zapier webhooks. Platforms change their plans and features; check the source before you build.
Field rules, statuses and errors are in the API reference. Prefer another language? See the quickstart.
Send your first note.
Tell us what you want to send and we will set up your workspace.