> ## Documentation Index
> Fetch the complete documentation index at: https://docs.docksys.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Alt Detection Lookup

> Scans known login metadata to identify alternate Discord accounts usage for submitted Discord IDs, Roblox IDs, or IP addresses.



## OpenAPI

````yaml /api/openapi.json get /api/v1/public/detections/alt
openapi: 3.1.0
info:
  title: Dock API
  description: >-
    API for managing links between Roblox and Discord accounts, including
    mapping, updating, removing links, and resetting the custom database.
  version: 1.0.0
servers:
  - url: https://api.docksys.xyz
security:
  - bearerAuth: []
paths:
  /api/v1/public/detections/alt:
    get:
      summary: Alt Detection Lookup
      description: >-
        Scans known login metadata to identify alternate Discord accounts usage
        for submitted Discord IDs, Roblox IDs, or IP addresses.
      parameters:
        - name: discordId
          in: query
          required: false
          schema:
            type: string
          description: >-
            Seed Discord ID to investigate. At least one of `discordId`,
            `robloxId`, or `ip` is required.
        - name: guildId
          in: query
          required: false
          schema:
            type: string
          description: >-
            Guild scope required for non-global keys so the bot can confirm
            membership before sharing alt data.
      responses:
        '200':
          description: Successful response with alt matches, risk, and warning metadata.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AltVpnDetectionResponse'
              example:
                status: 200
                data:
                  target:
                    discordIds:
                      - '112233445566778899'
                    robloxIds:
                      - '7744112233'
                    guildId: '998877665544331122'
                  alts:
                    - discordId: '221133445566778800'
                      robloxId: '66442211'
                    - discordId: '556677889900112233'
                      robloxId: null
                  risk:
                    score: 72
                    label: medium
                    breakdown:
                      overall: 72
                      alt: 40
                      vpn: 90
                  summary:
                    totalAlts: 2
                    robloxAltIds:
                      - '66442211'
                  warnings:
                    - >-
                      Failed to decrypt login activity IP for
                      112233445566778899: [REDACTED_IP]
                timestamp: '2025-11-14T18:30:22.192Z'
                version: 3.4.1
                requestsRemaining: 492
                ipRequestsRemaining: 98
        '400':
          description: Missing required parameters or invalid combination.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                status: 400
                error: Provide at least one of discordId, robloxId, or ip
                timestamp: '2025-11-14T18:30:22.192Z'
                version: 3.4.1
                requestsRemaining: 497
                ipRequestsRemaining: 497
        '401':
          description: 'Unauthorized: Missing or invalid Bearer token or API key.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                status: 401
                error: 'Unauthorized: Invalid API key'
                timestamp: '2025-11-14T18:31:03.551Z'
                version: 3.4.1
                requestsRemaining: null
                ipRequestsRemaining: null
        '403':
          description: Premium subscription required or bot missing from guild scope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                premiumRequired:
                  summary: Premium required
                  value:
                    status: 403
                    error: Premium subscription required for ALT detection
                    timestamp: '2025-11-14T18:31:03.551Z'
                    version: 3.4.1
                    requestsRemaining: 497
                    ipRequestsRemaining: 497
                guildScope:
                  summary: Bot missing from guild
                  value:
                    status: 403
                    error: Bot is not in the specified guild
                    timestamp: '2025-11-14T18:31:03.551Z'
                    version: 3.4.1
                    requestsRemaining: 497
                    ipRequestsRemaining: 497
        '429':
          description: >-
            Too Many Requests: Rate limit exceeded for general or IP
            intelligence quotas.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitErrorResponse'
              example:
                status: 429
                error: 'Too Many Requests: Daily request limit of 500 exceeded'
                timestamp: '2025-11-14T18:32:41.551Z'
                version: 3.4.1
                retryAfter: 3600
                requestsRemaining: 0
                ipRequestsRemaining: 0
        '500':
          description: Internal server error or upstream enrichment failure.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                status: 500
                error: Internal server error
                timestamp: '2025-11-14T18:30:22.192Z'
                version: 3.4.1
                requestsRemaining: 492
                ipRequestsRemaining: 492
