Skip to content

キャラクターモデル一覧・詳細・アカウント情報の取得

型情報

キャラクターモデル関連の型

typescript
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;
}

ユーザー関連の型

typescript
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;
}

画像関連の型

typescript
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(アバターファイルのバージョン情報)関連の型

typescript
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"]