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

# Individual Analysis

> ## Individual Submission Details

Get complete details for a specific submission, including analysis if available.

**What you get:**
- Full submission metadata and timeline
- Complete question context via "course" key with variation-specific content
- Candidate's solutions for all questions
- Analysis scores and commentary (when complete)
- Processing timestamps and current status
- Email delivery confirmations
- Everything needed for hiring decisions

**Course data structure:**
- Questions keyed by ID with complete context
- Includes the specific variation content the candidate received
- Variation letters (A-E) are never exposed for security
- Provides full question details: description, examples, hints, edge cases

**Scorecard structure:**
- 3 personalities evaluate each solution
- Scores range from 15-90 across 5 dimensions
- Detailed commentary explaining the scoring
- Overall summary with strengths and weaknesses




## OpenAPI

````yaml GET /playback/{id}
openapi: 3.0.3
info:
  title: Error Golf API - Where Code Goes to Die
  description: >
    # 🏌️ Error Golf API


    **Error Golf** replaces algorithmic tests with creative coding challenges
    that actually measure problem-solving skills.

    Companies pay $39 per candidate to discover if applicants can think
    creatively or just copy-paste from Stack Overflow.


    ## Business Model

    - **Setup Fee:** $49 one-time fee (because quality costs money)

    - **Per Candidate:** $39 each attempt (cheaper than a decent lunch)

    - **No Subscriptions:** We're not Netflix


    ## Golf Terminology

    - **Round:** Complete test (3 questions, like actual golf but with more
    crying)

    - **Hole:** Individual question (candidates pick 3 from 100 nightmares)

    - **Shot:** Solution attempt (usually involves existential crisis)

    - **Scorecard:** A roast of your code from 3 different personalities


    ## Authentication

    Protected endpoints need JWT Bearer token: `Bearer <your-digital-passport>`


    ## Error Responses

    When things inevitably break:

    ```json

    {
      "error": "something_went_sideways",
      "message": "A helpful explanation of what you did wrong this time"
    }

    ```


    ## Rate Limiting

    - 100 requests/hour (generous, considering your coding skills)

    - Headers tell you when we'll start ignoring you
  version: 1.0.0
  contact:
    name: Error Golf Support (May the odds be ever in your favor)
    url: https://errorgolf.com/support
    email: support@errorgolf.com
  license:
    name: Proprietary (We own this beautiful mess)
    url: https://errorgolf.com/terms
servers:
  - url: https://api.errorgolf.com/v1
    description: Production (where dreams meet reality)
  - url: http://localhost:8080/v1
    description: Local dev (your personal playground)
security: []
tags:
  - name: Health
    description: Is this thing even working?
  - name: Course
    description: Browse the vault of coding nightmares
  - name: Round
    description: Take 3 swings at holes you pick
  - name: Members
    description: Prove you belong here
  - name: Clubhouse
    description: Configure your coding challenge empire
paths:
  /playback/{id}:
    get:
      tags:
        - Clubhouse
      summary: Individual game deep dive
      description: >
        ## Individual Submission Details


        Get complete details for a specific submission, including analysis if
        available.


        **What you get:**

        - Full submission metadata and timeline

        - Complete question context via "course" key with variation-specific
        content

        - Candidate's solutions for all questions

        - Analysis scores and commentary (when complete)

        - Processing timestamps and current status

        - Email delivery confirmations

        - Everything needed for hiring decisions


        **Course data structure:**

        - Questions keyed by ID with complete context

        - Includes the specific variation content the candidate received

        - Variation letters (A-E) are never exposed for security

        - Provides full question details: description, examples, hints, edge
        cases


        **Scorecard structure:**

        - 3 personalities evaluate each solution

        - Scores range from 15-90 across 5 dimensions

        - Detailed commentary explaining the scoring

        - Overall summary with strengths and weaknesses
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            pattern: ^[0-9a-fA-F]{24}$
          description: Submission ID to retrieve
          example: 6865d67ede0cf7e8fd94e4dd
      responses:
        '200':
          description: Submission details retrieved with complete question context
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/Submission'
                  - type: object
                    properties:
                      course:
                        $ref: '#/components/schemas/CourseData'
                      message:
                        type: string
                        description: Optional message from candidate to hiring team
                        example: Hi team, here are my solutions!
                      shots:
                        type: object
                        description: Candidate solutions keyed by question ID
                        additionalProperties:
                          type: object
                          properties:
                            language:
                              type: string
                              description: Solution approach or programming language
                            code:
                              type: string
                              description: The candidate's solution code
                        example:
                          '1':
                            language: human
                            code: >-
                              52-year-old engineer, separation, teenagers mock
                              minivan. Recommendation: Reliable Camaro, payment
                              around alimony, emphasize practicality.
                          '2':
                            language: math
                            code: m=15, v=50000000, r=0.9 → C=45%, V=$22500000, I=5%
                      scorecard:
                        $ref: '#/components/schemas/Scorecard'
        '401':
          $ref: '#/components/responses/TokenDead'
        '404':
          $ref: '#/components/responses/SubmissionNotFound'
        '500':
          $ref: '#/components/responses/ServerExistentialCrisis'
      security:
        - bearerAuth: []
