Skip to main content

Fake Notification Delivery API

MOCK DATA

Generate channel-specific notifications with safe recipients, bounded send attempts and exact sent/delivered/read/failure dates.

Generated test data for fixtures and development

Base URL
/api/notifications
Capabilities
1 route Seedable
Last updated
July 29, 2026

GET /api/notifications

Live requestRuns against the public API
No key required
GET/api/notifications?channel=push&status=delivered&template=securityAlert&count=8&seed=42

Request parameters

Pin email, SMS, push or in-app recipient/content shape.

Pin queued, sent, delivered, read or terminal failed state.

Pin one synthetic content template.

Exact attempts for non-queued states; failed must equal maxAttempts.

Terminal retry limit, bounded to four.

Earliest creation time. With only from, to resolves 30 elapsed days later; with neither, defaults 30 UTC days before today.

Latest creation time. With only to, from resolves 30 elapsed days earlier; with neither, defaults to today's UTC end.

Advanced response options7 options

How many records to generate (1–100).

Deterministic output: the same seed always returns the same records. Omit for random (the used seed is echoed in meta.seed).

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

Return all fields except these (comma-separated).

Response format: json envelope, ndjson (one record per line) or csv.

Pretty-print the JSON response.

Drop the envelope: return the raw array/object without data/meta wrapper.

Response

Example parameters are ready. Send the request to inspect the live response.

Route reference

Code samples Ready-to-copy requests in 4 languages
Choose a code sample language
curl "https://randomapi.dev/api/notifications?channel=push&status=delivered&template=securityAlert&count=8&seed=42"
const res = await fetch("https://randomapi.dev/api/notifications?channel=push&status=delivered&template=securityAlert&count=8&seed=42");
const { data, meta } = await res.json();
import requests

data = requests.get("https://randomapi.dev/api/notifications?channel=push&status=delivered&template=securityAlert&count=8&seed=42").json()["data"]
$json = json_decode(file_get_contents(
  "https://randomapi.dev/api/notifications?channel=push&status=delivered&template=securityAlert&count=8&seed=42"
), true);
$data = $json["data"];
Parameters Route-specific request inputs 7
channel enum

Pin email, SMS, push or in-app recipient/content shape.

allowed: email | sms | push | inApp
example: channel=push
status enum

Pin queued, sent, delivered, read or terminal failed state.

allowed: queued | sent | delivered | read | failed
example: status=delivered
template enum

Pin one synthetic content template.

allowed: welcome | receipt | securityAlert | reminder
example: template=securityAlert
attemptCount int

Exact attempts for non-queued states; failed must equal maxAttempts.

allowed: 1 – 4
example: attemptCount=2
maxAttempts int

Terminal retry limit, bounded to four.

default: 3
allowed: 1 – 4
example: maxAttempts=4
from date

Earliest creation time. With only from, to resolves 30 elapsed days later; with neither, defaults 30 UTC days before today.

example: from=2026-07-01
to date

Latest creation time. With only to, from resolves 30 elapsed days earlier; with neither, defaults to today's UTC end.

example: to=2026-07-31T23:59:59.999Z
Universal parameters Shared response and formatting options 7
count int

How many records to generate (1–100).

default: 10
allowed: 1 – 100
example: count=3
seed int

Deterministic output: the same seed always returns the same records. Omit for random (the used seed is echoed in meta.seed).

example: seed=42
fields list

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

example: fields=id,channel
exclude list

Return all fields except these (comma-separated).

example: exclude=attempts
format enum

Response format: json envelope, ndjson (one record per line) or csv.

default: json
allowed: json | ndjson | csv
example: format=csv
pretty boolean

Pretty-print the JSON response.

default: false
example: pretty=true
unwrap boolean

Drop the envelope: return the raw array/object without data/meta wrapper.

default: false
example: unwrap=true
Response schema Fields returned in each record 15
id string

Distinct fictional notification ID.

example: ntf_91a3dc7200_00

channel string

email | sms | push | inApp.

example: push

template string

Selected synthetic content template.

example: securityAlert

recipient object

Channel-specific safe destination type/value.

example: {"type":"push","value":"push_test_0123456789abcdef"}

status string

queued | sent | delivered | read | failed.

example: delivered

createdAt string (ISO 8601)

Creation time inside from/to.

example: 2026-07-10T08:00:00.000Z

updatedAt string (ISO 8601)

Latest attempt or lifecycle transition.

example: 2026-07-10T08:05:00.000Z

sentAt string (ISO 8601) nullable

Present for sent, delivered and read.

example: 2026-07-10T08:00:02.000Z

deliveredAt string (ISO 8601) nullable

Present for delivered and read.

example: 2026-07-10T08:05:00.000Z

readAt string (ISO 8601) nullable

Present only for read.

example: null

attemptCount integer

Exact nested-attempt count; zero while queued.

example: 2

maxAttempts integer

Configured retry limit.

example: 4

error string nullable

Last failure only for failed status.

example: null

content object

Stable subject/title/body/data shape with channel-specific nullable fields.

example: {"subject":null,"title":"Example security alert","body":"A fictional sign-in was recorded for fixture testing.","data":{"template":"securityAlert","fixture":true}}

attempts object[]

Zero to four chronological generic delivery attempts.

example: [{"number":1,"attemptedAt":"2026-07-10T08:00:01.000Z","durationMs":1000,"outcome":"accepted","response":"accepted for fixture delivery","error":null}]

Documented examples

