{"openapi":"3.1.0","info":{"title":"Metronome (BYOK) API","version":"0.1.0","description":"Metronome (BYOK) lets an AI assistant read your own Metronome data through the Metronome API with a key you supply (Metronome API token). Read-only: 11 tools (list_rate_cards, get_rate_card, get_rate_card_rates, list_packages, get_package, list_pricing_units, list_custom_field_keys, list_system_notification_types, list_offset_notification_configs, list_billing_providers, get_service_ip_ranges)....\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-metronome-config.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-metronome-config/docs"},"termsOfService":"https://connectorbay.com/byok-metronome-config/terms"},"servers":[{"url":"https://byok-metronome-config.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-metronome-config/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_rate_cards":{"post":{"operationId":"list_rate_cards","summary":"List rate cards (default price lists) with name, description, aliases, fiat currency type and creation time. Read-only q","description":"List rate cards (default price lists) with name, description, aliases, fiat currency type and creation time. Read-only query despite using POST. Paged by cursor. Use for \"Which rate cards exist in Metronome\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records per page (1 to 100).","title":"Limit"},"next_page":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's next_page field, to fetch the following page.","title":"Next Page"}},"title":"list_rate_cardsArguments","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_rate_card":{"post":{"operationId":"get_rate_card","summary":"Get one rate card by id: name, description, aliases, fiat currency type and credit type conversions. Read-only query des","description":"Get one rate card by id: name, description, aliases, fiat currency type and credit type conversions. Read-only query despite using POST. Use for \"Show the Metronome rate card rc_1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Rate card id (UUID).","maxLength":200,"title":"Id","type":"string"}},"required":["id"],"title":"get_rate_cardArguments","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_rate_card_rates":{"post":{"operationId":"get_rate_card_rates","summary":"List the rates of a rate card at a point in time: product, billing frequency, rate type and price (in the card's credit ","description":"List the rates of a rate card at a point in time: product, billing frequency, rate type and price (in the card's credit type), validity window and entitlement. Read-only query despite using POST. Use for \"What are the rates on Metronome rate card rc_1 as of 2026-10-01\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"rate_card_id":{"description":"Rate card id (UUID).","maxLength":200,"title":"Rate Card Id","type":"string"},"at":{"description":"Inclusive start of the rate schedule, RFC 3339, for example 2026-10-01T00:00:00Z.","maxLength":40,"title":"At","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records per page (1 to 100).","title":"Limit"},"next_page":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's next_page field, to fetch the following page.","title":"Next Page"}},"required":["rate_card_id","at"],"title":"get_rate_card_ratesArguments","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_packages":{"post":{"operationId":"list_packages","summary":"List packages (reusable contract templates) with name, aliases, rate card, duration, payment terms, billing provider and","description":"List packages (reusable contract templates) with name, aliases, rate card, duration, payment terms, billing provider and delivery method. Read-only query despite using POST. Use for \"Which contract packages are defined in Metronome\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records per page (1 to 100).","title":"Limit"},"next_page":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's next_page field, to fetch the following page.","title":"Next Page"},"archive_filter":{"anyOf":[{"enum":["ARCHIVED","NOT_ARCHIVED","ALL"],"type":"string"},{"type":"null"}],"default":null,"description":"Which packages: NOT_ARCHIVED (default), ARCHIVED or ALL.","title":"Archive Filter"}},"title":"list_packagesArguments","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_package":{"post":{"operationId":"get_package","summary":"Get one package by id with its terms, commits, credits, overrides and schedules as Metronome returns them. Read-only que","description":"Get one package by id with its terms, commits, credits, overrides and schedules as Metronome returns them. Read-only query despite using POST. Use for \"Show the Metronome package pkg_1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"package_id":{"description":"Package id (UUID).","maxLength":200,"title":"Package Id","type":"string"}},"required":["package_id"],"title":"get_packageArguments","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_pricing_units":{"post":{"operationId":"list_pricing_units","summary":"List pricing units: every fiat currency plus custom units such as AI credits, with a flag for real currencies. The USD (","description":"List pricing units: every fiat currency plus custom units such as AI credits, with a flag for real currencies. The USD (cents) unit has a fixed id. Use for \"Which pricing units and currencies does my Metronome account use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records per page (1 to 100).","title":"Limit"},"next_page":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's next_page field, to fetch the following page.","title":"Next Page"}},"title":"list_pricing_unitsArguments","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_custom_field_keys":{"post":{"operationId":"list_custom_field_keys","summary":"List the custom field keys defined on Metronome entities (customers, contracts, products and so on) and whether each key","description":"List the custom field keys defined on Metronome entities (customers, contracts, products and so on) and whether each key must be unique. Read-only query despite using POST. Use for \"Which custom field keys are configured in Metronome\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"next_page":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's next_page field, to fetch the following page.","title":"Next Page"}},"title":"list_custom_field_keysArguments","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_system_notification_types":{"post":{"operationId":"list_system_notification_types","summary":"List the system notification types (billing and invoice events) and whether each is enabled, with its delivery policy. R","description":"List the system notification types (billing and invoice events) and whether each is enabled, with its delivery policy. Read-only query despite using POST. Use for \"Which Metronome system notifications are enabled\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_system_notification_typesArguments","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_offset_notification_configs":{"post":{"operationId":"list_offset_notification_configs","summary":"List offset notification configurations (reminders sent a set time before or after an event) with type, offset, environm","description":"List offset notification configurations (reminders sent a set time before or after an event) with type, offset, environment and archive state. Read-only query despite using POST. Use for \"Which offset notifications are configured in Metronome\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many configurations per page.","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's cursor field.","title":"Cursor"},"archive_filter":{"anyOf":[{"enum":["ARCHIVED","NOT_ARCHIVED","ALL"],"type":"string"},{"type":"null"}],"default":null,"description":"Which configurations: NOT_ARCHIVED (default), ARCHIVED or ALL.","title":"Archive Filter"}},"title":"list_offset_notification_configsArguments","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_billing_providers":{"post":{"operationId":"list_billing_providers","summary":"List the billing providers (Stripe, NetSuite, AWS Marketplace and others) connected to the account and their delivery me","description":"List the billing providers (Stripe, NetSuite, AWS Marketplace and others) connected to the account and their delivery methods. Provider settings are not returned. Read-only query despite using POST. Use for \"Which billing providers are connected to my Metronome account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"next_page":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's next_page field.","title":"Next Page"}},"title":"list_billing_providersArguments","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_service_ip_ranges":{"post":{"operationId":"get_service_ip_ranges","summary":"List the network addresses Metronome connects from and accepts connections at, for firewall allow-lists. Use for \"Which ","description":"List the network addresses Metronome connects from and accepts connections at, for firewall allow-lists. Use for \"Which IP addresses does Metronome use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_service_ip_rangesArguments","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}}}}