components:
  schemas:
    Submission:
      type: object
      description: Basic submission record
      properties:
        id:
          type: string
          description: Unique submission identifier
          example: 6865d67ede0cf7e8fd94e4dd
        sheet_id:
          type: integer
          description: Question sheet version used
          example: 1750822302
        email:
          type: string
          description: Candidate email address
          example: ac@test.com
        name:
          type: string
          description: Candidate name
          example: Alex
        holes:
          type: array
          items:
            type: integer
          description: Question IDs selected for this round
          example:
            - 1
            - 2
            - 3
        attempt:
          type: integer
          description: Attempt number for this candidate
          example: 1
        status:
          type: string
          enum:
            - draft
            - submitted
            - processing
            - analyzed
          description: Current submission state
        test:
          type: integer
          enum:
            - 0
            - 1
          description: Test flag (0=live/charged, 1=test/free)
        created_at:
          type: string
          format: date-time
          example: '2025-07-03T01:01:50.474Z'
        submitted_at:
          type: string
          format: date-time
          nullable: true
          example: '2025-07-03T01:18:49.446Z'
        processing_started_at:
          type: string
          format: date-time
          nullable: true
          example: '2025-07-04T01:46:09.137Z'
        processing_finished_at:
          type: string
          format: date-time
          nullable: true
          example: '2025-07-04T01:46:27.018Z'
        candidate_emailed_at:
          type: string
          format: date-time
          nullable: true
          description: When results were emailed to candidate
          example: '2025-07-04T01:46:28.087Z'
        company_emailed_at:
          type: string
          format: date-time
          nullable: true
          description: When results were emailed to company
          example: '2025-07-04T01:46:28.076Z'
        webhook_completed_at:
          type: string
          format: date-time
          nullable: true
          description: When webhook was successfully delivered
          example: '2025-07-04T01:46:30.123Z'
    CourseData:
      type: object
      description: Question data keyed by question ID with variation-specific content
      additionalProperties:
        $ref: '#/components/schemas/CourseQuestion'
      example:
        '1':
          id: 1
          title: Midlife Crisis Sports Car Database
          category: intermediate
          difficulty: 5
          description: >-
            A car dealership system specifically targets men experiencing
            existential dread...
          human:
            input_format: Corporate executive crisis with status anxiety
            output_format: Professional image optimization with financial prudence
            examples:
              input: 52-year-old engineer, separation, teenagers mock minivan
              output: Reliable Camaro, payment around alimony, emphasize practicality
          hints:
            - >-
              Engineers think they're too logical for status symbols (they're
              wrong)
            - Lease payments should never exceed therapy costs
        '2':
          id: 2
          title: Viking Raid Optimization Algorithm
          category: intermediate
          difficulty: 6
    Scorecard:
      type: object
      description: Analysis results for all questions
      properties:
        sheet_id:
          type: integer
          description: Question sheet identifier
          example: 1750822302
        holes:
          type: object
          description: Evaluation results keyed by question ID
          example:
            '1':
              first:
                personality: jaded_dev
                quality:
                  score: 70
                  commentary: >-
                    The recommendation is practical, but prioritizes short-term
                    status boosts over long-term financial security.
                length:
                  score: 75
                  commentary: 'Solution length: 222 characters'
                creativity:
                  score: 60
                  commentary: >-
                    The use of 'separation' and 'teenagers mock minivan' as
                    input variables is clever, but the output is surprisingly
                    straightforward.
                ingenuity:
                  score: 75
                  commentary: >-
                    The payment plan structured around alimony is a nice touch,
                    demonstrating an understanding of the customer's financial
                    constraints.
                humor:
                  score: 50
                  commentary: >-
                    The deadpan delivery is appreciated, but the solution lacks
                    real bite or irony.
                correctness:
                  score: 85
                  commentary: >-
                    The recommendation is logically coherent and financially
                    responsible.
                feedback: >-
                  This solution is a decent starting point, but lacks the clever
                  psychological manipulation required to truly succeed in this
                  space.
              second:
                personality: jaded_dev
                quality:
                  score: 80
                  commentary: >-
                    Practical wisdom shines through in the recommendation of a
                    reliable Camaro.
              third:
                personality: jaded_dev
                quality:
                  score: 70
                  commentary: We appreciate the concise, human-centered approach.
          additionalProperties:
            type: object
            description: Scores from multiple personalities (hah!)
            properties:
              first:
                $ref: '#/components/schemas/HoleScore'
              second:
                $ref: '#/components/schemas/HoleScore'
              third:
                $ref: '#/components/schemas/HoleScore'
        summary:
          type: string
          description: Overall evaluation summary
          example: >-
            Analyzed 3 questions with 3 jaded reviewers. Overall: 447/90.
            Strongest: Correctness (81). Weakest: Humor (66). The code has
            survived the gauntlet.
        created_at:
          type: string
          format: date-time
          example: '2025-07-04T01:46:09.137Z'
    CourseQuestion:
      type: object
      description: Individual question with variation-specific content
      properties:
        id:
          type: integer
          description: Question identifier
          example: 1
        title:
          type: string
          description: Question title
          example: Midlife Crisis Sports Car Database
        category:
          type: string
          enum:
            - beginner
            - intermediate
            - expert
          description: Difficulty category
          example: intermediate
        difficulty:
          type: integer
          minimum: 1
          maximum: 10
          description: Pain level rating
          example: 5
        description:
          type: string
          description: Dark humor backstory explaining the coding scenario
          example: >-
            A car dealership system specifically targets men experiencing
            existential dread...
        explanation:
          type: string
          description: Technical explanation of what's being tested
          example: This is a recommendation algorithm with moral guardrails...
        example_solution:
          $ref: '#/components/schemas/ExampleSolution'
        pass_conditions:
          $ref: '#/components/schemas/PassConditions'
        failure_conditions:
          $ref: '#/components/schemas/FailureConditions'
        human:
          $ref: '#/components/schemas/VariationContent'
          description: Natural language format (specific variation content)
        math:
          $ref: '#/components/schemas/VariationContent'
          description: Mathematical notation format (specific variation content)
        chem:
          $ref: '#/components/schemas/VariationContent'
          description: Chemistry notation format (specific variation content)
        physics:
          $ref: '#/components/schemas/VariationContent'
          description: Physics concepts format (specific variation content)
        programming:
          $ref: '#/components/schemas/VariationContent'
          description: Programming language format (specific variation content)
        hints:
          type: array
          items:
            type: string
          description: Helpful clues for solving the problem (from specific variation)
          example:
            - >-
              Engineers think they're too logical for status symbols (they're
              wrong)
            - Lease payments should never exceed therapy costs
        edge_cases:
          type: array
          items:
            type: string
          description: Tricky scenarios to consider (from specific variation)
          example:
            - >-
              Executive drives Tesla (already peak engineer ego, system
              overflow)
            - >-
              Family approval goes positive (check for bribery or Stockholm
              syndrome)
    HoleScore:
      type: object
      description: Individual personality evaluation for one question
      properties:
        personality:
          type: string
          description: Personality that performed this evaluation
          example: jaded_dev
        quality:
          type: object
          description: Code quality evaluation
          properties:
            score:
              type: integer
              minimum: 15
              maximum: 90
              example: 70
            commentary:
              type: string
              example: The solution shows good understanding but lacks depth.
        length:
          type: object
          description: Solution length evaluation
          properties:
            score:
              type: integer
              minimum: 15
              maximum: 90
              example: 75
            commentary:
              type: string
              example: 'Solution length: 222 characters'
        creativity:
          type: object
          description: Creative approach evaluation
          properties:
            score:
              type: integer
              minimum: 15
              maximum: 90
              example: 60
            commentary:
              type: string
              example: Shows some creative thinking but could be more innovative.
        ingenuity:
          type: object
          description: Problem-solving ingenuity evaluation
          properties:
            score:
              type: integer
              minimum: 15
              maximum: 90
              example: 75
            commentary:
              type: string
              example: Demonstrates good problem-solving approach.
        humor:
          type: object
          description: Humor and wit evaluation
          properties:
            score:
              type: integer
              minimum: 15
              maximum: 90
              example: 50
            commentary:
              type: string
              example: Some dry humor present but could be more entertaining.
        correctness:
          type: object
          description: Technical correctness evaluation
          properties:
            score:
              type: integer
              minimum: 15
              maximum: 90
              example: 85
            commentary:
              type: string
              example: Solution is technically sound and logically coherent.
        feedback:
          type: string
          description: Overall detailed feedback for this question
          example: >-
            This solution shows promise but needs more creative flair and
            psychological insight.
    ErrorResponse:
      type: object
      required:
        - error
        - message
      properties:
        error:
          type: string
          description: Machine-readable error identifier
        message:
          type: string
          description: Human-readable error explanation
    ExampleSolution:
      type: object
      description: Sample solutions in different approaches
      properties:
        human:
          $ref: '#/components/schemas/SolutionExample'
        math:
          $ref: '#/components/schemas/SolutionExample'
        chem:
          $ref: '#/components/schemas/SolutionExample'
        physics:
          $ref: '#/components/schemas/SolutionExample'
        programming:
          $ref: '#/components/schemas/ProgrammingExample'
    PassConditions:
      type: object
      properties:
        minimum:
          type: array
          items:
            type: string
          example:
            - Recommends appropriate vehicles based on desperation levels
            - Prevents financial suicide (retirement fund protection)
    FailureConditions:
      type: object
      properties:
        automatic:
          type: array
          items:
            type: string
          example:
            - Recommends Lamborghini to guy making $40k
            - Ignores wife's veto power completely
    VariationContent:
      type: object
      description: Format-specific requirements and examples
      properties:
        input_format:
          type: string
          description: Expected input structure
          example: Customer crisis indicators and financial constraints
        output_format:
          type: string
          description: Expected output structure
          example: Vehicle recommendation with ethical boundaries
        examples:
          $ref: '#/components/schemas/FormatExample'
    SolutionExample:
      type: object
      properties:
        code:
          type: string
          example: Balding + divorce = Corvette. Hair plugs + yoga = BMW.
    ProgrammingExample:
      type: object
      properties:
        language:
          type: string
          example: F#
        code:
          type: string
          example: >-
            let rec(h,d,t)=match h,d
            with|High,true->Corvette|Med,false->Sedan|_->Therapy
    FormatExample:
      type: object
      description: Input/output example for this format
      properties:
        input:
          type: string
          example: 47-year-old, advanced hair loss, recent divorce, liquidated 401k
        output:
          type: string
          example: Certified Corvette, preserve some retirement, no flame decals
        explanation:
          type: string
          description: Optional explanation of the example
  responses:
    TokenDead:
      description: JWT token is invalid or has expired
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error: token_expired
            message: Your authentication token has expired. Please login again.
    SubmissionNotFound:
      description: Submission not found or doesn't belong to your company
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error: submission_not_found
            message: The requested submission could not be found.
    ServerExistentialCrisis:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error: internal_server_error
            message: Something went wrong on our end. We're looking into it.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: JWT token from /token endpoint

````