NAT Gateways API
Outbound internet access for private resources.
List NAT gateways
GET /api/v1/nat-gatewaysconst { data: gateways } = await puchify.natGateways.list({ status: "running" })gateways = puchify.nat_gateways.list(status="running")gateways, err := client.NATGateways.List(ctx, &puchify.NATGatewayListParams{
Status: puchify.String("running"),
})puchify nat list --status runningcurl https://api.puchify.com/api/v1/nat-gateways \
-H "Authorization: Bearer $PUCHIFY_API_KEY"Query parameters:
| Parameter | Type | Description |
|---|---|---|
cursor | string | Pagination cursor |
limit | integer (1-100) | Results per page (default 50) |
status | string | Filter by status (creating, running, deleting, deleted) |
sort | name | created_at | Sort field |
order | asc | desc | Sort direction |
Create a NAT gateway
POST /api/v1/nat-gatewaysconst { data: gateway } = await puchify.natGateways.create({
name: "private-nat",
region: "us-east",
})gateway = puchify.nat_gateways.create(name="private-nat", region="us-east")gateway, err := client.NATGateways.Create(ctx, &puchify.CreateNATGatewayInput{
Name: "private-nat", Region: "us-east",
})puchify nat create --name private-nat --region us-eastcurl -X POST https://api.puchify.com/api/v1/nat-gateways \
-H "Authorization: Bearer $PUCHIFY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"private-nat","region":"us-east"}'Request body:
| Field | Type | Required | Description |
|---|---|---|---|
name | string | yes | Gateway name (2-40 chars, lowercase alphanumeric + dashes) |
region | string | yes | Region ID |
Get a NAT gateway
GET /api/v1/nat-gateways/{id}const { data: gateway } = await puchify.natGateways.get("nat_abc123")gateway = puchify.nat_gateways.get("nat_abc123")gateway, err := client.NATGateways.Get(ctx, "nat_abc123")puchify nat get nat_abc123curl https://api.puchify.com/api/v1/nat-gateways/nat_abc123 \
-H "Authorization: Bearer $PUCHIFY_API_KEY"Update a NAT gateway
PATCH /api/v1/nat-gateways/{id}const { data: gateway } = await puchify.natGateways.update("nat_abc123", {
name: "updated-nat",
})gateway = puchify.nat_gateways.update("nat_abc123", name="updated-nat")gateway, err := client.NATGateways.Update(ctx, "nat_abc123", &puchify.UpdateNATGatewayInput{
Name: puchify.String("updated-nat"),
})puchify nat update nat_abc123 --name updated-natcurl -X PATCH https://api.puchify.com/api/v1/nat-gateways/nat_abc123 \
-H "Authorization: Bearer $PUCHIFY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"updated-nat"}'Request body:
| Field | Type | Required | Description |
|---|---|---|---|
name | string | no | New gateway name |
Delete a NAT gateway
DELETE /api/v1/nat-gateways/{id}await puchify.natGateways.delete("nat_abc123")puchify.nat_gateways.delete("nat_abc123")err := client.NATGateways.Delete(ctx, "nat_abc123")puchify nat delete nat_abc123curl -X DELETE https://api.puchify.com/api/v1/nat-gateways/nat_abc123 \
-H "Authorization: Bearer $PUCHIFY_API_KEY"Polling for readiness
const gateway = await puchify.natGateways.waitFor("nat_abc123", "running", {
timeout: 300_000,
pollInterval: 5_000,
})gateway = puchify.nat_gateways.wait_for("nat_abc123", "running", timeout=300)gateway, err := puchify.WaitFor(ctx, client.NATGateways.Get, "nat_abc123", "running",
puchify.WithTimeout(5*time.Minute),
)Response shape
{
"data": {
"id": "nat_abc123",
"name": "private-nat",
"status": "running", // creating | running | deleting | deleted
"region": "us-east",
"ipv4": "203.0.113.100",
"vpc_id": "vpc_001",
"created_at": "2026-05-28T10:30:00Z",
"updated_at": "2026-05-28T10:32:00Z"
},
"meta": {
"persistence": "synced",
"provider": "connected"
}
}Error codes
| Code | Description |
|---|---|
404 | NAT gateway not found |
409 | Conflict — gateway is in a transient state |
422 | Invalid region or resource limits reached |