Skip to main content
Resend Docs

Search documentation

Type to search this documentation.

On this pageOverview

Retrieve Usage

GET

/

usage

Node.js
import { Resend } from 'resend';

const resend = new Resend('re_xxxxxxxxx');

const { data, error } = await resend.usage.get();
cURL
curl -X GET 'https://api.resend.com/usage' \
     -H 'Authorization: Bearer re_xxxxxxxxx'
Response
{
  "object": "usage",
  "emails": {
    "daily": {
      "used": 10,
      "limit": 100,
      "sent": 8,
      "received": 2,
      "resets_at": "2026-07-29T00:00:00.000Z"
    },
    "monthly": {
      "used": 100,
      "limit": 3000,
      "sent": 80,
      "received": 20,
      "resets_at": "2026-08-01T00:00:00.000Z"
    }
  },
  "contacts": {
    "used": 10,
    "limit": 3000
  },
  "segments": {
    "used": 1,
    "limit": 3
  },
  "broadcasts": {
    "used": 2,
    "limit": null
  },
  "ai_credits": {
    "used": 5,
    "limit": 100,
    "next_increase_at": null
  },
  "automation_runs": {
    "used": 3,
    "limit": 10000,
    "resets_at": "2026-08-01T00:00:00.000Z"
  },
  "domains": {
    "used": 1,
    "limit": 1
  },
  "rate_limit": {
    "limit": 1000,
    "duration": "1000ms"
  }
}

string

Always usage.

object

Email sending and receiving quota, broken down by day and month.

Show properties

object

Rolling 24-hour quota. Shaped as { used, limit, sent, received, resets_at }. limit is null once the team has an active sending subscription — daily caps only apply to the free tier.

object

Calendar-month quota, shaped the same as daily. limit is always a number that scales with the plan.

object

Shaped as { used, limit }.

object

Shaped as { used, limit }. limit is null once the team has an active contacts subscription — segment caps only apply to the free tier.

object

Shaped as { used, limit }. limit is always null — broadcasts have no cap.

object

Shaped as { used, limit, next_increase_at }. next_increase_at is null until the team’s first AI credit use in the current rolling window; once credits are used, it’s when the oldest usage ages out and frees up quota.

object

Shaped as { used, limit, resets_at }.

object

Shaped as { used, limit }. limit is null when the plan has no domain cap.

object

The team’s API rate limit, shaped as { limit, duration }. duration is a string like "1000ms".

Node.js
import { Resend } from 'resend';

const resend = new Resend('re_xxxxxxxxx');

const { data, error } = await resend.usage.get();
cURL
curl -X GET 'https://api.resend.com/usage' \
     -H 'Authorization: Bearer re_xxxxxxxxx'
JSON
{
  "object": "usage",
  "emails": {
    "daily": {
      "used": 10,
      "limit": 100,
      "sent": 8,
      "received": 2,
      "resets_at": "2026-07-29T00:00:00.000Z"
    },
    "monthly": {
      "used": 100,
      "limit": 3000,
      "sent": 80,
      "received": 20,
      "resets_at": "2026-08-01T00:00:00.000Z"
    }
  },
  "contacts": {
    "used": 10,
    "limit": 3000
  },
  "segments": {
    "used": 1,
    "limit": 3
  },
  "broadcasts": {
    "used": 2,
    "limit": null
  },
  "ai_credits": {
    "used": 5,
    "limit": 100,
    "next_increase_at": null
  },
  "automation_runs": {
    "used": 3,
    "limit": 10000,
    "resets_at": "2026-08-01T00:00:00.000Z"
  },
  "domains": {
    "used": 1,
    "limit": 1
  },
  "rate_limit": {
    "limit": 1000,
    "duration": "1000ms"
  }
}

Was this page helpful?

⌘I

Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu