| # LINE Store Web API | |
| Base URL: `https://store.line.me` | |
| ## Search product | |
| `GET /api/search/:category` | |
| Request Headers | |
| - `Accept-Language`: ISO country code | |
| - Used to determine the language of search results | |
| Path Parameters | |
| - `category`: 'sticker' | 'emoji' | 'theme' | 'family' | |
| - 'sticker'='スタンプ', 'emoji'='絵文字', 'theme'='着せ替え', 'family'='その他' | |
| Query Parameters | |
| - `query`: string | |
| - `category`: 'sticker' | 'emoji' | 'theme' | 'family' | |
| - Must match the path parameters exactly | |
| - `type`: 'ALL' | 'OFFICIAL' | 'CREATORS' | 'SUBSCRIPTION' | |
| - 'ALL'='すべて', 'OFFICIAL'='公式', 'CREATORS'='クリエイターズ', 'SUBSCRIPTION'='LINE スタンプ プレミアム' | |
| - `offset`: number | |
| - `limit`: number | |
| --- | |
| # LINE Product CDN Spec | |
| Base URL: `https://stickershop.line-scdn.net` | |
| ## Stickers | |
| Path Parameters | |
| - `productId`: number | |
| - Sticker product ID (integer) | |
| ### Metadata JSON | |
| `GET /stickershop/v1/product/:productId/:deviceType/productInfo.meta` | |
| Path Parameters | |
| - `deviceType`: 'ios' | 'android' | 'LINEStorePC' | |
| ```typescript | |
| const stickerResourceTypes = ['STATIC', 'ANIMATION', 'SOUND', 'ANIMATION_SOUND'] as const; | |
| type productInfo_meta = { | |
| packageId: number; // productId | |
| onSale: boolean; | |
| validDays: number; | |
| title: { [lang: string]: string }; // Example: {ja: 'タイトル', en: 'Title'} | |
| author: { [lang: string]: string }; // Example: {ja: '名前', en: 'Author'} | |
| price: { | |
| country: string; | |
| currency: string; | |
| symbol: string; | |
| price: number; | |
| }[]; | |
| stickers: { | |
| id: number; // stickerId | |
| width: number; // image width | |
| height: number; // image height | |
| }[]; | |
| hasAnimation: boolean; | |
| hasSound: boolean; | |
| stickerResourceType: (typeof stickerResourceTypes)[number]; | |
| }; | |
| ``` | |
| ### Product packed zip | |
| `GET /stickershop/v1/product/:productId/:deviceType/:file` | |
| Path Parameters | |
| - `deviceType`: 'ios' | 'android' | |
| - `file`: 'stickerpack@2x.zip' | 'stickerpack.zip' | 'stickers.zip' | |
| - 'stickerpack@2x.zip' = png (2x) + apng (2x) + m4a | |
| - 'stickerpack.zip' = png (1x) + apng (1x) + m4a | |
| - 'stickers.zip' = png (1x) STATIC | |
| - android stickerpack@2x.zip is not available | |
| ### Independent sticker | |
| `GET /stickershop/v1/sticker/:stickerId/:deviceType/:file` | |
| Path Parameters | |
| - `stickerId`: number | |
| - `deviceType`: 'ios' | 'android' | |
| - `file`: 'sticker@2x.png' | 'sticker.png' | |
| - android sticker@2x.png is not available | |
| ### Product thumbnail | |
| `GET /stickershop/v1/product/:productId/LINEStorePC/main.png` | |
| ### Independent sticker sound | |
| `GET /stickershop/v1/sticker/:stickerId/:deviceType/sticker_sound.m4a` | |
| Path Parameters | |
| - `stickerId`: number | |
| - `deviceType`: 'ios' | 'android' | 'LINEStorePC' | |
| ### Product thumbnail sound | |
| `GET /stickershop/v1/product/:productId/:deviceType/main_sound.m4a` | |
| Path Parameters | |
| - `deviceType`: 'ios' | 'android' | 'LINEStorePC' | |
| --- | |
| ## Sticons (emoji) | |
| Path Parameters | |
| - `productId`: string | |
| - Sticons product ID (integer) 96 bit hex (deliver func is unknown) | |
| ### Metadata JSON | |
| `GET /sticonshop/v1/sticon/:productId/:deviceType/meta.json` | |
| Path Parameters | |
| - `deviceType`: 'iPhone' | 'android' | |
| ```typescript | |
| type meta_json = { | |
| productId: string; | |
| altTexts: { [iconIndex: string]: string }; | |
| orders: string[]; // array of iconIndex | |
| sticonResourceType?: 'STATIC' | 'ANIMATION'; // STATIC if key does not exist | |
| }; | |
| ``` | |
| ### Product packed zip | |
| `GET /sticonshop/v1/sticon/:productId/:deviceType/:file` | |
| Path Parameters | |
| - `deviceType`: 'iPhone' | 'android' | |
| - `file`: 'package_animation.zip' | 'package.zip' | |
| - 'package_animation.zip' = APNG | |
| - 'package.zip' = PNG | |
| ### Independent sticon | |
| `GET /sticonshop/v1/sticon/:productId/:deviceType/:file` | |
| Path Parameters | |
| - `deviceType`: 'iPhone' | 'android' | |
| - `file`: `${iconIndex}_animation.png` | `${iconIndex}.png` | |
| - `iconIndex`: 3-digit icon index string (001-999) | |
| - `${iconIndex}_animation.png` = APNG | |
| - `${iconIndex}.png` = PNG | |
| ### Product thumbnail | |
| `GET /sticonshop/v1/product/:productId/iPhone/main.png` | |
| --- | |
| ## Themes | |
| ? | |
| --- | |
| ## Family | |
| ? | |
| --- | |
| ## Product packed zip structure | |
| ### Stickers | |
| - stickerpack@2x.zip | stickerpack.zip | |
| - productInfo.meta (JSON) | |
| - `${stickerId}@2x.png` | `${stickerId}.png` (PNG STATIC) | |
| - `${stickerId}_key@2x.png` | `${stickerId}_key.png` (PNG STATIC low quality) | |
| - tab_on@2x.png | tab_on.png (small thumbnail) | |
| - tab_off@2x.png | tab_off.png (small thumbnail grayscale) | |
| - sound | |
| - `${stickerId}.m4a` (M4A SOUND) | |
| - animation | animation@2x | |
| - `${stickerId}@2x.png` | `${stickerId}.png` (APNG ANIMATION) | |
| - stickers@2x.zip | stickers.zip | |
| - productInfo.meta | |
| - `${stickerId}@2x.png` | `${stickerId}.png` (PNG STATIC) | |
| - `${stickerId}_key@2x.png` | `${stickerId}_key.png` (PNG STATIC low quality) | |
| - tab_on@2x.png | tab_on.png (small thumbnail) | |
| - tab_off@2x.png | tab_off.png (small thumbnail grayscale) | |
| `sound` and `animation` folder may not exist depending on the resource type. (example: STATIC) | |
| ### Sticons (emoji) | |
| - package_animation.zip | |
| - meta.json | |
| - `${iconIndex}_animation.png` (APNG) | |
| - `${iconIndex}_key_animation.png` (APNG) | |
| - package.zip | |
| - meta.json | |
| - `${iconIndex}.png` (PNG) | |
| - `${iconIndex}_key.png` (PNG) | |