キャラクターモデル一覧・詳細・アカウント情報の取得
型情報
キャラクターモデル関連の型
type CharacterModelLicenseSerializer = {
modification: 'default' | 'disallow' | 'allow';
redistribution: 'default' | 'disallow' | 'allow';
credit: 'default' | 'necessary' | 'unnecessary';
characterization_allowed_user: 'default' | 'author' | 'everyone';
sexual_expression: 'default' | 'disallow' | 'allow';
violent_expression: 'default' | 'disallow' | 'allow';
corporate_commercial_use: 'default' | 'disallow' | 'allow';
personal_commercial_use: 'default' | 'disallow' | 'profit' | 'nonprofit';
};
type TagSerializer = {
name: string;
locale: string | null;
en_name: string | null;
ja_name: string | null;
};
type AgeLimitSerializer = {
is_r18: boolean;
is_r15: boolean;
is_adult: boolean;
}
type CharacterSerializer = {
user: UserSerializer;
id: string;
name: string;
is_private: boolean;
created_at: string;
published_at: string | null;
};
type CharacterModelBoothItemSerializer = {
booth_item_id: number;
part_category: string | null;
};
type CharacterModelSerializer = {
id: string;
name: string | null;
is_private: boolean;
is_downloadable: boolean;
is_comment_off: boolean;
is_other_users_available: boolean;
is_other_users_allow_viewer_preview: boolean;
is_hearted: boolean;
portrait_image: PortraitImageSerializer;
full_body_image: FullBodyImageSerializer;
license?: CharacterModelLicenseSerializer;
created_at: string;
heart_count: number;
download_count: number;
usage_count: number;
view_count: number;
published_at: string | null;
tags: TagSerializer[];
age_limit: AgeLimitSerializer;
character: CharacterSerializer;
latest_character_model_version?: CharacterModelVersionSerializer;
character_model_booth_items: CharacterModelBoothItemSerializer[];
}
type TextFragmentSerializer = {
type: 'plain' | 'url' | 'tag';
body: string;
normalized_body: string;
}
type MotionSerializer = {
personality_name: string;
name: string;
url: string;
}
type PersonalitySerializer = {
name: string;
label: string;
label_en: string;
waiting_motion: MotionSerializer;
appearing_motion: MotionSerializer;
liked_motion: MotionSerializer;
other_motions: MotionSerializer[];
}
type CharacterWebsiteSerializer = {
id: string;
url: string;
service: string;
}
type CharacterHeaderSerializer = {
original: ImageSerializer;
}
type CharacterIconSerializer = {
is_default_image: boolean;
original: ImageSerializer;
}
type CharacterDetailSerializer = {
character: CharacterSerializer;
user_detail: UserDetailSerializer;
description_fragments: TextFragmentSerializer[];
websites: CharacterWebsiteSerializer[];
header: CharacterHeaderSerializer;
icon: CharacterIconSerializer;
description: string;
}
type CharacterModelDetailSerializer = {
character_model: CharacterModelSerializer;
description_fragments: TextFragmentSerializer[];
reply_count: number;
status_id: string;
description: string;
ogp_image_url: string;
personality: PersonalitySerializer;
character_detail: CharacterDetailSerializer;
}
ユーザー関連の型
type UserIconSerializer = {
is_default_image: boolean;
sq170: ImageSerializer;
sq50: ImageSerializer;
};
type UserSerializer = {
id: string;
pixiv_user_id: string;
name: string;
icon: UserIconSerializer;
};
type UserRelationshipSerializer = {
user_id: string;
is_following: boolean;
is_followed: boolean;
}
type UserDetailSerializer = {
user: UserSerializer;
description: string;
description_fragments: TextFragmentSerializer[];
following_count: number;
follower_count: number;
relationShip: UserRelationshipSerializer;
}
type AgeLimitSerializer = {
is_r18: boolean;
is_r15: boolean;
is_adult: booelean;
}
type CurrentUserSerializer = {
locale: string;
account_sub_avatar_id: string;
is_pixiv_status_complete: boolean;
is_showable_on_pixiv: boolean;
is_developer: boolean;
is_user_privacy_policy_accepted: boolean;
user_detail: UserDetailSerializer;
age_limit: AgeLimitSerializer;
}
画像関連の型
type ImageSerializer = {
url: string;
url2x: string | null;
width: number;
height: number;
};
type PortraitImageSerializer = {
is_default_image: boolean;
original: ImageSerializer;
w600: ImageSerializer;
w300: ImageSerializer;
sq600: ImageSerializer;
sq300: ImageSerializer;
sq150: ImageSerializer;
};
type FullBodyImageSerializer = {
is_default_image: boolean;
original: ImageSerializer;
w600: ImageSerializer;
w300: ImageSerializer;
};
CharacterModelVerison(アバターファイルのバージョン情報)関連の型
type CharacterModelVersionSerializer = {
id: string;
created_at: string;
spec_version: string | null;
exporter_version: string | null;
triangle_count: number;
mesh_count: number;
mesh_primitive_count: number;
mesh_primitive_morph_count: number;
material_count: number;
texture_count: number;
joint_count: number;
is_vendor_forbidden_use_by_others: boolean;
is_vendor_protected_download: boolean;
is_vendor_forbidden_other_users_preview: boolean;
original_file_size: number | null;
vrm_meta: any;
original_compressed_file_size: number | null;
conversion_state?: ModelBasisConversionStateSerializer;
vendor_specified_license?: VendorSpecifiedLicenseSerializer;
attached_items?: AttachedItemSerializer[];
};
type ModelBasisConversionStateSerializer = {
current_state: 'pending' | 'processing' | 'completed' | 'failed';
};
// アプリからのアップロード時に付与されるライセンス情報
type VendorSpecifiedLicenseSerializer = {
modification: 'default' | 'disallow' | 'allow';
redistribution: 'default' | 'disallow' | 'allow';
credit: 'default' | 'necessary' | 'unnecessary';
characterization_allowed_user: 'default' | 'author' | 'everyone';
sexual_expression: 'default' | 'disallow' | 'allow';
violent_expression: 'default' | 'disallow' | 'allow';
corporate_commercial_use: 'default' | 'disallow' | 'allow';
personal_commercial_use: 'default' | 'disallow' | 'profit' | 'nonprofit';
};
// VRoidMobileからのアップロード時に付与される情報
type AttachedItemSerializer = {
item_display_name: string;
category_type:
| 'skin'
| 'eyebrow'
| 'nose'
| 'mouth'
| 'ear'
| 'face_shape'
| 'lip'
| 'eye_surrounding'
| 'eyeline'
| 'eyelash'
| 'iris'
| 'eye_white'
| 'eye_highlight'
| 'base_hair'
| 'all_hair'
| 'hair_front'
| 'hair_back'
| 'whole_body'
| 'head'
| 'neck'
| 'shoulder'
| 'arm'
| 'hand'
| 'chest'
| 'torso'
| 'waist'
| 'leg'
| 'tops'
| 'bottoms'
| 'onepiece'
| 'shoes'
| 'inner'
| 'socks'
| 'neck_accessory'
| 'arm_accessory'
| 'safety'
| 'cheek';
downloadable: boolean;
take_free: boolean;
id: string;
attached_item_coins: AttachedItemCoinSerializer[];
};
type AttachedItemCoinSerializer = {
coin_type: 'apple' | 'google';
price: number;
};
ユーザーが投稿したキャラクターモデルの一覧
GET: /api/account/character_models
ヘッダー
X-Api-Version
必須: YES
- VRoid HubのAPIバージョンです。現行バージョンは
11
になります。
リクエストパラメータ
max_id
必須: No
型: string
- 読み込んだキャラクターモデルの内、最後のもののid。ページングに用います
count
必須: No
型: integer
デフォルト: 20
- 一度のリクエストで読み込むキャラクターモデル数
publication
必須: No
型: string
- キャラクターモデルの公開状態を指定します
レスポンス
200
{
"data": CharacterModelSerializer[],
"error": {
"code": "string",
"message": "string",
"details": {}
},
"_links": {
"next": {
"href": "string"
}
},
"rand": "string"
}
400
["COMMON_INVALID_COUNT: count is too long"]
401
[
"OAUTH_UNAUTHORIZED: OAuth unauthorized",
"COMMON_SIGNED_IN_REQUIRED: signed in required"
]
403
["OAUTH_FORBIDDEN: OAuth forbidden"]
ユーザーがお気に入りした使用可能なキャラクターモデルの一覧
GET: /api/hearts
ヘッダー
X-Api-Version
必須: YES
- VRoid HubのAPIバージョンです。現行バージョンは
11
になります。
リクエストパラメータ
application_id
必須: YES
型: string
- アプリケーションID (ClientID)
max_id
必須: No
型: string
- 読み込んだキャラクターモデルの内、最後のもののid。ページングに用います
count
必須: No
型: integer
デフォルト: 20
- 一度のリクエストで読み込むキャラクターモデル数
is_downloadable
必須: No
型: boolean
デフォルト: true
- ダウンロード可能なキャラクターモデルか(非公認アプリケーションの場合は常に
true
)
characterization_allowed_user
必須: No
型: 'default' | 'author' | 'everyone'
デフォルト: 'author'
, ただし、アプリケーション設定の「アバターとして利用する」が「はい」の場合は常に 'everyone'
- モデルに人格を与えることができる人の条件
violent_expression
必須: No
型: 'default' | 'disallow' | 'allow'
デフォルト: 'disallow'
, ただし、アプリケーション設定の「モデルを利用して暴力表現をする」が「はい」の場合は常に 'allow'
- 暴力表現が許可されているモデルか
sexual_expression
必須: No
型: 'default' | 'disallow' | 'allow'
デフォルト: 'disallow'
, ただし、アプリケーション設定の「モデルを利用して性的表現をする」が「はい」の場合は常に 'allow'
- 性的表現が許可されているモデルか
corporate_commercial_use
必須: No
型: 'default' | 'disallow' | 'allow'
デフォルト: 'disallow'
, ただし、アプリケーション設定の「アプリの種別」が「法人向けアプリ」の場合は常に 'allow'
- 法人の商用利用が許可されているモデルか
personal_commercial_use
必須: No
型: 'default' | 'disallow' | 'profit' | 'nonprofit'
デフォルト: 'disallow'
, ただし、アプリケーション設定の「商用利用」が設定されている場合はそちらに依存
- 個人の商用利用が許可されているモデルか
political_or_religious_usage
必須: No
型: 'default' | 'disallow' | 'allow'
デフォルト: 'disallow'
- 政治・宗教表現が許可されているモデルか(VRM PUBLIC LICENSE 1.0に基づいたパラメータ)
antisocial_or_hate_usage
必須: No
型: 'default' | 'disallow' | 'allow'
デフォルト: 'disallow'
- 反社会的・ヘイトスピーチ表現が許可されているモデルか(VRM PUBLIC LICENSE 1.0に基づいたパラメータ)
modification
必須: No
型: 'default' | 'disallow' | 'allow_modification'
デフォルト: 'disallow'
, ただし、アプリケーション設定の「モデルを改変する」が「はい」の場合は常に 'allow_modification'
- 改変・改変再配布の許可がされているモデルか
redistribution
必須: No
型: 'default' | 'disallow' | 'allow'
デフォルト: 'disallow'
, ただし、アプリケーション設定の「モデルを再配布する」が「はい」の場合は常に 'allow'
- 再配布が許可されているモデルか
credit
必須: No
型: 'default' | 'necessary' | 'unnecessary'
デフォルト: アプリケーション設定の「モデルのクレジット表記が可能」が「いいえ」の時 'unnecessary'
- クレジット表記が不要なモデルか
has_booth_items
必須: No
型: boolean
デフォルト: false
- BOOTH商品が関連付けられているモデルか
booth_part_categories[]
必須: No
型: array[string]
デフォルト: []
- BOOTH商品の部位カテゴリを指定する
レスポンス
200
{
"data": CharacterModelSerializer[],
"error": {
"code": "string",
"message": "string",
"details": {}
},
"_links": {
"next": {
"href": "string"
}
},
"rand": "string"
}
400
["COMMON_INVALID_COUNT: count is too long"]
401
[
"OAUTH_UNAUTHORIZED: OAuth unauthorized",
"COMMON_SIGNED_IN_REQUIRED: signed in required"
]
403
["OAUTH_FORBIDDEN: OAuth forbidden"]
VRoid Hubスタッフおすすめのキャラクターモデルの一覧
GET: /api/staff_picks
ヘッダー
X-Api-Version
必須: YES
- VRoid HubのAPIバージョンです。現行バージョンは
11
になります。
リクエストパラメータ
max_id
必須: No
型: string
- 読み込んだキャラクターモデルの内、最後のもののid。ページングに用います
count
必須: No
型: integer
デフォルト: 20
- 一度のリクエストで読み込むキャラクターモデル数
レスポンス
200
{
"data": CharacterModelSerializer[],
"error": {
"code": "string",
"message": "string",
"details": {}
},
"_links": {
"next": {
"href": "string"
}
},
"rand": "string"
}
400
["COMMON_INVALID_COUNT: count is too long"]
401
["OAUTH_UNAUTHORIZED: OAuth unauthorized"]
403
["OAUTH_FORBIDDEN: OAuth forbidden"]
VRoid Hub全体からキャラクターモデルを検索
GET: /api/search/character_models
ヘッダー
X-Api-Version
必須: YES
- VRoid HubのAPIバージョンです。現行バージョンは
11
になります。
リクエストパラメータ
keyword
必須: YES
型: string
- 検索ワード
search_after[]
必須: No
型: string
- ページングに用います。一つ前のレスポンスの
links.next.href
の中に含まれています
count
必須: No
型: integer
デフォルト: 20
- 一度のリクエストで読み込むキャラクターモデル数
sort
必須: No
型: string
デフォルト: _score
- ソートの種類を選びます
_score
: 関連度順first_published_at
: 投稿が新しい順
is_downloadable
必須: No
型: boolean
デフォルト: true
- ダウンロード可能なキャラクターモデルか(非公認アプリケーションの場合は常に
true
)
characterization_allowed_user
必須: No
型: 'default' | 'author' | 'everyone'
デフォルト: 'author'
, ただし、アプリケーション設定の「アバターとして利用する」が「はい」の場合は常に 'everyone'
- モデルに人格を与えることができる人の条件
violent_expression
必須: No
型: 'default' | 'disallow' | 'allow'
デフォルト: 'disallow'
, ただし、アプリケーション設定の「モデルを利用して暴力表現をする」が「はい」の場合は常に 'allow'
- 暴力表現が許可されているモデルか
sexual_expression
必須: No
型: 'default' | 'disallow' | 'allow'
デフォルト: 'disallow'
, ただし、アプリケーション設定の「モデルを利用して性的表現をする」が「はい」の場合は常に 'allow'
- 性的表現が許可されているモデルか
corporate_commercial_use
必須: No
型: 'default' | 'disallow' | 'allow'
デフォルト: 'disallow'
, ただし、アプリケーション設定の「アプリの種別」が「法人向けアプリ」の場合は常に 'allow'
- 法人の商用利用が許可されているモデルか
personal_commercial_use
必須: No
型: 'default' | 'disallow' | 'profit' | 'nonprofit'
デフォルト: 'disallow'
, ただし、アプリケーション設定の「商用利用」が設定されている場合はそちらに依存
- 個人の商用利用が許可されているモデルか
political_or_religious_usage
必須: No
型: 'default' | 'disallow' | 'allow'
デフォルト: 'disallow'
- 政治・宗教表現が許可されているモデルか(VRM PUBLIC LICENSE 1.0に基づいたパラメータ)
antisocial_or_hate_usage
必須: No
型: 'default' | 'disallow' | 'allow'
デフォルト: 'disallow'
- 反社会的・ヘイトスピーチ表現が許可されているモデルか(VRM PUBLIC LICENSE 1.0に基づいたパラメータ)
modification
必須: No
型: 'default' | 'disallow' | 'allow_modification'
デフォルト: 'disallow'
, ただし、アプリケーション設定の「モデルを改変する」が「はい」の場合は常に 'allow_modification'
- 改変・改変再配布の許可がされているモデルか
redistribution
必須: No
型: 'default' | 'disallow' | 'allow'
デフォルト: 'disallow'
, ただし、アプリケーション設定の「モデルを再配布する」が「はい」の場合は常に 'allow'
- 再配布が許可されているモデルか
credit
必須: No
型: 'default' | 'necessary' | 'unnecessary'
デフォルト: アプリケーション設定の「モデルのクレジット表記が可能」が「いいえ」の時 'unnecessary'
- クレジット表記が不要なモデルか
has_booth_items
必須: No
型: boolean
デフォルト: false
- BOOTH商品が関連付けられているモデルか
booth_part_categories[]
必須: No
型: array[string]
デフォルト: []
- BOOTH商品の部位カテゴリを指定する
レスポンス
200
{
"data": CharacterModelSerializer[],
"error": {
"code": "string",
"message": "string",
"details": {}
},
"_links": {
"next": {
"href": "string"
}
},
"rand": "string"
}
400
["COMMON_INVALID_COUNT: count is too long"]
401
[
"OAUTH_UNAUTHORIZED: OAuth unauthorized",
"COMMON_SIGNED_IN_REQUIRED: signed in required"
]
403
["OAUTH_FORBIDDEN: OAuth forbidden"]
キャラクターモデル(単体)の詳細情報の取得
GET: /api/character_models/{id}
ヘッダー
X-Api-Version
必須: YES
- VRoid HubのAPIバージョンです。現行バージョンは
11
になります。
レスポンス
200
{
"data": CharacterModelDetailSerializer,
"error": {
"code": "string",
"message": "string",
"details": {}
},
"_links": {
"next": {
"href": "string"
}
},
"rand": "string"
}
401
["OAUTH_UNAUTHORIZED: OAuth unauthorized"]
403
["OAUTH_FORBIDDEN: OAuth forbidden"]
404
["COMMON_NOT_FOUND: not found"]
ログインユーザーのアカウント情報の取得
GET: /api/account
ヘッダー
X-Api-Version
必須: YES
- VRoid HubのAPIバージョンです。現行バージョンは
11
になります。
レスポンス
200
{
"data": CurrentUserSerializer,
"error": {
"code": "string",
"message": "string",
"details": {}
},
"_links": {
"next": {
"href": "string"
}
},
"rand": "string"
}
401
["OAUTH_UNAUTHORIZED: OAuth unauthorized"]
403
["OAUTH_FORBIDDEN: OAuth forbidden"]