PromptLayer Request Logging & Tracking API

Logs and tracks LLM requests independent of provider via log-request, associates prompt templates and input variables with a request (track-prompt), and attaches scores (track-score) and custom metadata (track-metadata) to logged requests for monitoring, debugging, and replay.

OpenAPI Specification

promptlayer-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: PromptLayer API
  description: >-
    REST API for PromptLayer, a prompt engineering, prompt management, and LLM
    observability platform. The API logs and tracks LLM requests, manages a
    versioned prompt registry with release labels, ingests OpenTelemetry-style
    spans and traces, and runs evaluations against datasets. All requests are
    authenticated with an `X-API-KEY` header. Note: some legacy tracking
    endpoints are served under the `/rest` path prefix while newer endpoints are
    served at the API root.
  termsOfService: https://www.promptlayer.com/terms-of-service
  contact:
    name: PromptLayer Support
    email: hello@promptlayer.com
  version: '1.0'
servers:
  - url: https://api.promptlayer.com
security:
  - ApiKeyAuth: []
tags:
  - name: Logging & Tracking
    description: Log and track LLM requests, scores, and metadata.
  - name: Prompt Registry
    description: Retrieve and publish versioned prompt templates.
  - name: Evaluations & Datasets
    description: Create, run, and score evaluation reports against datasets.
  - name: Spans & Traces
    description: Ingest spans and manage traces for LLM observability.
