openapi: 3.1.0
info:
  title: DYO.gg API — Zenless Zone Zero
  version: 1.0.0
  summary: Endpoint ZZZ — agent, w-engine, drive disc, bangboo, mindscape.
servers:
  - url: https://api.dyogg.com
security:
  - bearerAuth: []
components:
  securitySchemes:
    bearerAuth: { type: http, scheme: bearer }
  schemas:
    ZzzElement:
      type: string
      enum: [Physical, Fire, Ice, Electric, Ether]
    ZzzSpecialty:
      type: string
      enum: [Attack, Anomaly, Stun, Support, Defense, Rupture]
    ZzzPlayer:
      type: object
      properties:
        uid: { type: string }
        game: { type: string, enum: [zzz] }
        nickname: { type: string }
        level: { type: integer, minimum: 1, maximum: 60 }
        signature: { type: string, nullable: true }
        profile_picture_url: { type: string, format: uri, nullable: true }
        showcase:
          type: array
          items: { $ref: '#/components/schemas/ZzzShowcaseAgent' }
    ZzzShowcaseAgent:
      type: object
      properties:
        agent_id: { type: integer, example: 1371 }
        name: { type: string, example: Yixuan }
        element: { $ref: '#/components/schemas/ZzzElement' }
        specialty: { $ref: '#/components/schemas/ZzzSpecialty' }
        level: { type: integer, minimum: 1, maximum: 60 }
        mindscape: { type: integer, minimum: 0, maximum: 6 }
        ascension: { type: integer, minimum: 0, maximum: 5 }
        core_skill: { type: string, enum: [A, B, C, D, E, F], nullable: true }
        w_engine:
          type: object
          properties:
            id: { type: integer }
            name: { type: string }
            level: { type: integer }
            upgrade: { type: integer, minimum: 1, maximum: 5 }
        drive_discs:
          type: array
          maxItems: 6
          items:
            type: object
            properties:
              slot: { type: integer, minimum: 1, maximum: 6 }
              set_id: { type: integer }
              level: { type: integer, minimum: 0, maximum: 15 }
        skills:
          type: array
          maxItems: 6
          items:
            type: object
            properties:
              id: { type: string, enum: [basic, special, dash, ultimate, core, assist] }
              level: { type: integer, minimum: 1, maximum: 12 }
paths:
  /v1/player/zzz/{uid}:
    get:
      tags: [Player]
      summary: Get ZZZ player overview
      parameters:
        - in: path
          name: uid
          required: true
          schema: { type: string, pattern: '^[0-9]{9,10}$' }
          example: '1003970424'
      responses:
        '200':
          description: Player
          content:
            application/json:
              schema:
                type: object
                properties:
                  data: { $ref: '#/components/schemas/ZzzPlayer' }
  /v1/agent/zzz/{agent_id}:
    get:
      tags: [Character]
      summary: ZZZ agent metadata
      parameters:
        - in: path
          name: agent_id
          required: true
          schema: { type: integer, example: 1371 }
      responses:
        '200': { description: OK }
  /v1/w-engine/zzz/{w_engine_id}:
    get:
      tags: [Weapon]
      summary: ZZZ w-engine metadata
      parameters:
        - in: path
          name: w_engine_id
          required: true
          schema: { type: integer, example: 14371 }
      responses:
        '200': { description: OK }
  /v1/drive-disc/zzz/set/{suite_id}:
    get:
      tags: [Artifact]
      summary: ZZZ drive disc set
      parameters:
        - in: path
          name: suite_id
          required: true
          schema: { type: integer }
      responses:
        '200': { description: OK }
  /v1/bangboo/zzz/{bangboo_id}:
    get:
      tags: [Character]
      summary: ZZZ bangboo metadata
      parameters:
        - in: path
          name: bangboo_id
          required: true
          schema: { type: integer }
      responses:
        '200': { description: OK }
  /v1/mindscape/zzz/{agent_id}:
    get:
      tags: [Character]
      summary: ZZZ mindscape tree
      parameters:
        - in: path
          name: agent_id
          required: true
          schema: { type: integer }
      responses:
        '200': { description: OK }
