A Dynamic Link generates an add-to-calendar redirect from query parameters. You build the link with event details and a calendar service, and when someone clicks it they are sent straight to that calendar with the event pre-filled. No event is stored on AddCal, but every click is tracked so you get full analytics on how each link performs.
Set service to any of the values below. The visitor is redirected straight to that calendar with the event pre-filled, no account or extra step required.
service=googleservice=appleservice=outlookservice=outlook_webservice=office365service=yahooservice=ics Migrating from AddEvent? There is a drop-in compatible endpoint at /api/dyn_ade that accepts AddEvent's parameter names, so your existing links keep working. Use client in place of uid, and AddEvent service values like outlookcom and stream are mapped automatically.
https://addcal.co/api/dyn_ade
?client=dk_abc123
&service=outlookcom
&title=Team+Standup
&start=2026-06-15T14:00:00
&timezone=America/New_YorkBoth turn a URL into a calendar event, but they do different jobs. The deciding question is whether the event details are the same for everyone or personalized per recipient.
Build a link to /api/dyn with your event details as query parameters, then put it wherever your audience is, an email, a button, an app. When someone clicks it, they are redirected straight to their chosen calendar with the event pre-filled.
https://addcal.co/api/dyn
?uid=dk_abc123
&service=google
&title=Team+Standup
&start=2026-06-15T14:00:00
&duration=30
&timezone=America/New_York
&recurring=FREQ=WEEKLY;BYDAY=MO,WE,FR
&alarm=15Pass event details as query parameters. A key, a service, a title, and a start are required.
| Parameter | Required | Description |
|---|---|---|
uid | Required | Your Dynamic Link Key, for example dk_abc123. Create one in your dashboard on the Business plan. |
service | Required | Where to redirect: google, apple, outlook, outlook_web, office365, yahoo, or ics. |
title | Required | Event title, up to 255 characters. |
start | Required | Start date and time in ISO 8601 format, for example 2026-06-15T14:00:00. |
end | Optional | End date and time in ISO 8601. Defaults to one hour after start if omitted. |
duration | Optional | Duration in minutes. Takes precedence over end. |
timezone | Optional | IANA timezone, required for timed events, for example America/New_York. |
all_day_event | Optional | Set to true for an all-day event. |
description | Optional | Event description, up to 2000 characters. |
location | Optional | Physical address or virtual meeting URL, up to 255 characters. |
alarm | Optional | Reminder in minutes before the event, for example 15. |
recurring | Optional | An RFC 5545 recurrence rule (RRULE), for example FREQ=WEEKLY;BYDAY=MO,WE,FR. |
transp | Optional | Busy status: OPAQUE (busy) or TRANSPARENT (free). Defaults to OPAQUE. |
Unlike Smart Links, Dynamic Links accept an RFC 5545 recurrence rule via recurring and a reminder via alarm, so the event lands in the calendar already set to repeat with a reminder attached.
transp=TRANSPARENT to add the event as free time rather than busy. Dynamic Links are built to carry merge tags. Drop your platform's tags where the values go and each recipient gets their own event, because the details live in the link, so they can differ for everyone.
ActiveCampaign
https://addcal.co/api/dyn?uid=dk_abc123&service=google&title=%EVENT_TITLE%&start=%EVENT_START%
Mailchimp
https://addcal.co/api/dyn?uid=dk_abc123&service=google&title=*|EVENT_TITLE|*&start=*|EVENT_START|* A URL cannot safely contain spaces, line breaks, emoji, or symbols like & and %, so those must be encoded (a space becomes %20). But if you encode the whole link, your merge tags get encoded too and your platform can no longer replace them.
Even though a Dynamic Link doesn't store an event, every click is tracked. Open the analytics dashboard for any key to see performance over any date range, with the option to count each visitor once.