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

# Validate a pipeline definition

> Validate a pipeline definition without deploying it. Accepts the same body shape as `POST /pipelines`, so a request that passes validation here can be submitted to `POST /pipelines` unchanged. `name` may be provided at the top level or inside `definition.name` (top-level wins if both are present); a missing, malformed, or reserved name is reported as a `{ field: "name" }` entry in `errors` rather than rejected as a bad request.



## OpenAPI

````yaml https://api.goldsky.com/api/v1/docs/openapi.json post /pipelines/validate
openapi: 3.1.0
info:
  title: Goldsky API
  description: >-
    REST API for managing Goldsky resources — pipelines, subgraphs, and Edge
    endpoints. Create, deploy, monitor, and manage them programmatically.


    For guides and reference, see the [Goldsky
    documentation](https://docs.goldsky.com) — including
    [Subgraphs](https://docs.goldsky.com/subgraphs/introduction) and
    [Pipelines](https://docs.goldsky.com/mirror/introduction).


    ## Authentication


    Every request carries an API token as a bearer token:


    ```

    Authorization: Bearer <token>

    ```


    Create one in the [Goldsky
    dashboard](https://app.goldsky.com/dashboard/settings/project) under project
    settings. A token is scoped to the project it was created in, so the project
    is never part of a request path.


    Read operations need the Viewer role; writes need Editor.


    ## Errors


    Errors are [RFC 9457 problem
    details](https://www.rfc-editor.org/rfc/rfc9457) served as
    `application/problem+json`:


    ```json

    {
      "type": "https://api.goldsky.com/api/errors/subgraph-not-found",
      "title": "Subgraph not found",
      "status": 404,
      "detail": "No subgraph named 'my-subgraph' exists in this project.",
      "instance": "/api/v1/subgraphs/my-subgraph"
    }

    ```


    Branch on `type`, not on `title` or `detail` — the URI is stable, the prose
    is not. Every `type` dereferences to a human-readable page describing the
    cause and the fix; the full list lives at
    [api.goldsky.com/api/errors](https://api.goldsky.com/api/errors). Validation
    failures (400) add an `errors` array naming each offending field.


    ## Pagination


    List endpoints that can return unbounded results — pipelines and subgraphs —
    page with `page_size` and `page_token`:


    ```

    GET /api/v1/subgraphs?page_size=50

    GET /api/v1/subgraphs?page_size=50&page_token=<pagination.next_page_token>

    ```


    Keep following `pagination.next_page_token` until it comes back `null`. A
    page can hold fewer than `page_size` items and still have a next page, so
    treat a short page as "keep going", not as the end.
  version: 1.2.0
  contact:
    name: Goldsky Support
    email: support@goldsky.com
    url: https://docs.goldsky.com
servers:
  - url: /api/v1
    description: Current environment
security:
  - BearerAuth: []
tags:
  - name: Pipelines
    x-displayName: Create & manage
    description: >-
      Create, read, and delete pipelines. A pipeline is identified by its name
      within the project.
  - name: Pipeline Authoring
    x-displayName: Validate & preview
    description: >-
      Check a pipeline definition and see what it would produce, before creating
      anything. Neither endpoint touches an existing pipeline.
  - name: Pipeline Lifecycle
    x-displayName: Lifecycle
    description: Pause, resume, and restart a running pipeline.
  - name: Pipeline Status
    x-displayName: Status
    description: Query pipeline runtime status and per-source progress state.
  - name: Pipeline Logs
    x-displayName: Logs
    description: Retrieve pipeline execution logs and error counts.
  - name: Subgraphs
    x-displayName: Browse
    description: >-
      Read subgraphs and their versions. A subgraph is identified by
      `name`/`version`.
  - name: Subgraph Deployments
    x-displayName: Deployments
    description: >-
      Deploy a compiled subgraph bundle as a new version, or remove a deployed
      one.
  - name: Subgraph Tags
    x-displayName: Tags
    description: >-
      Point a stable alias — `production`, say — at a specific version, so
      consumers keep one URL across deploys.
  - name: Subgraph Lifecycle
    x-displayName: Lifecycle
    description: Pause and resume indexing, and update the settings of a deployed version.
  - name: Subgraph Logs
    x-displayName: Logs
    description: Retrieve subgraph indexing logs.
  - name: Subgraph Webhooks
    x-displayName: Webhooks
    description: >-
      Stream row-level changes to a subgraph entity out to a URL. Webhooks are
      project-scoped and each one targets a single entity of a single subgraph
      version.
  - name: Edge Endpoints
    x-displayName: Create & manage
    description: >-
      Create and manage Edge endpoints — RPC and Data — including rate limits
      and allowed domains.
  - name: Edge Lifecycle
    x-displayName: Lifecycle
    description: >-
      Pause and resume an endpoint. A paused endpoint rejects traffic but keeps
      its configuration and key.
  - name: Edge API Keys
    x-displayName: API keys
    description: Reveal the API key an Edge endpoint serves traffic under.
  - name: Edge Metrics
    x-displayName: Metrics
    description: Request volume and error rates for an Edge endpoint.
  - name: Catalogs
    x-displayName: Catalogs
    description: >-
      What Goldsky supports: chains you can index a subgraph on, and the
      networks and datasets an Edge endpoint can be pointed at.
      Unauthenticated-safe reads that never change per project.
paths:
  /pipelines/validate:
    post:
      tags:
        - Pipeline Authoring
      summary: Validate a pipeline definition
      description: >-
        Validate a pipeline definition without deploying it. Accepts the same
        body shape as `POST /pipelines`, so a request that passes validation
        here can be submitted to `POST /pipelines` unchanged. `name` may be
        provided at the top level or inside `definition.name` (top-level wins if
        both are present); a missing, malformed, or reserved name is reported as
        a `{ field: "name" }` entry in `errors` rather than rejected as a bad
        request.
      operationId: validatePipeline
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  description: >-
                    Pipeline name. Only lowercase letters, numbers, and hyphens
                    are allowed. May be provided here or inside
                    `definition.name`.
                  type: string
                resource_size:
                  type: string
                description:
                  type: string
                use_dedicated_ip:
                  type: boolean
                definition:
                  type: object
                  properties:
                    sources:
                      type: object
                      additionalProperties: {}
                    transforms:
                      type: object
                      additionalProperties: {}
                    sinks:
                      type: object
                      additionalProperties: {}
                  required:
                    - sources
                    - transforms
                    - sinks
              required:
                - definition
            examples:
              example1:
                value:
                  name: ethereum-blocks
                  resource_size: s
                  use_dedicated_ip: false
                  description: Streams Ethereum blocks
                  definition:
                    sources:
                      my_source:
                        dataset_name: ethereum.raw_blocks
                        start_at: latest
                        type: dataset
                        version: 1.0.0
                    transforms:
                      my_transform:
                        from: my_source
                        primary_key: id
                        type: handler
                        url: https://handler.com
                    sinks:
                      my_sink:
                        from: my_transform
                        type: blackhole
              example2:
                value:
                  resource_size: s
                  definition:
                    sources:
                      my_source:
                        dataset_name: ethereum.raw_blocks
                        start_at: latest
                        type: dataset
                        version: 1.0.0
                    transforms:
                      my_transform:
                        from: my_source
                        primary_key: id
                        type: handler
                        url: https://handler.com
                    sinks:
                      my_sink:
                        from: my_transform
                        type: blackhole
                    name: ethereum-blocks
        required: true
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  valid:
                    type: boolean
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        field:
                          type: string
                        message:
                          type: string
                      required:
                        - message
                  warnings:
                    type: array
                    items:
                      type: object
                      properties:
                        field:
                          type: string
                        message:
                          type: string
                      required:
                        - message
                required:
                  - valid
                  - errors
                  - warnings
              examples:
                example1:
                  value:
                    valid: true
                    errors: []
                    warnings: []
                example2:
                  value:
                    valid: false
                    errors:
                      - field: name
                        message: A pipeline name is required.
                    warnings: []
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >-
        API token generated from the [Goldsky
        Dashboard](https://app.goldsky.com/dashboard/settings/project). Pass as:
        Authorization: Bearer <token>

````

## Related topics

- [Migrate from Mirror to Turbo](/turbo-pipelines/migrate-from-mirror.md)
- [Decode contract traces in Mirror pipelines](/mirror/guides/decoding-traces.md)
- [Turbo CLI Reference](/turbo-pipelines/cli-reference.md)
- [Live inspect](/turbo-pipelines/live-inspect.md)
- [CLI Reference](/reference/cli.md)
