{"openapi":"3.1.0","info":{"title":"Amberflo (BYOK) API","version":"0.1.0","description":"Amberflo (BYOK) lets an AI assistant read your own Amberflo data through the Amberflo API with a key you supply (Amberflo API key). Read-only: 8 tools (list_customers, list_meters, list_product_items, list_promotions, list_business_units, list_budgets, list_chargeback_invoices, list_cost_ingestion_configs). The BYOK key travels with each request, is used for that one call only and is never...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-amberflo.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-amberflo/docs"},"termsOfService":"https://connectorbay.com/byok-amberflo/terms"},"servers":[{"url":"https://byok-amberflo.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-amberflo/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_customers":{"post":{"operationId":"list_customers","summary":"Page through billing customers with ID, name, lifecycle stage, enabled and test flags and created and updated times, wit","description":"Page through billing customers with ID, name, lifecycle stage, enabled and test flags and created and updated times, with search, sort and status filters. Email and address are left out. Use for \"Which Amberflo customers are enabled and what lifecycle stage are they in\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Text to find in customer name, ID or email.","title":"Search"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for enabled customers only, false for disabled ones.","title":"Enabled"},"lifecycle_stage":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only customers in this lifecycle stage.","title":"Lifecycle Stage"},"sort":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Field to sort by, for example customerName or createTime.","title":"Sort"},"is_ascending":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for ascending order (default is descending).","title":"Is Ascending"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Items per page (1 to 1000).","title":"Limit"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number; the first page is 0.","title":"Page"}},"title":"list_customersArguments","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_meters":{"post":{"operationId":"list_meters","summary":"List usage meter definitions with API name, label, meter type, aggregation, event type, dimensions, billing use and enab","description":"List usage meter definitions with API name, label, meter type, aggregation, event type, dimensions, billing use and enabled flag. Use for \"Which usage meters are defined in Amberflo and which are used in billing\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"label":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only meters with this display name.","title":"Label"},"meter_api_name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only the meter with this API name.","title":"Meter Api Name"},"aggregation":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only meters with this aggregation, for example SUM.","title":"Aggregation"},"meter_type":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only meters of this type.","title":"Meter Type"},"event_type":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only meters of this event type.","title":"Event Type"}},"title":"list_metersArguments","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_product_items":{"post":{"operationId":"list_product_items","summary":"List the billable product items of the account with product ID, meter API name, item name and description. Use for \"Whic","description":"List the billable product items of the account with product ID, meter API name, item name and description. Use for \"Which product items can Amberflo bill for\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_product_itemsArguments","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_promotions":{"post":{"operationId":"list_promotions","summary":"List account promotions (discounts) with ID, type, name, description, hidden flag and last update. Use for \"Which discou","description":"List account promotions (discounts) with ID, type, name, description, hidden flag and last update. Use for \"Which discounts and promotions exist in Amberflo\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_promotionsArguments","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_business_units":{"post":{"operationId":"list_business_units","summary":"Page through business units used for cost allocation and chargeback with name, description and timestamps, with search a","description":"Page through business units used for cost allocation and chargeback with name, description and timestamps, with search and sort. Use for \"Which business units do we allocate cloud costs to in Amberflo\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Text to find in business unit names and descriptions.","title":"Search"},"sort":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Sort by name, id, createTimeInMillis or updateTimeInMillis.","title":"Sort"},"is_ascending":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for ascending order.","title":"Is Ascending"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Items per page (1 to 1000).","title":"Limit"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number; the first page is 0.","title":"Page"}},"title":"list_business_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_budgets":{"post":{"operationId":"list_budgets","summary":"Page through cost budgets with code, label, limit, active window and usage item, optionally only those active at a point","description":"Page through cost budgets with code, label, limit, active window and usage item, optionally only those active at a point in time. Use for \"Which cloud cost budgets are set in Amberflo and what are their limits\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"time_in_seconds":{"anyOf":[{"maximum":4102444800,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only budgets active at this Unix time in seconds.","title":"Time In Seconds"},"start_time_in_seconds":{"anyOf":[{"maximum":4102444800,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only budgets active after (inclusive) this Unix time in seconds.","title":"Start Time In Seconds"},"end_time_in_seconds":{"anyOf":[{"maximum":4102444800,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only budgets active before (exclusive) this Unix time in seconds.","title":"End Time In Seconds"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Items per page (1 to 1000).","title":"Limit"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number; the first page is 0.","title":"Page"}},"title":"list_budgetsArguments","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_chargeback_invoices":{"post":{"operationId":"list_chargeback_invoices","summary":"Page through business unit chargeback invoices (summary only) with period, status and chargeback amount. Use for \"How mu","description":"Page through business unit chargeback invoices (summary only) with period, status and chargeback amount. Use for \"How much did we charge back to each business unit\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Items per page (1 to 1000).","title":"Limit"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number; the first page is 0.","title":"Page"}},"title":"list_chargeback_invoicesArguments","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_cost_ingestion_configs":{"post":{"operationId":"list_cost_ingestion_configs","summary":"List cloud cost (FOCUS) ingestion configurations with provider, data type, label, bucket, enabled flag and last scan tim","description":"List cloud cost (FOCUS) ingestion configurations with provider, data type, label, bucket, enabled flag and last scan time. Credentials are left out. Use for \"Which cloud accounts feed cost data into Amberflo\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_cost_ingestion_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}}}}