Puchify

NAT Gateways API

Outbound internet access for private resources.

List NAT gateways

GET /api/v1/nat-gateways
const { 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 running
curl https://api.puchify.com/api/v1/nat-gateways \
  -H "Authorization: Bearer $PUCHIFY_API_KEY"

Query parameters:

ParameterTypeDescription
cursorstringPagination cursor
limitinteger (1-100)Results per page (default 50)
statusstringFilter by status (creating, running, deleting, deleted)
sortname | created_atSort field
orderasc | descSort direction

Create a NAT gateway

POST /api/v1/nat-gateways
const { 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-east
curl -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:

FieldTypeRequiredDescription
namestringyesGateway name (2-40 chars, lowercase alphanumeric + dashes)
regionstringyesRegion 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_abc123
curl 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-nat
curl -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:

FieldTypeRequiredDescription
namestringnoNew 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_abc123
curl -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

CodeDescription
404NAT gateway not found
409Conflict — gateway is in a transient state
422Invalid region or resource limits reached

On this page