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

# Get test link

> Issues a per-taker one-time magic link for use in embedded test-taker flows. Each call rotates the token — prior links are immediately invalidated. The link is valid for 24 hours from issuance. Optional redirectUri and referenceId are appended as query parameters to the returned URL. May briefly return 409 (test_taker_not_provisioned) right after creating a test taker — retry after a moment.



## OpenAPI

````yaml https://api.neurapulse.com/openapi/v1.json post /projects/{projectId}/testtakers/{id}/test-link
openapi: 3.0.1
info:
  title: api-service | v1
  version: 1.0.0
servers:
  - url: https://api.neurapulse.com
security:
  - ApiKey: []
tags:
  - name: Project Results
  - name: Projects
  - name: Test Takers
  - name: Workspace
paths:
  /projects/{projectId}/testtakers/{id}/test-link:
    post:
      tags:
        - Test Takers
      summary: Get test link
      description: >-
        Issues a per-taker one-time magic link for use in embedded test-taker
        flows. Each call rotates the token — prior links are immediately
        invalidated. The link is valid for 24 hours from issuance. Optional
        redirectUri and referenceId are appended as query parameters to the
        returned URL. May briefly return 409 (test_taker_not_provisioned) right
        after creating a test taker — retry after a moment.
      operationId: GetTestTakerTestLink
      parameters:
        - name: projectId
          in: path
          description: Project Id. Obtain via GET /projects or from the project URL.
          required: true
          schema:
            type: string
            format: uuid
        - name: id
          in: path
          description: The unique identifier of the test taker (ProjectEntry.Id).
          required: true
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TestLinkRequest'
          text/json:
            schema:
              $ref: '#/components/schemas/TestLinkRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/TestLinkRequest'
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/TestLinkResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/TestLinkResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/TestLinkResponse'
        '400':
          description: Bad Request
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '401':
          description: Unauthorized
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '403':
          description: Forbidden
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '404':
          description: Not Found
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '409':
          description: Conflict
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/TestLinkNotReadyResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/TestLinkNotReadyResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/TestLinkNotReadyResponse'
components:
  schemas:
    TestLinkRequest:
      type: object
      properties:
        redirectUri:
          type: string
          nullable: true
        referenceId:
          type: string
          nullable: true
      default: null
      nullable: true
    TestLinkResponse:
      required:
        - url
        - expiresAtUtc
      type: object
      properties:
        url:
          type: string
        expiresAtUtc:
          type: string
    ProblemDetails:
      type: object
      properties:
        type:
          type: string
          nullable: true
        title:
          type: string
          nullable: true
        status:
          type: integer
          format: int32
          nullable: true
        detail:
          type: string
          nullable: true
        instance:
          type: string
          nullable: true
    TestLinkNotReadyResponse:
      required:
        - code
        - message
      type: object
      properties:
        code:
          type: string
        message:
          type: string
  securitySchemes:
    ApiKey:
      type: apiKey
      description: API key generated in the Portal (Workspace Settings → API Keys).
      name: x-api-key
      in: header

````