Native platform integration
Offer ISFY as a built-in option of your platform. Any merchant, store or brand on your platform enables sales recovery in one click, and every abandoned checkout, failed payment or new lead they generate becomes a phone call from an ISFY agent within seconds.
This guide is for platforms — checkout systems, storefront builders, telehealth and subscription platforms, CRMs, funnel builders, marketplaces and payment processors — that want to integrate ISFY once and make it available to all of their merchants. ISFY already consumes the native webhook formats of more than twenty platforms in production; the patterns below are the same for every one of them.
Integration models
A platform integration has two independent parts: the data path (how events reach us) and the handshake (how a merchant gets connected). Pick one of each.
Data path
| Model | How it works | Best when |
|---|---|---|
| Native webhooks | Your platform already emits webhooks. We consume your existing format and signature scheme as-is; you change nothing about your payloads. | You have a webhook system today. Fastest path for most platforms. |
| Events API | You POST our canonical JSON (four event types, one endpoint) from your webhook triggers. | You are building the integration from scratch or prefer a fixed schema. |
| Feed API | You expose a read-only feed and we poll it. | Webhooks are impractical on your side. |
Handshake
| Model | How it works | Merchant experience |
|---|---|---|
| Manual | The merchant signs up with ISFY, receives a dedicated endpoint URL from the ISFY portal and pastes it into your webhook settings. | Five minutes, no platform work. This is how every integration starts. |
| One-click connect | An "Enable ISFY" action in your platform redirects the merchant to ISFY, and we register the endpoint with you on their behalf. | One click. Recommended for a listed / marketplace integration. |
| Provisioning API | Your backend calls our provisioning endpoint when a merchant toggles ISFY on; we return their endpoint and secret and you register the webhook yourself. | Invisible. Best when your platform owns the whole settings UI. |
Native webhooks: we consume your format
If your platform already sends webhooks, the integration is a dedicated ISFY endpoint per merchant that speaks your format. We build and maintain the adapter; you send us what you already send everyone else.
What we adapt to
- Body format: JSON (flat or nested envelopes such as
{ id, event, data: { customer, order, subscription, payment } }), form-encoded, or query-string payloads. - Event naming: any vocabulary. You tell us what each event means once; unknown event names are accepted, stored and ignored, never rejected, so you can add events without breaking us.
- Amounts: major units or minor units (
*_cents), any ISO currency. - Identity: order id, cart or session id, subscription id, customer id, funnel id. We follow whichever chain of identifiers your platform uses so that a later sale resolves the earlier abandoned checkout instead of creating a duplicate.
- Test deliveries: a test flag (for example
is_test,test_mode, or a sandbox header) is honoured. Test deliveries are verified end-to-end and kept out of the dial queue.
Signature schemes we verify
We verify every delivery with a constant-time comparison before anything is processed. Supported out of the box:
| Scheme | Typical header |
|---|---|
| HMAC-SHA256 of the raw body, hex or base64 encoded | X-{Platform}-Signature, X-Webhook-Signature |
Prefixed digests (sha256=…) | X-Hub-Signature-256 style |
Timestamped signatures (t=…, v1=…) with replay window | {Platform}-Signature |
HMAC over {timestamp}.{body} with a separate timestamp header | X-Signature + X-Timestamp |
| Passphrase digests (SHA-512 / SHA-256 over sorted fields) | in-body sha_sign style |
| Secret-in-URL only (no signature) | none; the endpoint URL is the credential |
If your scheme is not listed, send us your webhook documentation. Adding a scheme is a small, well-trodden change on our side.
Delivery semantics
- Response:
2xxfor every authenticated, well-formed delivery, including events we ignore. The response body carries anoutcomeso your logs show what happened (ingested,ignored,skipped_no_phone,duplicate). - Errors:
401only for a failed signature or wrong secret;5xxonly for a transient fault on our side. Retry on5xxwith any back-off. - Idempotency: we key on your delivery id when you send one, and on the business id (order, cart, subscription) otherwise. Replays never create duplicates. A replayed delivery id with a changed body replaces the earlier receipt and is reprocessed.
- Ordering: irrelevant. A sale that arrives before its abandoned checkout still resolves to one completed lead.
- Latency: accepted in well under a second; the lead is in an agent's queue within seconds.
Event mapping
Whatever your vocabulary, every event maps to one of four things ISFY does. During onboarding we agree the mapping from a list of your event names; the table shows the categories and typical native names.
| ISFY category | Typical native events | What happens |
|---|---|---|
| New lead | lead.created, contact.created, opt_in,
form.submitted |
Enters the dial queue as a fresh lead. |
| Abandoned checkout | checkout.started, cart.abandoned,
order_form.filled, intake.incomplete,
checkout_initiated |
Enters the recovery queue. Highest-value event: an agent calls within minutes. A recovery link, when your platform provides one, is shown to the agent. |
| Failed payment | payment.failed, payment.declined,
rebill.missed, invoice.payment_failed,
subscription.past_due |
Enters the payment-recovery queue with the amount at stake. |
| Sale | order.completed, payment.succeeded,
subscription.renewed, purchase |
Completes the earlier lead, records revenue, suppresses further calls, and feeds buyer programmes (upsell, reorder, win-back) where the merchant runs them. |
| Refund / chargeback | order.refunded, charge.disputed |
Recorded against the order; original paid amount is preserved for reporting. |
| Everything else | step telemetry, page views, tag changes, shipping updates | Accepted and stored, never dialed. |
One-click connect
The merchant clicks Enable ISFY inside your platform and is connected without touching webhook settings. The flow is a standard redirect handshake.
- Redirect. Your platform sends the merchant to the ISFY connect page:
GET https://app.isellforyou.com/connect/{platform} ?merchant_id={your merchant id} &merchant_name={display name} &email={merchant contact email} &return_url={where to send them back} &state={opaque anti-CSRF value} &sig={HMAC-SHA256 of the query, partner secret} - Account. The merchant signs in to ISFY or creates an account (pre-filled from the query). Existing ISFY customers are linked, not duplicated.
- Provisioning. ISFY creates the merchant's connection and mints their endpoint URL and signing secret.
- Registration. One of two ways, agreed during onboarding:
- ISFY calls your webhook registration API with the endpoint URL, secret and subscribed events, using a partner credential you issue to us; or
- ISFY redirects back to
return_urlwithstate,connection_id,endpoint_urlandsecret, and your platform stores and registers them.
- Done. The merchant lands back in your platform with ISFY shown as connected. The first delivery arrives within seconds of their next event.
Provisioning API (server-to-server)
When your platform owns the settings UI and prefers no redirect, your backend provisions the connection directly. One call per merchant.
Authorization: Bearer {partner token}
Content-Type: application/json
{
"merchant_id": "m_10293", // your stable id, idempotency key
"merchant_name": "Acme Health",
"email": "ops@acmehealth.com",
"phone": "+15551234567", // merchant contact, optional
"events": ["checkout.started", "payment.failed", "order.completed"],
"metadata": { "plan": "pro", "region": "US" } // optional, echoed back
}
// 201 Created
{
"connection_id": "c_8f2a…",
"endpoint_url": "https://{BASE_URL}/webhooks/{platform}/c_8f2a…/{SECRET}",
"signing_secret": "whsec_…", // use it to sign deliveries, if your platform signs
"status": "active",
"portal_url": "https://app.isellforyou.com/…" // merchant's ISFY dashboard
}
| Call | Purpose |
|---|---|
POST /partners/{platform}/connections | Create (or return the existing) connection for a merchant. Idempotent on merchant_id. |
GET /partners/{platform}/connections/{id} | Status, last delivery, verified signature, leads ingested in the last 7 days. |
POST /partners/{platform}/connections/{id}/rotate | Mint a new secret; the previous one stops working immediately. |
DELETE /partners/{platform}/connections/{id} | Disable. Deliveries return 410 Gone; nothing is deleted on the merchant's ISFY account. |
Responses are JSON; errors use conventional status codes with a machine-readable
error.code. The partner token is issued during onboarding, scoped to your
platform, and rotatable on request.
Merchant lifecycle
| Moment | Your platform | ISFY |
|---|---|---|
| Merchant enables ISFY | Connect redirect or provisioning call. | Connection created, endpoint registered, merchant sees a dashboard. |
| First events arrive | Nothing. | Signature verified, vocabulary confirmed, first leads dialed. Both sides can see the delivery log. |
| Sale recovered | Optional: receive an outcome writeback (see below). | Recorded as revenue on the merchant's dashboard, attributed to your platform. |
| Merchant disables ISFY | Delete call, or unregister the webhook. | Deliveries stop; the merchant's data and history remain in their ISFY account. |
| Secret compromised | Rotate call, or tell us. | New secret minted, old one revoked immediately. |
Outcome writeback (optional)
Platforms that want results inside their own product can receive them. When an ISFY agent reaches a lead, books an appointment or recovers a sale, we can push the outcome to your platform as a tag, note, status change or webhook, using your API. This is agreed per platform during onboarding and is already live with several partners.
Testing
- Test connection. We issue a sandbox connection on request. Deliveries to it are verified and logged exactly like production but never dialed.
- Test flag. Deliveries carrying your platform's test marker are recognised on production connections too.
- Delivery log. Every delivery is stored with its event name, signature status, outcome and any processing note. During onboarding we share it with you so you can see each test land.
- Acceptance. One test delivery per event category, each landing with a working phone number, is the success criterion.
Go-live checklist
- You send us: your webhook documentation (or one sample payload per event), your signature scheme, and which handshake model you want.
- We build the adapter for your format and confirm the event mapping with you. Typical turnaround is days, not weeks.
- We exchange partner credentials (connect signing secret or provisioning token).
- Pilot with one merchant: connect, fire one event of each category, confirm each landed end-to-end.
- Listing. ISFY appears in your integrations directory, marketplace or settings page. We supply copy, logo and a merchant-facing setup guide.
Then we're live: any merchant on your platform enables ISFY in one click, and every event becomes a phone call from an agent within seconds.