# IP Allowlist

Use these operations to interact with the [IP allowlist](/configure/settings/ip-allowlist.md) in Cortex.

### Required permissions

Your API key must have the `Configure IP allowlist` permission.

## Operations

## GET /api/v1/ip-allowlist

> Gets allowlist of IP addresses & ranges

```json
{"openapi":"3.0.1","info":{"title":"Cortex API","version":"v1"},"tags":[{"name":"IP Allowlist"}],"servers":[{"url":"https://api.getcortexapp.com","description":"Cortex Cloud API host"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"bearerFormat":"JWT","description":"All requests to the Cortex API need to provide an `Authorization: Bearer <token>` header, where `<token>` is an API key created in the Settings page of your workspace.","scheme":"bearer","type":"http"}},"schemas":{"IpAllowlistResponse":{"required":["entries","page","total","totalPages"],"type":"object","properties":{"entries":{"type":"array","description":"Allowlist entries","items":{"$ref":"#/components/schemas/IpAllowlistEntry"}},"page":{"type":"integer","description":"Current page number, 0-indexed","format":"int32"},"total":{"type":"integer","description":"Total number of results","format":"int32"},"totalPages":{"type":"integer","description":"Total number of pages","format":"int32"}}},"IpAllowlistEntry":{"required":["address"],"type":"object","properties":{"address":{"type":"string","description":"IP address or range"},"description":{"type":"string","description":"Description of an entry"}},"description":"Allowlist entries"},"TooManyRequestsProblemDetail":{"required":["type","title","status"],"type":"object","properties":{"detail":{"type":"string"},"instance":{"type":"string","format":"uri-reference"},"retryAfter":{"minimum":0,"type":"integer","description":"The number of seconds until the rate limiting resets.","format":"int32"},"status":{"maximum":599,"minimum":100,"type":"integer","format":"int32","enum":[429]},"title":{"type":"string"},"type":{"type":"string","format":"uri-reference"}}}},"responses":{"TooManyRequests":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/TooManyRequestsProblemDetail"}}},"description":"The client has exceeded the rate limit by performing too many requests in a short period. Retry the request after a delay.","headers":{"Retry-After":{"description":"The number of seconds until the rate limiting resets.","schema":{"minimum":0,"type":"integer","format":"int32"}}}}}},"paths":{"/api/v1/ip-allowlist":{"get":{"operationId":"listAllowedIpAddresses","parameters":[{"description":"Number of results to return per page, between 1 and 1000. Default 250.","in":"query","name":"pageSize","required":true,"schema":{"type":"integer","format":"int32","default":250}},{"description":"Page number to return, 0-indexed. Default 0.","in":"query","name":"page","required":true,"schema":{"type":"integer","format":"int32","default":0}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpAllowlistResponse"}}},"description":"Successfully retrieved IP allowlist"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"summary":"Gets allowlist of IP addresses & ranges","tags":["IP Allowlist"]}}}}
```

## POST /api/v1/ip-allowlist/validate

> Validates allowlist of IP addresses & ranges

```json
{"openapi":"3.0.1","info":{"title":"Cortex API","version":"v1"},"tags":[{"name":"IP Allowlist"}],"servers":[{"url":"https://api.getcortexapp.com","description":"Cortex Cloud API host"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"bearerFormat":"JWT","description":"All requests to the Cortex API need to provide an `Authorization: Bearer <token>` header, where `<token>` is an API key created in the Settings page of your workspace.","scheme":"bearer","type":"http"}},"schemas":{"IpAllowlistRequest":{"required":["entries"],"type":"object","properties":{"entries":{"type":"array","description":"Allowlist entries","items":{"$ref":"#/components/schemas/IpAllowlistEntry"}}}},"IpAllowlistEntry":{"required":["address"],"type":"object","properties":{"address":{"type":"string","description":"IP address or range"},"description":{"type":"string","description":"Description of an entry"}},"description":"Allowlist entries"},"ValidIpAllowlistEntry":{"required":["address","valid"],"type":"object","properties":{"address":{"type":"string","description":"IP address or range"},"description":{"type":"string","description":"Description of an entry"},"valid":{"type":"boolean"}}},"InvalidIpAllowlistEntry":{"required":["address","message","valid"],"type":"object","properties":{"address":{"type":"string","description":"IP address or range"},"description":{"type":"string","description":"Description of an entry"},"message":{"type":"string","description":"Validation error message"},"valid":{"type":"boolean"}}},"TooManyRequestsProblemDetail":{"required":["type","title","status"],"type":"object","properties":{"detail":{"type":"string"},"instance":{"type":"string","format":"uri-reference"},"retryAfter":{"minimum":0,"type":"integer","description":"The number of seconds until the rate limiting resets.","format":"int32"},"status":{"maximum":599,"minimum":100,"type":"integer","format":"int32","enum":[429]},"title":{"type":"string"},"type":{"type":"string","format":"uri-reference"}}}},"responses":{"TooManyRequests":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/TooManyRequestsProblemDetail"}}},"description":"The client has exceeded the rate limit by performing too many requests in a short period. Retry the request after a delay.","headers":{"Retry-After":{"description":"The number of seconds until the rate limiting resets.","schema":{"minimum":0,"type":"integer","format":"int32"}}}}}},"paths":{"/api/v1/ip-allowlist/validate":{"post":{"operationId":"validateAllowedIpAddresses","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpAllowlistRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ValidIpAllowlistEntry"},{"$ref":"#/components/schemas/InvalidIpAllowlistEntry"}]}}},"description":"Successfully validated allowlist"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"summary":"Validates allowlist of IP addresses & ranges","tags":["IP Allowlist"]}}}}
```

