line-stamp-api-proxy / docs /LINE_API_SPEC.md
daydreamer-json's picture
Hello
518bc25 verified
# 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)