---
title: "Enroll for a crawl-complete email"
method: POST
path: "/crawl/{id}/notifications"
tags: ["Crawl"]
---

# Enroll for a crawl-complete email

`POST /crawl/{id}/notifications`

## Request

- Base URL: `https://api.savanto.ai`
- URL: `https://api.savanto.ai/crawl/{id}/notifications`
- Auth: HTTP bearer

Requests an email notification when this crawl reaches a terminal state (completed or failed). Intended for the dashboard "continue onboarding, email me when done" CTA. Rejects crawls that have already finished. **Admin-only endpoint.** The `email` in the body is treated as opaque and persisted verbatim; the cloud API does NOT authenticate ownership of that address. Callers holding the admin bearer are trusted to have derived the recipient from an authoritative source (e.g. the signed-in user session on the Next.js proxy). Do NOT expose this route via license-key / public scopes.

## Path parameters

- `id` string, required

## Request body

- EnrollCrawlNotificationRequest
  - `email` string, email, required: Recipient for the crawl-complete email. Caller is responsible for validating the signed-in user owns this address.

## Response `200`

Enrolled

- object
  - `data` object, required
    - `enrolled` true, required

## Other responses

- `400`: Validation error
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `409`: Conflict
- `413`: Payload too large
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/savanto/apis/savanto-api.md) · [All operations](https://skmtc.dev/savanto/apis/savanto-api/llms.txt) · [OpenAPI document](https://skmtc.dev/savanto/apis/savanto-api/revisions/82437327a878?raw)
