openapi: 3.1.0
info:
  title: DYO.gg API — Genshin Impact
  version: 1.0.0
  summary: Endpoint Genshin Impact — player showcase, character, weapon, artifact.
servers:
  - url: https://api.dyogg.com
security:
  - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
  schemas:
    GenshinPlayer:
      type: object
      required: [uid, game, nickname, level]
      properties:
        uid: { type: string }
        game: { type: string, enum: [genshin] }
        nickname: { type: string }
        level: { type: integer, minimum: 1, maximum: 60 }
        world_level: { type: integer, minimum: 0, maximum: 9 }
        signature: { type: string, nullable: true }
        region: { type: string, enum: [os_asia, os_euro, os_usa, os_cht] }
        namecard_id: { type: integer, nullable: true }
        profile_picture_url: { type: string, format: uri, nullable: true }
        trust_score:
          type: object
          properties:
            score: { type: integer, minimum: 0, maximum: 100 }
            tier: { type: string, enum: [trusted, neutral, caution, flagged] }
        showcase:
          type: array
          items: { $ref: '#/components/schemas/GenshinShowcaseChar' }
    GenshinShowcaseChar:
      type: object
      required: [avatar_id, name, element, level]
      properties:
        avatar_id: { type: integer, example: 10000098 }
        name: { type: string, example: Flins }
        element: { type: string, enum: [Pyro, Hydro, Electro, Cryo, Anemo, Geo, Dendro] }
        level: { type: integer, minimum: 1, maximum: 100 }
        constellation: { type: integer, minimum: 0, maximum: 6 }
        ascension: { type: integer, minimum: 0, maximum: 6 }
        weapon:
          type: object
          properties:
            id: { type: integer }
            name: { type: string }
            level: { type: integer }
            refinement: { type: integer, minimum: 1, maximum: 5 }
        artifacts:
          type: array
          maxItems: 5
          items:
            type: object
            properties:
              slot: { type: string, enum: [flower, plume, sands, goblet, circlet] }
              set_id: { type: integer }
              level: { type: integer, minimum: 0, maximum: 20 }
              main_stat:
                type: object
                properties:
                  stat: { type: string }
                  value: { type: string }
              sub_stats:
                type: array
                items:
                  type: object
                  properties:
                    stat: { type: string }
                    value: { type: string }
                    rolls: { type: integer, minimum: 1, maximum: 6 }
paths:
  /v1/player/genshin/{uid}:
    get:
      tags: [Player]
      summary: Get Genshin player overview + showcase
      parameters:
        - in: path
          name: uid
          required: true
          schema: { type: string, pattern: '^[0-9]{9,10}$' }
          example: '816973814'
        - in: query
          name: include_detail
          schema: { type: boolean, default: true }
        - in: query
          name: lang
          schema: { type: string, enum: [en, id, ja, zh-cn], default: en }
      responses:
        '200':
          description: Player overview
          content:
            application/json:
              schema:
                type: object
                properties:
                  data: { $ref: '#/components/schemas/GenshinPlayer' }
        '404':
          description: UID tidak ditemukan
  /v1/character/genshin/{avatar_id}:
    get:
      tags: [Character]
      summary: Get Genshin character metadata
      parameters:
        - in: path
          name: avatar_id
          required: true
          schema: { type: integer, example: 10000098 }
      responses:
        '200': { description: OK }
        '404': { description: Character tidak dikenali }
  /v1/weapon/genshin/{weapon_id}:
    get:
      tags: [Weapon]
      summary: Get Genshin weapon metadata
      parameters:
        - in: path
          name: weapon_id
          required: true
          schema: { type: integer, example: 15511 }
      responses:
        '200': { description: OK }
  /v1/artifact/genshin/set/{set_id}:
    get:
      tags: [Artifact]
      summary: Get Genshin artifact set
      parameters:
        - in: path
          name: set_id
          required: true
          schema: { type: integer, example: 15009 }
      responses:
        '200': { description: OK }
