{"openapi":"3.1.0","info":{"title":"Render Metrics (BYOK) API","version":"0.1.0","description":"Render Metrics (BYOK) lets an AI assistant read your own Render Metrics data through the Render Metrics API with a key you supply (API key). Read-only: 8 tools (get_cpu, get_memory, get_http_requests, get_http_latency, get_bandwidth, get_instance_count, get_disk_usage, get_active_connections). The BYOK key travels with each request, is used for that one call only and is never stored, logged or...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-render-metrics.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-render-metrics/docs"},"termsOfService":"https://connectorbay.com/byok-render-metrics/terms"},"servers":[{"url":"https://byok-render-metrics.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-render-metrics/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/get_cpu":{"post":{"operationId":"get_cpu","summary":"Get CPU usage time series (cores) for services, Postgres or Key Value resources, optionally per instance and aggregated ","description":"Get CPU usage time series (cores) for services, Postgres or Key Value resources, optionally per instance and aggregated by AVG, MAX or MIN. Use for \"How much CPU did my Render service use in the last hour\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the range as an ISO 8601 time, for example 2026-10-16T08:15:30Z; the default is one hour ago.","title":"Start Time"},"end_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the range as an ISO 8601 time; the default is now.","title":"End Time"},"resource":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Resource id to query: a service (srv-...), Postgres database (dpg-...) or Key Value store (red-...).","title":"Resource"},"instance":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only this service instance id.","title":"Instance"},"resolution_seconds":{"anyOf":[{"maximum":86400,"minimum":30,"type":"integer"},{"type":"null"}],"default":60,"description":"Seconds between data points (30 or more).","title":"Resolution Seconds"},"aggregation_method":{"anyOf":[{"enum":["AVG","MAX","MIN"],"type":"string"},{"type":"null"}],"default":null,"description":"How to combine several series.","title":"Aggregation Method"}},"title":"get_cpuArguments","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_memory":{"post":{"operationId":"get_memory","summary":"Get memory usage time series (bytes) for services, Postgres or Key Value resources. Use for \"How much memory does my Ren","description":"Get memory usage time series (bytes) for services, Postgres or Key Value resources. Use for \"How much memory does my Render service use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the range as an ISO 8601 time, for example 2026-10-16T08:15:30Z; the default is one hour ago.","title":"Start Time"},"end_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the range as an ISO 8601 time; the default is now.","title":"End Time"},"resource":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Resource id to query: a service (srv-...), Postgres database (dpg-...) or Key Value store (red-...).","title":"Resource"},"instance":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only this service instance id.","title":"Instance"},"resolution_seconds":{"anyOf":[{"maximum":86400,"minimum":30,"type":"integer"},{"type":"null"}],"default":60,"description":"Seconds between data points (30 or more).","title":"Resolution Seconds"}},"title":"get_memoryArguments","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_http_requests":{"post":{"operationId":"get_http_requests","summary":"Get HTTP request counts over time for a service, aggregated by status code or host and optionally filtered by host. Use ","description":"Get HTTP request counts over time for a service, aggregated by status code or host and optionally filtered by host. Use for \"How many requests did my Render web service get, by status code\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the range as an ISO 8601 time, for example 2026-10-16T08:15:30Z; the default is one hour ago.","title":"Start Time"},"end_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the range as an ISO 8601 time; the default is now.","title":"End Time"},"resource":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Resource id to query: a service (srv-...), Postgres database (dpg-...) or Key Value store (red-...).","title":"Resource"},"resolution_seconds":{"anyOf":[{"maximum":86400,"minimum":30,"type":"integer"},{"type":"null"}],"default":60,"description":"Seconds between data points (30 or more).","title":"Resolution Seconds"},"host":{"anyOf":[{"maxLength":253,"type":"string"},{"type":"null"}],"default":null,"description":"Only requests to this host.","title":"Host"},"aggregate_by":{"anyOf":[{"enum":["statusCode","host"],"type":"string"},{"type":"null"}],"default":null,"description":"Group the series by status code or host.","title":"Aggregate By"}},"title":"get_http_requestsArguments","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_http_latency":{"post":{"operationId":"get_http_latency","summary":"Get HTTP request latency over time for a service at a quantile (for example 0.99), optionally filtered by host and path.","description":"Get HTTP request latency over time for a service at a quantile (for example 0.99), optionally filtered by host and path. Use for \"What is the p99 latency of my Render service\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the range as an ISO 8601 time, for example 2026-10-16T08:15:30Z; the default is one hour ago.","title":"Start Time"},"end_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the range as an ISO 8601 time; the default is now.","title":"End Time"},"resource":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Resource id to query: a service (srv-...), Postgres database (dpg-...) or Key Value store (red-...).","title":"Resource"},"resolution_seconds":{"anyOf":[{"maximum":86400,"minimum":30,"type":"integer"},{"type":"null"}],"default":60,"description":"Seconds between data points (30 or more).","title":"Resolution Seconds"},"quantile":{"anyOf":[{"maximum":1,"minimum":0,"type":"number"},{"type":"null"}],"default":0.95,"description":"Latency quantile between 0 and 1, for example 0.95.","title":"Quantile"},"host":{"anyOf":[{"maxLength":253,"type":"string"},{"type":"null"}],"default":null,"description":"Only requests to this host.","title":"Host"},"path":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Only requests to this path.","title":"Path"}},"title":"get_http_latencyArguments","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_bandwidth":{"post":{"operationId":"get_bandwidth","summary":"Get outbound bandwidth use over time for a service. Use for \"How much bandwidth did my Render service use this hour\".","description":"Get outbound bandwidth use over time for a service. Use for \"How much bandwidth did my Render service use this hour\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the range as an ISO 8601 time, for example 2026-10-16T08:15:30Z; the default is one hour ago.","title":"Start Time"},"end_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the range as an ISO 8601 time; the default is now.","title":"End Time"},"resource":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Resource id to query: a service (srv-...), Postgres database (dpg-...) or Key Value store (red-...).","title":"Resource"}},"title":"get_bandwidthArguments","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_instance_count":{"post":{"operationId":"get_instance_count","summary":"Get the number of running instances of a service over time. Use for \"How many instances did my Render service run (autos","description":"Get the number of running instances of a service over time. Use for \"How many instances did my Render service run (autoscaling)\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the range as an ISO 8601 time, for example 2026-10-16T08:15:30Z; the default is one hour ago.","title":"Start Time"},"end_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the range as an ISO 8601 time; the default is now.","title":"End Time"},"resource":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Resource id to query: a service (srv-...), Postgres database (dpg-...) or Key Value store (red-...).","title":"Resource"},"resolution_seconds":{"anyOf":[{"maximum":86400,"minimum":30,"type":"integer"},{"type":"null"}],"default":60,"description":"Seconds between data points (30 or more).","title":"Resolution Seconds"}},"title":"get_instance_countArguments","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_disk_usage":{"post":{"operationId":"get_disk_usage","summary":"Get disk usage over time (bytes) of a service's persistent disk or a Postgres database. Use for \"How full is my Render d","description":"Get disk usage over time (bytes) of a service's persistent disk or a Postgres database. Use for \"How full is my Render disk\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the range as an ISO 8601 time, for example 2026-10-16T08:15:30Z; the default is one hour ago.","title":"Start Time"},"end_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the range as an ISO 8601 time; the default is now.","title":"End Time"},"resource":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Resource id to query: a service (srv-...), Postgres database (dpg-...) or Key Value store (red-...).","title":"Resource"},"resolution_seconds":{"anyOf":[{"maximum":86400,"minimum":30,"type":"integer"},{"type":"null"}],"default":60,"description":"Seconds between data points (30 or more).","title":"Resolution Seconds"}},"title":"get_disk_usageArguments","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_active_connections":{"post":{"operationId":"get_active_connections","summary":"Get the number of active database connections over time for Postgres or Key Value resources. Use for \"How many connectio","description":"Get the number of active database connections over time for Postgres or Key Value resources. Use for \"How many connections does my Render Postgres have open\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the range as an ISO 8601 time, for example 2026-10-16T08:15:30Z; the default is one hour ago.","title":"Start Time"},"end_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the range as an ISO 8601 time; the default is now.","title":"End Time"},"resource":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Resource id to query: a service (srv-...), Postgres database (dpg-...) or Key Value store (red-...).","title":"Resource"},"resolution_seconds":{"anyOf":[{"maximum":86400,"minimum":30,"type":"integer"},{"type":"null"}],"default":60,"description":"Seconds between data points (30 or more).","title":"Resolution Seconds"}},"title":"get_active_connectionsArguments","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}}}}