Home/Integrations/Custom CRM or in-house system integration

your own CRM

Custom CRM or in-house system integration

Connect any in-house CRM or ERP to VGraple CRM: receive signed WhatsApp events, and create contacts, leads and template sends through the REST API with an API key.

By Chirag Darji · Updated 29 Aug 2026 · 4 min read

On this page
  1. What syncs
  2. Setup
  3. How the two directions work
  4. Three recipes
  5. Design notes
  6. Limits and gotchas
API keys in VGraple CRM with prefix, creation date and last use

This integration runs on webhooks and the REST API, not a packaged connector: VGraple CRM posts signed events to a your own CRM webhook trigger, and your own CRM calls VGraple CRM's REST API with an API key to create contacts and leads or send approved templates. It is the lowest-cost route for high volumes and the most flexible, because you shape every payload.

What syncs

DataDirectionTiming
Events: messages, contacts, leads, conversations, broadcasts, formsVGraple CRM to your systemInstant, signed, retried, logged
Contacts (upsert), leads, template sends, hooks, broadcastsYour system to VGraple CRMImmediate via REST API
Templates and pipelinesYour system reads VGraple CRMOn demand

Setup

  1. Expose an HTTPS endpoint and register it under Settings, then Webhooks with the events you need; store the whsec_ secret in your secret manager.
  2. Verify X-Signature-256 on every request (HMAC-SHA256 over the raw body, constant-time compare) and return 200 before doing slow work.
  3. Create an API key under Settings, then API Keys (Owner only) and call GET /api/v1/me to confirm it.
  4. Implement the calls you need: POST /api/v1/contacts (upsert by phone), POST /api/v1/leads, POST /api/v1/messages (approved template), GET /api/v1/templates, GET /api/v1/pipelines.
  5. Subscribe programmatically with POST /api/v1/hooks if you prefer code over the settings form, and remove with DELETE /api/v1/hooks/{id}.
  6. Test end to end with your own number, then go live and watch the delivery log for the first day.

How the two directions work

VGraple CRM to your own CRM. Under Settings, then Webhooks, add an endpoint with the your own CRM webhook URL and tick the events you need (message.received, message.sent, contact.created, contact.opted_out, lead.created, lead.stage_changed, broadcast.completed, conversation.assigned, conversation.resolved, conversation.reopened, form.submitted; the four broadcast lifecycle events are subscribed through POST /api/v1/hooks). Every delivery is a JSON POST signed with HMAC-SHA256 in the X-Signature-256 header using the endpoint's whsec_ secret, retried on failure and logged with the response.

your own CRM to VGraple CRM. Create an API key under Settings, then API Keys (Owner only) and use an HTTP module in your own CRM with Authorization: Bearer <key> against https://crm.vgraple.co.in/api/v1: POST /contacts upserts by phone, POST /leads creates a lead in a pipeline, POST /messages sends an approved template by name and language with variables, GET /templates and GET /pipelines list what you can use. Errors come back as JSON with a code and a plain message, including Meta's code on a template send.

Three recipes

  • Order shipped in your ERP -> POST /api/v1/messages with the shipping template and tracking URL button; the reply arrives at your endpoint as message.received.
  • message.received -> your ticketing system opens a ticket -> agent replies in VGraple CRM -> conversation.resolved closes the ticket.
  • Nightly job -> GET /api/v1/leads?since=... -> your data warehouse for reporting alongside other channels.

Design notes

Treat VGraple CRM as the conversation system and your CRM as the system of record. Store VGraple CRM's contact and lead IDs on your records at creation so later events match without lookups. Idempotency: contact creation is an upsert by phone and safe to repeat; lead creation is not, so guard it with your own external reference in a custom field. Rate limit: 600 requests per key per hour; batch nightly syncs and prefer webhooks over polling for anything real-time.

Limits and gotchas

  • Only approved templates can be sent through the API; consent, messaging limits, the US marketing pause and delivery protection apply as in the app.
  • Webhook endpoints must be public HTTPS; verify the signature before trusting a payload, and deduplicate on the event ID because retries can arrive after a slow success.
  • API keys are Owner-only secrets with a rolling limit of 600 requests per hour per key.
  • Phone numbers must be in international format without spaces or a leading zero.
  • Payloads contain customer personal data; keep your own CRM scenarios and their logs inside your data protection scope.

The webhooks guide, the payload reference, the signature guide and the REST API quickstart have the exact fields and code.

Frequently asked questions

What do I need on my side?
An HTTPS endpoint that accepts JSON POSTs (for events) and an HTTP client that can send a Bearer header (for calls). Any language works; the guides include Node, Python and PHP samples.
How do I authenticate?
Events to you are signed with HMAC-SHA256 using the endpoint secret. Your calls to VGraple CRM carry an API key created by the Owner.
Can I keep my system as the source of truth?
Yes. Use VGraple CRM for the conversation layer and mirror the records you need; lead and contact IDs are stable and returned on creation.
Is there a sandbox?
Use your own workspace with a test contact; template sends to your own number cost Meta's normal rate.
How do I handle retries?
Respond 2xx quickly and process asynchronously; deduplicate on the event ID.
What is not possible through the API?
Free-form sends outside the inbox and flows, and bulk message export beyond paging GET /messages.

Run your WhatsApp on VGraple CRM

Free forever plan, official Meta WhatsApp Business API, set up in 15 minutes. No card needed.