Built for developers

Marketing API and developer platform.

DailyStory is built API-first. Every feature — email, SMS, automation, contacts, segments, popups, conversions — is accessible via a modern RESTful API. Extend, integrate, and automate anything. No workarounds, no vendor lock-in.

REST API JavaScript SDK Webhooks WebToLead JSON
send-sms
// Send a transactional SMS via DailyStory REST API
const response = await fetch(
  'https://us-1.dailystory.com/api/v1/sms/send',
  {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      mobilePhone: '+12065551234',
      message: 'Hi {{first_name}}, order #{{order}} shipped!',
      campaignId: 88
    })
  }
);
const { Status, messageId } = await response.json();
// { Status: true, messageId: 'msg_3kf9d2' }
# Send a transactional SMS via DailyStory REST API
import requests
 
r = requests.post(
    "https://us-1.dailystory.com/api/v1/sms/send",
    headers={
        "Authorization": "Bearer YOUR_API_KEY",
        "Content-Type": "application/json",
    },
    json={
        "mobilePhone": "+12065551234",
        "message": "Hi {{first_name}}, order #{{order}} shipped!",
        "campaignId": 88,
    },
)
data = r.json()
# {'Status': True, 'messageId': 'msg_3kf9d2'}
# Send a transactional SMS via DailyStory REST API
curl -X POST \
  https://us-1.dailystory.com/api/v1/sms/send \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "mobilePhone": "+12065551234",
    "message": "Hi {{first_name}}, order shipped!",
    "campaignId": 88
  }'
 
# {"Status":true,"messageId":"msg_3kf9d2"}
Full RESTful API — every feature exposed
JavaScript SDK — zero framework dependencies
Webhooks for every key event
Dedicated developer docs & support
API access included on all plans
Four ways to build

Everything You Need to Integrate DailyStory Into Any Tech Stack.

DailyStory was built API-first from day one. Every feature the UI exposes is also available through the API — there are no hidden capabilities, no second-class integrations, no enterprise-only locks.

🌐

RESTful API

JSON over HTTPS. Bearer token auth. Every resource — contacts, campaigns, SMS, email, segments, automations — fully CRUD accessible.

API Reference →

JavaScript SDK

Drop the beacon on any page. Send custom events, control popups, track conversions, and submit leads — all from client-side JS with no framework dependencies.

JS SDK Docs →
🔌

Webhooks

Subscribe to real-time event notifications — unsubscribes, opt-outs, form submissions, conversion events. Configure via the API or dashboard.

Webhook Docs →
📄

WebToLead

Submit leads from any custom form using a public CORS-enabled endpoint — no auth key required. Works with any stack, framework, or serverless platform.

WebToLead Docs →
RESTful API

Every feature. Every resource. Fully accessible via API.

DailyStory’s API is not a secondary afterthought — it’s the foundation the entire platform is built on. The same API the dashboard uses is the same one you get. Create and send transactional SMS, dispatch email, manage contacts, query segments, trigger automations, and read analytics — all programmatically, from any language or platform.

  • Bearer token authentication — simple and secure
  • JSON request and response bodies throughout
  • Standard HTTP verbs and status codes
  • Paginated list endpoints with cursor support
  • Data centre-scoped base URL (us-1, eu-1, etc.)
  • No feature gaps — same API the UI uses
REST API — key endpoints
Contacts
GET/api/v1/contactsList all contacts (paginated)
POST/api/v1/contactsCreate or update a contact
GET/api/v1/contacts/{id}Get single contact by ID
PUT/api/v1/contacts/{id}Update contact fields
SMS
POST/api/v1/sms/sendSend transactional SMS
GET/api/v1/sms/messagesList sent SMS messages
Email
POST/api/v1/email/sendSend transactional email
GET/api/v1/campaignsList all campaigns
Events & Conversions
POST/api/v1/eventsTrack a custom event
POST/api/v1/conversionsRecord a conversion with amount
GET/api/v1/aboutTenant info — anonymous, no auth
JavaScript SDK

Client-side power — events, popups, conversions, leads.

Drop the DailyStory beacon script on any page and you instantly unlock a full client-side SDK. Send custom events that trigger automations, control popup behaviour programmatically, track conversion funnel values against specific campaigns, and submit WebToLead data from any custom form — all with zero framework dependencies and zero impact on page load.

  • Pure JavaScript — no jQuery or framework required
  • Loads asynchronously — no page load impact
  • Ds.sendEvent() — trigger automations from UI interactions
  • Ds.conversion() — attach revenue to marketing activity
  • Ds.Pop.showPopup() — control popups from your code
  • Ds.earnLoyalty() — assign loyalty points client-side
