{"openapi":"3.1.0","info":{"title":"Render Service Operations (BYOK) API","version":"0.1.0","description":"Render Service Operations (BYOK) lets an AI assistant read your own Render Service Operations data through the Render Service Operations API with a key you supply (API key). Read-only: 11 tools (list_service_events, list_routes, list_headers, list_jobs, get_job, list_instances, get_outbound_ips, list_disks, list_disk_snapshots, list_dedicated_ips, list_maintenance_runs). The BYOK key travels with...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-render-service-ops.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-render-service-ops/docs"},"termsOfService":"https://connectorbay.com/byok-render-service-ops/terms"},"servers":[{"url":"https://byok-render-service-ops.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-render-service-ops/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_service_events":{"post":{"operationId":"list_service_events","summary":"List events of a Render service (deploys started and ended, autoscaling, crashes, suspensions) newest first with type an","description":"List events of a Render service (deploys started and ended, autoscaling, crashes, suspensions) newest first with type and time. Use for \"What happened to my Render service recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"service_id":{"description":"Id of the Render service, as shown by the Render connector's list_services (for example 'srv-abc123').","maxLength":64,"title":"Service Id","type":"string"},"type":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only events of this type, for example deploy_ended or server_failed.","title":"Type"},"start_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only events after this ISO 8601 time.","title":"Start Time"},"end_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only events before this ISO 8601 time.","title":"End Time"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: the 'cursor' value of the last item of the previous answer; leave empty for the first page.","title":"Cursor"}},"required":["service_id"],"title":"list_service_eventsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_routes":{"post":{"operationId":"list_routes","summary":"List the redirect and rewrite rules of a Render static site or service with source, destination and priority. Use for \"W","description":"List the redirect and rewrite rules of a Render static site or service with source, destination and priority. Use for \"Which redirects does my Render site have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"service_id":{"description":"Id of the Render service, as shown by the Render connector's list_services (for example 'srv-abc123').","maxLength":64,"title":"Service Id","type":"string"},"type":{"anyOf":[{"enum":["redirect","rewrite"],"type":"string"},{"type":"null"}],"default":null,"description":"Only rules of this type.","title":"Type"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: the 'cursor' value of the last item of the previous answer; leave empty for the first page.","title":"Cursor"}},"required":["service_id"],"title":"list_routesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_headers":{"post":{"operationId":"list_headers","summary":"List the custom HTTP response headers of a Render static site by path, name and value. Use for \"Which custom headers doe","description":"List the custom HTTP response headers of a Render static site by path, name and value. Use for \"Which custom headers does my Render static site send\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"service_id":{"description":"Id of the Render service, as shown by the Render connector's list_services (for example 'srv-abc123').","maxLength":64,"title":"Service Id","type":"string"},"path":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Only headers for this path.","title":"Path"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only headers with this name.","title":"Name"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: the 'cursor' value of the last item of the previous answer; leave empty for the first page.","title":"Cursor"}},"required":["service_id"],"title":"list_headersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_jobs":{"post":{"operationId":"list_jobs","summary":"List one-off jobs run on a Render service with command, plan, status and start and finish times. Use for \"Did my last Re","description":"List one-off jobs run on a Render service with command, plan, status and start and finish times. Use for \"Did my last Render one-off job succeed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"service_id":{"description":"Id of the Render service, as shown by the Render connector's list_services (for example 'srv-abc123').","maxLength":64,"title":"Service Id","type":"string"},"status":{"anyOf":[{"enum":["pending","running","succeeded","failed","canceled"],"type":"string"},{"type":"null"}],"default":null,"description":"Only jobs with this status.","title":"Status"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: the 'cursor' value of the last item of the previous answer; leave empty for the first page.","title":"Cursor"}},"required":["service_id"],"title":"list_jobsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_job":{"post":{"operationId":"get_job","summary":"Get one one-off job: command, plan, status and times. Use for \"How long did Render job job-abc123 run\".","description":"Get one one-off job: command, plan, status and times. Use for \"How long did Render job job-abc123 run\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"service_id":{"description":"Id of the Render service, as shown by the Render connector's list_services (for example 'srv-abc123').","maxLength":64,"title":"Service Id","type":"string"},"job_id":{"description":"Id of a one-off job, as returned by list_jobs.","maxLength":64,"title":"Job Id","type":"string"}},"required":["service_id","job_id"],"title":"get_jobArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_instances":{"post":{"operationId":"list_instances","summary":"List the running instances of a Render service with id and start time. Use for \"How many instances of my Render service ","description":"List the running instances of a Render service with id and start time. Use for \"How many instances of my Render service are running\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"service_id":{"description":"Id of the Render service, as shown by the Render connector's list_services (for example 'srv-abc123').","maxLength":64,"title":"Service Id","type":"string"}},"required":["service_id"],"title":"list_instancesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_outbound_ips":{"post":{"operationId":"get_outbound_ips","summary":"Get the outbound IP addresses of a Render service (shared region IPs or a dedicated IP) for allow-listing. Use for \"Whic","description":"Get the outbound IP addresses of a Render service (shared region IPs or a dedicated IP) for allow-listing. Use for \"Which IPs does my Render service call out from\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"service_id":{"description":"Id of the Render service, as shown by the Render connector's list_services (for example 'srv-abc123').","maxLength":64,"title":"Service Id","type":"string"}},"required":["service_id"],"title":"get_outbound_ipsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_disks":{"post":{"operationId":"list_disks","summary":"List persistent disks with name, size in GB, mount path, service and dates. Use for \"Which persistent disks do I have on","description":"List persistent disks with name, size in GB, mount path, service and dates. Use for \"Which persistent disks do I have on Render\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"owner_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of this workspace id.","title":"Owner Id"},"service_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only the disk of this service id.","title":"Service Id"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only disks with this name.","title":"Name"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: the 'cursor' value of the last item of the previous answer; leave empty for the first page.","title":"Cursor"}},"title":"list_disksArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_disk_snapshots":{"post":{"operationId":"list_disk_snapshots","summary":"List the snapshots of a Render persistent disk. Use for \"Does my Render disk have snapshots\".","description":"List the snapshots of a Render persistent disk. Use for \"Does my Render disk have snapshots\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"disk_id":{"description":"Id of a persistent disk, as returned by list_disks.","maxLength":64,"title":"Disk Id","type":"string"}},"required":["disk_id"],"title":"list_disk_snapshotsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_dedicated_ips":{"post":{"operationId":"list_dedicated_ips","summary":"List dedicated outbound IP groups of a workspace with region, IPs, environments and status. Use for \"Which dedicated IPs","description":"List dedicated outbound IP groups of a workspace with region, IPs, environments and status. Use for \"Which dedicated IPs does my Render workspace have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"owner_id":{"description":"Workspace id (required).","maxLength":64,"title":"Owner Id","type":"string"},"environment_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only groups used by this environment id.","title":"Environment Id"}},"required":["owner_id"],"title":"list_dedicated_ipsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_maintenance_runs":{"post":{"operationId":"list_maintenance_runs","summary":"List scheduled and past maintenance runs of Render resources with type, time and state. Use for \"Is any maintenance sche","description":"List scheduled and past maintenance runs of Render resources with type, time and state. Use for \"Is any maintenance scheduled for my Render database\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"resource_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only maintenance for this resource id.","title":"Resource Id"},"owner_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of this workspace id.","title":"Owner Id"},"state":{"anyOf":[{"enum":["scheduled","in_progress","user_fix_required","cancelled","succeeded","failed"],"type":"string"},{"type":"null"}],"default":null,"description":"Only runs in this state.","title":"State"}},"title":"list_maintenance_runsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}