Contract
- shape
- scalar
- authority
- read
- evidence
- none
- subscription
- false
- permission
- any one of: org.member (carried by the caller's role template in the org `org_id`); a deactivated caller is refused first
- idempotency
- safe
- emits
- none
- MCP tool
- check_ip_allowlist
- REST
- POST https://api.containertradehq.com/v1/cap/check_ip_allowlist
Idempotency: a read: calling again changes nothing
Inputs
| name | type | required | validation |
|---|---|---|---|
| org_id | org_id | required | tradehq-org-id; 1 to 20 characters The org whose IP allowlist to check this request's address against. |
Response
org_id· string · The org.address· stringnull · This request's client address, IPv4-mapped IPv6 read as IPv4; null when none could be read.via· string · cloudflare: Cloudflare's CF-Connecting-IP, from Cloudflare with the origin-auth header. edge: the address the request reached front-door from.in_list· boolean · Whether a range of the allowlist covers the address.entry· objectnull · The range that covers the address, {cidr, label}; null when none does.mode· string · The allowlist's mode.applies_to· string · Who the allowlist checks.enforce_available· boolean · Whether enforce mode can be set on this deployment: front-door's ingress self-check.ingress· object · The self-check's parts: ingress_authenticated, origin_auth_configured, generated_domain (unknown, absent, refuses or serves) and cloudflare_seen.
Full JSON Schema
{
"type": "object",
"properties": {
"org_id": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^[A-Za-z0-9_-]{1,20}$",
"format": "tradehq-org-id",
"description": "The org.",
"x-data-class": "operational"
},
"address": {
"type": [
"string",
"null"
],
"description": "This request's client address, IPv4-mapped IPv6 read as IPv4; null when none could be read.",
"x-data-class": "operational"
},
"via": {
"type": "string",
"enum": [
"cloudflare",
"edge"
],
"description": "cloudflare: Cloudflare's CF-Connecting-IP, from Cloudflare with the origin-auth header. edge: the address the request reached front-door from.",
"x-data-class": "operational"
},
"in_list": {
"type": "boolean",
"description": "Whether a range of the allowlist covers the address.",
"x-data-class": "operational"
},
"entry": {
"type": [
"object",
"null"
],
"description": "The range that covers the address, {cidr, label}; null when none does.",
"x-data-class": "operational"
},
"mode": {
"type": "string",
"enum": [
"off",
"monitor",
"enforce"
],
"description": "The allowlist's mode.",
"x-data-class": "operational"
},
"applies_to": {
"type": "string",
"enum": [
"members",
"api_keys",
"both"
],
"description": "Who the allowlist checks.",
"x-data-class": "operational"
},
"enforce_available": {
"type": "boolean",
"description": "Whether enforce mode can be set on this deployment: front-door's ingress self-check.",
"x-data-class": "operational"
},
"ingress": {
"type": "object",
"description": "The self-check's parts: ingress_authenticated, origin_auth_configured, generated_domain (unknown, absent, refuses or serves) and cloudflare_seen.",
"x-data-class": "operational"
}
},
"required": [
"org_id",
"address",
"via",
"in_list",
"entry",
"mode",
"applies_to",
"enforce_available",
"ingress"
],
"additionalProperties": false
} Refusals
security_policy_unenforced· 422 · the org's stored network section does not parse
The platform refusals apply to every call: version, authentication, authority, validation and rate limits, each in the same envelope.
Surfaces
DesktopF
MobileF
APIF
MCPF
VoiceD4
PushN
OneBoxN
OutboundN
- Voice: degraded: visualization
- Push: emits nothing
- OneBox: no document originates a network check
- Outbound: crosses to no counterparty
Events
None emitted.
Related
None.