{"openapi":"3.1.0","info":{"title":"Hablame (BYOK) API","version":"0.1.0","description":"Hablame (BYOK) lets an AI assistant read your own Hablame data through the Hablame API with a key you supply (Hablame API key). Read-only: 7 tools (ping, check_api_key, get_account_info, get_sms, list_short_urls, get_short_url_stats, get_short_url_usage_by_month). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever sent to...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-hablame.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-hablame/docs"},"termsOfService":"https://connectorbay.com/byok-hablame/terms"},"servers":[{"url":"https://byok-hablame.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-hablame/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/ping":{"post":{"operationId":"ping","summary":"Check that the Hablame API is up. Returns a status and message. Use for \"Is the Hablame API alive\".","description":"Check that the Hablame API is up. Returns a status and message. Use for \"Is the Hablame API alive\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"pingArguments","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/check_api_key":{"post":{"operationId":"check_api_key","summary":"Check that the API key is valid and show the account id and account status it belongs to. Use for \"Is my Hablame API key","description":"Check that the API key is valid and show the account id and account status it belongs to. Use for \"Is my Hablame API key valid\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"check_api_keyArguments","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_account_info":{"post":{"operationId":"get_account_info","summary":"Show the account's billing type (prepaid or postpaid), available balance, monthly credit limit, currency, billing countr","description":"Show the account's billing type (prepaid or postpaid), available balance, monthly credit limit, currency, billing country and whether billing, fraud or general blocks are set. Tax id and contact email are left out. Use for \"What is my Hablame balance and is the account blocked\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_account_infoArguments","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_sms":{"post":{"operationId":"get_sms","summary":"Get the delivery record of one SMS by its id: date, sender, country and operator area, message parts, encoding, price, d","description":"Get the delivery record of one SMS by its id: date, sender, country and operator area, message parts, encoding, price, delivery times and status code. The recipient number, text and source IP are left out. Use for \"What happened to Hablame SMS b36df147-b714-4e43-9ba2-b3f611fc860a\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"message_id":{"description":"Id of the SMS, returned when it was sent.","maxLength":64,"title":"Message Id","type":"string"}},"required":["message_id"],"title":"get_smsArguments","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_short_urls":{"post":{"operationId":"list_short_urls","summary":"List the latest short URLs created in the account (up to the last 1000), newest first, with token, domain, target URL, c","description":"List the latest short URLs created in the account (up to the last 1000), newest first, with token, domain, target URL, creation date and total views. Use for \"Which Hablame short links got the most views\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_short_urlsArguments","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_short_url_stats":{"post":{"operationId":"get_short_url_stats","summary":"Get the general statistics of one short URL: total and unique views, previews, views by hour, device, language, operatin","description":"Get the general statistics of one short URL: total and unique views, previews, views by hour, device, language, operating system and browser, first and last visit and the redirect targets. Use for \"How many people opened hab.me/xxxxx\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"url":{"description":"The short URL without https, for example hab.me/xxxxx.","maxLength":200,"title":"Url","type":"string"}},"required":["url"],"title":"get_short_url_statsArguments","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_short_url_usage_by_month":{"post":{"operationId":"get_short_url_usage_by_month","summary":"Show the number of short URLs created and the visits received in each of the last 24 months, keyed by month such as 2025","description":"Show the number of short URLs created and the visits received in each of the last 24 months, keyed by month such as 202502. Use for \"How many short links and visits did we have per month on Hablame\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_short_url_usage_by_monthArguments","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}}}}