Contacts
Share a contact they can save in one tap.
A contact card with a name and a number. Add wa_id to get the "Message" and "Save contact" buttons.
to and the message ids are n8n expressions that read the WhatsApp Trigger right before this node ($json.messages[0].from / .id). For a manual test, replace them with a number and a message id.
The JSON body
HTTP Request → Body → JSON{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "{{ $json.messages[0].from }}", "type": "contacts", "contacts": [ { "name": { "formatted_name": "Customer support", "first_name": "Support" }, "phones": [ { "phone": "+20 1XX XXX XXXX", "type": "WORK", "wa_id": "201XXXXXXXXX" } ] } ]}Limits & common mistakes
Only
Source (opens in a new tab)formatted_nameis required; everything else is optional.With
Source (opens in a new tab)wa_id(the number with country code, no +) the card shows "Message" and "Save contact"; without it, "Invite to WhatsApp".Up to 257 contacts in one message; keep it to a few.
Source (opens in a new tab)Replace the placeholders
Source (opens in a new tab)+20 1XX XXX XXXXand201XXXXXXXXXwith your real contact before running.
How to set up the credential in n8n
- In n8n, open Credentials → Create credential and pick Header Auth.
- Fill in the two fields:NameAuthorizationValueBearer <your token>
- Open the pasted node. Authentication is already Generic → Header Auth; choose the credential you just made.
- Use a System User token from Meta Business settings; the token on the API Setup page expires within hours.Source (opens in a new tab)Source (opens in a new tab)
Your token lives in n8n only. I never ask for it.
Don't have time to build it? I'll build it for you.
Build it for meWhatsApp and n8n are trademarks of their owners. Pixtaha isn't affiliated with or endorsed by Meta or n8n.