IntelliPortal

Introduction

  • Overview
  • Getting Started

Platform

  • Send API
  • Webhooks
  • Authentication

Guides

  • Embedded Signup
  • WhatsApp Limits
  • Error Codes

Resources

  • OpenAPI Spec
  • Postman Collection
GuidesAPI ReferenceChangelog
⌘K

© 2026 IntelliPortal Inc. All rights reserved.

Privacy PolicyStatusContact Support

On This Page

  • Introduction
  • Quick Start
  • Next Steps
  • Prerequisites

Need help?

Can't find what you're looking for? Our engineers are here to help.

Chat with support
Docs/WhatsApp Limits

WhatsApp Business API Limits

Understand the rate limits, messaging tiers, template restrictions, and conversation windows that govern the WhatsApp Business API so you can plan your integration accordingly.

Message Types

WhatsApp distinguishes between two fundamental message types. The type determines when you can send a message, what content is allowed, and how it is billed.

TypeInitiated ByWindowApprovalUse Case
Session MessageUser24-hour windowNot requiredFree-form replies to user messages
Template MessageBusinessAnytimePre-approved by MetaNotifications, alerts, re-engagement

Note: Session messages are sometimes called "user-initiated messages" and template messages are called "business-initiated messages" in Meta's documentation. Both terms are used interchangeably.

Messaging Tiers

Your WhatsApp Business Account (WABA) is assigned a messaging tier that determines how many unique users you can send business-initiated (template) messages to within a rolling 24-hour period. This limit applies per phone number.

TierUnique Users / 24hUpgrade Requirement
Tier 11,000Send 500 messages to 500 unique users in 7 days
Tier 210,000Send 5,000 messages to 5,000 unique users in 7 days
Tier 3100,000Send 50,000 messages to 50,000 unique users in 7 days
Tier 4UnlimitedMaximum tier -- no further upgrades

Tier upgrades happen automatically when you meet the volume requirement while maintaining a high or medium quality rating. Downgrades can occur if your quality rating drops to low due to user complaints or blocks.

Warning: If your quality rating reaches "Flagged" status, your messaging tier may be frozen or reduced. You will not be able to upgrade until your quality rating improves back to medium or high.

Template Limits

Message templates must be submitted for approval before use. Meta reviews each template against their commerce and messaging policies.

ConstraintLimit
Maximum templates per WABA250
Template name length512 characters
Template body length1,024 characters
Header parameters1
Body parametersNo fixed limit (practical max ~20)
Buttons per templateUp to 10 (quick reply or CTA)

Each template has an individual quality rating (high, medium, or low) based on recipient feedback. Templates that receive too many blocks or "report spam" actions will be paused automatically by Meta.

Template Quality Statuses
APPROVED    -> Template is active and can be sent
PAUSED      -> Too many negative signals; sending is temporarily disabled
DISABLED    -> Permanently rejected; must create a new template
IN_REVIEW   -> Awaiting Meta approval (typically < 24 hours)
REJECTED    -> Did not pass policy review; edit and resubmit

Tip: You can check template quality and status via the IntelliPortal dashboard or by calling the GET /v1/templates endpoint.

24-Hour Conversation Window

When a user sends your business a message, a 24-hour conversation window opens. During this window you can reply with free-form session messages without needing a pre-approved template. The window resets every time the user sends a new message.

Conversation Flow
User sends message             -> 24h window OPENS
  |
  |-- Business sends session     (free-form, no approval needed)
  |-- Business sends session     (still within 24h)
  |
  +-- 24 hours elapse            -> Window CLOSES
      |
      +-- Business must use      -> Template message (pre-approved)
          template to re-engage
ScenarioMessage Type AllowedWindow Status
User just messaged youSession or TemplateOpen (24h from last user message)
Within 24h, user is activeSession or TemplateOpen (resets on each user message)
24h passed, no user messageTemplate onlyClosed
Business sends templateTemplate onlyOpens a new 24h window on delivery

Important: Attempting to send a session message outside the 24-hour window will return a 131026 error code. Use the Error Codes reference for details.

Rate Limits

The WhatsApp Business API enforces per-second throughput limits on message sending. These limits apply at the phone number level and vary by message type.

Message TypeRate LimitScope
Template messages80 msg/secPer phone number
Session messages250 msg/secPer phone number
Media uploads60 req/secPer WABA
Phone number registration10 req/minPer WABA

Quality-Based Throttling

Your phone number's quality rating directly affects your effective throughput. If the quality rating drops, Meta may reduce your sending rate below the standard limits.

Quality RatingEffect on Rate Limits
High (Green)Full rate limits apply
Medium (Yellow)May be reduced; tier upgrades paused
Low (Red)Significantly throttled; tier may be downgraded

Handling Rate Limit Errors

When you exceed the per-second rate limit, the API returns a 429 status code. Implement exponential backoff with jitter to retry gracefully.

JavaScript
async function sendWithRetry(payload, maxRetries = 5) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const res = await fetch("https://api.intelliportal.io/v1/messages/send", {
      method: "POST",
      headers: {
        Authorization: `Bearer ${process.env.INTELLI_API_KEY}`,
        "Content-Type": "application/json",
      },
      body: JSON.stringify(payload),
    });

    if (res.status !== 429) return res;

    const retryAfter = parseInt(res.headers.get("Retry-After") ?? "1");
    const jitter = Math.random() * 1000;
    const delay = retryAfter * 1000 * Math.pow(2, attempt) + jitter;

    console.log(`Rate limited. Retrying in ${Math.round(delay / 1000)}s`);
    await new Promise((r) => setTimeout(r, delay));
  }

  throw new Error("Max retries exceeded");
}

Best Practices

Follow these guidelines to maintain a healthy quality rating, avoid throttling, and ensure reliable message delivery.

  • Honor opt-outs immediately. Remove users from your messaging lists as soon as they request it. Continuing to message opted-out users will damage your quality rating.
  • Use correct template categories. Choose the appropriate category (utility, authentication, or marketing) for each template. Miscategorized templates may be rejected or paused.
  • Monitor your quality rating. Check the IntelliPortal dashboard regularly for quality alerts. Address issues before your rating drops to low.
  • Implement proper rate limiting on your end. Use a queue or token bucket to stay below the per-second API limits rather than relying on 429 retries.
  • Warm up new phone numbers gradually. Start with low volumes and increase over several days to build a positive sending reputation before scaling to higher tiers.
  • Keep template content relevant and timely. Avoid sending promotional templates to users who have not interacted recently. Stale audiences are more likely to block or report your messages.
  • Leverage session messages when possible. Session messages are more flexible and do not require pre-approval. Reply within the 24-hour window to take advantage of free-form messaging.
  • Use idempotency keys for retries. When retrying failed API calls, always include an idempotency key to prevent duplicate message delivery.

Need help? If you are hitting limits unexpectedly or need a tier upgrade review, contact the IntelliPortal support team through the dashboard or reach out at support@intelliportal.io.