{"openapi":"3.1.0","info":{"title":"UserCheck (BYOK) API","version":"0.1.0","description":"UserCheck (BYOK) lets an AI assistant read your own UserCheck data through the UserCheck API with a key you supply (UserCheck API key). Read-only: 9 tools (check_email, check_domain, get_account_usage, list_blocklist, list_gates, get_gate, list_gate_rules, get_gate_rule, list_gate_decisions). 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-usercheck.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-usercheck/docs"},"termsOfService":"https://connectorbay.com/byok-usercheck/terms"},"servers":[{"url":"https://byok-usercheck.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-usercheck/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/check_email":{"post":{"operationId":"check_email","summary":"Check an email address for disposable, relay, spam, role-account and public-provider signals, plus mail setup (MX, SPF, ","description":"Check an email address for disposable, relay, spam, role-account and public-provider signals, plus mail setup (MX, SPF, DMARC), domain age and a typo suggestion. Uses 1 credit of your monthly quota. Use for \"Is octocat@github.com a disposable or role-account email address\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"email":{"description":"The email address to check, for example octocat@github.com.","maxLength":254,"title":"Email","type":"string"},"include_mx":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"False to skip the MX lookup, which is faster.","title":"Include Mx"}},"required":["email"],"title":"check_emailArguments","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_domain":{"post":{"operationId":"check_domain","summary":"Check a domain for disposable, relay, spam and public-provider signals, plus mail setup (MX, SPF, DMARC), age, authority","description":"Check a domain for disposable, relay, spam and public-provider signals, plus mail setup (MX, SPF, DMARC), age, authority and a typo suggestion. Uses 1 credit of your monthly quota. Use for \"Is mailinator.com a disposable email domain\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"The domain to check, for example github.com.","maxLength":253,"title":"Domain","type":"string"},"include_mx":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"False to skip the MX lookup, which is faster.","title":"Include Mx"}},"required":["domain"],"title":"check_domainArguments","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_usage":{"post":{"operationId":"get_account_usage","summary":"Show the plan name, request rate limit and credits used, remaining and when they reset. The account holder's name and em","description":"Show the plan name, request rate limit and credits used, remaining and when they reset. The account holder's name and email are not returned by this tool. Use for \"How many UserCheck credits do I have left this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_account_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/list_blocklist":{"post":{"operationId":"list_blocklist","summary":"List the domains on your account's custom blocklist for the key's environment, newest first. Use for \"Which domains are ","description":"List the domains on your account's custom blocklist for the key's environment, newest first. Use for \"Which domains are on our UserCheck blocklist\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Results per page (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"title":"list_blocklistArguments","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_gates":{"post":{"operationId":"list_gates","summary":"List your gates (allow, block or challenge rule sets) with default action and rule count. Use for \"Which UserCheck gates","description":"List your gates (allow, block or challenge rule sets) with default action and rule count. Use for \"Which UserCheck gates do we have and what is their default action\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_gatesArguments","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_gate":{"post":{"operationId":"get_gate","summary":"Get one gate by ID: name, environment, default action and rule count. Use for \"What is the default action of a given Use","description":"Get one gate by ID: name, environment, default action and rule count. Use for \"What is the default action of a given UserCheck gate\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"gate_id":{"description":"Gate ID from list_gates.","maxLength":200,"title":"Gate Id","type":"string"}},"required":["gate_id"],"title":"get_gateArguments","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_gate_rules":{"post":{"operationId":"list_gate_rules","summary":"List a gate's rules in evaluation order with name, action, match mode, enabled flag and conditions. Use for \"What rules ","description":"List a gate's rules in evaluation order with name, action, match mode, enabled flag and conditions. Use for \"What rules does our UserCheck signup gate have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"gate_id":{"description":"Gate ID from list_gates.","maxLength":200,"title":"Gate Id","type":"string"}},"required":["gate_id"],"title":"list_gate_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/get_gate_rule":{"post":{"operationId":"get_gate_rule","summary":"Get one rule of a gate: name, action, match mode, enabled flag and conditions. Use for \"Show one UserCheck gate rule in ","description":"Get one rule of a gate: name, action, match mode, enabled flag and conditions. Use for \"Show one UserCheck gate rule in full\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"gate_id":{"description":"Gate ID from list_gates.","maxLength":200,"title":"Gate Id","type":"string"},"rule_id":{"description":"Rule ID from list_gate_rules.","maxLength":200,"title":"Rule Id","type":"string"}},"required":["gate_id","rule_id"],"title":"get_gate_ruleArguments","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_gate_decisions":{"post":{"operationId":"list_gate_decisions","summary":"List a gate's recent decisions with action, deciding rule, domain, country and detected anonymity type. Email addresses ","description":"List a gate's recent decisions with action, deciding rule, domain, country and detected anonymity type. Email addresses and IP addresses are not returned by this tool. Use for \"How many signups did our UserCheck gate block this week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"gate_id":{"description":"Gate ID from list_gates.","maxLength":200,"title":"Gate Id","type":"string"},"period":{"anyOf":[{"enum":["24h","7d","30d"],"type":"string"},{"type":"null"}],"default":"30d","description":"Lookback window: 24h, 7d or 30d.","title":"Period"},"action":{"anyOf":[{"enum":["allow","block","challenge"],"type":"string"},{"type":"null"}],"default":null,"description":"Only decisions with this action: allow, block or challenge.","title":"Action"},"country":{"anyOf":[{"maxLength":2,"type":"string"},{"type":"null"}],"default":null,"description":"Only decisions for this two-letter country code.","title":"Country"},"anonymity":{"anyOf":[{"enum":["vpn","proxy","tor","relay"],"type":"string"},{"type":"null"}],"default":null,"description":"Only decisions where this anonymity type was detected: vpn, proxy, tor or relay.","title":"Anonymity"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Results per page (1 to 100).","title":"Per Page"}},"required":["gate_id"],"title":"list_gate_decisionsArguments","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}}}}