An expiry date is for a link with an end — a promotion, an event, a test that should not outlive the week. Set the date once and the link stops on its own.
From the console
Open the link on https://app.utmkit.co/links, choose Edit, and fill in Expires (optional) with a date. The note under the field says what it does: the link stops resolving at the end of that day; leave it blank to keep it working for ever. Clearing the field removes the expiry.
You can also set it when the link is created, from the assistant: “shorten this for the newsletter, until 30 September” or “only for this week”. The assistant turns your words into a date and never guesses one from a campaign name.
The end of that day is the rule
A link that expires on 30 September works through the whole of the 30th and stops when that day ends, not at the midnight before. Days are counted in UTC. You choose a day, never a minute — a campaign is dated in days, and a poster does not come down at 14:37.
Honoured at the edge, once a day
Your links are served from the edge, close to the visitor. Once a link’s date has passed, a daily pass takes it off the edge. That means an expired link can keep answering for up to a day after its date; the pass does not run at the stroke of midnight.
Your list is honest first. The row reads Expired as soon as the date has passed, before the edge has caught up — so if you are deciding whether to reprint a poster, the badge is the thing to trust. A visitor who arrives after the link is gone is sent nowhere: on the shared domain they see UTMKit’s own page, on your own domain a plain “Not found”.
Extending the date brings the link back with nothing to undo. Edit it, pick a later day, save — it returns to the edge like any other edit.
Nothing is deleted
An expired link keeps its click history, its tags, its note and its place in the list. It is not withdrawn and its code is not freed; it is simply over until you give it a new date or clear the date altogether.
From the API and the MCP
The expires_at field is set on POST /api/v1/links and changed on PATCH /api/v1/links/{id}, and by the create_link and update_link MCP tools; all four require links:write. The API takes a full timestamp rather than a day — the end-of-day rule belongs to the console and the assistant, so send the instant you mean — and a link past its date reports the state expired when read. The reference owns the field.