SDK events
ds_ready ds_popup_ready ds_form_submit ds_magicform_submit ds_hellobar_ready ds_exit
dailystory-sdk.js
// ── 1. Wait for the SDK to be ready ──────────────────────
window.addEventListener('ds_ready', function() {
  console.log('DailyStory SDK ready');
});
 
// ── 2. Send a custom event (triggers automations) ────────
function onCheckoutClick() {
  window.Ds?.sendEvent('website', 'checkout_click');
}
 
// ── 3. Record a conversion with revenue amount ───────────
function onOrderComplete(amount) {
  // Shopify funnel UUID — each integration has its own
  const funnelId = 'ad045403-2141-4043-acde-babe9e5f6d8c';
  window.Ds?.conversion(funnelId, amount);
}
 
// ── 4. Show exit-intent popup when visitor leaves ────────
window.addEventListener('ds_popup_ready', function() {
  Ds.Pop.showPopupOnExit('35');
});
 
// ── 5. Assign loyalty points to the current visitor ──────
function rewardPurchase() {
  window.Ds?.earnLoyalty('1f4e5f42-7e80-4e5f-b709-9eb6329ff09a');
}
 
// ── 6. Disable all popups on a specific page ─────────────
window.addEventListener('ds_ready', () => Ds?.toggleUx(false));
Webhooks

React in real time. Push events to your server instantly.

Webhooks push events to your endpoint the moment they happen — unsubscribes, SMS opt-outs, form submissions, conversion events. Use them to sync contact changes back to your CRM, update your database, trigger fulfilment workflows, or fire Slack alerts. Subscribe and unsubscribe to webhook events via the API or directly in the DailyStory dashboard.

  • Subscribe and unsubscribe to events via API or UI
  • Signed payloads for endpoint security verification
  • Retry logic — automatically retries failed deliveries
  • JSON payload with event type, timestamp, tenant, and data
  • Works with any HTTP endpoint — AWS Lambda, Cloudflare Workers, etc.
webhook-payload.json POST to your server
{
  "event": "contact.unsubscribe",
  "timestamp": "2026-03-13T14:22:01Z",
  "tenant": "ghg0ctulvdx7bu10",
  "data": {
    "contactId": 48291,
    "email": "user@example.com",
    "reason": "user_request",
    "campaignId": 88
  }
}
Available webhook events
contact.create contact.update contact.unsubscribe sms.opt-out form.submit conversion.record automation.trigger campaign.send
WebToLead

Submit leads from any form — no API key needed.

Not every customer form can use a DailyStory Magic Form. WebToLead is a public CORS-enabled endpoint that accepts lead data from any page — plain HTML, React, Vue, mobile webviews, custom checkout flows. Pass standard contact fields or your own custom properties via extendedProperties. No auth key required — just your TenantUID and data centre.

  • No API key — uses TenantUID and data centre URL
  • CORS-enabled — call directly from browser JS
  • Pass any contact field: name, email, phone, custom
  • Assign to a campaign via campaignid
  • Triggers automations enrolled on that campaign instantly
webtolead.js
// Post a lead from any custom form — no API key required
async function postLead(formData) {
  const tenantUID  = 'ghg0ctulvdx7bu10';
  const dataCenter = 'us-1';
  const campaignId = 42;
 
  const url = `https://${dataCenter}.dailystory.com/api/v1/public/webtolead/${tenantUID}`;
 
  const res = await fetch(url, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      firstName:   formData.firstName,
      lastName:    formData.lastName,
      email:       formData.email,
      mobilePhone: formData.phone,
      campaignid:  campaignId,
      extendedProperties: {
        planTier:   formData.plan,   // any custom field
        customerId: formData.crmId   // map to your CRM
      }
    })
  });
 
  const { Status } = await res.json();
  return Status; // true = success
}
Native integrations

Integrates natively with the tools your team already uses.

Beyond the API, DailyStory ships with native integrations for the most common platforms — installed in minutes, not weeks.

🛍️
Shopify

Orders, customers, cart abandonment

🛒
WooCommerce

Purchase events & abandoned cart

☁️
Salesforce

Bidirectional contact sync

💳
Stripe

Conversion tracking & revenue

🅆
WordPress

Native plugin, Magic Forms

Zapier

Connect 5,000+ apps instantly

🏋️
Mindbody

Fitness studio & wellness sync

Square

POS events & funnel conversion

🎨
Canva

Design emails directly in Canva

💰
RhinoFit

Gym management & member data

🌱
Little Green Light

Non-profit donor management

📄
Custom API

Build your own via REST + Webhooks

API reference

Explore Key API Endpoints — Contacts, SMS, Email & Events.

Sample of the most-used endpoints. Full reference at dev.dailystory.com →