paths:
  /log-request:
    post:
      operationId: logRequest
      tags:
        - Logging & Tracking
      summary: Log an LLM request
      description: >-
        Logs a provider-agnostic LLM request to PromptLayer using the Prompt
        Blueprint format for input and output, including timing, parameters,
        token usage, price, tags, and metadata.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LogRequest'
      responses:
        '201':
          description: Request logged
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LogRequestResponse'
        '401':
          description: Unauthorized
        '422':
          description: Validation error
  /rest/track-prompt:
    post:
      operationId: trackPrompt
      tags:
        - Logging & Tracking
      summary: Associate a prompt template with a logged request
      description: >-
        Associates a prompt template (by name, with optional version or release
        label) and its input variables with a previously logged PromptLayer
        request.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TrackPromptRequest'
      responses:
        '200':
          description: Prompt tracked
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessMessage'
        '400':
          description: Bad request
        '401':
          description: Unauthorized
        '422':
          description: Validation error
  /rest/track-score:
    post:
      operationId: trackScore
      tags:
        - Logging & Tracking
      summary: Attach a score to a logged request
      description: Attaches a 0-100 integer score, optionally named, to a logged request.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TrackScoreRequest'
      responses:
        '200':
          description: Score tracked
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessMessage'
        '400':
          description: Bad request
        '401':
          description: Unauthorized
        '422':
          description: Validation error
  /rest/track-metadata:
    post:
      operationId: trackMetadata
      tags:
        - Logging & Tracking
      summary: Attach metadata to a logged request
      description: Attaches a custom key-value metadata dictionary to a logged request.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TrackMetadataRequest'
      responses:
        '200':
          description: Metadata tracked
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessMessage'
        '401':
          description: Unauthorized
        '422':
          description: Validation error
  /prompt-templates/{identifier}:
    post:
      operationId: getPromptTemplate
      tags:
        - Prompt Registry
      summary: Get a prompt template
      description: >-
        Retrieves a prompt template by name or id, resolving an optional version
        or release label and optionally formatting it with provided input
        variables for a given provider and model.
      parameters:
        - name: identifier
          in: path
          required: true
          description: The prompt name or prompt template id.
          schema:
            type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GetPromptTemplateRequest'
      responses:
        '200':
          description: Prompt template
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PromptTemplate'
        '401':
          description: Unauthorized
        '404':
          description: Template not found
  /rest/prompt-templates:
    post:
      operationId: publishPromptTemplate
      tags:
        - Prompt Registry
      summary: Publish a prompt template version
      description: >-
        Creates a new prompt template (or a new version of an existing one),
        optionally assigning release labels and external ids.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublishPromptTemplateRequest'
      responses:
        '200':
          description: Prompt template published
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublishPromptTemplateResponse'
        '401':
          description: Unauthorized
        '409':
          description: External id conflict
        '422':
          description: Validation error
  /evaluations:
    get:
      operationId: listEvaluations
      tags:
        - Evaluations & Datasets
      summary: List evaluation reports
      description: Lists evaluation reports in the workspace.
      parameters:
        - name: workspace_id
          in: query
          required: false
          schema:
            type: integer
        - name: per_page
          in: query
          required: false
          schema:
            type: integer
        - name: page
          in: query
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: A list of evaluation reports
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EvaluationList'
        '401':
          description: Unauthorized
    post:
      operationId: createEvaluation
      tags:
        - Evaluations & Datasets
      summary: Create an evaluation report
      description: Creates a new evaluation report (pipeline) over a dataset.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEvaluationRequest'
      responses:
        '201':
          description: Evaluation report created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Evaluation'
        '401':
          description: Unauthorized
        '422':
          description: Validation error
  /evaluations/{id}:
    get:
      operationId: getEvaluation
      tags:
        - Evaluations & Datasets
      summary: Get an evaluation report
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: An evaluation report
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Evaluation'
        '401':
          description: Unauthorized
        '404':
          description: Not found
  /evaluations/{id}/run:
    post:
      operationId: runEvaluation
      tags:
        - Evaluations & Datasets
      summary: Run an evaluation report
      description: Executes an evaluation report, scoring its rows against the configured columns.
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Evaluation run started
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessMessage'
        '401':
          description: Unauthorized
        '404':
          description: Not found
  /evaluations/{id}/score:
    get:
      operationId: getEvaluationScore
      tags:
        - Evaluations & Datasets
      summary: Get an evaluation report score
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Evaluation score
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EvaluationScore'
        '401':
          description: Unauthorized
        '404':
          description: Not found
  /datasets:
    get:
      operationId: listDatasets
      tags:
        - Evaluations & Datasets
      summary: List datasets
      description: Lists evaluation datasets in the workspace.
      parameters:
        - name: workspace_id
          in: query
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: A list of datasets
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatasetList'
        '401':
          description: Unauthorized
  /spans-bulk:
    post:
      operationId: createSpansBulk
      tags:
        - Spans & Traces
      summary: Ingest spans in bulk
      description: >-
        Atomically ingests a batch of OpenTelemetry-style spans. Optional
        per-span `log_request` payloads create associated request logs. If any
        span fails, the entire batch is rolled back.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SpansBulkRequest'
      responses:
        '201':
          description: Spans ingested
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SpansBulkResponse'
        '401':
          description: Unauthorized
        '422':
          description: Validation error
  /otlp/v1/traces:
    post:
      operationId: ingestOtlpTraces
      tags:
        - Spans & Traces
      summary: Ingest OTLP traces
      description: OpenTelemetry Protocol (OTLP) HTTP endpoint for ingesting traces.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        '200':
          description: Traces accepted
        '401':
          description: Unauthorized
  /traces/{id}:
    get:
      operationId: getTrace
      tags:
        - Spans & Traces
      summary: Get a trace
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: A trace
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Trace'
        '401':
          description: Unauthorized
        '404':
          description: Not found
  /traces/{id}/close:
    post:
      operationId: closeTrace
      tags:
        - Spans & Traces
      summary: Close a trace
      description: Closes an open trace so no further spans can be appended.
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Trace closed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessMessage'
        '401':
          description: Unauthorized
        '404':
          description: Not found
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-KEY
  schemas:
    PromptBlueprint:
      type: object
      description: >-
        Prompt Blueprint payload, either a chat prompt (messages array) or a
        completion prompt (content string). Provider-agnostic representation.
      additionalProperties: true
    LogRequest:
      type: object
      required:
        - provider
        - model
        - input
        - output
        - request_start_time
        - request_end_time
      properties:
        provider:
          type: string
          description: LLM provider name (e.g., openai, anthropic).
        model:
          type: string
          description: Model identifier.
        input:
          $ref: '#/components/schemas/PromptBlueprint'
        output:
          $ref: '#/components/schemas/PromptBlueprint'
        request_start_time:
          type: string
          format: date-time
        request_end_time:
          type: string
          format: date-time
        api_type:
          type: string
          description: API endpoint type (e.g., chat-completions).
        parameters:
          type: object
          additionalProperties: true
          description: Model parameters such as temperature and max_tokens.
        tags:
          type: array
          items:
            type: string
        metadata:
          type: object
          additionalProperties:
            type: string
        status:
          type: string
          enum:
            - SUCCESS
            - WARNING
            - ERROR
          default: SUCCESS
        error_type:
          type: string
        error_message:
          type: string
          maxLength: 1024
        input_tokens:
          type: integer
        output_tokens:
          type: integer
        price:
          type: number
        score:
          type: integer
          minimum: 0
          maximum: 100
    LogRequestResponse:
      type: object
      properties:
        id:
          type: integer
        prompt_version:
          type: object
          nullable: true
          additionalProperties: true
        status:
          type: string
          enum:
            - SUCCESS
            - WARNING
            - ERROR
        error_type:
          type: string
          nullable: true
        error_message:
          type: string
          nullable: true
    TrackPromptRequest:
      type: object
      required:
        - prompt_name
        - request_id
      properties:
        prompt_name:
          type: string
        request_id:
          oneOf:
            - type: integer
            - type: string
        prompt_input_variables:
          type: object
          additionalProperties: true
        version:
          oneOf:
            - type: integer
            - type: string
          nullable: true
        label:
          type: string
    TrackScoreRequest:
      type: object
      required:
        - request_id
        - score
      properties:
        request_id:
          type: integer
        score:
          type: integer
          minimum: 0
          maximum: 100
        name:
          type: string
          default: default
    TrackMetadataRequest:
      type: object
      required:
        - request_id
        - metadata
      properties:
        request_id:
          oneOf:
            - type: integer
            - type: string
        metadata:
          type: object
          additionalProperties: true
    SuccessMessage:
      type: object
      properties:
        success:
          type: boolean
        message:
          type: string
    GetPromptTemplateRequest:
      type: object
      properties:
        version:
          type: integer
          minimum: 1
        label:
          type: string
          description: Release label such as "prod" or "staging".
        provider:
          type: string
          enum:
            - openai
            - anthropic
        input_variables:
          type: object
          additionalProperties:
            type: string
        model:
          type: string
        model_parameter_overrides:
          type: object
          additionalProperties: true
    PromptTemplate:
      type: object
      properties:
        id:
          type: integer
        prompt_name:
          type: string
        prompt_template:
          $ref: '#/components/schemas/PromptBlueprint'
        metadata:
          type: object
          additionalProperties: true
        commit_message:
          type: string
        llm_kwargs:
          type: object
          additionalProperties: true
        version:
          type: integer
    PublishPromptTemplateRequest:
      type: object
      required:
        - prompt_template
        - prompt_version
      properties:
        prompt_template:
          type: object
          required:
            - prompt_name
          properties:
            prompt_name:
              type: string
              minLength: 1
              maxLength: 512
            tags:
              type: array
              items:
                type: string
            folder_id:
              type: integer
            workspace_id:
              type: integer
        prompt_version:
          type: object
          properties:
            prompt_template:
              $ref: '#/components/schemas/PromptBlueprint'
            commit_message:
              type: string
              maxLength: 72
            metadata:
              type: object
              additionalProperties: true
        release_labels:
          type: array
          items:
            type: string
        external_ids:
          type: array
          items:
            type: object
            properties:
              source:
                type: string
              external_id:
                type: string
    PublishPromptTemplateResponse:
      type: object
      properties:
        id:
          type: integer
        prompt_name:
          type: string
        prompt_version_id:
          type: integer
        version_number:
          type: integer
        tags:
          type: array
          items:
            type: string
        release_labels:
          type: array
          items:
            type: string
        prompt_template:
          $ref: '#/components/schemas/PromptBlueprint'
        metadata:
          type: object
          additionalProperties: true
        commit_message:
          type: string
    Evaluation:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        status:
          type: string
        dataset_id:
          type: integer
        workspace_id:
          type: integer
        created_at:
          type: string
          format: date-time
    EvaluationList:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/Evaluation'
        total:
          type: integer
    CreateEvaluationRequest:
      type: object
      required:
        - name
      properties:
        name:
          type: string
        dataset_id:
          type: integer
        workspace_id:
          type: integer
    EvaluationScore:
      type: object
      properties:
        id:
          type: integer
        score:
          type: number
        passed:
          type: integer
        failed:
          type: integer
    Dataset:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        workspace_id:
          type: integer
        row_count:
          type: integer
    DatasetList:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/Dataset'
        total:
          type: integer
    Span:
      type: object
      properties:
        name:
          type: string
        context:
          type: object
          properties:
            trace_id:
              type: string
            span_id:
              type: string
            trace_state:
              type: string
        kind:
          type: string
          enum:
            - SpanKind.CLIENT
            - SpanKind.CONSUMER
            - SpanKind.INTERNAL
            - SpanKind.PRODUCER
            - SpanKind.SERVER
        parent_id:
          type: string
          nullable: true
        start_time:
          type: integer
          description: Start time in nanoseconds.
        end_time:
          type: integer
          description: End time in nanoseconds.
        status:
          type: object
          properties:
            status_code:
              type: string
              enum:
                - StatusCode.OK
                - StatusCode.ERROR
                - StatusCode.UNSET
            description:
              type: string
              nullable: true
        attributes:
          type: object
          additionalProperties: true
        resource:
          type: object
          properties:
            attributes:
              type: object
              additionalProperties: true
            schema_url:
              type: string
        log_request:
          $ref: '#/components/schemas/LogRequest'
    SpansBulkRequest:
      type: object
      required:
        - spans
      properties:
        spans:
          type: array
          items:
            $ref: '#/components/schemas/Span'
        close_after:
          type: boolean
          default: false
    SpansBulkResponse:
      type: object
      properties:
        success:
          type: boolean
        spans:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
              name:
                type: string
              span_id:
                type: string
        request_logs:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
              span_id:
                type: string
        rejected_span_ids:
          type: array
          nullable: true
          items:
            type: string
        rejected_trace_ids:
          type: array
          nullable: true
          items:
            type: string
        rejection_reason:
          type: string
          nullable: true
    Trace:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        spans:
          type: array
          items:
            $ref: '#/components/schemas/Span'
        closed:
          type: boolean