Discord Webhook Timestamps: Embeds, ISO-8601 & Dynamic Formatting
By Elena Rostova•Updated 2026-09-25•7 min read
Sending dates through Discord webhooks trips up a lot of developers because Discord has two different timestamp systems: dynamic Unix tags in text and ISO-8601 strings in embed footers. Here is how both work.
The Two Types of Webhook Timestamps: Dynamic vs Footer
When sending embeds to Discord, keep this rule in mind: dynamic tags (`<t:EPOCH:STYLE>`) go inside descriptions and field values. Embed footers, on the other hand, strictly require an ISO-8601 string (like `2026-09-25T20:00:00.000Z`). If you accidentally put a `<t:...>` tag inside the embed footer timestamp field, the Discord API throws an immediate HTTP 400 Bad Request.
Complete Webhook JSON Payload Example
Here is a production-ready JSON payload showing both dynamic timestamp syntax inside fields and the top-level ISO timestamp in the footer:
json
{
"username": "Server Alert Bot",
"avatar_url": "https://i.imgur.com/4M34hi2.png",
"content": "Scheduled Maintenance Alert for all regional nodes!",
"embeds": [
{
"title": "Database Cluster Maintenance",
"color": 5793266,
"description": "Upgrades will begin **<t:1727280000:R>**.",
"fields": [
{
"name": "Start Time",
"value": "<t:1727280000:F>",
"inline": true
},
{
"name": "Expected Duration",
"value": "45 Minutes",
"inline": true
}
],
"timestamp": "2026-09-25T20:00:00.000Z",
"footer": {
"text": "Systems Status Hub"
}
}
]
}Sending Webhooks in Node.js (fetch)
Here is how to automate this in modern JavaScript or TypeScript without installing heavy external packages:
javascript
const webhookUrl = process.env.DISCORD_WEBHOOK_URL;
const eventDate = new Date('2026-09-25T20:00:00Z');
const epochSeconds = Math.floor(eventDate.getTime() / 1000);
await fetch(webhookUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
embeds: [{
title: 'Incident Resolved',
description: `All services restored as of <t:${epochSeconds}:R> (<t:${epochSeconds}:t>).`,
color: 0x57F287,
timestamp: eventDate.toISOString()
}]
})
});Automating Announcements with cURL and GitHub Actions
For automated CI/CD alerts or scheduled event notices, you can calculate the Unix epoch in Bash and send the webhook using cURL in GitHub Actions:
yaml
name: Discord Event Alert
on:
schedule:
- cron: '0 12 * * 1' # Every Monday at 12:00 UTC
jobs:
notify:
runs-on: ubuntu-latest
steps:
- name: Send Scheduled Discord Webhook
env:
WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
run: |
# Calculate epoch for event in 2 hours
TARGET_EPOCH=$(($(date +%s) + 7200))
curl -H "Content-Type: application/json" \
-X POST \
-d '{"content": "Weekly Community Standby starts <t:'"$TARGET_EPOCH"':R> (<t:'"$TARGET_EPOCH"':F>)!"}' \
"$WEBHOOK_URL"Frequently Asked Questions
No. Discord does not parse `<t:EPOCH:STYLE>` tags inside embed `title` or `author.name` properties. They will display as raw code. Only use them inside embed `description`, `fields.value`, and regular message `content`.