API reference · Networking / VPC networks
VPC networks
Private networks, their subnets, and the firewall rules on each subnet.
A VPC is a private network of your own. Create one, add subnets inside its CIDR, then create instances with a subnet_id. Each subnet has numbered firewall rules, evaluated lowest number first; the first match decides. To reach a VPC instance from the internet, give it a public IP.
The network object
A VPC: a private network of your own.
Fields
idstringrequirede.g.
net_....namestringrequiredIts name, unique among your VPC networks.
cidrstringrequirede.g.
10.0.0.0/16.regionstring or nulle.g.
af-abj.zonestring or nulle.g.
af-abj-2.instance_countinteger or nullInstances in this VPC; null when it could not be counted.
desired_statestringrequiredWhat you asked for:
present, ordeletedonce you deleted it.One of
present,deleted.observed_statestringrequiredWhat the platform last observed:
pendingandprovisioningwhile it is being created,activeonce ready,deleting/deletedon the way out,failedif it could not be made,unknownwhen it could not be checked.One of
pending,provisioning,active,deleting,deleted,failed,unknown.created_atstring or nullWhen it was created (RFC 3339, UTC).
updated_atstring or nullWhen it last changed (RFC 3339, UTC).
The subnet object
Fields
idstringrequirede.g.
snet_....network_idstringrequirednamestringrequiredIts name.
cidrstringrequiredInside the VPC's CIDR.
regionstring or nulle.g.
af-abj.zonestring or nulle.g.
af-abj-2.instance_countinteger or nullInstances in this subnet; null when they could not be counted.
desired_statestringrequiredWhat you asked for:
present, ordeletedonce you deleted it.One of
present,deleted.observed_statestringrequiredWhat the platform last observed:
pendingandprovisioningwhile it is being created,activeonce ready,deleting/deletedon the way out,failedif it could not be made,unknownwhen it could not be checked.One of
pending,provisioning,active,deleting,deleted,failed,unknown.created_atstring or nullWhen it was created (RFC 3339, UTC).
updated_atstring or nullWhen it last changed (RFC 3339, UTC).
The firewall rule object
Fields
idstringrequirede.g.
aclr_....subnet_idstringrequiredThe subnet the rule applies to, as a whole.
numberintegerrequiredEvaluation order, 100-9999; lowest first.
From 100 to 9999.
directionstringrequiredingress(into the subnet) oregress(out of it).One of
ingress,egress.protocolstringrequiredtcp,udp,icmporall.One of
tcp,udp,icmp,all.port_startinteger or nullFirst port, for
tcp/udp; null otherwise.port_endinteger or nullLast port, for
tcp/udp; null otherwise.icmp_typeinteger or nullICMP type, for
icmp; null for every type.icmp_codeinteger or nullICMP code, for
icmp; null for every code.cidrstringrequiredSource (ingress) or destination (egress), e.g.
0.0.0.0/0.actionstringrequiredallowordeny.One of
allow,deny.desired_statestringrequiredWhat you asked for:
present, ordeletedonce you deleted it.One of
present,deleted.observed_statestringrequiredWhat the platform last observed:
pendingandprovisioningwhile it is being created,activeonce ready,deleting/deletedon the way out,failedif it could not be made,unknownwhen it could not be checked.One of
pending,provisioning,active,deleting,deleted,failed,unknown.created_atstring or nullWhen it was created (RFC 3339, UTC).
updated_atstring or nullWhen it last changed (RFC 3339, UTC).
List VPC networks
Your VPC networks, newest first. Filter by name with q, or by state.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Query parameters
limitintegerItems per page, 1 to 100. Defaults to 50.
From 1 to 100. Defaults to
50.cursorstringThe previous page's
next_cursor, to get the next page. Leave out for the first page; keep the other parameters the same.qstringOnly items whose name contains this text (case-insensitive), at most 255 characters.
At most 255 characters.
desired_statestringOnly items with this
desired_state:presentordeleted.One of
present,deleted.observed_statestringOnly items with this
observed_state.One of
pending,provisioning,active,deleting,deleted,failed,unknown.
Response 200
A page of networks.dataarray of NetworkrequiredShow 10 child fieldsHide child fields
idstringrequirede.g.
net_....namestringrequiredIts name, unique among your VPC networks.
cidrstringrequirede.g.
10.0.0.0/16.regionstring or nulle.g.
af-abj.zonestring or nulle.g.
af-abj-2.instance_countinteger or nullInstances in this VPC; null when it could not be counted.
desired_statestringrequiredWhat you asked for:
present, ordeletedonce you deleted it.One of
present,deleted.observed_statestringrequiredWhat the platform last observed:
pendingandprovisioningwhile it is being created,activeonce ready,deleting/deletedon the way out,failedif it could not be made,unknownwhen it could not be checked.One of
pending,provisioning,active,deleting,deleted,failed,unknown.created_atstring or nullWhen it was created (RFC 3339, UTC).
updated_atstring or nullWhen it last changed (RFC 3339, UTC).
next_cursorstring or nullrequiredPass as
cursorfor the next page; null on the last page.
Errors
- 400
INVALID_PAGE:limitis not a whole number from 1 to 100. Send a value in that range, or leave it out for 50.INVALID_CURSOR:cursordoes not belong to this list with these filters. Start again without a cursor.INVALID_FILTER:qis longer than 255 characters, ordesired_stateorobserved_stateis not one of its listed values. Fix the parameter named indetail. - 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access.FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin.AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps. - 429
RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.
Every code is explained in Errors.
curl "https://api.pantechdynamics.com/public/v1/networks" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"data": [
{
"id": "net_06gk3x9tq7m2v8r4y1c5d0zp8w",
"name": "prod",
"cidr": "10.0.0.0/16",
"region": "af-abj",
"zone": "af-abj-1",
"instance_count": 2,
"desired_state": "present",
"observed_state": "active",
"created_at": "2026-10-03T09:30:00Z",
"updated_at": "2026-10-03T09:30:00Z"
}
],
"next_cursor": "eyJhdCI6IjIwMjYtMTAtMDNUMDk6MzA6MDBaIiwiaWQiOiJ2bV8wNmdrIn0"
}Create a VPC network
Creates a VPC: a private network of your own, with a CIDR such as 10.0.0.0/16. Then add subnets to it, and instances or databases to the subnets. A VPC is billed monthly: see Price a VPC network.
Returns 202 Accepted with an operation_id (also in the Location header). The change happens in the background: poll GET /public/v1/operations/{operation_id}, or stream /events, until status is succeeded or failed; a failed operation carries a stable failure.code and a readable failure.reason. The network's id is the operation's resource_id.
Send an Idempotency-Key. A retry with the same key returns the original operation instead of making the change twice.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….Idempotency-KeystringrequiredA new value, such as a UUID, for each change. Resend with the same value to retry safely.
At most 255 characters.
Body
application/jsonnamestringrequired1 to 255 characters, unique among your VPC networks.
At most 255 characters.
cidrstringrequiredThe VPC's private IPv4 range, e.g.
10.0.0.0/16. Subnets are carved from it.regionstringA region from
GET /public/v1/regionsthat offers VPC networks. Defaults to the platform's region.
Response 202
Accepted. Followoperation_id until it finishes.operation_idstringrequiredThe operation carrying out the change. Poll
GET /public/v1/operations/{operation_id}(also theLocationheader) untilstatusissucceededorfailed.resource_idstringrequiredThe resource being created or changed, e.g. the new snapshot's id for a snapshot create.
statusstringrequiredThe operation's status when the request was accepted, usually
submitting. Followoperation_idfor the outcome.
Errors
- 400
IDEMPOTENCY_KEY_REQUIRED: theIdempotency-Keyheader is missing. Send a new unique value, such as a UUID, with every write.INVALID_IDEMPOTENCY_KEY: theIdempotency-Keyheader is longer than 255 characters. Use a shorter value.INVALID_REQUEST_BODY: the body is not a single valid JSON object. Send one JSON object with the fields documented for this endpoint. - 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access.FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin.AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps. - 409
NETWORK_NAME_TAKEN: you already have a VPC with this name. Choose a different name.ACCOUNT_SUSPENDED: an invoice is overdue, or the organization was suspended for non-payment. Pay the outstanding invoice in the console, then retry.PROVIDER_ACCOUNT_NOT_READY: your organization's cloud account is still being set up, which takes a few minutes after sign-up. Retry shortly.CONCURRENT_UPDATE: the resource changed while this request was being processed. Retry the request; if it repeats, read the resource first. - 413
REQUEST_TOO_LARGE: the body is larger than 64 KiB. Send a smaller request. - 422
VALIDATION_FAILED: a field is invalid. Each entry oferrorsnames thefieldand itscode:nameREQUIREDorNAME_TOO_LONG: send a name of 1 to 255 characters.cidrREQUIRED: send an IPv4 CIDR such as10.0.0.0/16.regionREGION_NOT_AVAILABLE: this region cannot take VPC networks now. Pick one fromGET /public/v1/regions.UNKNOWN_FIELD: the body has a field this endpoint does not take (named infield). Remove it or fix its spelling.VALIDATION_FAILEDwith noerrorsentry:cidris not a valid IPv4 CIDR. - 429
RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.PROVISIONING_UNAVAILABLE: the provisioning service is temporarily unavailable. Wait a few seconds, then retry with the sameIdempotency-Key.
Every code is explained in Errors.
curl -X POST "https://api.pantechdynamics.com/public/v1/networks" \
-H "Authorization: Bearer $PANTECH_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"name": "prod",
"cidr": "10.0.0.0/16"
}'{
"operation_id": "op_06gk3x9tq7m2v8r4y1c5d0zp8w",
"resource_id": "net_06gk3x9tq7m2v8r4y1c5d0zp8w",
"status": "submitting"
}Price a VPC network
What one more VPC network costs per month, in your organization's currency. priced is false, with an unpriced_reason, when no price applies.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Response 200
The price.currencystringrequiredNGNorUSD.monthly_minorintegerrequiredPrice for a full month in minor units of
currency.nominal_month_hoursintegerrequiredHours in the month the price assumes: 730.
Errors
- 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access.FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin.AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps. - 404
NOT_FOUND: cost quotes are not available on this platform yet. - 429
RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.
Every code is explained in Errors.
curl "https://api.pantechdynamics.com/public/v1/networks/quote" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"currency": "NGN",
"monthly_minor": 1700000,
"nominal_month_hours": 730
}Get a VPC network
One VPC network, with the number of instances in it.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Path parameters
network_idstringrequiredThe resource's id.
Response 200
The network.idstringrequirede.g.
net_....namestringrequiredIts name, unique among your VPC networks.
cidrstringrequirede.g.
10.0.0.0/16.regionstring or nulle.g.
af-abj.zonestring or nulle.g.
af-abj-2.instance_countinteger or nullInstances in this VPC; null when it could not be counted.
desired_statestringrequiredWhat you asked for:
present, ordeletedonce you deleted it.One of
present,deleted.observed_statestringrequiredWhat the platform last observed:
pendingandprovisioningwhile it is being created,activeonce ready,deleting/deletedon the way out,failedif it could not be made,unknownwhen it could not be checked.One of
pending,provisioning,active,deleting,deleted,failed,unknown.created_atstring or nullWhen it was created (RFC 3339, UTC).
updated_atstring or nullWhen it last changed (RFC 3339, UTC).
Errors
- 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access.FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin.AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps. - 404
RESOURCE_NOT_FOUND: no VPC network with this id in your organization, or the id is not a VPC network id (net_…). Check the id. - 429
RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.
Every code is explained in Errors.
curl "https://api.pantechdynamics.com/public/v1/networks/net_06gk3x9tq7m2v8r4y1c5d0zp8w" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"id": "net_06gk3x9tq7m2v8r4y1c5d0zp8w",
"name": "prod",
"cidr": "10.0.0.0/16",
"region": "af-abj",
"zone": "af-abj-1",
"instance_count": 2,
"desired_state": "present",
"observed_state": "active",
"created_at": "2026-10-03T09:30:00Z",
"updated_at": "2026-10-03T09:30:00Z"
}Delete a VPC network
Deletes a VPC network. It must hold no instances (in any of its subnets) and no public IPs.
Returns 202 Accepted with an operation_id (also in the Location header). The change happens in the background: poll GET /public/v1/operations/{operation_id}, or stream /events, until status is succeeded or failed; a failed operation carries a stable failure.code and a readable failure.reason.
Send an Idempotency-Key. A retry with the same key returns the original operation instead of making the change twice.
Scope: write. Destructive: an AI app's key also needs delete.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….Idempotency-KeystringrequiredA new value, such as a UUID, for each change. Resend with the same value to retry safely.
At most 255 characters.
Path parameters
network_idstringrequiredThe resource's id.
Response 202
Accepted. Followoperation_id until it finishes.operation_idstringrequiredThe operation carrying out the change. Poll
GET /public/v1/operations/{operation_id}(also theLocationheader) untilstatusissucceededorfailed.resource_idstringrequiredThe resource being created or changed, e.g. the new snapshot's id for a snapshot create.
statusstringrequiredThe operation's status when the request was accepted, usually
submitting. Followoperation_idfor the outcome.
Errors
- 400
IDEMPOTENCY_KEY_REQUIRED: theIdempotency-Keyheader is missing. Send a new unique value, such as a UUID, with every write.INVALID_IDEMPOTENCY_KEY: theIdempotency-Keyheader is longer than 255 characters. Use a shorter value. - 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access.FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin.AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps. - 404
RESOURCE_NOT_FOUND: no VPC network with this id in your organization, or the id is not a VPC network id (net_…). Check the id. - 409
NETWORK_HAS_INSTANCES: a subnet of this network still has instances. Delete or move them first.NETWORK_HAS_PUBLIC_IPS: the network still holds public IPs. Release them first.INVALID_RESOURCE_STATE: the network cannot do this in its current state, for example while it is being created or deleted. Wait for its current operation to finish, then retry.CONCURRENT_UPDATE: the resource changed while this request was being processed. Retry the request; if it repeats, read the resource first. - 422
VALIDATION_FAILEDwith noerrorsentry: the platform refused a value, for example a malformed CIDR or a name longer than 255 characters. Check the request against this page. - 429
RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.PROVISIONING_UNAVAILABLE: the provisioning service is temporarily unavailable. Wait a few seconds, then retry with the sameIdempotency-Key.
Every code is explained in Errors.
curl -X DELETE "https://api.pantechdynamics.com/public/v1/networks/net_06gk3x9tq7m2v8r4y1c5d0zp8w" \
-H "Authorization: Bearer $PANTECH_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"{
"operation_id": "op_06gk3x9tq7m2v8r4y1c5d0zp8w",
"resource_id": "net_06gk3x9tq7m2v8r4y1c5d0zp8w",
"status": "submitting"
}List subnets
The VPC's subnets.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Path parameters
network_idstringrequiredThe resource's id.
Query parameters
limitintegerItems per page, 1 to 100. Defaults to 50.
From 1 to 100. Defaults to
50.cursorstringThe previous page's
next_cursor, to get the next page. Leave out for the first page; keep the other parameters the same.qstringOnly items whose name contains this text (case-insensitive), at most 255 characters.
At most 255 characters.
desired_statestringOnly items with this
desired_state:presentordeleted.One of
present,deleted.observed_statestringOnly items with this
observed_state.One of
pending,provisioning,active,deleting,deleted,failed,unknown.
Response 200
A page of subnets.dataarray of SubnetrequiredShow 11 child fieldsHide child fields
idstringrequirede.g.
snet_....network_idstringrequirednamestringrequiredIts name.
cidrstringrequiredInside the VPC's CIDR.
regionstring or nulle.g.
af-abj.zonestring or nulle.g.
af-abj-2.instance_countinteger or nullInstances in this subnet; null when they could not be counted.
desired_statestringrequiredWhat you asked for:
present, ordeletedonce you deleted it.One of
present,deleted.observed_statestringrequiredWhat the platform last observed:
pendingandprovisioningwhile it is being created,activeonce ready,deleting/deletedon the way out,failedif it could not be made,unknownwhen it could not be checked.One of
pending,provisioning,active,deleting,deleted,failed,unknown.created_atstring or nullWhen it was created (RFC 3339, UTC).
updated_atstring or nullWhen it last changed (RFC 3339, UTC).
next_cursorstring or nullrequiredPass as
cursorfor the next page; null on the last page.
Errors
- 400
INVALID_PAGE:limitis not a whole number from 1 to 100. Send a value in that range, or leave it out for 50.INVALID_CURSOR:cursordoes not belong to this list with these filters. Start again without a cursor.INVALID_FILTER:qis longer than 255 characters, ordesired_stateorobserved_stateis not one of its listed values. Fix the parameter named indetail. - 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access.FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin.AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps. - 404
RESOURCE_NOT_FOUND: no VPC network with this id in your organization, or the id is not a VPC network id (net_…). Check the id. - 429
RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.
Every code is explained in Errors.
curl "https://api.pantechdynamics.com/public/v1/networks/net_06gk3x9tq7m2v8r4y1c5d0zp8w/subnets" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"data": [
{
"id": "snet_06gk3x9tq7m2v8r4y1c5d0zp8w",
"network_id": "net_06gk3x9tq7m2v8r4y1c5d0zp8w",
"name": "app",
"cidr": "10.0.1.0/24",
"region": "af-abj",
"zone": "af-abj-1",
"instance_count": 2,
"desired_state": "present",
"observed_state": "active",
"created_at": "2026-10-03T09:30:00Z",
"updated_at": "2026-10-03T09:30:00Z"
}
],
"next_cursor": "eyJhdCI6IjIwMjYtMTAtMDNUMDk6MzA6MDBaIiwiaWQiOiJ2bV8wNmdrIn0"
}Create a subnet
Creates a subnet inside the VPC's CIDR, such as 10.0.1.0/24. Instances and databases are placed in subnets; each subnet has its own firewall rules.
Returns 202 Accepted with an operation_id (also in the Location header). The change happens in the background: poll GET /public/v1/operations/{operation_id}, or stream /events, until status is succeeded or failed; a failed operation carries a stable failure.code and a readable failure.reason. The subnet's id is the operation's resource_id.
Send an Idempotency-Key. A retry with the same key returns the original operation instead of making the change twice.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….Idempotency-KeystringrequiredA new value, such as a UUID, for each change. Resend with the same value to retry safely.
At most 255 characters.
Path parameters
network_idstringrequiredThe resource's id.
Body
application/jsonnamestringrequired1 to 255 characters.
At most 255 characters.
cidrstringrequiredAn IPv4 range inside the VPC's CIDR that does not overlap its other subnets, e.g.
10.0.1.0/24.
Response 202
Accepted. Followoperation_id until it finishes.operation_idstringrequiredThe operation carrying out the change. Poll
GET /public/v1/operations/{operation_id}(also theLocationheader) untilstatusissucceededorfailed.resource_idstringrequiredThe resource being created or changed, e.g. the new snapshot's id for a snapshot create.
statusstringrequiredThe operation's status when the request was accepted, usually
submitting. Followoperation_idfor the outcome.
Errors
- 400
IDEMPOTENCY_KEY_REQUIRED: theIdempotency-Keyheader is missing. Send a new unique value, such as a UUID, with every write.INVALID_IDEMPOTENCY_KEY: theIdempotency-Keyheader is longer than 255 characters. Use a shorter value.INVALID_REQUEST_BODY: the body is not a single valid JSON object. Send one JSON object with the fields documented for this endpoint. - 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access.FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin.AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps. - 404
RESOURCE_NOT_FOUND: no VPC network with this id in your organization, or the id is not a VPC network id (net_…). Check the id. - 409
INVALID_RESOURCE_STATE: the network cannot do this in its current state, for example while it is being created or deleted. Wait for its current operation to finish, then retry.CONCURRENT_UPDATE: the resource changed while this request was being processed. Retry the request; if it repeats, read the resource first. - 413
REQUEST_TOO_LARGE: the body is larger than 64 KiB. Send a smaller request. - 422
VALIDATION_FAILED: a field is invalid. Each entry oferrorsnames thefieldand itscode:nameREQUIREDorNAME_TOO_LONG: send a name of 1 to 255 characters.cidrREQUIRED: send an IPv4 CIDR inside the VPC's CIDR.UNKNOWN_FIELD: the body has a field this endpoint does not take (named infield). Remove it or fix its spelling.VALIDATION_FAILEDwith noerrorsentry:cidris not a valid IPv4 CIDR. - 429
RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.PROVISIONING_UNAVAILABLE: the provisioning service is temporarily unavailable. Wait a few seconds, then retry with the sameIdempotency-Key.
Every code is explained in Errors.
curl -X POST "https://api.pantechdynamics.com/public/v1/networks/net_06gk3x9tq7m2v8r4y1c5d0zp8w/subnets" \
-H "Authorization: Bearer $PANTECH_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"name": "app",
"cidr": "10.0.1.0/24"
}'{
"operation_id": "op_06gk3x9tq7m2v8r4y1c5d0zp8w",
"resource_id": "snet_06gk3x9tq7m2v8r4y1c5d0zp8w",
"status": "submitting"
}Get a subnet
One subnet, with the number of instances in it.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Path parameters
subnet_idstringrequiredThe resource's id.
Response 200
The subnet.idstringrequirede.g.
snet_....network_idstringrequirednamestringrequiredIts name.
cidrstringrequiredInside the VPC's CIDR.
regionstring or nulle.g.
af-abj.zonestring or nulle.g.
af-abj-2.instance_countinteger or nullInstances in this subnet; null when they could not be counted.
desired_statestringrequiredWhat you asked for:
present, ordeletedonce you deleted it.One of
present,deleted.observed_statestringrequiredWhat the platform last observed:
pendingandprovisioningwhile it is being created,activeonce ready,deleting/deletedon the way out,failedif it could not be made,unknownwhen it could not be checked.One of
pending,provisioning,active,deleting,deleted,failed,unknown.created_atstring or nullWhen it was created (RFC 3339, UTC).
updated_atstring or nullWhen it last changed (RFC 3339, UTC).
Errors
- 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access.FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin.AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps. - 404
RESOURCE_NOT_FOUND: no subnet with this id in your organization, or the id is not a subnet id (snet_…). Check the id. - 429
RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.
Every code is explained in Errors.
curl "https://api.pantechdynamics.com/public/v1/subnets/snet_06gk3x9tq7m2v8r4y1c5d0zp8w" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"id": "snet_06gk3x9tq7m2v8r4y1c5d0zp8w",
"network_id": "net_06gk3x9tq7m2v8r4y1c5d0zp8w",
"name": "app",
"cidr": "10.0.1.0/24",
"region": "af-abj",
"zone": "af-abj-1",
"instance_count": 2,
"desired_state": "present",
"observed_state": "active",
"created_at": "2026-10-03T09:30:00Z",
"updated_at": "2026-10-03T09:30:00Z"
}Delete a subnet
Deletes a subnet. It must hold no instances or databases.
Returns 202 Accepted with an operation_id (also in the Location header). The change happens in the background: poll GET /public/v1/operations/{operation_id}, or stream /events, until status is succeeded or failed; a failed operation carries a stable failure.code and a readable failure.reason.
Send an Idempotency-Key. A retry with the same key returns the original operation instead of making the change twice.
Scope: write. Destructive: an AI app's key also needs delete.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….Idempotency-KeystringrequiredA new value, such as a UUID, for each change. Resend with the same value to retry safely.
At most 255 characters.
Path parameters
subnet_idstringrequiredThe resource's id.
Response 202
Accepted. Followoperation_id until it finishes.operation_idstringrequiredThe operation carrying out the change. Poll
GET /public/v1/operations/{operation_id}(also theLocationheader) untilstatusissucceededorfailed.resource_idstringrequiredThe resource being created or changed, e.g. the new snapshot's id for a snapshot create.
statusstringrequiredThe operation's status when the request was accepted, usually
submitting. Followoperation_idfor the outcome.
Errors
- 400
IDEMPOTENCY_KEY_REQUIRED: theIdempotency-Keyheader is missing. Send a new unique value, such as a UUID, with every write.INVALID_IDEMPOTENCY_KEY: theIdempotency-Keyheader is longer than 255 characters. Use a shorter value. - 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access.FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin.AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps. - 404
RESOURCE_NOT_FOUND: no subnet with this id in your organization, or the id is not a subnet id (snet_…). Check the id. - 409
INVALID_RESOURCE_STATE: the subnet still has instances or databases, or is already being deleted. Delete them first.SUBNET_HAS_KUBERNETES_CLUSTERS: Kubernetes clusters still run in this subnet. Delete them first.CONCURRENT_UPDATE: the resource changed while this request was being processed. Retry the request; if it repeats, read the resource first. - 422
VALIDATION_FAILEDwith noerrorsentry: the platform refused a value, for example a malformed CIDR or a name longer than 255 characters. Check the request against this page. - 429
RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.PROVISIONING_UNAVAILABLE: the provisioning service is temporarily unavailable. Wait a few seconds, then retry with the sameIdempotency-Key.
Every code is explained in Errors.
curl -X DELETE "https://api.pantechdynamics.com/public/v1/subnets/snet_06gk3x9tq7m2v8r4y1c5d0zp8w" \
-H "Authorization: Bearer $PANTECH_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"{
"operation_id": "op_06gk3x9tq7m2v8r4y1c5d0zp8w",
"resource_id": "snet_06gk3x9tq7m2v8r4y1c5d0zp8w",
"status": "submitting"
}List a subnet's firewall rules
The subnet's firewall rules, in evaluation order, and the platform's fixed rules around them (system_rules), which always apply.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Path parameters
subnet_idstringrequiredThe resource's id.
Response 200
The rules.dataarray of FirewallRulerequiredShow 15 child fieldsHide child fields
idstringrequirede.g.
aclr_....subnet_idstringrequiredThe subnet the rule applies to, as a whole.
numberintegerrequiredEvaluation order, 100-9999; lowest first.
From 100 to 9999.
directionstringrequiredingress(into the subnet) oregress(out of it).One of
ingress,egress.protocolstringrequiredtcp,udp,icmporall.One of
tcp,udp,icmp,all.port_startinteger or nullFirst port, for
tcp/udp; null otherwise.port_endinteger or nullLast port, for
tcp/udp; null otherwise.icmp_typeinteger or nullICMP type, for
icmp; null for every type.icmp_codeinteger or nullICMP code, for
icmp; null for every code.cidrstringrequiredSource (ingress) or destination (egress), e.g.
0.0.0.0/0.actionstringrequiredallowordeny.One of
allow,deny.desired_statestringrequiredWhat you asked for:
present, ordeletedonce you deleted it.One of
present,deleted.observed_statestringrequiredWhat the platform last observed:
pendingandprovisioningwhile it is being created,activeonce ready,deleting/deletedon the way out,failedif it could not be made,unknownwhen it could not be checked.One of
pending,provisioning,active,deleting,deleted,failed,unknown.created_atstring or nullWhen it was created (RFC 3339, UTC).
updated_atstring or nullWhen it last changed (RFC 3339, UTC).
next_cursorstring or nullrequiredAlways null.
system_rulesarray of FirewallRuleFieldsrequiredThe platform's own rules around yours. They always apply and cannot be changed.
Show 9 child fieldsHide child fields
numberintegerrequiredEvaluation order, 100-9999; lowest first.
From 100 to 9999.
directionstringrequiredingress(into the subnet) oregress(out of it).One of
ingress,egress.protocolstringrequiredtcp,udp,icmporall.One of
tcp,udp,icmp,all.port_startinteger or nullFirst port, for
tcp/udp; null otherwise.port_endinteger or nullLast port, for
tcp/udp; null otherwise.icmp_typeinteger or nullICMP type, for
icmp; null for every type.icmp_codeinteger or nullICMP code, for
icmp; null for every code.cidrstringrequiredSource (ingress) or destination (egress), e.g.
0.0.0.0/0.actionstringrequiredallowordeny.One of
allow,deny.
Errors
- 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access.FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin.AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps. - 404
RESOURCE_NOT_FOUND: no subnet with this id in your organization, or the id is not a subnet id (snet_…). Check the id.NOT_FOUND: firewall rules are not offered on this platform yet. - 409
FIREWALL_RULES_NOT_SUPPORTED: firewall rules apply to VPC subnets only. Standard instances use security groups. - 429
RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.
Every code is explained in Errors.
curl "https://api.pantechdynamics.com/public/v1/subnets/snet_06gk3x9tq7m2v8r4y1c5d0zp8w/firewall-rules" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"data": [
{
"id": "aclr_06gk3x9tq7m2v8r4y1c5d0zp8w",
"subnet_id": "snet_06gk3x9tq7m2v8r4y1c5d0zp8w",
"number": 100,
"direction": "ingress",
"protocol": "tcp",
"port_start": 443,
"port_end": 443,
"icmp_type": 1,
"icmp_code": 1,
"cidr": "0.0.0.0/0",
"action": "allow",
"desired_state": "present",
"observed_state": "active",
"created_at": "2026-10-03T09:30:00Z",
"updated_at": "2026-10-03T09:30:00Z"
}
],
"next_cursor": null,
"system_rules": [
{
"number": 100,
"direction": "ingress",
"protocol": "tcp",
"port_start": 443,
"port_end": 443,
"icmp_type": 1,
"icmp_code": 1,
"cidr": "0.0.0.0/0",
"action": "allow"
}
]
}Add a firewall rule
Adds a rule to the subnet's firewall. Rules are evaluated by number, lowest first, and the first match decides; traffic no rule allows is dropped. A rule applies to the whole subnet. Defaults: direction ingress, action allow, port_end equal to port_start.
Returns 202 Accepted with an operation_id (also in the Location header). The change happens in the background: poll GET /public/v1/operations/{operation_id}, or stream /events, until status is succeeded or failed; a failed operation carries a stable failure.code and a readable failure.reason. The rule's id is the operation's resource_id.
Send an Idempotency-Key. A retry with the same key returns the original operation instead of making the change twice.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….Idempotency-KeystringrequiredA new value, such as a UUID, for each change. Resend with the same value to retry safely.
At most 255 characters.
Path parameters
subnet_idstringrequiredThe resource's id.
Body
application/jsonnumberintegerrequiredEvaluation order, 100 to 9999, unique on the subnet; lower numbers are evaluated first and the first match decides.
From 100 to 9999.
directionstringingress(traffic into the subnet) oregress(traffic out of it). Defaults toingress.One of
ingress,egress. Defaults toingress.protocolstringrequiredtcp,udp,icmporall.One of
tcp,udp,icmp,all.port_startintegerFirst port, 1 to 65535. For
tcpandudponly; leave out foricmpandall.port_endintegerLast port, 1 to 65535, at least
port_start. Defaults toport_start(one port).icmp_typeintegerICMP type, for
icmponly, e.g.8for echo request. Leave out for every type.icmp_codeintegerICMP code, for
icmponly. Leave out for every code.cidrstringrequiredOne IPv4 CIDR: the source for
ingress, the destination foregress.0.0.0.0/0means anywhere.actionstringallowordeny. Defaults toallow.One of
allow,deny. Defaults toallow.
Response 202
Accepted. Followoperation_id until it finishes.operation_idstringrequiredThe operation carrying out the change. Poll
GET /public/v1/operations/{operation_id}(also theLocationheader) untilstatusissucceededorfailed.resource_idstringrequiredThe resource being created or changed, e.g. the new snapshot's id for a snapshot create.
statusstringrequiredThe operation's status when the request was accepted, usually
submitting. Followoperation_idfor the outcome.
Errors
- 400
IDEMPOTENCY_KEY_REQUIRED: theIdempotency-Keyheader is missing. Send a new unique value, such as a UUID, with every write.INVALID_IDEMPOTENCY_KEY: theIdempotency-Keyheader is longer than 255 characters. Use a shorter value.INVALID_REQUEST_BODY: the body is not a single valid JSON object. Send one JSON object with the fields documented for this endpoint. - 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access.FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin.AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps. - 404
RESOURCE_NOT_FOUND: no subnet with this id in your organization, or the id is not a subnet id (snet_…). Check the id.NOT_FOUND: firewall rules are not offered on this platform yet. - 409
FIREWALL_RULES_NOT_SUPPORTED: firewall rules apply to VPC subnets only. Standard instances use security groups.INVALID_RESOURCE_STATE: the subnet cannot do this in its current state, for example while it is being created or deleted. Wait for its current operation to finish, then retry.CONCURRENT_UPDATE: the resource changed while this request was being processed. Retry the request; if it repeats, read the resource first. - 413
REQUEST_TOO_LARGE: the body is larger than 64 KiB. Send a smaller request. - 422
VALIDATION_FAILED: a field is invalid. Each entry oferrorsnames thefieldand itscode:protocolorcidrREQUIRED: send both.numberINVALID_RULE_NUMBER: use 100 to 9999.numberRULE_NUMBER_TAKEN: another rule on this subnet has this number. Choose another.port_startINVALID_PORTS: send ports 1 to 65535 fortcporudp, and leave them out foricmporall.protocolINVALID_FIREWALL_RULE:direction,protocol,actionor the ICMP fields are not valid values.UNKNOWN_FIELD: the body has a field this endpoint does not take (named infield). Remove it or fix its spelling. - 429
RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.PROVISIONING_UNAVAILABLE: the provisioning service is temporarily unavailable. Wait a few seconds, then retry with the sameIdempotency-Key.
Every code is explained in Errors.
curl -X POST "https://api.pantechdynamics.com/public/v1/subnets/snet_06gk3x9tq7m2v8r4y1c5d0zp8w/firewall-rules" \
-H "Authorization: Bearer $PANTECH_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"number": 100,
"protocol": "tcp",
"cidr": "203.0.113.0/24"
}'{
"operation_id": "op_06gk3x9tq7m2v8r4y1c5d0zp8w",
"resource_id": "aclr_06gk3x9tq7m2v8r4y1c5d0zp8w",
"status": "submitting"
}Get a firewall rule
One firewall rule on the subnet.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Path parameters
subnet_idstringrequiredThe resource's id.
rule_idstringrequiredThe rule's id (
aclr_...for a firewall rule,pfr_...for a port forwarding rule).
Response 200
The rule.idstringrequirede.g.
aclr_....subnet_idstringrequiredThe subnet the rule applies to, as a whole.
numberintegerrequiredEvaluation order, 100-9999; lowest first.
From 100 to 9999.
directionstringrequiredingress(into the subnet) oregress(out of it).One of
ingress,egress.protocolstringrequiredtcp,udp,icmporall.One of
tcp,udp,icmp,all.port_startinteger or nullFirst port, for
tcp/udp; null otherwise.port_endinteger or nullLast port, for
tcp/udp; null otherwise.icmp_typeinteger or nullICMP type, for
icmp; null for every type.icmp_codeinteger or nullICMP code, for
icmp; null for every code.cidrstringrequiredSource (ingress) or destination (egress), e.g.
0.0.0.0/0.actionstringrequiredallowordeny.One of
allow,deny.desired_statestringrequiredWhat you asked for:
present, ordeletedonce you deleted it.One of
present,deleted.observed_statestringrequiredWhat the platform last observed:
pendingandprovisioningwhile it is being created,activeonce ready,deleting/deletedon the way out,failedif it could not be made,unknownwhen it could not be checked.One of
pending,provisioning,active,deleting,deleted,failed,unknown.created_atstring or nullWhen it was created (RFC 3339, UTC).
updated_atstring or nullWhen it last changed (RFC 3339, UTC).
Errors
- 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access.FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin.AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps. - 404
RESOURCE_NOT_FOUND: no rule with this id on this subnet, or no such subnet in your organization. Check both ids.NOT_FOUND: firewall rules are not offered on this platform yet. - 409
FIREWALL_RULES_NOT_SUPPORTED: firewall rules apply to VPC subnets only. Standard instances use security groups. - 429
RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.
Every code is explained in Errors.
curl "https://api.pantechdynamics.com/public/v1/subnets/snet_06gk3x9tq7m2v8r4y1c5d0zp8w/firewall-rules/aclr_06gk3x9tq7m2v8r4y1c5d0zp8w" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"id": "aclr_06gk3x9tq7m2v8r4y1c5d0zp8w",
"subnet_id": "snet_06gk3x9tq7m2v8r4y1c5d0zp8w",
"number": 100,
"direction": "ingress",
"protocol": "tcp",
"port_start": 443,
"port_end": 443,
"icmp_type": 1,
"icmp_code": 1,
"cidr": "0.0.0.0/0",
"action": "allow",
"desired_state": "present",
"observed_state": "active",
"created_at": "2026-10-03T09:30:00Z",
"updated_at": "2026-10-03T09:30:00Z"
}Delete a firewall rule
Deletes one subnet firewall rule. Traffic it allowed is dropped once the operation succeeds, unless another rule allows it.
Returns 202 Accepted with an operation_id (also in the Location header). The change happens in the background: poll GET /public/v1/operations/{operation_id}, or stream /events, until status is succeeded or failed; a failed operation carries a stable failure.code and a readable failure.reason.
Send an Idempotency-Key. A retry with the same key returns the original operation instead of making the change twice.
Scope: write. Destructive: an AI app's key also needs delete.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….Idempotency-KeystringrequiredA new value, such as a UUID, for each change. Resend with the same value to retry safely.
At most 255 characters.
Path parameters
rule_idstringrequiredThe rule's id (
aclr_...for a firewall rule,pfr_...for a port forwarding rule).
Response 202
Accepted. Followoperation_id until it finishes.operation_idstringrequiredThe operation carrying out the change. Poll
GET /public/v1/operations/{operation_id}(also theLocationheader) untilstatusissucceededorfailed.resource_idstringrequiredThe resource being created or changed, e.g. the new snapshot's id for a snapshot create.
statusstringrequiredThe operation's status when the request was accepted, usually
submitting. Followoperation_idfor the outcome.
Errors
- 400
IDEMPOTENCY_KEY_REQUIRED: theIdempotency-Keyheader is missing. Send a new unique value, such as a UUID, with every write.INVALID_IDEMPOTENCY_KEY: theIdempotency-Keyheader is longer than 255 characters. Use a shorter value. - 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access.FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin.AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps. - 404
RESOURCE_NOT_FOUND: no firewall rule with this id in your organization, or the id is not a firewall rule id (aclr_…). Check the id.NOT_FOUND: firewall rules are not offered on this platform yet. - 409
INVALID_RESOURCE_STATE: the firewall rule cannot do this in its current state, for example while it is being created or deleted. Wait for its current operation to finish, then retry.CONCURRENT_UPDATE: the resource changed while this request was being processed. Retry the request; if it repeats, read the resource first. - 422
VALIDATION_FAILEDwith noerrorsentry: the platform refused the request, for example because the resource has already been deleted. Read the resource to check its state. - 429
RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.PROVISIONING_UNAVAILABLE: the provisioning service is temporarily unavailable. Wait a few seconds, then retry with the sameIdempotency-Key.
Every code is explained in Errors.
curl -X DELETE "https://api.pantechdynamics.com/public/v1/firewall-rules/aclr_06gk3x9tq7m2v8r4y1c5d0zp8w" \
-H "Authorization: Bearer $PANTECH_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"{
"operation_id": "op_06gk3x9tq7m2v8r4y1c5d0zp8w",
"resource_id": "aclr_06gk3x9tq7m2v8r4y1c5d0zp8w",
"status": "submitting"
}