Acquire a list of character models, detail of a character, and account information
Type information
Character model type
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;
}
User type
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;
}
Image type
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 (avatar file version info) type
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';
};
// License information given when uploading from the application
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';
};
// Information given when uploading from 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;
};
List of character models posted by the user
GET: /api/account/character_models
Header
X-Api-Version
Required: YES
- This is the VRoid Hub API version. The current version is version
11
.
Query parameter
max_id
Required: No
Type: string
- The last ID from the character models uploaded. Used for paging
count
Required: No
Type: integer
Default: 20
- Number of character models uploaded in a single request
publication
Required: No
Type: string
- Set character model availability
Response
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"]
List of available character models liked by the user
GET: /api/hearts
Header
X-Api-Version
Required: YES
- This is the VRoid Hub API version. The current version is version
11
.
Query parameter
application_id
Required: Yes
Type: string
- Application ID (ClientID)
max_id
Required: No
Type: string
- The last ID from the character models uploaded. Used for paging
count
Required: No
Type: integer
Default: 20
- Number of character models uploaded in a single request
is_downloadable
Required: No
Type: boolean
Default: true
- Determines whether it's a downloadable character model (for unapproved applications, always
true
)
characterization_allowed_user
Required: No
Type: 'default' | 'author' | 'everyone'
Default: 'author'
, however, if the application setting "use as avatar" is set to "yes", always set to 'everyone'
- Restrictions on the type of personality allowed for this model
violent_expression
Required: No
Type: 'default' | 'disallow' | 'allow'
Default: 'disallow'
, however, if the application setting "use this model for violent expression" is set to "yes", always set to 'allow'
- Is use of this model for violent expression allowed?
sexual_expression
Required: No
Type: 'default' | 'disallow' | 'allow'
Default: 'disallow'
, however, if the application setting "use this model for sexual expression" is set to "yes", always set to 'allow'
- Is use of this model for sexual expression allowed?
corporate_commercial_use
Required: No
Type: 'default' | 'disallow' | 'allow'
Default: 'disallow'
, however, if the application setting "app type" is set to "corporate app", always set to 'allow'
- Is use of this model for corporate commercial purposes allowed?
personal_commercial_use
Required: No
Type: 'default' | 'disallow' | 'allow'
Default: 'disallow'
, however, the application setting for "commercial use" takes precedent
- Is use of this model for personal commercial purposes allowed?
political_or_religious_usage
Setting: No
Type: 'default' | 'disallow' | 'allow'
Default: 'disallow'
- Is use of this model for political or religious purposes allowed? (Parameter based on VRM PUBLIC LICENSE 1.0)
antisocial_or_hate_usage
Setting: No
Type: 'default' | 'disallow' | 'allow'
Default: 'disallow'
- Is use of this model for antisocial or hate speech purposes allowed? (Parameter based on VRM PUBLIC LICENSE 1.0)
modification
Required: No
Type: 'default' | 'disallow' | 'allow_modification'
Default: 'disallow'
, however, if the application setting "modify model" is set to "yes", always set to 'allow_modification'
- Is modification or redistribution of a modified version of this model allowed?
redistribution
Required: No
Type: 'default' | 'disallow' | 'allow'
Default: 'disallow'
, however, if the application setting "redistribute model" is set to "yes", always set to 'allow'
- Is redistribution of this model allowed?
credit
Required: No
Type: 'default' | 'necessary' | 'unnecessary'
Default: if the application setting "show model credits" is set to "no", then 'unnecessary'
- Are credits necessary for this model?
has_booth_items
Required: No
Type: boolean
Default: false
- Does this model have linked BOOTH items?
booth_part_categories[]
Required: No
Type: array[string]
Default: []
- Specify a category of BOOTH item
Response
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"]
List of character models recommended by VRoid Hub staff
GET: /api/staff_picks
Header
X-Api-Version
Required: YES
- This is the VRoid Hub API version. The current version is version
11
.
Query parameter
max_id
Required: No
Type: string
- The last ID from the character models uploaded. Used for page
count.
Required: No
Type: integer
Default: 20
- Number of character models uploaded in a single request
Response
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"]
Search character models from VRoid Hub
GET: /api/search/character_models
Header
X-Api-Version
Required: YES
- This is the VRoid Hub API version. The current version is version
11
.
Query parameter
keyword
Required: YES
Type: string
- Keyword for searching
search_after[]
Required: No
Type: string
- Used for paging. It is included in the
links.next.href
in the previous response.
count
Required: No
Type: integer
Default: 20
- Number of character models uploaded in a single request
sort
Required: No
Type: string
Default: _score
- The sorting type is specified below.
_score
: order by relevance score.first_published_at
: order by first published time of the character model.
is_downloadable
Required: No
Type: boolean
Default: true
- Determines whether it's a downloadable character model (for unapproved applications, always
true
)
characterization_allowed_user
Required: No
Type: 'default' | 'author' | 'everyone'
Default: 'author'
, however, if the application setting "use as avatar" is set to "yes", always set to 'everyone'
- Restrictions on the type of personality allowed for this model
violent_expression
Required: No
Type: 'default' | 'disallow' | 'allow'
Default: 'disallow'
, however, if the application setting "use this model for violent expression" is set to "yes", always set to 'allow'
- Is use of this model for violent expression allowed?
sexual_expression
Required: No
Type: 'default' | 'disallow' | 'allow'
Default: 'disallow'
, however, if the application setting "use this model for sexual expression" is set to "yes", always set to 'allow'
- Is use of this model for sexual expression allowed?
corporate_commercial_use
Required: No
Type: 'default' | 'disallow' | 'allow'
Default: 'disallow'
, however, if the application setting "app type" is set to "corporate app", always set to 'allow'
- Is use of this model for corporate commercial purposes allowed?
personal_commercial_use
Required: No
Type: 'default' | 'disallow' | 'allow'
Default: 'disallow'
, however, the application setting for "commercial use" takes precedent
- Is use of this model for personal commercial purposes allowed?
political_or_religious_usage
Setting: No
Type: 'default' | 'disallow' | 'allow'
Default: 'disallow'
- Is use of this model for political or religious purposes allowed? (Parameter based on VRM PUBLIC LICENSE 1.0)
antisocial_or_hate_usage
Setting: No
Type: 'default' | 'disallow' | 'allow'
Default: 'disallow'
- Is use of this model for antisocial or hate speech purposes allowed? (Parameter based on VRM PUBLIC LICENSE 1.0)
modification
Required: No
Type: 'default' | 'disallow' | 'allow_modification'
Default: 'disallow'
, however, if the application setting "modify model" is set to "yes", always set to 'allow_modification'
- Is modification or redistribution of a modified version of this model allowed?
redistribution
Required: No
Type: 'default' | 'disallow' | 'allow'
Default: 'disallow'
, however, if the application setting "redistribute model" is set to "yes", always set to 'allow'
- Is redistribution of this model allowed?
credit
Required: No
Type: 'default' | 'necessary' | 'unnecessary'
Default: if the application setting "show model credits" is set to "no", then 'unnecessary'
- Are credits necessary for this model?
has_booth_items
Required: No
Type: boolean
Default: false
- Does this model have linked BOOTH items?
booth_part_categories[]
Required: No
Type: array[string]
Default: []
- Specify a category of BOOTH item
Response
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"]
Detailed information of a character model.
GET: /api/character_models/{id}
Header
X-Api-Version
Required: YES
- This is the VRoid Hub API version. The current version is version
11
.
Response
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"]
Account information for logged-in user.
GET: /api/account
Header
X-Api-Version
Required: YES
- This is the VRoid Hub API version. The current version is version
11
.
Response
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"]