[ Documentation ](https://addcal.co/documentation.md) Dynamic Links 

Documentation menu- [ Overview](https://addcal.co/documentation.md)

No code

- [ Add to Calendar button](https://addcal.co/documentation/calendar-button.md)
- [ Embeds](https://addcal.co/documentation/embeds.md)
- [ Smart Links](https://addcal.co/documentation/smart-links.md)

AI assistants

- [ MCP Server](https://addcal.co/documentation/mcp-server.md)

Developers

- [ Dynamic Links](https://addcal.co/documentation/dynamic-links.md)
- [ Developer API](https://addcal.co/documentation/api.md)

 Dynamic Links 
===============

 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. Leave the service off and they get a [landing page](#landing-page) to pick their own instead. No event is stored on AddCal, but every click is tracked so you get full [analytics](#analytics) on how each link performs.

[ Create a Dynamic Link Key ](https://addcal.co/integrations/dynamic-links)[ Open the link builder ](https://addcal.co/integrations/dynamic-links)

Supported calendar services
---------------------------

 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.

![Google Calendar](https://cdn.addcal.co/3824dd4/build/assets/gcal-LeXQIYGw.svg)Google Calendar

`service=google`

![Apple Calendar](https://cdn.addcal.co/3824dd4/build/assets/apple-BJO7yr1p.svg)Apple Calendar

`service=apple`

![Outlook desktop](https://cdn.addcal.co/3824dd4/build/assets/outlook-BzUwKtBB.svg)Outlook desktop

`service=outlook`

![Outlook.com](https://cdn.addcal.co/3824dd4/build/assets/outlook-BzUwKtBB.svg)Outlook.com

`service=outlook_web`

![Office 365](https://cdn.addcal.co/3824dd4/build/assets/365-DRde3oVI.svg)Office 365

`service=office365`

![Yahoo Calendar](https://cdn.addcal.co/3824dd4/build/assets/yahoo-DDAmZj_b.svg)Yahoo Calendar

`service=yahoo`

![Download .ics](https://cdn.addcal.co/3824dd4/build/assets/download-DUnhBBK1.svg)Download .ics

`service=ics`

AddEvent compatibility mode
---------------------------

 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.

AddEvent-compatible link Copy

```
https://addcal.co/api/dyn_ade
  ?client=dk_abc123
  &service=outlookcom
  &title=Team+Standup
  &start=2026-06-15T14:00:00
  &timezone=America/New_York
```

 Everything else, recurrence, reminders, all the same parameters, works exactly as it does on the standard endpoint. 

Dynamic Links vs Smart Links
----------------------------

 Both 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**.

- **Smart Links** are best when the event is the same for everyone (a webinar, a launch, a class). AddCal stores it as one shared event in your calendar, with analytics, dedup, and optional approval.
- **Dynamic Links** are best when each recipient gets different details (their own meeting link, seat, or address). They generate a one-off redirect straight to the visitor's calendar app, with recurrence and reminders. No event is stored, but clicks are tracked so you still get analytics.

 Dynamic Links require a Dynamic Link Key and are available on the Business plan. 

The link
--------

 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.

Dynamic Link Copy

```
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=15
```

Let the recipient choose (landing page)
---------------------------------------

 Leave `service` off and the link shows a landing page with your event details and a button for every calendar app, so the recipient picks their own. The event still is not stored on AddCal, and the click is tracked when they choose a calendar.

Landing page link Copy

```
https://addcal.co/api/dyn
  ?uid=dk_abc123
  &title=Team+Standup
  &start=2026-06-15T14:00:00
  &timezone=America/New_York
```

 Use this form for WhatsApp, Instagram and other in-app browsers. Those browsers cannot hand a calendar file to the operating system, so the landing page walks the visitor through adding the event instead of failing silently. 

Parameters
----------

Pass event details as query parameters. A key, 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` | Optional | Where to redirect: google, apple, outlook, outlook_web, office365, yahoo, or ics. Leave it off to show a landing page where the recipient picks their own calendar. |
| `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. |

Recurrence and reminders
------------------------

 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.

 Use `transp=TRANSPARENT` to add the event as free time rather than busy. 

Merge fields and URL encoding
-----------------------------

 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.

With merge tags Copy

```
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.

**Why encoding matters:** the rule is **encode everything except your merge tags**. Get it wrong and the link is either rejected as invalid, or your platform can't fill in its tags. Those are the two most common reasons a link "doesn't work". You never have to encode anything by hand: **the Link Builder in the app handles the encoding for you.** Pick your platform, type your tags, and copy a link that is already correct. 

 A raw link that opens in your browser can still be rejected as invalid by strict senders like WhatsApp through ActiveCampaign. Build the link in the app and test with a real send rather than pasting the URL into a browser, where the tag shows literally because nothing has replaced it yet. 

[ Build a link in the app ](https://addcal.co/integrations/dynamic-links)

Analytics
---------

 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.

- **Total and unique clicks** over time, so you can see trends and de-duplicate repeat visitors.
- **Calendar service split**: which apps (Google, Apple, Outlook and more) your audience adds to.
- **Per-event breakdown**: clicks grouped by the title and date each link describes, plus filters by event title and date.
- **Referrers, countries, devices and browsers** for every link, or rolled up across all your keys.

[ Open your Dynamic Link analytics ](https://addcal.co/integrations/dynamic-links/analytics)