components:
  schemas:
    AltVpnDetectionResponse:
      type: object
      properties:
        status:
          type: integer
          enum:
            - 200
          description: The HTTP status code of the response.
        data:
          type: object
          properties:
            target:
              type: object
              properties:
                discordIds:
                  type: array
                  items:
                    type: string
                  description: >-
                    Discord IDs that were inspected, including linked records
                    pulled from the user model.
                robloxIds:
                  type: array
                  items:
                    type: string
                  description: Roblox IDs connected during the lookup.
                guildId:
                  type: string
                  nullable: true
                  description: >-
                    Guild scope applied to the lookup. Null when using a global
                    key.
              description: Echoes the identifiers that seeded the detection run.
            alts:
              type: array
              items:
                type: object
                properties:
                  discordId:
                    type: string
                    description: Associated Discord ID.
                  robloxId:
                    type: string
                    nullable: true
                    description: Linked Roblox ID when present.
              description: >-
                Condensed list of alternate accounts that share hashed IPs or
                Roblox links.
            risk:
              type: object
              properties:
                score:
                  type: integer
                  minimum: 0
                  maximum: 100
                  description: Overall risk score (0-100).
                label:
                  type: string
                  description: >-
                    Risk label derived from score thresholds (e.g., low, medium,
                    high).
                breakdown:
                  type: object
                  properties:
                    overall:
                      type: integer
                      description: Composite risk score.
                    alt:
                      type: integer
                      description: Risk contribution from alternate accounts.
                    vpn:
                      type: integer
                      description: Risk contribution from VPN/proxy prevalence.
            summary:
              type: object
              properties:
                totalAlts:
                  type: integer
                  description: Number of distinct alternate Discord IDs returned.
                robloxAltIds:
                  type: array
                  items:
                    type: string
                  description: Roblox IDs tied to the alternate accounts.
            warnings:
              type: array
              items:
                type: string
              description: Operator warnings with literal IPs replaced by [REDACTED_IP].
          required:
            - target
            - alts
            - risk
            - summary
        timestamp:
          type: string
          format: date-time
          description: The timestamp of the response in ISO 8601 format.
        version:
          type: string
          example: 3.4.1
          description: The API version.
        requestsRemaining:
          type: integer
          nullable: true
          description: Number of standard requests remaining in the daily quota.
        ipRequestsRemaining:
          type: integer
          nullable: true
          description: >-
            Remaining IP-linked quota shared across API keys detected on the
            same IP.
    ErrorResponse:
      type: object
      properties:
        status:
          type: integer
          enum:
            - 400
            - 401
            - 403
            - 404
            - 500
          description: The HTTP status code of the error response.
        error:
          type: string
          description: A message describing the error.
        timestamp:
          type: string
          format: date-time
          description: The timestamp of the response in ISO 8601 format.
        version:
          type: string
          example: 1.0.0
          description: The API version.
        requestsRemaining:
          type: integer
          nullable: true
          description: Number of requests remaining in the daily quota.
        ipRequestsRemaining:
          type: integer
          nullable: true
          description: >-
            Remaining IP-linked quota shared across API keys detected on the
            same IP.
    RateLimitErrorResponse:
      type: object
      properties:
        status:
          type: integer
          enum:
            - 429
          description: The HTTP status code of the rate limit error response.
        error:
          type: string
          description: A message describing the rate limit error.
        timestamp:
          type: string
          format: date-time
          description: The timestamp of the response in ISO 8601 format.
        version:
          type: string
          example: 1.0.0
          description: The API version.
        retryAfter:
          type: integer
          description: Seconds until the rate limit resets or the next request can be made.
        requestsRemaining:
          type: integer
          nullable: true
          description: Number of requests remaining in the daily quota.
        ipRequestsRemaining:
          type: integer
          nullable: true
          description: >-
            Remaining IP-linked quota shared across API keys detected on the
            same IP.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````