## PUT /api/v1/ip-allowlist

> Replace existing allowlist with provided list of IP addresses & ranges

```json
{"openapi":"3.0.1","info":{"title":"Cortex API","version":"v1"},"tags":[{"name":"IP Allowlist"}],"servers":[{"url":"https://api.getcortexapp.com","description":"Cortex Cloud API host"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"bearerFormat":"JWT","description":"All requests to the Cortex API need to provide an `Authorization: Bearer <token>` header, where `<token>` is an API key created in the Settings page of your workspace.","scheme":"bearer","type":"http"}},"schemas":{"IpAllowlistRequest":{"required":["entries"],"type":"object","properties":{"entries":{"type":"array","description":"Allowlist entries","items":{"$ref":"#/components/schemas/IpAllowlistEntry"}}}},"IpAllowlistEntry":{"required":["address"],"type":"object","properties":{"address":{"type":"string","description":"IP address or range"},"description":{"type":"string","description":"Description of an entry"}},"description":"Allowlist entries"},"IpAllowlistResponse":{"required":["entries","page","total","totalPages"],"type":"object","properties":{"entries":{"type":"array","description":"Allowlist entries","items":{"$ref":"#/components/schemas/IpAllowlistEntry"}},"page":{"type":"integer","description":"Current page number, 0-indexed","format":"int32"},"total":{"type":"integer","description":"Total number of results","format":"int32"},"totalPages":{"type":"integer","description":"Total number of pages","format":"int32"}}},"ErrorResponse":{"required":["message","type"],"type":"object","properties":{"details":{"type":"string"},"gatewayHttpStatus":{"type":"integer","format":"int32"},"httpStatus":{"type":"integer","format":"int32"},"message":{"type":"string"},"requestId":{"type":"string"},"type":{"type":"string","enum":["INTEGRATION_MISSING","INTEGRATION_UNREGISTERED","INTEGRATION_UNSUPPORTED","INTEGRATION_GRAPHQL_ERROR","INTEGRATION_BAD_REQUEST","INTEGRATION_UNAUTHORIZED","INTEGRATION_FORBIDDEN","INTEGRATION_NOT_FOUND","INTEGRATION_UNPROCESSABLE_CONTENT","INTEGRATION_RATE_LIMITED","INTEGRATION_INTERNAL_ERROR","INTEGRATION_NOT_IMPLEMENTED","INTEGRATION_BAD_GATEWAY","INTEGRATION_UNAVAILABLE","INTEGRATION_GATEWAY_TIMEOUT","INTEGRATION_TIMED_OUT","INTEGRATION_CACHE_ERROR","INTEGRATION_UNHANDLED_HTTP_ERROR","INTEGRATION_UNHANDLED_EXCEPTION","INTEGRATION_UNEXPECTED_ERROR","ILLEGAL_ARGUMENT_ERROR","BAD_REQUEST","FORBIDDEN","NOT_FOUND","REQUEST_TIMEOUT","CONFLICT","UNHANDLED_EXCEPTION","UNCATEGORIZED","SERVICE_CREATOR","UNKNOWN_HOST","TOO_MANY_REQUESTS"]}}},"TooManyRequestsProblemDetail":{"required":["type","title","status"],"type":"object","properties":{"detail":{"type":"string"},"instance":{"type":"string","format":"uri-reference"},"retryAfter":{"minimum":0,"type":"integer","description":"The number of seconds until the rate limiting resets.","format":"int32"},"status":{"maximum":599,"minimum":100,"type":"integer","format":"int32","enum":[429]},"title":{"type":"string"},"type":{"type":"string","format":"uri-reference"}}}},"responses":{"TooManyRequests":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/TooManyRequestsProblemDetail"}}},"description":"The client has exceeded the rate limit by performing too many requests in a short period. Retry the request after a delay.","headers":{"Retry-After":{"description":"The number of seconds until the rate limiting resets.","schema":{"minimum":0,"type":"integer","format":"int32"}}}}}},"paths":{"/api/v1/ip-allowlist":{"put":{"operationId":"upsertAllowedIpAddresses","parameters":[{"description":"When true, entries will be updated even if the list doesn't contain the requestor's IP address","in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpAllowlistRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpAllowlistResponse"}}},"description":"Successfully replaced allowlist"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"summary":"Replace existing allowlist with provided list of IP addresses & ranges","tags":["IP Allowlist"]}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.cortex.io/api/readme/ip-allowlist.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
