Every LINE Messaging API limit, in one table
Last verified against LINE Developers - Messaging API reference (common specifications)
The LINE Messaging API has two limit systems, and confusing them is the classic mistake. The first is engineering: per-endpoint rate limits, applied per channel with a token bucket - most endpoints, including reply and push, allow 2,000 requests per second, but multicast drops to 200 per second, broadcast and narrowcast to 60 per hour, and some rich menu operations to 3 per hour. The second is commercial: your LINE Official Account's subscription plan includes a monthly allowance of free messages, and push, multicast, narrowcast, and broadcast sends all consume it - counted per recipient, not per API call. Reply messages, sent with the single-use replyToken from a webhook event, are explicitly not counted. That reply-first cost model is the thing that surprises teams coming from other platforms: a bot that answers users via push instead of reply works identically in testing and then burns through the plan's free messages in production, ending the month with 429 You have reached your monthly limit. while replies keep flowing for free.
Plan allowances are deliberately not listed as universal numbers here because LINE's own docs say the subscription plan "may vary by country or region"; the documented Japan example runs from 200 free messages on the free plan to 30,000 on the Standard Plan. What is universal: the counting rules, the quota-inspection endpoints, and the errors that fire when you run out.
Everything below is quoted from the Messaging API reference and official docs, with a source link on every row: rate limits, monthly quota mechanics, per-request sending caps, reply token validity, retry-key idempotency, character counting, media specs, quick reply, Flex and template message caps, imagemap, rich menus, webhooks, and audiences. Where a limit fires a specific error, the section intro links the matching page in our LINE error reference.
Jump to: Per-endpoint rate limits · Monthly message quota (subscription plans) · Per-request sending caps · Reply token validity · X-Line-Retry-Key idempotency · Text message limits & character counting · Image, video, audio & sticker limits · Quick reply limits · Flex Message limits · Template message limits · Imagemap message limits · Rich menu limits · Webhook rules & redelivery · Audience limits
Per-endpoint rate limits
Rate limits apply "to each API function (endpoint) on a per-channel basis", enforced with a token bucket that refills gradually rather than resetting on the minute - so bursts can pass and sustained overrun drains capacity until requests start failing with 429 The API rate limit has been exceeded. The scope rules are documented: the same URL with a different HTTP method is a different endpoint, request parameters and source IP make no difference, and channels get independent budgets even against the same LINE Official Account. Note the spread below - per-second on the messaging path, but per-minute and per-hour on management, insight, and rich menu endpoints - and that LINE documents no Retry-After header, so backoff must be self-clocked.
| What | Limit |
|---|---|
| Send reply / send push (and all endpoints not listed separately) | 2,000 requests per second |
| Send multicast message | 200 requests per second |
| Send broadcast / send narrowcast | 60 requests per hour |
| Audience management endpoints | 60 requests per minute |
| Webhook settings (set / get endpoint URL) | 1,000 requests per minute |
| Create / delete rich menu, delete alias, batch status | 100 requests per hour |
| Replace or unlink linked rich menus in batches | 3 requests per hour |
| Get rich menu list | 10 requests per second |
| Display a loading animation | 100 requests per second |
| Issue short-lived channel access token | 370 requests per second |
| Enforcement model | Token bucket, per endpoint, per channel |
Monthly message quota (subscription plans)
Every LINE Official Account can "send a certain number of messages each month for free", with the allowance set by its subscription plan - and the docs are explicit that "the subscription plan may vary by country or region", so treat any specific number as regional. Only proactive sending consumes quota: the pricing page lists push, multicast, broadcast, and narrowcast as counted, and reply messages as not counted. Counting is per recipient - message objects per request don't matter - and messages that can't be received (blocked users, dead IDs) aren't counted. Run out, and sends fail with 429 You have reached your monthly limit.; note narrowcast temporarily reserves quota equal to your full target reach, which can trip that error early.
| What | Limit |
|---|---|
| Free messages per month | Plan-dependent - see your region's plan docs |
| Documented Japan example: Communication Plan (free) | Up to 200 free messages / month |
| Documented Japan example: Light Plan | Up to 5,000 free messages / month |
| Documented Japan example: Standard Plan | Up to 30,000 free messages / month |
| Sending methods that consume quota | Push, multicast, broadcast, narrowcast |
| Counting unit | Per recipient, not per API call |
| Blocked users / non-existent IDs | Not counted |
| Additional (paid) messages | Configurable cap, plan-permitting |
| Check the month's target limit | GET /v2/bot/message/quota |
| Check messages used this month | GET /v2/bot/message/quota/consumption |
Per-request sending caps
All five sending endpoints share the same envelope: a messages array of at most 5 message objects, in a request body capped at 2 MB. The differences are in addressing. Push targets one userId, groupId, or roomId; multicast fans out to explicit user IDs; broadcast hits every friend; narrowcast filters by attributes or audiences and carries documented privacy floors that fail either fast with 403 Not enough recipients or late, after a 202, when delivery starts. Invalid recipients produce 400 Failed to send messages; oversized bodies produce 413. Validation-only twins of each endpoint (/validate/push etc.) run the same message-object checks without sending or spending quota.
| What | Limit |
|---|---|
| Message objects per request | 5 |
| Multicast recipients | 500 user IDs per request |
| Broadcast recipients | All friends of the account |
| Narrowcast: target reach floor for attribute targeting | 100 or more |
| Narrowcast: final recipient floor | 50 or more |
| Push to users who messaged you without friending | Within 7 days of receiving their message |
| Request body size | 2 MB |
| Loading animation duration | 5-60 seconds, in steps of 5 |
X-Line-Retry-Key idempotency
Push, multicast, narrowcast, and broadcast accept an X-Line-Retry-Key header - "an arbitrarily generated UUID in hexadecimal notation" that you mint yourself ("the retry key isn't generated by LINE"). Retry an ambiguous failure with the same key and LINE either processes the request (if it truly failed) or answers 409 The retry key is already accepted with the original request's ID in x-line-accepted-request-id - never a duplicate delivery. The window is the sharp edge: keys are managed for 24 hours, and LINE warns that reusing a key beyond that "will succeed as a new API request... As a result, duplicate messages will be sent."
| What | Limit |
|---|---|
| Header format | UUID in hexadecimal notation |
| Endpoints that accept it | Push, multicast, narrowcast, broadcast |
| Key management period | 24 hours |
| Duplicate-request response | 409 Conflict |
Text message limits & character counting
Text is capped at 5,000 characters - but "character" means a UTF-16 code unit, so "characters made up of multiple code units (e.g. some Kanji characters, Unicode emojis) are counted as more than one character"; the docs' own example is that the emoji U+1F34E is two characters. LINE emojis add a second trap: their $ placeholders are replaced by alternative text before counting, and "LINE doesn't disclose the alternative text", so a message near the cap "may unintentionally exceed the maximum length and sending the message may fail" - surfacing as 400 The request body has X error(s). A handful of properties (action labels, template text/titles, rich menu names) are counted in grapheme clusters instead.
| What | Limit |
|---|---|
| Text message text | 5,000 characters |
| Counting method | UTF-16 code units |
| LINE emojis per message | 20 |
| Text (v2) substitution objects | 100 |
| Grapheme-cluster-counted properties | Labels, template text/title, rich menu name & chatBarText |
Image, video, audio & sticker limits
Media never travels inside the request: message objects carry HTTPS URLs ("Protocol: HTTPS (TLS 1.2 or later)", up to 2,000 characters), LINE's clients fetch the files, and the caps below apply to the hosted files. Getting the transport wrong therefore fails as URL validation (400 with a details array) rather than as an upload error. The reverse direction - downloading what users send you - runs through api-data.line.me and is time-boxed: user-sent content "is automatically deleted after a period of time", after which you get 404 not found, or 410 The content is gone if the user unsent it. Fetch and persist media immediately.
| What | Limit |
|---|---|
| Image (originalContentUrl) | JPEG or PNG, max 10 MB |
| Image preview (previewImageUrl) | JPEG or PNG, max 1 MB |
| Video | MP4, max 200 MB |
| Audio | MP3 or M4A, max 200 MB |
| Media URL length | 2,000 characters |
| Sticker message | packageId + stickerId from the official sticker list |
| Location message title / address | 100 characters each |
| User-sent content retention | Auto-deleted after a period of time |
Quick reply limits
Quick replies ride along on any message type via the optional quickReply property, capped at 13 button objects per message. Two documented behaviors shape UX design: when a request carries several message objects, "the quickReply property of the last message object is displayed" - buttons attached to earlier messages in the batch never render - and buttons using camera, camera roll, or location actions get default icons when imageUrl is omitted. Exceeding the 13-item cap or pointing icons at non-HTTPS URLs fails validation with 400 The request body has X error(s), naming the offending array index in details[].property.
| What | Limit |
|---|---|
| Quick reply buttons per message | 13 |
| Button icon (imageUrl) | PNG, 1:1, max 1 MB |
| Display rule with multiple messages | Last message object's quickReply only |
Flex Message limits
Flex Messages are CSS-flexbox-style layouts defined entirely in JSON, and their caps are JSON-size caps: 30 KB for a bubble, 50 KB for a carousel, and at most 12 bubbles per carousel (all bubbles in one carousel must share the same width setting). Every Flex Message also requires altText - up to 1,500 characters - because notifications and chat lists can't render the layout. These are validation limits, so an oversized container returns 400 The request body has X error(s) pointing into contents, well before the 2 MB transport cap at 413 could matter. Component-level constraints (image URLs, text wrapping, video support by LINE version) live in the Flex container and component references.
| What | Limit |
|---|---|
| Bubble JSON size | Max 30 KB |
| Carousel JSON size | Max 50 KB |
| Bubbles per carousel | 12 |
| altText | 1,500 characters |
Template message limits
Template messages (buttons, confirm, carousel, image carousel) are the pre-Flex structured layouts, and their limits are per-field character caps rather than JSON sizes. The pattern to internalize: text allowances shrink when an image or title is present - a buttons template allows 160 characters of text alone but only 60 alongside an image or title, and carousel columns allow 120 alone versus 60 with image/title. Images across templates are JPEG or PNG, up to 1,024px wide and 10 MB, over HTTPS (TLS 1.2+). Blowing any cap fails as 400 The request body has X error(s) naming the field. Note these template text and title fields are counted in grapheme clusters, per the character-counting rules.
| What | Limit |
|---|---|
| altText (all templates) | 1,500 characters |
| Buttons template: title | 40 characters |
| Buttons template: text | 160 chars (no image/title) / 60 chars (with) |
| Confirm template: text | 240 characters |
| Carousel template: columns | 10 |
| Image carousel template: columns | 10 |
Imagemap message limits
Imagemaps are single images with tappable regions, and they carry the API's most idiosyncratic asset requirement: you don't send one image URL but a base URL, and LINE's clients append a width segment to fetch the right resolution - so your server must serve the image at the documented widths (240, 300, 460, 700, 1040 pixels) under {baseUrl}/{width}. The baseSize.width is always declared as 1040, with height scaled to match. Misconfigured base URLs typically fail at render time on the client, while structural problems - too many actions, a bad URI scheme in an action - fail upfront as 400 The request body has X error(s) (the docs' own example flags areas[0].action.uri with "invalid uri").
| What | Limit |
|---|---|
| Base image widths to serve | 240px, 300px, 460px, 700px, 1040px |
| baseSize.width | 1040 (fixed) |
| Tappable actions per imagemap | 50 |
| altText | 1,500 characters |
| Imagemap video | MP4, max 200 MB |
Webhook rules & redelivery
The LINE Platform delivers events as HTTPS POSTs to your registered webhook URL, signing every request: x-line-signature is the Base64 encoding of the HMAC-SHA256 digest of the raw request body, keyed with your channel secret - and LINE tells you to verify it rather than filter by IP, because "the IP address of the LINE Platform... isn't disclosed." Your server must return 200 (LINE may also POST an empty events array to confirm communication). Redelivery of failed webhooks exists but is opt-in and deliberately vague: enabled in the console, triggered when you didn't return 2xx, with attempt count and interval "not disclosed... subject to change without notice." Registration failures surface as 400 Invalid webhook endpoint URL; for silent-bot debugging, start with the webhook debugging guide.
| What | Limit |
|---|---|
| Signature header | x-line-signature: Base64(HMAC-SHA256(channel secret, body)) |
| Required response | HTTP 200 (2xx) |
| Webhook transport | HTTPS POST only |
| Communication check | Empty events array |
| Redelivery | Opt-in; count & interval undisclosed |
| Redelivered event contents | Same webhookEventId & reply token |
| Webhook settings API rate | 1,000 requests per minute |
Audience limits
Audiences are the recipient lists behind narrowcast, and every stage is capped. A channel can hold 1,000 audiences; an upload audience takes 10,000 user IDs when created by JSON but 1,500,000 when created by file upload (on api-data.line.me); descriptions run to 120 characters. Processing is asynchronous with a hard parallelism ceiling - at most 10 upload/update jobs QUEUED or WORKING per audience at once, beyond which requests fail with 429. Audiences must reach READY status before a narrowcast can reference them (400 Invalid audience group id otherwise), and privacy floors apply at send time: each targeted audience generally needs 50+ recipients - see 403 Not enough recipients.
| What | Limit |
|---|---|
| Audiences per channel | 1,000 |
| User IDs per upload audience (JSON) | 10,000 |
| User IDs per upload audience (file) | 1,500,000 |
| Audience description | 120 characters |
| Concurrent upload/update operations | 10 per audience ID |
| Audience management API rate | 60 requests per minute |
| IFA-based audiences | Corporate application required |
LINE guides and tools
Other platforms
Frequently asked questions
What is the LINE Messaging API rate limit?
It depends on the endpoint, applied per channel. Most endpoints - including send reply and send push - allow 2,000 requests per second. Multicast allows 200/s, the loading animation 100/s, issuing short-lived tokens 370/s. Broadcast, narrowcast, and most insight endpoints allow only 60 requests per hour, audience management 60 per minute, rich menu create/delete 100 per hour, and the rich menu batch-link endpoint just 3 per hour. Exceeding any of them returns 429.
How many free messages does a LINE bot get per month?
It depends on your LINE Official Account's subscription plan, and plans vary by country or region, so there is no single global number. LINE's documented Japan example: up to 200 free messages on the free Communication Plan, 5,000 on the Light Plan, and 30,000 on the Standard Plan, with paid additional messages available on the Standard Plan. Only push, multicast, narrowcast, and broadcast consume the allowance - replies are free.
Are LINE reply messages really unlimited?
Reply messages are listed in the pricing docs under sending methods that are not counted as message count, so they never consume your monthly quota. They are still bound by everything else: one single-use reply token per webhook event, roughly one minute to use it, at most 5 message objects per reply, and the 2,000 requests-per-second endpoint rate limit.
How long is a LINE reply token valid?
Reply tokens can only be used once and must be used within one minute after receiving the webhook - use beyond one minute isn't guaranteed to work. Tokens in redelivered webhooks are usable within one minute of the redelivery unless the original token was already used or 20 minutes have passed since the event. LINE warns the limit can change without notice and says to reply as soon as possible.
What is the character limit for a LINE text message?
5,000 characters, counted in UTF-16 code units - surrogate-pair characters like many emojis count as two. A message can carry at most 20 LINE emojis, and their $ placeholders are replaced by undisclosed alternative text before counting, which can push a near-limit message over. Some properties (action labels, template text and titles, rich menu names) are counted in grapheme clusters instead.
How many messages can a LINE bot send in one request?
Up to 5 message objects per request, on reply, push, multicast, narrowcast, and broadcast alike. Multicast additionally accepts up to 500 user IDs per request, and quota counts per recipient: 5 message objects multicast to 500 people count as 500 messages, not 2,500 - the number of message objects doesn't affect the count. The whole request body must stay under 2 MB.
How many quick reply buttons does LINE allow?
13 quick reply button objects per message, defined in the quickReply.items array. Each button can carry an optional PNG icon with a 1:1 aspect ratio up to 1 MB, served over HTTPS (TLS 1.2 or later). If a request contains several message objects, only the last message object's quick reply is displayed to the user.
What are the size limits for LINE Flex Messages?
The JSON defining a bubble may be at most 30 KB, and a carousel at most 50 KB with up to 12 bubbles. Every Flex Message also needs altText of up to 1,500 characters, shown in notifications and chat lists. These caps are enforced by request validation, so an oversized container fails with a 400 details array, not a 413.
What are the LINE rich menu image requirements?
JPEG or PNG, 800 to 2500 pixels wide, at least 250 pixels tall, aspect ratio (width divided by height) of 1.45 or more, and at most 1 MB, uploaded to api-data.line.me. A rich menu can define up to 20 tappable areas, chat bar text is capped at 14 characters, and you can create up to 1,000 rich menus and 1,000 rich menu aliases per LINE Official Account via the API.
Does LINE retry webhook deliveries that fail?
Only if webhook redelivery is enabled in the LINE Developers Console - it's off by default. LINE then re-sends webhooks that didn't get a 2xx response, for an undisclosed number of attempts at undisclosed intervals; redelivered events keep the same webhookEventId and reply token, with deliveryContext.isRedelivery set to true. Deduplicate by event ID and verify every request's x-line-signature (Base64 HMAC-SHA256 of the body with your channel secret).
Build on LINE without tracking every limit yourself
Conferbot paces sends, queues retries and surfaces limit errors as readable status.