{"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.\n\nFor 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).\n\n## Authentication\n\nEvery request carries an API token as a bearer token:\n\n```\nAuthorization: Bearer <token>\n```\n\nCreate 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.\n\nRead operations need the Viewer role; writes need Editor.\n\n## Errors\n\nErrors are [RFC 9457 problem details](https://www.rfc-editor.org/rfc/rfc9457) served as `application/problem+json`:\n\n```json\n{\n  \"type\": \"https://api.goldsky.com/api/errors/subgraph-not-found\",\n  \"title\": \"Subgraph not found\",\n  \"status\": 404,\n  \"detail\": \"No subgraph named 'my-subgraph' exists in this project.\",\n  \"instance\": \"/api/v1/subgraphs/my-subgraph\"\n}\n```\n\nBranch 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.\n\n## Pagination\n\nList endpoints that can return unbounded results — pipelines and subgraphs — page with `page_size` and `page_token`:\n\n```\nGET /api/v1/subgraphs?page_size=50\nGET /api/v1/subgraphs?page_size=50&page_token=<pagination.next_page_token>\n```\n\nKeep 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"}},"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>"}},"schemas":{}},"paths":{"/pipelines":{"get":{"operationId":"listPipelines","summary":"List pipelines","tags":["Pipelines"],"description":"List all pipelines in the current project, ordered by name. Optionally filter by type. When `pagination.next_page_token` is non-null there are more results: pass it back as `page_token` to fetch the next page.","parameters":[{"schema":{"type":"string"},"in":"query","name":"type","required":false},{"schema":{"minimum":1,"maximum":200,"type":"integer"},"in":"query","name":"page_size","required":false,"description":"Maximum rows to return. Defaults to 50."},{"schema":{"type":"string"},"in":"query","name":"page_token","required":false,"description":"The `pagination.next_page_token` from a previous response. Omit for the first page."},{"schema":{"minimum":1,"maximum":200,"type":"integer"},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string"},"in":"query","name":"pageToken","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["RUNNING"]},{"type":"string","enum":["PAUSED"]},{"type":"string","enum":["RESTARTING"]},{"type":"string","enum":["DEPLOYING"]},{"type":"string","enum":["STOPPED"]},{"type":"string","enum":["FAILED"]},{"type":"string","enum":["SUCCEEDED"]},{"type":"string","enum":["UNKNOWN"]}]},"definition":{"type":"object","properties":{"sources":{"type":"object","additionalProperties":{}},"transforms":{"type":"object","additionalProperties":{}},"sinks":{"type":"object","additionalProperties":{}},"description":{"type":"string"},"resource_size":{"type":"string"},"use_dedicated_ip":{"type":"boolean"},"job":{"type":"boolean"}},"required":["sources","transforms","sinks"]},"resource_size":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"version":{"type":"number"},"project_id":{"type":"string"}},"required":["name","type","status","definition","created_at","updated_at"]}},"pagination":{"type":"object","properties":{"next_page_token":{"anyOf":[{"type":"string"},{"type":"null"}]},"page_size":{"type":"number"}},"required":["next_page_token","page_size"]}},"required":["data","pagination"]}}}}}},"post":{"operationId":"createPipeline","summary":"Create a pipeline","tags":["Pipelines"],"description":"Create and deploy a new turbo pipeline. The pipeline name must be unique within the project. `name` may be provided at the top level or inside `definition.name` (top-level wins if both are present); at least one is required.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"minLength":1,"maxLength":50,"pattern":"^[a-z0-9-]{1,50}$","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"]},"example":{"name":"ethereum-blocks","resource_size":"s","use_dedicated_ip":false,"job":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"}}}}}},"required":true},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["RUNNING"]},{"type":"string","enum":["PAUSED"]},{"type":"string","enum":["RESTARTING"]},{"type":"string","enum":["DEPLOYING"]},{"type":"string","enum":["STOPPED"]},{"type":"string","enum":["FAILED"]},{"type":"string","enum":["SUCCEEDED"]},{"type":"string","enum":["UNKNOWN"]}]},"definition":{"type":"object","properties":{"sources":{"type":"object","additionalProperties":{}},"transforms":{"type":"object","additionalProperties":{}},"sinks":{"type":"object","additionalProperties":{}},"description":{"type":"string"},"resource_size":{"type":"string"},"use_dedicated_ip":{"type":"boolean"},"job":{"type":"boolean"}},"required":["sources","transforms","sinks"]},"resource_size":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"version":{"type":"number"},"project_id":{"type":"string"}},"required":["name","type","status","definition","created_at","updated_at"]}}}}}}},"/pipelines/{name}":{"get":{"operationId":"getPipeline","summary":"Get a pipeline","tags":["Pipelines"],"description":"Get the details of a specific pipeline by name.","parameters":[{"schema":{"type":"string"},"in":"path","name":"name","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["RUNNING"]},{"type":"string","enum":["PAUSED"]},{"type":"string","enum":["RESTARTING"]},{"type":"string","enum":["DEPLOYING"]},{"type":"string","enum":["STOPPED"]},{"type":"string","enum":["FAILED"]},{"type":"string","enum":["SUCCEEDED"]},{"type":"string","enum":["UNKNOWN"]}]},"definition":{"type":"object","properties":{"sources":{"type":"object","additionalProperties":{}},"transforms":{"type":"object","additionalProperties":{}},"sinks":{"type":"object","additionalProperties":{}},"description":{"type":"string"},"resource_size":{"type":"string"},"use_dedicated_ip":{"type":"boolean"},"job":{"type":"boolean"}},"required":["sources","transforms","sinks"]},"resource_size":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"version":{"type":"number"},"project_id":{"type":"string"}},"required":["name","type","status","definition","created_at","updated_at"]}}}}}},"delete":{"operationId":"deletePipeline","summary":"Delete a pipeline","tags":["Pipelines"],"description":"Delete a pipeline by name. This action cannot be undone.","parameters":[{"schema":{"type":"string"},"in":"path","name":"name","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/pipelines/validate":{"post":{"operationId":"validatePipeline","summary":"Validate a pipeline definition","tags":["Pipeline Authoring"],"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.","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":[]}}}}}}}}},"/pipelines/preview":{"post":{"operationId":"previewPipeline","summary":"Preview a pipeline","tags":["Pipeline Authoring"],"description":"Deploy an ephemeral preview of a pipeline with all sinks replaced by a blackhole. The preview is automatically deleted after the TTL expires.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"definition":{"type":"object","properties":{"sources":{"type":"object","additionalProperties":{}},"transforms":{"type":"object","additionalProperties":{}},"sinks":{"type":"object","additionalProperties":{}}},"required":["sources","transforms","sinks"]},"ttl_seconds":{"minimum":1,"maximum":600,"type":"number"}},"required":["definition"]}}},"required":true},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"pipeline_name":{"type":"string"},"ttl_seconds":{"type":"number"},"expires_at":{"format":"date-time","type":"string"}},"required":["pipeline_name","ttl_seconds","expires_at"]}}}}}}},"/pipelines/{name}/pause":{"put":{"operationId":"pausePipeline","summary":"Pause a pipeline","tags":["Pipeline Lifecycle"],"description":"Pause a running pipeline. Can be resumed later.","parameters":[{"schema":{"type":"string"},"in":"path","name":"name","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/pipelines/{name}/resume":{"put":{"operationId":"resumePipeline","summary":"Resume a pipeline","tags":["Pipeline Lifecycle"],"description":"Resume a paused pipeline.","parameters":[{"schema":{"type":"string"},"in":"path","name":"name","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/pipelines/{name}/restart":{"put":{"operationId":"restartPipeline","summary":"Restart a pipeline","tags":["Pipeline Lifecycle"],"description":"Restart a pipeline. Optionally clear state to start fresh.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"clearState":{"default":false,"type":"boolean"}}}}}},"parameters":[{"schema":{"type":"string"},"in":"path","name":"name","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/pipelines/{name}/logs":{"get":{"operationId":"getPipelineLogs","summary":"Get pipeline logs","tags":["Pipeline Logs"],"description":"Retrieve execution logs for a pipeline. Supports cursor-based pagination and filtering.","parameters":[{"schema":{"type":"string"},"in":"query","name":"logLevels","required":false},{"schema":{"type":"number"},"in":"query","name":"cursor","required":false},{"schema":{"type":"number"},"in":"query","name":"after","required":false},{"schema":{"type":"string"},"in":"query","name":"search","required":false},{"schema":{"anyOf":[{"type":"string","enum":["asc"]},{"type":"string","enum":["desc"]}]},"in":"query","name":"direction","required":false},{"schema":{"type":"string"},"in":"path","name":"name","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"timestamp":{"type":"number"},"level":{"type":"string"}},"required":["text","timestamp","level"]}},"cursor":{"type":"number"}},"required":["results"]}},"required":["data"]}}}}}}},"/pipelines/{name}/logs/error-count":{"get":{"operationId":"getPipelineErrorCount","summary":"Get pipeline error count","tags":["Pipeline Logs"],"description":"Get the number of error-level log entries for a pipeline within a configurable time window (default: 6 hours, max: 7 days).","parameters":[{"schema":{"minimum":1,"maximum":168,"default":6,"type":"integer"},"in":"query","name":"since_hours","required":false},{"schema":{"type":"string"},"in":"path","name":"name","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"error_count":{"type":"number"}},"required":["error_count"]}},"required":["data"]}}}}}}},"/pipelines/{name}/status":{"get":{"operationId":"getPipelineStatus","summary":"Get pipeline status","tags":["Pipeline Status"],"description":"Get the current runtime status of a pipeline.","parameters":[{"schema":{"type":"string"},"in":"path","name":"name","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"status":{"anyOf":[{"type":"string","enum":["RUNNING"]},{"type":"string","enum":["PAUSED"]},{"type":"string","enum":["RESTARTING"]},{"type":"string","enum":["DEPLOYING"]},{"type":"string","enum":["STOPPED"]},{"type":"string","enum":["FAILED"]},{"type":"string","enum":["SUCCEEDED"]},{"type":"string","enum":["UNKNOWN"]}]},"errors":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}},"required":["name","status","errors"]}}}}}}},"/pipelines/{name}/state":{"get":{"operationId":"getPipelineState","summary":"Get pipeline state","tags":["Pipeline Status"],"description":"Get the internal state information of a pipeline. This endpoint proxies to the upstream Streamling API.","parameters":[{"schema":{"type":"string"},"in":"path","name":"name","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/subgraphs":{"get":{"operationId":"listSubgraphs","summary":"List subgraphs","tags":["Subgraphs"],"description":"List all subgraphs in the current project, ordered by name then version. When `pagination.next_page_token` is non-null there are more results: pass it back as `page_token` to fetch the next page. A page can contain fewer than `page_size` items and still have a next page.","parameters":[{"schema":{"minimum":1,"maximum":200,"type":"integer"},"in":"query","name":"page_size","required":false,"description":"Maximum rows to return. Defaults to 50."},{"schema":{"type":"string"},"in":"query","name":"page_token","required":false,"description":"The `pagination.next_page_token` from a previous response. Omit for the first page."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"tag":{"type":"object","properties":{"target_version":{"type":"string"}}},"status":{"anyOf":[{"type":"string","enum":["ACTIVE"]},{"type":"string","enum":["PAUSED"]}]},"network":{"type":"string"},"health":{"anyOf":[{"type":"string","enum":["HEALTHY"]},{"type":"string","enum":["UNHEALTHY"]},{"type":"string","enum":["FAILED"]},{"type":"string","enum":["UNKNOWN"]}]},"synced":{"type":"boolean"},"graphql_endpoint":{"type":"string"},"private_graphql_endpoint":{"type":"string"},"public_endpoint_enabled":{"type":"boolean"},"private_endpoint_enabled":{"type":"boolean"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"deployments":{"type":"array","items":{"type":"object","properties":{"deployment_id":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"health":{"anyOf":[{"type":"string","enum":["HEALTHY"]},{"type":"string","enum":["UNHEALTHY"]},{"type":"string","enum":["FAILED"]},{"type":"string","enum":["UNKNOWN"]}]},"synced":{"type":"boolean"},"fatal_error":{"anyOf":[{"type":"string"},{"type":"null"}]},"non_fatal_errors":{"type":"array","items":{"type":"string"}},"indexing_progress":{"type":"object","properties":{"network":{"type":"string"},"progress_percent":{"type":"number"},"chain_head_block":{"type":"number"},"deployment_head_block":{"type":"number"},"deployment_start_block":{"type":"number"},"synced":{"type":"boolean"}},"required":["network","progress_percent","chain_head_block","deployment_head_block","deployment_start_block","synced"]}},"required":["deployment_id","created_at","health","synced","fatal_error","non_fatal_errors"]}}},"required":["name","version","status","network","health","synced","graphql_endpoint","private_graphql_endpoint","public_endpoint_enabled","private_endpoint_enabled","description","deployments"]}},"pagination":{"type":"object","properties":{"next_page_token":{"anyOf":[{"type":"string"},{"type":"null"}]},"page_size":{"type":"number"}},"required":["next_page_token","page_size"]}},"required":["data","pagination"]}}}}}}},"/subgraphs/{name}":{"get":{"operationId":"getSubgraph","summary":"Get a subgraph","tags":["Subgraphs"],"description":"Get all tags and versions of a subgraph by name.","parameters":[{"schema":{"pattern":"^[a-zA-Z][\\w-]*$","type":"string"},"in":"path","name":"name","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"tag":{"type":"object","properties":{"target_version":{"type":"string"}}},"status":{"anyOf":[{"type":"string","enum":["ACTIVE"]},{"type":"string","enum":["PAUSED"]}]},"network":{"type":"string"},"health":{"anyOf":[{"type":"string","enum":["HEALTHY"]},{"type":"string","enum":["UNHEALTHY"]},{"type":"string","enum":["FAILED"]},{"type":"string","enum":["UNKNOWN"]}]},"synced":{"type":"boolean"},"graphql_endpoint":{"type":"string"},"private_graphql_endpoint":{"type":"string"},"public_endpoint_enabled":{"type":"boolean"},"private_endpoint_enabled":{"type":"boolean"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"deployments":{"type":"array","items":{"type":"object","properties":{"deployment_id":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"health":{"anyOf":[{"type":"string","enum":["HEALTHY"]},{"type":"string","enum":["UNHEALTHY"]},{"type":"string","enum":["FAILED"]},{"type":"string","enum":["UNKNOWN"]}]},"synced":{"type":"boolean"},"fatal_error":{"anyOf":[{"type":"string"},{"type":"null"}]},"non_fatal_errors":{"type":"array","items":{"type":"string"}},"indexing_progress":{"type":"object","properties":{"network":{"type":"string"},"progress_percent":{"type":"number"},"chain_head_block":{"type":"number"},"deployment_head_block":{"type":"number"},"deployment_start_block":{"type":"number"},"synced":{"type":"boolean"}},"required":["network","progress_percent","chain_head_block","deployment_head_block","deployment_start_block","synced"]}},"required":["deployment_id","created_at","health","synced","fatal_error","non_fatal_errors"]}}},"required":["name","version","status","network","health","synced","graphql_endpoint","private_graphql_endpoint","public_endpoint_enabled","private_endpoint_enabled","description","deployments"]}},"pagination":{"type":"object","properties":{"next_page_token":{"anyOf":[{"type":"string"},{"type":"null"}]},"page_size":{"type":"number"}},"required":["next_page_token","page_size"]}},"required":["data","pagination"]}}}}}}},"/subgraphs/supported-chains":{"get":{"operationId":"listSubgraphChains","summary":"List supported chains","tags":["Catalogs"],"description":"List the chains available for subgraph deployment.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"supported_chains":{"type":"array","items":{"type":"string"}}},"required":["supported_chains"]}},"required":["data"]}}}}}}},"/subgraphs/{name}/{version}":{"get":{"operationId":"getSubgraphVersion","summary":"Get a subgraph version","tags":["Subgraphs"],"description":"Get a single subgraph tag or deployed version.","parameters":[{"schema":{"pattern":"^[a-zA-Z][\\w-]*$","type":"string"},"in":"path","name":"name","required":true},{"schema":{"pattern":"^[a-zA-Z0-9][\\w+.-]*$","type":"string"},"in":"path","name":"version","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"tag":{"type":"object","properties":{"target_version":{"type":"string"}}},"status":{"anyOf":[{"type":"string","enum":["ACTIVE"]},{"type":"string","enum":["PAUSED"]}]},"network":{"type":"string"},"health":{"anyOf":[{"type":"string","enum":["HEALTHY"]},{"type":"string","enum":["UNHEALTHY"]},{"type":"string","enum":["FAILED"]},{"type":"string","enum":["UNKNOWN"]}]},"synced":{"type":"boolean"},"graphql_endpoint":{"type":"string"},"private_graphql_endpoint":{"type":"string"},"public_endpoint_enabled":{"type":"boolean"},"private_endpoint_enabled":{"type":"boolean"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"deployments":{"type":"array","items":{"type":"object","properties":{"deployment_id":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"health":{"anyOf":[{"type":"string","enum":["HEALTHY"]},{"type":"string","enum":["UNHEALTHY"]},{"type":"string","enum":["FAILED"]},{"type":"string","enum":["UNKNOWN"]}]},"synced":{"type":"boolean"},"fatal_error":{"anyOf":[{"type":"string"},{"type":"null"}]},"non_fatal_errors":{"type":"array","items":{"type":"string"}},"indexing_progress":{"type":"object","properties":{"network":{"type":"string"},"progress_percent":{"type":"number"},"chain_head_block":{"type":"number"},"deployment_head_block":{"type":"number"},"deployment_start_block":{"type":"number"},"synced":{"type":"boolean"}},"required":["network","progress_percent","chain_head_block","deployment_head_block","deployment_start_block","synced"]}},"required":["deployment_id","created_at","health","synced","fatal_error","non_fatal_errors"]}}},"required":["name","version","status","network","health","synced","graphql_endpoint","private_graphql_endpoint","public_endpoint_enabled","private_endpoint_enabled","description","deployments"]}},"pagination":{"type":"object","properties":{"next_page_token":{"anyOf":[{"type":"string"},{"type":"null"}]},"page_size":{"type":"number"}},"required":["next_page_token","page_size"]}},"required":["data","pagination"]}}}}}},"patch":{"operationId":"updateSubgraphVersion","summary":"Update a subgraph version","tags":["Subgraph Lifecycle"],"description":"Enable or disable the public/private GraphQL endpoints and set the description of a subgraph tag or deployed version. Only the fields you send are changed.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"public_endpoint_enabled":{"type":"boolean"},"private_endpoint_enabled":{"type":"boolean"},"description":{"maxLength":500,"type":"string"}}}}}},"parameters":[{"schema":{"pattern":"^[a-zA-Z][\\w-]*$","type":"string"},"in":"path","name":"name","required":true},{"schema":{"pattern":"^[a-zA-Z0-9][\\w+.-]*$","type":"string"},"in":"path","name":"version","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"tag":{"type":"object","properties":{"target_version":{"type":"string"}}},"status":{"anyOf":[{"type":"string","enum":["ACTIVE"]},{"type":"string","enum":["PAUSED"]}]},"network":{"type":"string"},"health":{"anyOf":[{"type":"string","enum":["HEALTHY"]},{"type":"string","enum":["UNHEALTHY"]},{"type":"string","enum":["FAILED"]},{"type":"string","enum":["UNKNOWN"]}]},"synced":{"type":"boolean"},"graphql_endpoint":{"type":"string"},"private_graphql_endpoint":{"type":"string"},"public_endpoint_enabled":{"type":"boolean"},"private_endpoint_enabled":{"type":"boolean"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"deployments":{"type":"array","items":{"type":"object","properties":{"deployment_id":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"health":{"anyOf":[{"type":"string","enum":["HEALTHY"]},{"type":"string","enum":["UNHEALTHY"]},{"type":"string","enum":["FAILED"]},{"type":"string","enum":["UNKNOWN"]}]},"synced":{"type":"boolean"},"fatal_error":{"anyOf":[{"type":"string"},{"type":"null"}]},"non_fatal_errors":{"type":"array","items":{"type":"string"}},"indexing_progress":{"type":"object","properties":{"network":{"type":"string"},"progress_percent":{"type":"number"},"chain_head_block":{"type":"number"},"deployment_head_block":{"type":"number"},"deployment_start_block":{"type":"number"},"synced":{"type":"boolean"}},"required":["network","progress_percent","chain_head_block","deployment_head_block","deployment_start_block","synced"]}},"required":["deployment_id","created_at","health","synced","fatal_error","non_fatal_errors"]}}},"required":["name","version","status","network","health","synced","graphql_endpoint","private_graphql_endpoint","public_endpoint_enabled","private_endpoint_enabled","description","deployments"]}},"required":["data"]}}}}}}},"/subgraphs/{name}/{version}/logs":{"get":{"operationId":"getSubgraphLogs","summary":"Get subgraph logs","tags":["Subgraph Logs"],"description":"Retrieve indexing logs for a subgraph version (cursor-paginated).","parameters":[{"schema":{"type":"number"},"in":"query","name":"cursor","required":false},{"schema":{"type":"number"},"in":"query","name":"after","required":false},{"schema":{"anyOf":[{"type":"string","enum":["asc"]},{"type":"string","enum":["desc"]}]},"in":"query","name":"direction","required":false},{"schema":{"type":"string"},"in":"query","name":"search","required":false},{"schema":{"type":"string"},"in":"query","name":"log_level","required":false},{"schema":{"type":"string"},"in":"query","name":"log_levels","required":false},{"schema":{"pattern":"^[a-zA-Z][\\w-]*$","type":"string"},"in":"path","name":"name","required":true},{"schema":{"pattern":"^[a-zA-Z0-9][\\w+.-]*$","type":"string"},"in":"path","name":"version","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"timestamp":{"type":"number"},"level":{"type":"string"}},"required":["text","timestamp","level"]}},"cursor":{"type":"number"}},"required":["results"]}},"required":["data"]}}}}}}},"/subgraphs/{name}/{version}/pause":{"put":{"operationId":"pauseSubgraph","summary":"Pause a subgraph","tags":["Subgraph Lifecycle"],"description":"Pause indexing for a deployed subgraph version. Can be resumed later. `version` must be a deployed version label, not a tag name — a tag is a moving pointer, so pause it by the version it targets.","parameters":[{"schema":{"pattern":"^[a-zA-Z][\\w-]*$","type":"string"},"in":"path","name":"name","required":true},{"schema":{"pattern":"^[a-zA-Z0-9][\\w+.-]*$","type":"string"},"in":"path","name":"version","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/subgraphs/{name}/{version}/resume":{"put":{"operationId":"resumeSubgraph","summary":"Resume a subgraph","tags":["Subgraph Lifecycle"],"description":"Resume indexing for a paused subgraph version. `version` must be a deployed version label, not a tag name.","parameters":[{"schema":{"pattern":"^[a-zA-Z][\\w-]*$","type":"string"},"in":"path","name":"name","required":true},{"schema":{"pattern":"^[a-zA-Z0-9][\\w+.-]*$","type":"string"},"in":"path","name":"version","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/subgraphs/{name}/tags/{version}":{"put":{"operationId":"setSubgraphTag","summary":"Create or move a subgraph tag","tags":["Subgraph Tags"],"description":"Point a tag at a deployed subgraph version, creating the tag if it does not exist yet.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"target_version":{"pattern":"^[a-zA-Z0-9][\\w+.-]*$","description":"The deployed version the tag should point at.","type":"string","example":"1.0.0"}},"required":["target_version"]}}},"required":true},"parameters":[{"schema":{"pattern":"^[a-zA-Z][\\w-]*$","type":"string"},"in":"path","name":"name","required":true},{"schema":{"pattern":"^[a-zA-Z0-9][\\w+.-]*$","type":"string"},"in":"path","name":"version","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"tag":{"type":"object","properties":{"target_version":{"type":"string"}}},"status":{"anyOf":[{"type":"string","enum":["ACTIVE"]},{"type":"string","enum":["PAUSED"]}]},"network":{"type":"string"},"health":{"anyOf":[{"type":"string","enum":["HEALTHY"]},{"type":"string","enum":["UNHEALTHY"]},{"type":"string","enum":["FAILED"]},{"type":"string","enum":["UNKNOWN"]}]},"synced":{"type":"boolean"},"graphql_endpoint":{"type":"string"},"private_graphql_endpoint":{"type":"string"},"public_endpoint_enabled":{"type":"boolean"},"private_endpoint_enabled":{"type":"boolean"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"deployments":{"type":"array","items":{"type":"object","properties":{"deployment_id":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"health":{"anyOf":[{"type":"string","enum":["HEALTHY"]},{"type":"string","enum":["UNHEALTHY"]},{"type":"string","enum":["FAILED"]},{"type":"string","enum":["UNKNOWN"]}]},"synced":{"type":"boolean"},"fatal_error":{"anyOf":[{"type":"string"},{"type":"null"}]},"non_fatal_errors":{"type":"array","items":{"type":"string"}},"indexing_progress":{"type":"object","properties":{"network":{"type":"string"},"progress_percent":{"type":"number"},"chain_head_block":{"type":"number"},"deployment_head_block":{"type":"number"},"deployment_start_block":{"type":"number"},"synced":{"type":"boolean"}},"required":["network","progress_percent","chain_head_block","deployment_head_block","deployment_start_block","synced"]}},"required":["deployment_id","created_at","health","synced","fatal_error","non_fatal_errors"]}}},"required":["name","version","status","network","health","synced","graphql_endpoint","private_graphql_endpoint","public_endpoint_enabled","private_endpoint_enabled","description","deployments"]}},"required":["data"]}}}}}},"delete":{"operationId":"deleteSubgraphTag","summary":"Delete a subgraph tag","tags":["Subgraph Tags"],"description":"Delete a tag. The deployed version the tag pointed at is left untouched.","parameters":[{"schema":{"pattern":"^[a-zA-Z][\\w-]*$","type":"string"},"in":"path","name":"name","required":true},{"schema":{"pattern":"^[a-zA-Z0-9][\\w+.-]*$","type":"string"},"in":"path","name":"version","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/subgraphs/{name}/deployments/{version}":{"delete":{"operationId":"deleteSubgraphDeployment","summary":"Delete a subgraph deployment","tags":["Subgraph Deployments"],"description":"Delete a deployed subgraph version. Fails with 422 while the deployment is still referenced by a tag, pipeline or webhook.","parameters":[{"schema":{"pattern":"^[a-zA-Z][\\w-]*$","type":"string"},"in":"path","name":"name","required":true},{"schema":{"pattern":"^[a-zA-Z0-9][\\w+.-]*$","type":"string"},"in":"path","name":"version","required":true}],"responses":{"200":{"description":"Default Response"}}},"put":{"operationId":"deploySubgraph","summary":"Deploy a subgraph","tags":["Subgraph Deployments"],"description":"Deploy a compiled subgraph bundle as `name`/`version`.\n\nSend `multipart/form-data` with a `bundle` file part — a zip of your `graph build` output. Bundles are limited to 50 MB compressed and 100 MB extracted.\n\n\nExample: `curl -X PUT -H \"authorization: Bearer $GOLDSKY_API_KEY\" -F bundle=@build.zip -F description=\"My subgraph\" https://api.goldsky.com/api/v1/subgraphs/my-subgraph/deployments/1.0.0`","requestBody":{"content":{"multipart/form-data":{"schema":{"description":"Send each option as an ordinary `multipart/form-data` field, e.g. `-F overwrite=0`. Fields appear below as `{ value }` because that is how a form field looks once parsed.","type":"object","properties":{"bundle":{"description":"Zip of the compiled subgraph build directory (`graph build` output), sent as a file part.","type":"object","properties":{"encoding":{"type":"string"},"filename":{"type":"string"},"mimetype":{"type":"string"}},"required":["encoding","filename","mimetype"]},"overwrite":{"description":"Deprecated. Send \"0\" or omit it — \"1\" is rejected. To replace a version, delete it and deploy again, or move a tag to it.","type":"object","properties":{"value":{"pattern":"^[01]$","type":"string"}},"required":["value"]},"remove_graft":{"description":"Set to \"1\" to strip the graft from the manifest before deploying.","type":"object","properties":{"value":{"pattern":"^[01]$","type":"string"}},"required":["value"]},"skip_graft_validation":{"description":"Set to \"1\" to skip validation of the graft base subgraph.","type":"object","properties":{"value":{"pattern":"^[01]$","type":"string"}},"required":["value"]},"start_block":{"description":"Block number to start indexing from.","type":"object","properties":{"value":{"pattern":"^[0-9]+$","type":"string"}},"required":["value"]},"graft_from":{"description":"`name/version` of an existing subgraph in this project to graft from.","type":"object","properties":{"value":{"type":"string"}},"required":["value"]},"description":{"description":"Human-readable description (max 500 characters).","type":"object","properties":{"value":{"maxLength":500,"type":"string"}},"required":["value"]},"graph_node_shard":{"description":"Advanced: pin the deployment to a specific indexing shard. Leave this unset unless Goldsky support asked you to set it.","type":"object","properties":{"value":{"type":"string"}},"required":["value"]}}},"example":{"bundle":{"encoding":"7bit","filename":"bundle.zip","mimetype":"application/zip"},"overwrite":{"value":"0"},"description":{"value":"My subgraph"}}}},"description":"Send each option as an ordinary `multipart/form-data` field, e.g. `-F overwrite=0`. Fields appear below as `{ value }` because that is how a form field looks once parsed."},"parameters":[{"schema":{"pattern":"^[a-zA-Z][\\w-]*$","type":"string"},"in":"path","name":"name","required":true},{"schema":{"pattern":"^[a-zA-Z0-9][\\w+.-]*$","type":"string"},"in":"path","name":"version","required":true}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"tag":{"type":"object","properties":{"target_version":{"type":"string"}}},"status":{"anyOf":[{"type":"string","enum":["ACTIVE"]},{"type":"string","enum":["PAUSED"]}]},"network":{"type":"string"},"health":{"anyOf":[{"type":"string","enum":["HEALTHY"]},{"type":"string","enum":["UNHEALTHY"]},{"type":"string","enum":["FAILED"]},{"type":"string","enum":["UNKNOWN"]}]},"synced":{"type":"boolean"},"graphql_endpoint":{"type":"string"},"private_graphql_endpoint":{"type":"string"},"public_endpoint_enabled":{"type":"boolean"},"private_endpoint_enabled":{"type":"boolean"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"deployments":{"type":"array","items":{"type":"object","properties":{"deployment_id":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"health":{"anyOf":[{"type":"string","enum":["HEALTHY"]},{"type":"string","enum":["UNHEALTHY"]},{"type":"string","enum":["FAILED"]},{"type":"string","enum":["UNKNOWN"]}]},"synced":{"type":"boolean"},"fatal_error":{"anyOf":[{"type":"string"},{"type":"null"}]},"non_fatal_errors":{"type":"array","items":{"type":"string"}},"indexing_progress":{"type":"object","properties":{"network":{"type":"string"},"progress_percent":{"type":"number"},"chain_head_block":{"type":"number"},"deployment_head_block":{"type":"number"},"deployment_start_block":{"type":"number"},"synced":{"type":"boolean"}},"required":["network","progress_percent","chain_head_block","deployment_head_block","deployment_start_block","synced"]}},"required":["deployment_id","created_at","health","synced","fatal_error","non_fatal_errors"]}}},"required":["name","version","status","network","health","synced","graphql_endpoint","private_graphql_endpoint","public_endpoint_enabled","private_endpoint_enabled","description","deployments"]}}}}}}},"/subgraphs/webhooks":{"get":{"operationId":"listWebhooks","summary":"List webhooks","tags":["Subgraph Webhooks"],"description":"List all webhooks in the current project.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"webhook_url":{"type":"string"},"entity":{"type":"string"},"subgraph_name":{"type":"string"},"subgraph_version":{"type":"string"},"created_at":{"format":"date-time","type":"string"}},"required":["id","name","webhook_url","entity","subgraph_name","subgraph_version","created_at"]}}},"required":["data"]}}}}}},"post":{"operationId":"createWebhook","summary":"Create a webhook","tags":["Subgraph Webhooks"],"description":"Stream row-level changes for a subgraph entity to a URL. Every delivery carries a `goldsky-webhook-secret` header; the secret is returned once in this response and is not retrievable afterwards.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"maxLength":42,"description":"A project-unique name for the webhook.","type":"string"},"subgraph_name":{"pattern":"^[a-zA-Z][\\w-]*$","type":"string"},"subgraph_version":{"pattern":"^[a-zA-Z0-9][\\w+.-]*$","type":"string"},"entity":{"description":"The subgraph entity (table) to stream row changes from. Use the entities endpoint to list valid values.","type":"string"},"webhook_url":{"description":"The URL row changes are POSTed to.","type":"string"},"secret":{"description":"Sent as the `goldsky-webhook-secret` header on every delivery. Generated if omitted, and returned once in the create response.","type":"string"},"num_retries":{"minimum":0,"maximum":10,"type":"integer"},"retry_interval_seconds":{"minimum":1,"type":"integer"},"retry_timeout_seconds":{"minimum":1,"type":"integer"}},"required":["name","subgraph_name","subgraph_version","entity","webhook_url"]}}},"required":true},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"webhook_secret":{"type":"string"}},"required":["id","name","webhook_secret"]}},"required":["data"]}}}}}}},"/subgraphs/webhooks/{name}":{"delete":{"operationId":"deleteWebhook","summary":"Delete a webhook","tags":["Subgraph Webhooks"],"description":"Delete a webhook by its project-unique name.","parameters":[{"schema":{"type":"string"},"in":"path","name":"name","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/subgraphs/{name}/{version}/entities":{"get":{"operationId":"listWebhookEntities","summary":"List webhook-able entities","tags":["Subgraph Webhooks"],"description":"List the entities (tables) of a deployed subgraph version that a webhook can be attached to, with row counts and columns.","parameters":[{"schema":{"pattern":"^[a-zA-Z][\\w-]*$","type":"string"},"in":"path","name":"name","required":true},{"schema":{"pattern":"^[a-zA-Z0-9][\\w+.-]*$","type":"string"},"in":"path","name":"version","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"entities":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"rows":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"data_type":{"type":"string"}},"required":["name","data_type"]}}},"required":["name","rows","columns"]}}},"required":["entities"]}},"required":["data"]}}}}}}},"/edge/networks":{"get":{"operationId":"listEdgeNetworks","summary":"List supported networks","tags":["Catalogs"],"description":"List the chains/networks available for Edge RPC endpoints.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"chain_id":{"anyOf":[{"type":"number"},{"type":"null"}]},"name":{"type":"string","example":"Ethereum Mainnet"},"network_name":{"type":"string","example":"mainnet"},"chain_name":{"type":"string","example":"Ethereum"},"logo_url":{"type":"string"}},"required":["chain_id","name","network_name","chain_name","logo_url"]}}},"required":["data"]}}}}}}},"/edge/sources":{"get":{"operationId":"listEdgeSources","summary":"List Edge Data sources","tags":["Catalogs"],"description":"List the datasets available through Edge Data endpoints.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"polymarket/balances"},"name":{"type":"string"},"description":{"type":"string"},"provider_id":{"type":"string"},"provider_name":{"type":"string"},"logo_url":{"type":"string"},"endpoint":{"type":"string"}},"required":["id","name","description","provider_id","provider_name","logo_url","endpoint"]}}},"required":["data"]}}}}}}},"/edge":{"get":{"operationId":"listEdgeEndpoints","summary":"List Edge endpoints","tags":["Edge Endpoints"],"description":"List all Edge endpoints in the current project.","parameters":[{"schema":{"anyOf":[{"type":"string","enum":["rpc"]},{"type":"string","enum":["data"]},{"type":"string","enum":["boost"]}]},"in":"query","name":"product","required":false}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","example":"my-endpoint"},"product":{"anyOf":[{"type":"string","enum":["rpc"]},{"type":"string","enum":["data"]},{"type":"string","enum":["boost"]}]},"status":{"anyOf":[{"type":"string","enum":["ACTIVE"]},{"type":"string","enum":["PAUSED"]}]},"rate_limit_budget":{"description":"Named rate-limit budget, or null for the default.","anyOf":[{"type":"string"},{"type":"null"}]},"allowed_domains":{"description":"Web origins allowed to call this endpoint from a browser (empty = unrestricted).","type":"array","items":{"type":"string"},"example":["https://app.example.com"]},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"paused_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]}},"required":["name","product","status","rate_limit_budget","allowed_domains","created_at","updated_at","paused_at"]}},"pagination":{"type":"object","properties":{"next_page_token":{"anyOf":[{"type":"string"},{"type":"null"}]},"page_size":{"type":"number"}},"required":["next_page_token","page_size"]}},"required":["data","pagination"]}}}}}},"post":{"operationId":"createEdgeEndpoint","summary":"Create an Edge endpoint","tags":["Edge Endpoints"],"description":"Create an Edge endpoint. Optionally restrict browser access with allowed_domains. The response includes the endpoint API key — the only other place it appears is GET /edge/{name}/api-key.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"minLength":1,"type":"string","example":"my-endpoint"},"product":{"anyOf":[{"type":"string","enum":["rpc"]},{"type":"string","enum":["data"]}]},"rate_limit_budget":{"type":"string","enum":["edge-tier-6krpm-total-unlimited-per-ip","edge-tier-60krpm-total-unlimited-per-ip","edge-tier-180krpm-total-unlimited-per-ip","edge-tier-360krpm-total-unlimited-per-ip","edge-tier-600krpm-total-unlimited-per-ip","edge-tier-6krpm-total-500rpm-per-ip","edge-tier-60krpm-total-500rpm-per-ip","edge-tier-180krpm-total-500rpm-per-ip","edge-tier-360krpm-total-500rpm-per-ip","edge-tier-600krpm-total-500rpm-per-ip","edge-tier-unlimited-total-100rpm-per-ip","edge-tier-unlimited-total-500rpm-per-ip"],"description":"Named rate-limit budget, applied per API key across all networks. Free-tier endpoints are always assigned edge-tier-6krpm-total-500rpm-per-ip regardless of this value."},"allowed_domains":{"description":"Web origins allowed to call this endpoint from a browser (empty/omitted = unrestricted).","type":"array","items":{"type":"string"},"example":["https://app.example.com"]}},"required":["name"]}}},"required":true},"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","allOf":[{"type":"object","properties":{"name":{"examples":["my-endpoint"],"type":"string"},"product":{"anyOf":[{"type":"string","enum":["rpc"]},{"type":"string","enum":["data"]},{"type":"string","enum":["boost"]}]},"status":{"anyOf":[{"type":"string","enum":["ACTIVE"]},{"type":"string","enum":["PAUSED"]}]},"rate_limit_budget":{"description":"Named rate-limit budget, or null for the default.","anyOf":[{"type":"string"},{"type":"null"}]},"allowed_domains":{"description":"Web origins allowed to call this endpoint from a browser (empty = unrestricted).","examples":[["https://app.example.com"]],"type":"array","items":{"type":"string"}},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"paused_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]}},"required":["name","product","status","rate_limit_budget","allowed_domains","created_at","updated_at","paused_at"]},{"type":"object","properties":{"api_key":{"description":"Shown here and via GET /:name/api-key only.","type":"string"}},"required":["api_key"]}]},"warnings":{"description":"Non-fatal issues encountered while applying optional settings.","type":"array","items":{"type":"string"}}},"required":["data"]}}}}}}},"/edge/{name}":{"get":{"operationId":"getEdgeEndpoint","summary":"Get an Edge endpoint","tags":["Edge Endpoints"],"parameters":[{"schema":{"minLength":1,"type":"string"},"in":"path","name":"name","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","example":"my-endpoint"},"product":{"anyOf":[{"type":"string","enum":["rpc"]},{"type":"string","enum":["data"]},{"type":"string","enum":["boost"]}]},"status":{"anyOf":[{"type":"string","enum":["ACTIVE"]},{"type":"string","enum":["PAUSED"]}]},"rate_limit_budget":{"description":"Named rate-limit budget, or null for the default.","anyOf":[{"type":"string"},{"type":"null"}]},"allowed_domains":{"description":"Web origins allowed to call this endpoint from a browser (empty = unrestricted).","type":"array","items":{"type":"string"},"example":["https://app.example.com"]},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"paused_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]}},"required":["name","product","status","rate_limit_budget","allowed_domains","created_at","updated_at","paused_at"]}},"required":["data"]}}}}}},"patch":{"operationId":"updateEdgeEndpoint","summary":"Update an Edge endpoint","tags":["Edge Endpoints"],"description":"Update the rate-limit budget and/or the allowed web domains. At least one field is required. Updates are applied domains-first and are not transactional — if the rate-limit update fails after a domains update succeeded, the domains change remains applied.","requestBody":{"content":{"application/json":{"schema":{"minProperties":1,"type":"object","properties":{"rate_limit_budget":{"anyOf":[{"type":"string","enum":["edge-tier-6krpm-total-unlimited-per-ip","edge-tier-60krpm-total-unlimited-per-ip","edge-tier-180krpm-total-unlimited-per-ip","edge-tier-360krpm-total-unlimited-per-ip","edge-tier-600krpm-total-unlimited-per-ip","edge-tier-6krpm-total-500rpm-per-ip","edge-tier-60krpm-total-500rpm-per-ip","edge-tier-180krpm-total-500rpm-per-ip","edge-tier-360krpm-total-500rpm-per-ip","edge-tier-600krpm-total-500rpm-per-ip","edge-tier-unlimited-total-100rpm-per-ip","edge-tier-unlimited-total-500rpm-per-ip"],"description":"Named rate-limit budget, applied per API key across all networks. Free-tier endpoints are always assigned edge-tier-6krpm-total-500rpm-per-ip regardless of this value."},{"type":"null"}]},"allowed_domains":{"type":"array","items":{"type":"string"}}}}}}},"parameters":[{"schema":{"minLength":1,"type":"string"},"in":"path","name":"name","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","example":"my-endpoint"},"product":{"anyOf":[{"type":"string","enum":["rpc"]},{"type":"string","enum":["data"]},{"type":"string","enum":["boost"]}]},"status":{"anyOf":[{"type":"string","enum":["ACTIVE"]},{"type":"string","enum":["PAUSED"]}]},"rate_limit_budget":{"description":"Named rate-limit budget, or null for the default.","anyOf":[{"type":"string"},{"type":"null"}]},"allowed_domains":{"description":"Web origins allowed to call this endpoint from a browser (empty = unrestricted).","type":"array","items":{"type":"string"},"example":["https://app.example.com"]},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"paused_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]}},"required":["name","product","status","rate_limit_budget","allowed_domains","created_at","updated_at","paused_at"]}},"required":["data"]}}}}}},"delete":{"operationId":"deleteEdgeEndpoint","summary":"Delete an Edge endpoint","tags":["Edge Endpoints"],"description":"Delete an Edge endpoint. Its API key is revoked before the endpoint is removed.","parameters":[{"schema":{"minLength":1,"type":"string"},"in":"path","name":"name","required":true}],"responses":{"204":{"description":"Edge endpoint deleted."}}}},"/edge/{name}/pause":{"put":{"operationId":"pauseEdgeEndpoint","summary":"Pause an Edge endpoint","tags":["Edge Lifecycle"],"parameters":[{"schema":{"minLength":1,"type":"string"},"in":"path","name":"name","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","example":"my-endpoint"},"product":{"anyOf":[{"type":"string","enum":["rpc"]},{"type":"string","enum":["data"]},{"type":"string","enum":["boost"]}]},"status":{"anyOf":[{"type":"string","enum":["ACTIVE"]},{"type":"string","enum":["PAUSED"]}]},"rate_limit_budget":{"description":"Named rate-limit budget, or null for the default.","anyOf":[{"type":"string"},{"type":"null"}]},"allowed_domains":{"description":"Web origins allowed to call this endpoint from a browser (empty = unrestricted).","type":"array","items":{"type":"string"},"example":["https://app.example.com"]},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"paused_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]}},"required":["name","product","status","rate_limit_budget","allowed_domains","created_at","updated_at","paused_at"]}},"required":["data"]}}}}}}},"/edge/{name}/resume":{"put":{"operationId":"resumeEdgeEndpoint","summary":"Resume an Edge endpoint","tags":["Edge Lifecycle"],"parameters":[{"schema":{"minLength":1,"type":"string"},"in":"path","name":"name","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","example":"my-endpoint"},"product":{"anyOf":[{"type":"string","enum":["rpc"]},{"type":"string","enum":["data"]},{"type":"string","enum":["boost"]}]},"status":{"anyOf":[{"type":"string","enum":["ACTIVE"]},{"type":"string","enum":["PAUSED"]}]},"rate_limit_budget":{"description":"Named rate-limit budget, or null for the default.","anyOf":[{"type":"string"},{"type":"null"}]},"allowed_domains":{"description":"Web origins allowed to call this endpoint from a browser (empty = unrestricted).","type":"array","items":{"type":"string"},"example":["https://app.example.com"]},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"paused_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}]}},"required":["name","product","status","rate_limit_budget","allowed_domains","created_at","updated_at","paused_at"]}},"required":["data"]}}}}}}},"/edge/{name}/api-key":{"get":{"operationId":"revealEdgeEndpointKey","summary":"Reveal the endpoint API key","tags":["Edge API Keys"],"parameters":[{"schema":{"minLength":1,"type":"string"},"in":"path","name":"name","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"api_key":{"type":"string"}},"required":["api_key"]}},"required":["data"]}}}}}}},"/edge/{name}/metrics":{"get":{"operationId":"getEdgeEndpointMetrics","summary":"Get endpoint metrics","tags":["Edge Metrics"],"description":"Request and error counts over a time window, as JSON time series.","parameters":[{"schema":{"format":"date-time","type":"string"},"in":"query","name":"from","required":false,"description":"Start of the window (default: 24 hours ago)."},{"schema":{"format":"date-time","type":"string"},"in":"query","name":"to","required":false,"description":"End of the window (default: now)."},{"schema":{"anyOf":[{"type":"string","enum":["1m"]},{"type":"string","enum":["5m"]},{"type":"string","enum":["1h"]},{"type":"string","enum":["6h"]},{"type":"string","enum":["1d"]}]},"in":"query","name":"bucket_size","required":false},{"schema":{"minLength":1,"type":"string"},"in":"path","name":"name","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"requests":{"type":"array","items":{"type":"object","properties":{"time":{"format":"date-time","type":"string"},"value":{"type":"number"}},"required":["time","value"]}},"errors":{"type":"array","items":{"type":"object","properties":{"time":{"format":"date-time","type":"string"},"value":{"type":"number"}},"required":["time","value"]}}},"required":["requests","errors"]}},"required":["data"]}}}}}}}},"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."}],"x-tagGroups":[{"name":"Pipelines","tags":["Pipelines","Pipeline Authoring","Pipeline Lifecycle","Pipeline Status","Pipeline Logs"]},{"name":"Subgraphs","tags":["Subgraphs","Subgraph Deployments","Subgraph Tags","Subgraph Lifecycle","Subgraph Logs","Subgraph Webhooks"]},{"name":"Edge","tags":["Edge Endpoints","Edge Lifecycle","Edge API Keys","Edge Metrics"]},{"name":"Reference","tags":["Catalogs"]}]}