Troubleshooting
If requests fail, run zero doctor check-connector --env-name LINE_TOKEN or zero doctor check-connector --url https://api.line.me/v2/bot/info --method GET
How to Use
All examples below assume you have LINE_TOKEN set. Authentication uses Bearer token in the Authorization header.
Base URL
https://api.line.me
1. Get Bot Info
Retrieve information about the bot associated with the channel access token.
curl -s "https://api.line.me/v2/bot/info" --header "Authorization: Bearer $LINE_TOKEN" | jq .
2. Get User Profile
Retrieve a user's display name, profile image, and status message. Replace USER_ID with the actual user ID.
curl -s "https://api.line.me/v2/bot/profile/USER_ID" --header "Authorization: Bearer $LINE_TOKEN" | jq .
3. Get Follower IDs
Retrieve a list of user IDs that have added the bot as a friend. Supports pagination with start parameter.
curl -s "https://api.line.me/v2/bot/followers/ids?limit=100" --header "Authorization: Bearer $LINE_TOKEN" | jq .
For pagination, use the next token from the response:
curl -s "https://api.line.me/v2/bot/followers/ids?limit=100&start=CONTINUATION_TOKEN" --header "Authorization: Bearer $LINE_TOKEN" | jq .
4. Send Push Message
Send a message to a specific user. Replace USER_ID with the target user ID.
Write to /tmp/line_request.json:
{
"to": "USER_ID",
"messages": [
{
"type": "text",
"text": "Hello from the LINE bot!"
}
]
}
Then run:
curl -s -X POST "https://api.line.me/v2/bot/message/push" --header "Content-Type: application/json" --header "Authorization: Bearer $LINE_TOKEN" -d @/tmp/line_request.json | jq .
5. Send Reply Message
Reply to a user event using a reply token received from a webhook event. Reply tokens expire after a short time.
Write to /tmp/line_request.json:
{
"replyToken": "REPLY_TOKEN",
"messages": [
{
"type": "text",
"text": "Thanks for your message!"
}
]
}
Then run:
curl -s -X POST "https://api.line.me/v2/bot/message/reply" --header "Content-Type: application/json" --header "Authorization: Bearer $LINE_TOKEN" -d @/tmp/line_request.json | jq .
6. Send Multicast Message
Send the same message to multiple users at once (up to 500 user IDs).
Write to /tmp/line_request.json:
{
"to": ["USER_ID_1", "USER_ID_2", "USER_ID_3"],
"messages": [
{
"type": "text",
"text": "This is a multicast message!"
}
]
}
Then run:
curl -s -X POST "https://api.line.me/v2/bot/message/multicast" --header "Content-Type: application/json" --header "Authorization: Bearer $LINE_TOKEN" -d @/tmp/line_request.json | jq .
7. Send Broadcast Message
Send a message to all users who have added the bot as a friend.
Write to /tmp/line_request.json:
{
"messages": [
{
"type": "text",
"text": "This broadcast goes to all followers!"
}
]
}
Then run:
curl -s -X POST "https://api.line.me/v2/bot/message/broadcast" --header "Content-Type: application/json" --header "Authorization: Bearer $LINE_TOKEN" -d @/tmp/line_request.json | jq .
8. Check Message Quota
Get the monthly message quota for the LINE Official Account.
curl -s "https://api.line.me/v2/bot/message/quota" --header "Authorization: Bearer $LINE_TOKEN" | jq .
Check how many messages have been sent this month:
curl -s "https://api.line.me/v2/bot/message/quota/consumption" --header "Authorization: Bearer $LINE_TOKEN" | jq .
9. Send Image Message
Send an image to a user.
Write to /tmp/line_request.json:
{
"to": "USER_ID",
"messages": [
{
"type": "image",
"originalContentUrl": "https://example.com/image.jpg",
"previewImageUrl": "https://example.com/image_preview.jpg"
}
]
}
Then run:
curl -s -X POST "https://api.line.me/v2/bot/message/push" --header "Content-Type: application/json" --header "Authorization: Bearer $LINE_TOKEN" -d @/tmp/line_request.json | jq .
10. Send Template Message (Buttons)
Send a button template message with actions.
Write to /tmp/line_request.json:
{
"to": "USER_ID",
"messages": [
{
"type": "template",
"altText": "Button template",
"template": {
"type": "buttons",
"title": "Menu",
"text": "Please select an option",
"actions": [
{
"type": "message",
"label": "Option 1",
"text": "option1"
},
{
"type": "uri",
"label": "Visit Website",
"uri": "https://example.com"
}
]
}
}
]
}
Then run:
curl -s -X POST "https://api.line.me/v2/bot/message/push" --header "Content-Type: application/json" --header "Authorization: Bearer $LINE_TOKEN" -d @/tmp/line_request.json | jq .
11. Get Webhook Endpoint
Retrieve the current webhook URL configuration.
curl -s "https://api.line.me/v2/bot/channel/webhook/endpoint" --header "Authorization: Bearer $LINE_TOKEN" | jq .
12. Set Webhook Endpoint
Configure the webhook URL where LINE sends events.
curl -s -X PUT "https://api.line.me/v2/bot/channel/webhook/endpoint" --header "Content-Type: application/json" --header "Authorization: Bearer $LINE_TOKEN" -d '{"endpoint":"https://example.com/webhook"}' | jq .
13. Test Webhook
Test the webhook endpoint connectivity.
curl -s -X POST "https://api.line.me/v2/bot/channel/webhook/test" --header "Content-Type: application/json" --header "Authorization: Bearer $LINE_TOKEN" -d '{"endpoint":"https://example.com/webhook"}' | jq .
14. List Rich Menus
Get all rich menus created for the bot.
curl -s "https://api.line.me/v2/bot/richmenu/list" --header "Authorization: Bearer $LINE_TOKEN" | jq '.richmenus[] | {richMenuId, name, size}'
15. Create Rich Menu
Create a new rich menu.
Write to /tmp/line_request.json:
{
"size": {
"width": 2500,
"height": 1686
},
"selected": false,
"name": "Main Menu",
"chatBarText": "Menu",
"areas": [
{
"bounds": {
"x": 0,
"y": 0,
"width": 1250,
"height": 1686
},
"action": {
"type": "message",
"text": "Left button tapped"
}
},
{
"bounds": {
"x": 1250,
"y": 0,
"width": 1250,
"height": 1686
},
"action": {
"type": "message",
"text": "Right button tapped"
}
}
]
}
Then run:
curl -s -X POST "https://api.line.me/v2/bot/richmenu" --header "Content-Type: application/json" --header "Authorization: Bearer $LINE_TOKEN" -d @/tmp/line_request.json | jq .
16. Delete Rich Menu
Delete a rich menu by ID.
curl -s -X DELETE "https://api.line.me/v2/bot/richmenu/RICH_MENU_ID" --header "Authorization: Bearer $LINE_TOKEN" | jq .
17. Get Message Delivery Statistics
Get the number of messages delivered on a specific date (format: yyyyMMdd).
curl -s "https://api.line.me/v2/bot/insight/message/delivery?date=20260301" --header "Authorization: Bearer $LINE_TOKEN" | jq .
18. Get Follower Demographics
Retrieve demographic data about followers (gender, age, area distribution).
curl -s "https://api.line.me/v2/bot/insight/demographic" --header "Authorization: Bearer $LINE_TOKEN" | jq .
19. Get Group Summary
Retrieve information about a group chat the bot is a member of.
curl -s "https://api.line.me/v2/bot/group/GROUP_ID/summary" --header "Authorization: Bearer $LINE_TOKEN" | jq .
20. Get Group Member Profile
Retrieve the profile of a specific member in a group chat.
curl -s "https://api.line.me/v2/bot/group/GROUP_ID/member/USER_ID" --header "Authorization: Bearer $LINE_TOKEN" | jq .
Message Types
LINE supports multiple message types in the messages array:
| Type | Description |
|------|-------------|
| text | Plain text message |
| image | Image with original and preview URLs |
| video | Video with original and preview URLs |
| audio | Audio file with duration |
| location | Location with title, address, and coordinates |
| sticker | LINE sticker with package and sticker IDs |
| template | Interactive template (buttons, confirm, carousel) |
| flex | Flexible layout message using Flex Message JSON |
Guidelines
- Message limits: Push messages count toward your monthly quota. Free plans have limited push messages. Reply messages are free
- Reply tokens: Reply tokens from webhook events expire quickly. Process and reply promptly
- Multicast limit: Multicast supports up to 500 user IDs per request
- Rich menu images: After creating a rich menu, upload an image separately using the content upload endpoint
- User IDs: User IDs are channel-specific. The same user has different IDs across different channels
- Message objects: Each request can contain up to 5 message objects in the
messagesarray - HTTPS required: All image, video, and audio URLs must use HTTPS
- Webhook verification: LINE sends a signature in the
x-line-signatureheader for webhook verification using HMAC-SHA256