200 OK Returns the created/updated contact object
emailstringRequired if no mobilePhone provided mobilePhonestringE.164 format, e.g. +12065551234 firstNamestringContact first name lastNamestringContact last name campaignidnumberEnrol contact in this campaign on creation extendedPropertiesobjectCustom field key-value pairs
// Request body example
{ "email": "jane@example.com", "firstName": "Jane", "mobilePhone": "+12065551234",
  "campaignid": 88, "extendedProperties": { "planTier": "pro" } }
200 OK Returns Status: true and a messageId on success
mobilePhonestringRecipient in E.164 format messagestringSMS body — supports merge tags like {{first_name}} campaignIdnumberCampaign to attribute this message to
// Request / Response
POST  { "mobilePhone": "+12065551234", "message": "Order shipped!", "campaignId": 88 }
200   { "Status": true, "messageId": "msg_3kf9d2" }
200 OK Events trigger automations & update segments in real time
contactIdnumberDailyStory contact to attribute event to actionstringEvent name, e.g. “checkout_click” valuestring/objOptional metadata — JSON objects supported
{ "contactId": 48291, "action": "checkout_click", "value": { "sku": "PRO-2026" } }
200 OK No auth required — useful for discovering your data centre
{ "tenant": "Acme Corp", "uid": "ghg0ctulvdx7bu10", "id": 112, "data_center": "us-1" }
View full API reference →
Everything included

Full REST API, JavaScript SDK & Webhooks — Included on All Plans.

API access, JavaScript SDK, Webhooks, and developer docs are included on every paid DailyStory plan. No enterprise-only gating, no extra fees.

🌐
Full RESTful API
Every platform feature accessible via JSON over HTTPS — contacts, campaigns, SMS, email, events, and more.
JavaScript SDK
Zero-dependency async JS library — events, conversions, popups, loyalty points, and WebToLead from the browser.
🔌
Webhooks
Real-time push notifications for unsubscribes, opt-outs, form submissions, and automation events.
📄
WebToLead
Public CORS endpoint — post lead data from any form without an API key.
💬
Transactional SMS API
Send programmatic text messages with merge tags, campaign attribution, and delivery receipts.
📧
Transactional Email API
Trigger individual emails from templates with dynamic merge data from your system.
🎯
Event Tracking API
Send custom events server-side to trigger automations and update dynamic segments in real time.
💰
Conversion API
Attribute revenue and conversion events to specific campaigns, automations, and contacts.
👥
Contact & Segment API
Full CRUD on contacts, custom field support via extendedProperties, and segment membership queries.
📊
Analytics API
Pull campaign, SMS, and email performance data programmatically for custom dashboards and reports.
📚
Dedicated dev docs
Full developer documentation at dev.dailystory.com — API reference, guides, and code examples.
👨‍💻
Technical support
Real engineers available to help with integration questions — included on every paid plan.
Developer FAQs

Common developer questions

Yes. Full REST API access, JavaScript SDK, and Webhooks are included on all paid DailyStory plans starting at $100/month. There is no enterprise tier required to unlock developer features. The 14-day free trial also gives you full API access so you can build and test your integration before committing to a plan.
DailyStory uses Bearer token authentication. Generate an API key in Account Settings and pass it as an Authorization header on all authenticated requests: Authorization: Bearer YOUR_API_KEY. The WebToLead public endpoint and the /api/v1/about endpoint are the only ones that don’t require auth.
Your data centre is assigned when your account is created and can be found in Account Settings > Support > My Account. Use it to construct your base URL — for example https://us-1.dailystory.com/api/v1/.... You can also call the anonymous /api/v1/about endpoint to discover your data centre programmatically.
Yes. The /api/v1/sms/send and /api/v1/email/send endpoints let you send individual transactional messages to a specific phone number or email — ideal for order confirmations, password resets, and real-time notifications. You pass a campaignId for attribution, but delivery is immediate and one-to-one.
Any custom field you create in DailyStory is accessible via the extendedProperties object in contact POST/PUT requests. Pass key-value pairs matching your custom field names. These fields can be used in segment criteria, merge tags in campaigns, and are returned in contact GET responses.
Yes. Events sent via the REST /api/v1/events endpoint work identically to events sent from the JavaScript SDK — both trigger automations, update segment membership, and appear in contact activity history. This means you can drive personalised marketing from backend events like purchases, subscription changes, app logins, or any IoT or webhook data.
Start building today

Explore the API. Build something great.

Start your 14-day free trial and get instant access to the full REST API, JavaScript SDK, Webhooks, and developer documentation. No credit card required.

14-day free trial  ·  Plans from $100/mo  ·  Full API access on all plans  ·  No credit card required