Update a configurable Test IP fixture
Update a configurable Test IP fixture. This action uses the same domain service from REST and MCP, so successful calls produce the same canonical domain result.
Authorization and availability
Required scope: test_fixtures:write. Available in Test. REST operation: PUT /v1/test-fixtures/ip/{address}. Equivalent MCP tool: veltor_update_ip_fixture.
Request schema
Unknown fields are rejected. Path values shown in the route are combined with the JSON body or query input before validation.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"address": {
"type": "string",
"maxLength": 45
},
"fixture": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"available",
"unavailable"
]
},
"payload": {
"anyOf": [
{
"type": "object",
"properties": {
"schema_version": {
"type": "number",
"const": 1
},
"ip_version": {
"anyOf": [
{
"type": "number",
"const": 4
},
{
"type": "number",
"const": 6
}
]
},
"geography": {
"type": "object",
"properties": {
"continent": {
"type": "object",
"properties": {
"geoname_id": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"names": {
"default": {},
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"code": {
"anyOf": [
{
"type": "string",
"maxLength": 2
},
{
"type": "null"
}
]
}
},
"required": [
"geoname_id",
"names",
"code"
],
"additionalProperties": false
},
"country": {
"type": "object",
"properties": {
"geoname_id": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"names": {
"default": {},
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"iso_code": {
"anyOf": [
{
"type": "string",
"minLength": 2,
"maxLength": 2
},
{
"type": "null"
}
]
},
"confidence": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 100
},
{
"type": "null"
}
]
},
"is_in_european_union": {
"type": "boolean"
}
},
"required": [
"geoname_id",
"names",
"iso_code",
"confidence",
"is_in_european_union"
],
"additionalProperties": false
},
"registered_country": {
"type": "object",
"properties": {
"geoname_id": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"names": {
"default": {},
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"iso_code": {
"anyOf": [
{
"type": "string",
"minLength": 2,
"maxLength": 2
},
{
"type": "null"
}
]
},
"is_in_european_union": {
"type": "boolean"
}
},
"required": [
"geoname_id",
"names",
"iso_code",
"is_in_european_union"
],
"additionalProperties": false
},
"represented_country": {
"type": "object",
"properties": {
"geoname_id": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"names": {
"default": {},
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"iso_code": {
"anyOf": [
{
"type": "string",
"minLength": 2,
"maxLength": 2
},
{
"type": "null"
}
]
},
"is_in_european_union": {
"type": "boolean"
},
"type": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
}
},
"required": [
"geoname_id",
"names",
"iso_code",
"is_in_european_union",
"type"
],
"additionalProperties": false
},
"subdivisions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"geoname_id": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"names": {
"default": {},
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"iso_code": {
"anyOf": [
{
"type": "string",
"maxLength": 3
},
{
"type": "null"
}
]
},
"confidence": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 100
},
{
"type": "null"
}
]
}
},
"required": [
"geoname_id",
"names",
"iso_code",
"confidence"
],
"additionalProperties": false
}
},
"city": {
"type": "object",
"properties": {
"geoname_id": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"names": {
"default": {},
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"confidence": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 100
},
{
"type": "null"
}
]
}
},
"required": [
"geoname_id",
"names",
"confidence"
],
"additionalProperties": false
},
"postal": {
"type": "object",
"properties": {
"code": {
"anyOf": [
{
"type": "string",
"maxLength": 32
},
{
"type": "null"
}
]
},
"confidence": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 100
},
{
"type": "null"
}
]
}
},
"required": [
"code",
"confidence"
],
"additionalProperties": false
},
"location": {
"type": "object",
"properties": {
"latitude": {
"anyOf": [
{
"type": "number",
"minimum": -90,
"maximum": 90
},
{
"type": "null"
}
]
},
"longitude": {
"anyOf": [
{
"type": "number",
"minimum": -180,
"maximum": 180
},
{
"type": "null"
}
]
},
"accuracy_radius_km": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
},
"time_zone": {
"anyOf": [
{
"type": "string",
"maxLength": 80
},
{
"type": "null"
}
]
}
},
"required": [
"latitude",
"longitude",
"accuracy_radius_km",
"time_zone"
],
"additionalProperties": false
}
},
"required": [
"continent",
"country",
"registered_country",
"represented_country",
"subdivisions",
"city",
"postal",
"location"
],
"additionalProperties": false
},
"network": {
"type": "object",
"properties": {
"cidr": {
"anyOf": [
{
"type": "string",
"maxLength": 64
},
{
"type": "null"
}
]
},
"asn": {
"anyOf": [
{
"type": "integer",
"minimum": 1,
"maximum": 4294967295
},
{
"type": "null"
}
]
},
"autonomous_system_organization": {
"anyOf": [
{
"type": "string",
"maxLength": 255
},
{
"type": "null"
}
]
},
"connection_type": {
"anyOf": [
{
"type": "string",
"enum": [
"cable_dsl",
"cellular",
"corporate",
"dialup",
"satellite"
]
},
{
"type": "null"
}
]
},
"unrecognized_connection_type": {
"anyOf": [
{
"type": "string",
"maxLength": 128
},
{
"type": "null"
}
]
},
"domain": {
"anyOf": [
{
"type": "string",
"maxLength": 255
},
{
"type": "null"
}
]
},
"isp": {
"anyOf": [
{
"type": "string",
"maxLength": 255
},
{
"type": "null"
}
]
},
"organization": {
"anyOf": [
{
"type": "string",
"maxLength": 255
},
{
"type": "null"
}
]
},
"is_anycast": {
"type": "boolean"
},
"mobile_country_code": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{3}$"
},
{
"type": "null"
}
]
},
"mobile_network_code": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2,3}$"
},
{
"type": "null"
}
]
},
"user_count": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"user_type": {
"anyOf": [
{
"type": "string",
"enum": [
"business",
"cafe",
"cellular",
"college",
"consumer_privacy_network",
"content_delivery_network",
"government",
"hosting",
"library",
"military",
"residential",
"router",
"school",
"search_engine_spider",
"traveler"
]
},
{
"type": "null"
}
]
},
"unrecognized_user_type": {
"anyOf": [
{
"type": "string",
"maxLength": 128
},
{
"type": "null"
}
]
}
},
"required": [
"cidr",
"asn",
"autonomous_system_organization",
"connection_type",
"unrecognized_connection_type",
"domain",
"isp",
"organization",
"is_anycast",
"mobile_country_code",
"mobile_network_code",
"user_count",
"user_type",
"unrecognized_user_type"
],
"additionalProperties": false
},
"risk": {
"type": "object",
"properties": {
"ip_risk_snapshot": {
"anyOf": [
{
"type": "number",
"minimum": 0.01,
"maximum": 99
},
{
"type": "null"
}
]
},
"static_ip_score": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 99.99
},
{
"type": "null"
}
]
}
},
"required": [
"ip_risk_snapshot",
"static_ip_score"
],
"additionalProperties": false
},
"anonymizer": {
"type": "object",
"properties": {
"confidence": {
"anyOf": [
{
"type": "integer",
"minimum": 1,
"maximum": 99
},
{
"type": "null"
}
]
},
"is_anonymous": {
"type": "boolean"
},
"is_anonymous_vpn": {
"type": "boolean"
},
"is_hosting_provider": {
"type": "boolean"
},
"is_public_proxy": {
"type": "boolean"
},
"is_residential_proxy": {
"type": "boolean"
},
"is_tor_exit_node": {
"type": "boolean"
},
"network_last_seen": {
"anyOf": [
{
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
{
"type": "null"
}
]
},
"provider_name": {
"anyOf": [
{
"type": "string",
"maxLength": 255
},
{
"type": "null"
}
]
},
"residential": {
"type": "object",
"properties": {
"confidence": {
"anyOf": [
{
"type": "integer",
"minimum": 1,
"maximum": 99
},
{
"type": "null"
}
]
},
"network_last_seen": {
"anyOf": [
{
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
{
"type": "null"
}
]
},
"provider_name": {
"anyOf": [
{
"type": "string",
"maxLength": 255
},
{
"type": "null"
}
]
}
},
"required": [
"confidence",
"network_last_seen",
"provider_name"
],
"additionalProperties": false
}
},
"required": [
"confidence",
"is_anonymous",
"is_anonymous_vpn",
"is_hosting_provider",
"is_public_proxy",
"is_residential_proxy",
"is_tor_exit_node",
"network_last_seen",
"provider_name",
"residential"
],
"additionalProperties": false
}
},
"required": [
"schema_version",
"ip_version",
"geography",
"network",
"risk",
"anonymizer"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"age_hours": {
"type": "number",
"minimum": 0,
"maximum": 2160
},
"fact_overrides": {
"type": "object",
"properties": {
"ip.attempts_1m": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"ip.attempts_1h": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"ip.attempts_24h": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"ip.prior_outcomes": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"additionalProperties": false
}
},
"required": [
"status",
"payload",
"age_hours",
"fact_overrides"
],
"additionalProperties": false
}
},
"required": [
"address",
"fixture"
],
"additionalProperties": false
}Example request payload
{
"address": "192.0.2.224",
"fixture": {
"status": "unavailable",
"payload": null,
"age_hours": 0,
"fact_overrides": {}
}
}Response schema
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}Example success response
REST returns this canonical domain result as JSON. MCP returns the same value in structuredContent and adds only its transport request ID.
{
"id": "00000000-0000-4000-8000-000000000001",
"status": "available"
}Errors and recovery
Relevant errors include invalid input (422), missing scope or organization access (403), missing resources (404), revision or idempotency conflicts (409), rate limits (429), and deadline exhaustion (504). Use the returned request ID when investigating a failure.
Idempotency, retries, and timeout
Send a stable idempotency key and reuse it only for an exact retry of this mutation. The server deadline is 5 seconds. Retry only when the error reports retryable true.
cURL
curl -X PUT https://veltor.dev/v1/test-fixtures/ip/192.0.2.10 \
-H "Authorization: Bearer $VELTOR_SECRET_KEY" \
-H "Veltor-Organization: $VELTOR_ORGANIZATION" \
-H "Idempotency-Key: operation_123" \
-H "Content-Type: application/json" \
--data '{"fixture":{"status":"unavailable","payload":null,"age_hours":0,"fact_overrides":{}}}'Node SDK
const result = await veltor.call("/v1/test-fixtures/ip/192.0.2.10", {
method: "PUT",
input: {"address":"192.0.2.224","fixture":{"status":"unavailable","payload":null,"age_hours":0,"fact_overrides":{}}},
idempotencyKey: "operation_123",
});MCP
veltor_update_ip_fixture({
"address": "192.0.2.224",
"fixture": {
"status": "unavailable",
"payload": null,
"age_hours": 0,
"fact_overrides": {}
},
"idempotency_key": "operation_123"
})