{"openapi":"3.1.0","info":{"title":"LINE Engagement (BYOK) API","version":"0.1.0","description":"LINE Engagement (BYOK) lets an AI assistant read your own LINE Engagement data through the LINE Engagement API with a key you supply (channel access token (long-lived or stateless) of a Messaging API channel). Read-only: 11 tools (get_message_event_stats, get_aggregation_event_stats, get_richmenu_insight_summary, get_richmenu_insight_daily, get_rich_menu, list_rich_menu_aliases,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-line-engagement.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-line-engagement/docs"},"termsOfService":"https://connectorbay.com/byok-line-engagement/terms"},"servers":[{"url":"https://byok-line-engagement.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-line-engagement/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_message_event_stats":{"post":{"operationId":"get_message_event_stats","summary":"Get interaction statistics of one sent message request: delivered, unique impressions, unique clicks, media plays, per-m","description":"Get interaction statistics of one sent message request: delivered, unique impressions, unique clicks, media plays, per-message impressions and per-link clicks. Use for \"How many people clicked the links in my LINE broadcast\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"request_id":{"description":"Request ID returned in the x-line-request-id header when the message was sent.","maxLength":80,"title":"Request Id","type":"string"}},"required":["request_id"],"title":"get_message_event_statsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_aggregation_event_stats":{"post":{"operationId":"get_aggregation_event_stats","summary":"Get interaction statistics for messages labelled with a custom aggregation unit over a date range: unique impressions, c","description":"Get interaction statistics for messages labelled with a custom aggregation unit over a date range: unique impressions, clicks, media plays and per-link clicks. Use for \"What was the click rate of my LINE campaign labelled promotion_a\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"custom_aggregation_unit":{"description":"The custom aggregation unit name used when sending, up to 30 characters.","maxLength":30,"title":"Custom Aggregation Unit","type":"string"},"date_from":{"description":"First day, format yyyyMMdd, for example 20261001 (within the last 365 days).","maxLength":8,"title":"Date From","type":"string"},"date_to":{"description":"Last day, format yyyyMMdd, for example 20261007 (not after today).","maxLength":8,"title":"Date To","type":"string"}},"required":["custom_aggregation_unit","date_from","date_to"],"title":"get_aggregation_event_statsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_richmenu_insight_summary":{"post":{"operationId":"get_richmenu_insight_summary","summary":"Get totals for one rich menu over a date range: impressions and unique users, plus clicks and unique users per tappable ","description":"Get totals for one rich menu over a date range: impressions and unique users, plus clicks and unique users per tappable area. Use for \"Which area of my LINE rich menu gets tapped the most\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"rich_menu_id":{"description":"Rich menu ID, for example richmenu-8dfdfc571eca39c0ffcd1f799519c5b5.","maxLength":80,"title":"Rich Menu Id","type":"string"},"date_from":{"description":"First day, format yyyyMMdd, for example 20261001 (within the last 365 days).","maxLength":8,"title":"Date From","type":"string"},"date_to":{"description":"Last day, format yyyyMMdd, for example 20261007 (not after today).","maxLength":8,"title":"Date To","type":"string"}},"required":["rich_menu_id","date_from","date_to"],"title":"get_richmenu_insight_summaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_richmenu_insight_daily":{"post":{"operationId":"get_richmenu_insight_daily","summary":"Get day-by-day impressions and clicks (with unique users) for one rich menu over a date range. Use for \"How did my LINE ","description":"Get day-by-day impressions and clicks (with unique users) for one rich menu over a date range. Use for \"How did my LINE rich menu perform day by day last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"rich_menu_id":{"description":"Rich menu ID, for example richmenu-8dfdfc571eca39c0ffcd1f799519c5b5.","maxLength":80,"title":"Rich Menu Id","type":"string"},"date_from":{"description":"First day, format yyyyMMdd, for example 20261001 (within the last 365 days).","maxLength":8,"title":"Date From","type":"string"},"date_to":{"description":"Last day, format yyyyMMdd, for example 20261007 (not after today).","maxLength":8,"title":"Date To","type":"string"}},"required":["rich_menu_id","date_from","date_to"],"title":"get_richmenu_insight_dailyArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_rich_menu":{"post":{"operationId":"get_rich_menu","summary":"Get one rich menu: name, chat bar text, size, whether it is selected by default and its tappable areas. Use for \"What do","description":"Get one rich menu: name, chat bar text, size, whether it is selected by default and its tappable areas. Use for \"What does my LINE rich menu look like\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"rich_menu_id":{"description":"Rich menu ID, for example richmenu-8dfdfc571eca39c0ffcd1f799519c5b5.","maxLength":80,"title":"Rich Menu Id","type":"string"}},"required":["rich_menu_id"],"title":"get_rich_menuArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_rich_menu_aliases":{"post":{"operationId":"list_rich_menu_aliases","summary":"List rich menu aliases (alias ID to rich menu ID) used for tab-style rich menu switching. Use for \"Which rich menu alias","description":"List rich menu aliases (alias ID to rich menu ID) used for tab-style rich menu switching. Use for \"Which rich menu aliases are set up on my LINE account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_rich_menu_aliasesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_rich_menu_alias":{"post":{"operationId":"get_rich_menu_alias","summary":"Get which rich menu one alias points to. Use for \"Which rich menu does alias richmenu-alias-a point to\".","description":"Get which rich menu one alias points to. Use for \"Which rich menu does alias richmenu-alias-a point to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"alias_id":{"description":"Rich menu alias ID, for example richmenu-alias-a.","maxLength":40,"title":"Alias Id","type":"string"}},"required":["alias_id"],"title":"get_rich_menu_aliasArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_default_rich_menu":{"post":{"operationId":"get_default_rich_menu","summary":"Get the ID of the rich menu shown to all users by default. Use for \"What is the default rich menu on my LINE account\".","description":"Get the ID of the rich menu shown to all users by default. Use for \"What is the default rich menu on my LINE account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_default_rich_menuArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_coupons":{"post":{"operationId":"list_coupons","summary":"List coupons created on the Official Account (ID and title), with a continuation token for more. Use for \"Which coupons ","description":"List coupons created on the Official Account (ID and title), with a continuation token for more. Use for \"Which coupons do I have on my LINE Official Account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many coupons to return (1 to 100, default 20).","title":"Limit"},"start":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Continuation token from the previous answer's 'next' field.","title":"Start"}},"title":"list_couponsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_membership_plans":{"post":{"operationId":"list_membership_plans","summary":"List the membership plans of the Official Account with price, currency, member count, member limit and published flag. U","description":"List the membership plans of the Official Account with price, currency, member count, member limit and published flag. Use for \"How many members does each of my LINE membership plans have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_membership_plansArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_liff_apps":{"post":{"operationId":"list_liff_apps","summary":"List the LIFF apps registered on the channel with view type, URL, features, scope and bot prompt setting. Use for \"Which","description":"List the LIFF apps registered on the channel with view type, URL, features, scope and bot prompt setting. Use for \"Which LIFF apps are registered on my LINE channel\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_liff_appsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}