Loading...
Loading...
Never miss a compliance deadline. Schedule events, set reminders, and manage recurring obligations.
Every calendar event belongs to a type that determines its default recurrence, notification rules, and escalation behavior.
Internal or external audit sessions. Includes pre-audit preparation tasks, evidence collection deadlines, and post-audit remediation tracking.
SOC 2, ISO 27001, HIPAA, and other certification renewal deadlines. Triggers evidence gathering workflows 90 days before expiry.
Scheduled reviews of governance policies. Ensures policies remain current with regulatory changes and organizational needs.
Compliance training sessions for team members. Tracks attendance, completion rates, and certification validity periods.
External regulatory filing and reporting deadlines. GDPR annual reports, EU AI Act risk assessments, breach notification windows.
Configure reminder lead times per event. DRD sends notifications through your configured alert channels.
Smart Reminders
Set reminders 7, 14, or 30 days before events. Overdue events automatically escalate.
Calendar events support RFC 5545 (iCal) compatible recurrence rules. Common patterns are pre-configured but custom RRULE strings are accepted.
| Pattern | RRULE | Use Case |
|---|---|---|
| Monthly | FREQ=MONTHLY;BYMONTHDAY=1 | Monthly policy review check-ins |
| Quarterly | FREQ=MONTHLY;INTERVAL=3;BYMONTHDAY=1 | Quarterly compliance training |
| Semi-annual | FREQ=MONTHLY;INTERVAL=6;BYMONTHDAY=1 | SOC 2 interim reviews |
| Annual | FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=15 | Annual ISO 27001 surveillance audit |
| Custom | FREQ=WEEKLY;BYDAY=MO;INTERVAL=2 | Bi-weekly compliance standup |
Each calendar event can have multiple notification rules that fire at configurable intervals before the event date.
| Trigger | Channel | Audience |
|---|---|---|
| 90 days before | Email + Dashboard | Goal owner |
| 30 days before | Email + Slack + Dashboard | Goal owner + Team |
| 7 days before | Email + Slack + SMS | Goal owner + Team + Manager |
| 1 day before | All channels | All stakeholders |
| Overdue | All channels + Webhook | All stakeholders + Compliance lead |
Webhook Integration
Calendar events fire webhook events at each notification stage, allowing integration with external ITSM tools like Jira, ServiceNow, and PagerDuty.
curl -X POST https://api.drd.io/v1/compliance/calendar/events \
-H "Authorization: Bearer drd_ws_sk_live_Abc123..." \
-H "Content-Type: application/json" \
-d '{
"type": "audit",
"title": "SOC 2 Type II Annual Audit",
"description": "External audit by Deloitte for SOC 2 Type II certification",
"date": "2026-06-15T09:00:00Z",
"duration": "PT8H",
"recurrence": "FREQ=YEARLY;BYMONTH=6;BYMONTHDAY=15",
"goalId": "goal_01JM7XBN4RTYP",
"assignees": ["usr_01HQ3XBN4RTYP", "usr_02KL8YCM5STYU"],
"notifications": [
{ "daysBefore": 90, "channels": ["email"] },
{ "daysBefore": 30, "channels": ["email", "slack"] },
{ "daysBefore": 7, "channels": ["email", "slack", "sms"] }
]
}'
# Response
{
"ok": true,
"data": {
"id": "evt_01JM7XBN4RTYP",
"type": "audit",
"title": "SOC 2 Type II Annual Audit",
"date": "2026-06-15T09:00:00Z",
"recurrence": "FREQ=YEARLY;BYMONTH=6;BYMONTHDAY=15",
"nextOccurrence": "2026-06-15T09:00:00Z",
"goalId": "goal_01JM7XBN4RTYP",
"createdAt": "2026-02-14T12:00:00Z"
}
}curl "https://api.drd.io/v1/compliance/calendar/events?from=2026-01-01&to=2026-12-31&type=audit" \
-H "Authorization: Bearer drd_ws_sk_live_Abc123..."
# Response
{
"ok": true,
"data": [
{
"id": "evt_01JM7XBN4RTYP",
"type": "audit",
"title": "SOC 2 Type II Annual Audit",
"date": "2026-06-15T09:00:00Z",
"status": "scheduled",
"goalId": "goal_01JM7XBN4RTYP",
"assignees": ["usr_01HQ3XBN4RTYP", "usr_02KL8YCM5STYU"]
}
],
"pagination": { "total": 1, "page": 1, "perPage": 50 }
}import { DRDClient } from "@drd-io/sdk";
const drd = new DRDClient({
apiKey: process.env.DRD_API_KEY!,
workspace: process.env.DRD_WORKSPACE!,
});
// Create a recurring policy review event
const event = await drd.compliance.calendar.create({
type: "policy_review",
title: "Quarterly Data Protection Policy Review",
date: new Date("2026-04-01T10:00:00Z"),
recurrence: "FREQ=MONTHLY;INTERVAL=3;BYMONTHDAY=1",
goalId: "goal_01JM7XBN4RTYP",
assignees: ["usr_01HQ3XBN4RTYP"],
});
// List upcoming events for next 30 days
const upcoming = await drd.compliance.calendar.list({
from: new Date(),
to: new Date(Date.now() + 30 * 86400000),
});
for (const evt of upcoming) {
console.log(`${evt.date}: ${evt.title} [${evt.type}]`);
}
// Get all overdue events
const overdue = await drd.compliance.calendar.list({
status: "overdue",
});
console.log(`${overdue.length} overdue compliance events`);