---
name: donotify
description: Place a real phone call to the user. Use when the user must actually be interrupted rather than notified, or asks to be called or reminded by phone.
version: 1.0.0
homepage: https://donotifys.com/ai-agents
openapi: https://donotifys.com/agent-skills/donotify/openapi.json
permissions:
  - network:outbound
requires:
  env:
    - DONOTIFY_API_TOKEN
---

# DoNotify

You can make the user's phone ring. This is the one channel that interrupts
rather than queues, so it reaches people who are not looking at a screen, and it
works on a basic handset or a landline with nothing installed.

Use it when a notification is not enough.

## Authentication

Every request:

- `Authorization: Bearer $DONOTIFY_API_TOKEN`
- `Accept: application/json`
- Base URL: `https://donotifys.com`

The user creates a token in their DoNotify profile. Calls are always placed to
the phone number on that account. You cannot dial an arbitrary number, so there
is no way to call a third party by mistake.

## When to use this

Reach for a call when the cost of the user missing this is real:

- They asked to be called, in any wording ("call me", "ring me", "phone me").
- A deadline or appointment they will otherwise miss.
- Medication, a dose, anything health related.
- An escalation nobody has acknowledged through quieter channels.

Do **not** call for routine confirmations, status updates, or anything the user
will see the next time they look at their device. A ringing phone is the loudest
thing you can do on someone's behalf. Spend it rarely and they keep answering.

If you are unsure, ask: "Do you want me to actually ring your phone for this?"

## Check the account first

```
GET /api/usage
```

```json
{
  "plan": "starter",
  "notification_limit": 30,
  "used_this_month": 5,
  "remaining": 25,
  "phone_number_set": true
}
```

If `phone_number_set` is `false`, stop and tell the user to add their number in
their DoNotify profile. If `remaining` is `0`, tell them they have used this
month's calls rather than attempting one.

## Call now

Rings immediately. The `title` is spoken first, then the `description`.

```
POST /api/call-now
Content-Type: application/json

{
  "title": "Your dentist appointment is in thirty minutes",
  "description": "Northside Dental, 40 Queen Street"
}
```

```json
{
  "success": true,
  "reminder_id": 42,
  "call_uuid": "abc-123",
  "status": "completed"
}
```

Fields: `title` (required, max 255), `description` (optional, max 1000). Both are
read aloud, so write them as speech. "Your dentist appointment is in thirty
minutes" works. "appt_reminder_dentist_1430" does not.

A `422` means no phone number is configured. A `500` means the call could not be
placed; tell the user plainly rather than retrying in a loop.

## Schedule a call

```
POST /api/reminders
Content-Type: application/json

{
  "title": "Take your blood pressure tablets",
  "call_at": "2026-10-01T08:00:00Z",
  "description": "The white box on the kitchen counter"
}
```

Fields: `title` (required, max 255), `call_at` (required, ISO 8601, must be in
the future), `description` (optional, max 1000), `event_time` (optional, ISO
8601, the thing being remembered if it differs from when the phone rings).

Convert whatever the user said into ISO 8601 yourself, in their timezone. If
their wording is ambiguous ("tomorrow morning"), pick a sensible time and say
which one you picked rather than asking twice.

## List upcoming calls

```
GET /api/reminders
```

Returns up to 25 pending calls, soonest first, each with `id`, `title`,
`description`, `call_at`, `event_time` and `status`. Use it when the user asks
what is scheduled.

## Worked examples

> "Call me in ten minutes so I leave on time."

Check usage, then `POST /api/reminders` with `call_at` ten minutes ahead and a
title the user will understand out of context. Confirm the time back to them.

> "Remind me to take my tablets every morning at eight."

Schedule the first call and say plainly that you have set the next one, not a
recurring series, unless you can schedule each day yourself.

> "Did my reminder go out?"

`GET /api/reminders` shows what is still pending. A call that has already been
placed will no longer be listed as pending.
