Send eCard API #

Send a branded eCard to a recipient by email, schedule it for later, or generate a shareable link (no email) that you route however you like (Slack, SMS, a CRM note, etc.).

Base path: /v2/api/pub/ecard-actions Auth: Authorization: Bearer <YOUR_API_KEY> (see getting-started).


1. List your eCards — GET /get-ecards #

Look up the eCards available in a widget (to get the ecardId/widgetId you'll send with).

Query parameters

Param Required Notes
widgetId yes The widget's vanity ID
curl "https://app.ecardwidget.com/v2/api/pub/ecard-actions/get-ecards?widgetId=w6v62rn95yq" \
  -H "Authorization: Bearer $ECW_API_KEY"

Response (standard envelope; data is an array)

{
  "success": true,
  "data": [
    {
      "widgetid": "w6v62rn95yq",
      "ecardid": "e4xgrzltk",
      "ecard_name": "Happy Birthday",
      "ecard_details": "<div>…</div>",
      "cover_image": "https://…/cover.png",
      "cover_thumb_image": "https://…/thumb.png",
      "envelope_bg_image_url": ""
    }
  ],
  "messages": []
}

2. Send an eCard — POST /send-ecard #

Sends (or schedules) an eCard. Delegates to the same internal pipeline the widget uses, so behavior matches a normal send.

Request body (JSON) #

Field Required Notes
ecardId yes eCard vanity ID (from get-ecards)
senderEmail yes Who the eCard is from (valid email)
senderName yes Sender display name
recipientName yes Recipient display name
recipientEmail conditional Required for email sends. Optional/ignored for share links (type=ecard_copy_link) — those don't email anyone
personalMessage no Personal note; basic HTML allowed
type no email (default) or ecard_copy_link (generate a share link instead of emailing)
is_sharing no true is equivalent to type=ecard_copy_link
sendAt no ISO 8601 datetime. Leave blank to send now; a future value schedules the send
locale no Language code (default en). Supported: en, spanish, dutch, hebrew, korean, de, french, arabic, polish, brazilian-portuguese, nam (Vietnamese)
optin no Sender opt-in flag
opennotification no Notify the sender when the eCard is opened
mergeTags no Object of key/value pairs to fill custom fields / merge tags
overrideProps no Object overriding branding/eCard props (logo, colors, social links, etc.)

Response (FLAT — no envelope) #

Unlike most endpoints, send-ecard returns the result fields at the top level:

Email send

{
  "success": true,
  "type": "email",
  "scheduled": false,
  "sendAt": "",
  "ecardVanityId": "e4xgrzltk",
  "widgetVanityId": "w6v62rn95yq",
  "senderEmail": "[email protected]",
  "senderName": "Acme",
  "recipientName": "Jordan",
  "recipientEmail": "[email protected]",
  "locale": "en",
  "emailsSent": 1
}

Share-link send (type: "ecard_copy_link")

{
  "success": true,
  "type": "ecard_copy_link",
  "scheduled": false,
  "sendAt": "",
  "ecardVanityId": "e4xgrzltk",
  "widgetVanityId": "w6v62rn95yq",
  "senderEmail": "[email protected]",
  "senderName": "Acme",
  "recipientName": "Jordan",
  "recipientEmail": "",
  "locale": "en",
  "statVanityId": "s2k7zqpvnll272r",
  "shareUrl": "https://app.ecardwidget.com/e/s/s2k7zqpvnll272r"
}

Examples #

Email now

curl -X POST https://app.ecardwidget.com/v2/api/pub/ecard-actions/send-ecard \
  -H "Authorization: Bearer $ECW_API_KEY" -H "Content-Type: application/json" \
  -d '{
    "ecardId": "e4xgrzltk",
    "senderEmail": "[email protected]", "senderName": "Acme",
    "recipientName": "Jordan", "recipientEmail": "[email protected]",
    "personalMessage": "Thank you for your support!"
  }'

Schedule for later — add a future sendAt:

{ "...": "...", "sendAt": "2026-12-24T09:00:00Z" }

Generate a share link (no email) — set type to ecard_copy_link and omit recipientEmail:

curl -X POST https://app.ecardwidget.com/v2/api/pub/ecard-actions/send-ecard \
  -H "Authorization: Bearer $ECW_API_KEY" -H "Content-Type: application/json" \
  -d '{
    "ecardId": "e4xgrzltk", "type": "ecard_copy_link",
    "senderEmail": "[email protected]", "senderName": "Acme",
    "recipientName": "Jordan", "personalMessage": "Thanks!"
  }'

Use the returned shareUrl directly. If you prefer to build it yourself, it's always:

https://app.ecardwidget.com/e/s/<statVanityId>

The /e/s/ path is fixed/canonical — appending the share ID to it is fully supported — but consuming shareUrl from the response insulates you from any future path changes.


Documentation