{"openapi":"3.1.0","info":{"title":"Smile.io (BYOK) API","version":"0.1.0","description":"Smile.io (BYOK) lets an AI assistant read your own Smile.io data through the Smile.io API with a key you supply (Smile private API key). Read-only: 10 tools (list_customers, get_customer, list_points_transactions, get_points_transaction, list_earning_rules, list_points_products, get_points_product, get_points_settings, get_referral_settings, list_vip_tiers). The BYOK key travels with each...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-smile.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-smile/docs"},"termsOfService":"https://connectorbay.com/byok-smile/terms"},"servers":[{"url":"https://byok-smile.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-smile/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":"List loyalty customers by Smile id, state (candidate, member, disabled), points balance and VIP tier. Names, email and b","description":"List loyalty customers by Smile id, state (candidate, member, disabled), points balance and VIP tier. Names, email and birth date are left out. Newest first. Use for \"Which customers in my Smile program have the most points\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"anyOf":[{"enum":["candidate","member","disabled"],"type":"string"},{"type":"null"}],"default":null,"description":"Only customers in this state.","title":"State"},"updated_at_min":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only customers updated after this ISO 8601 time, for example 2026-01-01T00:00:00Z.","title":"Updated At Min"},"limit":{"anyOf":[{"maximum":250,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many customers to return (1 to 250).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's metadata.next_cursor to get the next page.","title":"Cursor"}},"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/get_customer":{"post":{"operationId":"get_customer","summary":"Get one loyalty customer by Smile customer id: state, points balance, VIP tier and VIP progress. Name, email and birth d","description":"Get one loyalty customer by Smile customer id: state, points balance, VIP tier and VIP progress. Name, email and birth date are left out. Use for \"How many points does Smile customer 12345 have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Smile customer id (a number).","maxLength":200,"title":"Id","type":"string"}},"required":["id"],"title":"get_customerArguments","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_points_transactions":{"post":{"operationId":"list_points_transactions","summary":"List points transactions (earned, spent, adjusted) with customer id, point change, description and time. Optionally for ","description":"List points transactions (earned, spent, adjusted) with customer id, point change, description and time. Optionally for one customer. Newest first. Use for \"What points activity did Smile customer 12345 have recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"customer_id":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only transactions of this Smile customer id.","title":"Customer Id"},"updated_at_min":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only transactions updated at or after this ISO 8601 time.","title":"Updated At Min"},"limit":{"anyOf":[{"maximum":250,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many transactions to return (1 to 250).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's metadata.next_cursor to get the next page.","title":"Cursor"}},"title":"list_points_transactionsArguments","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_points_transaction":{"post":{"operationId":"get_points_transaction","summary":"Get one points transaction by id. Use for \"Show Smile points transaction 555\".","description":"Get one points transaction by id. Use for \"Show Smile points transaction 555\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Points transaction id (a number).","maxLength":200,"title":"Id","type":"string"}},"required":["id"],"title":"get_points_transactionArguments","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_earning_rules":{"post":{"operationId":"list_earning_rules","summary":"List the ways customers earn points (earning rules): name, reward type and value, VIP restrictions and limits. Use for \"","description":"List the ways customers earn points (earning rules): name, reward type and value, VIP restrictions and limits. Use for \"How can customers earn points in my Smile program\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":250,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many earning rules to return (1 to 250).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's metadata.next_cursor to get the next page.","title":"Cursor"}},"title":"list_earning_rulesArguments","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_points_products":{"post":{"operationId":"list_points_products","summary":"List rewards customers can buy with points (points products): reward name, description, fixed price or variable range. P","description":"List rewards customers can buy with points (points products): reward name, description, fixed price or variable range. Pages by page number. Use for \"What rewards can Smile members redeem points for\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"exchange_type":{"anyOf":[{"enum":["fixed","variable"],"type":"string"},{"type":"null"}],"default":null,"description":"Only fixed-price or variable-amount products.","title":"Exchange Type"},"page_size":{"anyOf":[{"maximum":250,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many products per page (1 to 250).","title":"Page Size"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"title":"list_points_productsArguments","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_points_product":{"post":{"operationId":"get_points_product","summary":"Get one points product (a reward customers can buy with points) by id. Use for \"Show Smile points product 77\".","description":"Get one points product (a reward customers can buy with points) by id. Use for \"Show Smile points product 77\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Points product id (a number).","maxLength":200,"title":"Id","type":"string"}},"required":["id"],"title":"get_points_productArguments","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_points_settings":{"post":{"operationId":"get_points_settings","summary":"Show how the program names its points (singular and plural label). Use for \"What does my Smile program call its points\".","description":"Show how the program names its points (singular and plural label). Use for \"What does my Smile program call its points\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_points_settingsArguments","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_referral_settings":{"post":{"operationId":"get_referral_settings","summary":"Show whether the referral program is active and the sender and receiver reward names. Use for \"Is the Smile referral pro","description":"Show whether the referral program is active and the sender and receiver reward names. Use for \"Is the Smile referral program active and what do referrers get\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_referral_settingsArguments","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_vip_tiers":{"post":{"operationId":"list_vip_tiers","summary":"List VIP tiers with name and the milestone needed to reach each, optionally with perks and entry rewards. Use for \"What ","description":"List VIP tiers with name and the milestone needed to reach each, optionally with perks and entry rewards. Use for \"What VIP tiers does my Smile program have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"include":{"anyOf":[{"enum":["perks","entry_rewards","perks,entry_rewards"],"type":"string"},{"type":"null"}],"default":null,"description":"Related objects to include: perks, entry_rewards or both comma-separated.","title":"Include"}},"title":"list_vip_tiersArguments","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}}}}