Build-generated requests and complete responses
3
Delivered push notifications
GET /api/notifications?channel=push&status=delivered&template=securityAlert&count=8&seed=42
{
  "data": [
    {
      "id": "ntf_958016cfb6a5c85e_00",
      "channel": "push",
      "template": "securityAlert",
      "recipient": {
        "type": "push",
        "value": "push_test_d40fb15863c1d1cff8728448a0b56b87"
      },
      "status": "delivered",
      "createdAt": "2026-07-19T23:52:47.748Z",
      "updatedAt": "2026-07-20T00:24:53.964Z",
      "sentAt": "2026-07-19T23:58:53.964Z",
      "deliveredAt": "2026-07-20T00:24:53.964Z",
      "readAt": null,
      "attemptCount": 2,
      "maxAttempts": 3,
      "error": null,
      "content": {
        "subject": null,
        "title": "Example security alert",
        "body": "A fictional sign-in was recorded for fixture testing.",
        "data": {
          "template": "securityAlert",
          "fixture": true
        }
      },
      "attempts": [
        {
          "number": 1,
          "attemptedAt": "2026-07-19T23:52:49.119Z",
          "durationMs": 2437,
          "outcome": "failure",
          "response": "temporary fixture failure",
          "error": "temporary delivery failure"
        },
        {
          "number": 2,
          "attemptedAt": "2026-07-19T23:58:51.556Z",
    …
    "generatedAt": "2026-07-29T08:13:22.000Z"
  }
}
Failed email notifications
GET /api/notifications?channel=email&status=failed&maxAttempts=4&count=6&seed=17
{
  "data": [
    {
      "id": "ntf_755abf24f73252bc_00",
      "channel": "email",
      "template": "securityAlert",
      "recipient": {
        "type": "email",
        "value": "fixture-fa677219@example.net"
      },
      "status": "failed",
      "createdAt": "2026-07-14T19:08:44.521Z",
      "updatedAt": "2026-07-14T19:23:49.796Z",
      "sentAt": null,
      "deliveredAt": null,
      "readAt": null,
      "attemptCount": 4,
      "maxAttempts": 4,
      "error": "synthetic provider timeout",
      "content": {
        "subject": "Example security alert",
        "title": null,
        "body": "A fictional sign-in was recorded for fixture testing.",
        "data": {
          "template": "securityAlert",
          "fixture": true
        }
      },
      "attempts": [
        {
          "number": 1,
          "attemptedAt": "2026-07-14T19:08:44.815Z",
          "durationMs": 2539,
          "outcome": "failure",
          "response": "temporary fixture failure",
          "error": "temporary delivery failure"
        },
        {
          "number": 2,
          "attemptedAt": "2026-07-14T19:13:47.354Z",
    …
    "generatedAt": "2026-07-29T08:13:22.000Z"
  }
}
Read in-app reminders in July
GET /api/notifications?channel=inApp&status=read&template=reminder&from=2026-07-01&to=2026-07-31&count=5&seed=8
{
  "data": [
    {
      "id": "ntf_c5a0ad10ec498125_00",
      "channel": "inApp",
      "template": "reminder",
      "recipient": {
        "type": "inApp",
        "value": "usr_7ed05d64418bc8e6c2"
      },
      "status": "read",
      "createdAt": "2026-07-26T18:21:40.335Z",
      "updatedAt": "2026-07-26T20:41:42.667Z",
      "sentAt": "2026-07-26T18:28:42.667Z",
      "deliveredAt": "2026-07-26T18:52:42.667Z",
      "readAt": "2026-07-26T20:41:42.667Z",
      "attemptCount": 2,
      "maxAttempts": 3,
      "error": null,
      "content": {
        "subject": null,
        "title": "Example reminder",
        "body": "This is a synthetic reminder generated for a test.",
        "data": {
          "template": "reminder",
          "fixture": true
        }
      },
      "attempts": [
        {
          "number": 1,
          "attemptedAt": "2026-07-26T18:21:41.408Z",
          "durationMs": 1233,
          "outcome": "failure",
          "response": "temporary fixture failure",
          "error": "temporary delivery failure"
        },
        {
          "number": 2,
          "attemptedAt": "2026-07-26T18:28:42.641Z",
    …
    "generatedAt": "2026-07-29T08:13:22.000Z"
  }
}

About this API

Coverage & behavior

Generates fictional multi-channel notification records for delivery dashboards and UI state tests. Email, SMS, push and in-app records use different safe recipient shapes and channel-appropriate subject/title fields while keeping one stable top-level schema.

The lifecycle is strict. Queued records have zero attempts and no delivery dates. Sent, delivered and read records end in one accepted attempt and add their dates in order. Failed records exhaust maxAttempts, contain only failed attempts and never claim they were sent. Every nested attempt is chronological and bounded to four.

Email uses reserved example.net; SMS uses the fictional North American 555-01xx range; push tokens begin push_test_; in-app destinations are synthetic user IDs. Attempt responses are generic fixture labels, not provider codes, and the endpoint makes no email/SMS/push vendor compatibility claim.

Use it for

  • Populate multi-channel notification and delivery dashboards
  • Test queued, failed, delivered and read UI states
  • Create reproducible retry histories with non-deliverable recipients

Frequently asked questions

Are notification recipients safe for tests?

Yes. Email uses example.net, SMS uses the fictional 555-01xx range, push tokens are visibly prefixed push_test_, and in-app values are synthetic IDs.

Do read notifications always have delivery and send dates?

Yes. sentAt < deliveredAt < readAt, and the final accepted attempt occurs before all three lifecycle transitions.

What does failed mean?

A failed fixture has exhausted maxAttempts; every attempt failed, error matches the last attempt, and sent/delivered/read dates remain null.

Does this match an email or push provider API?

No. Recipients, response labels and fields are generic fixture data with no vendor wire-format claim.

Standards & references