API reference · Platform / Catalogue
Catalogue
Regions, plans, images and disk offerings: what you can create, and what it costs.
Read the catalogue to find the slugs you create resources with: a plan's slug is an instance's plan_slug, an image's slug its image_slug, a disk offering's slug a volume's disk_offering_slug. Prices are integers in minor units (kobo for NGN, cents for USD).
List regions
Regions and their zones, and whether each zone can take standard instances or VPC networks right now (available, with an unavailable_reason when not). Use a zone as zone_id for a database, or a region as region elsewhere.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Response 200
Regions.dataarray of RegionrequiredShow 3 child fieldsHide child fields
codestringrequirede.g.
af-abj.namestringrequiredIts name for display.
placementsarray of objectrequiredShow 5 child fieldsHide child fields
kindstringrequiredstandardinstances orvpcnetworks.One of
standard,vpc.zonestringrequiredavailablebooleanrequiredunavailable_reasonstring or nullprivate_network_cidrstring or nullThe range of the zone's private database network, e.g.
10.250.0.0/20, when instances there can add a private network interface (POST /public/v1/instances/{instance_id}/private-network); null otherwise, and in every VPC zone. Allow this range nowhere in the security group of an instance with that interface.
next_cursorstring or nullrequiredAlways null: this list is returned whole.
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. - 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/regions" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"data": [
{
"code": "af-abj",
"name": "Abuja",
"placements": [
{
"kind": "standard",
"zone": "af-abj-1",
"available": true,
"unavailable_reason": null,
"private_network_cidr": "10.250.0.0/20"
}
]
}
],
"next_cursor": null
}List plans
Instance sizes (vCPU, memory and disk), priced in your organization's currency. Use a slug as plan_slug for an instance or a database. Send placement=vpc to price a VPC instance (no public address of its own), or leave it out for a standard instance.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Query parameters
placementstringPrice for standard instances or VPC instances.
One of
standard,vpc. Defaults tostandard.
Response 200
Plans.dataarray of PlanrequiredShow 8 child fieldsHide child fields
idstringrequiredThe plan's id.
slugstringrequiredUse this in
plan_slug.namestringrequiredIts name for display.
vcpuintegerrequiredVirtual CPUs.
memory_mbintegerrequiredMemory in MB.
disk_gbintegerrequiredRoot disk in GB; for a database, the smallest data disk.
priceobject or nullIn the organization's currency; null when it cannot be priced.
Show 4 child fieldsHide child fields
currencystringrequiredmonthly_estimate_minorintegerrequiredA full month running.
storage_floor_minorintegerrequiredA full month stopped (storage only).
initial_payment_minorintegerrequiredTaken when the instance is ordered.
unpriced_reasonstring or nullWhy
priceis null; null when priced.
next_cursorstring or nullrequiredAlways null: this list is returned whole.
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. - 422
VALIDATION_FAILED: a field is invalid. Each entry oferrorsnames thefieldand itscode:placementINVALID_PLACEMENT: usestandardorvpc. - 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/plans" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"data": [
{
"id": "id",
"slug": "slug",
"name": "web-1",
"vcpu": 2,
"memory_mb": 4096,
"disk_gb": 80,
"price": {
"currency": "NGN",
"monthly_estimate_minor": 3760000,
"storage_floor_minor": 460000,
"initial_payment_minor": 1504000
},
"unpriced_reason": null
}
],
"next_cursor": null
}List images
Operating systems you can install on an instance, and the zones each runs in. Use a slug as image_slug in Create an instance or Rebuild an instance.
Encrypted images (encrypted: true) appear only for organizations they are enabled for; elsewhere their slug is refused as IMAGE_NOT_FOUND.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Response 200
Images.dataarray of ImagerequiredShow 7 child fieldsHide child fields
idstringrequiredThe image's id.
slugstringrequiredUse this in
image_slug.namestringrequiredIts name for display, e.g.
Ubuntu.versionstringrequiredIts version, e.g.
24.04.zonesarray of stringrequiredZones this image can be deployed in.
encryptedbooleanTrue for an encrypted image: the instance's root disk is encrypted on our storage, with its own key, and the instance needs our key servers to start. Encrypted images are listed only for organizations they are enabled for.
encrypted_variant_ofstring or nullOn an encrypted image, the slug of the plain image it is the encrypted version of (e.g.
ubuntu-24-04forubuntu-24-04-encrypted); null otherwise.
next_cursorstring or nullrequiredAlways null: this list is returned whole.
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. - 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/images" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"data": [
{
"id": "id",
"slug": "slug",
"name": "web-1",
"version": "version",
"zones": [
"af-abj-1"
],
"encrypted": true,
"encrypted_variant_of": "encrypted-variant-of"
}
],
"next_cursor": null
}List disk offerings
Volume types and their hourly prices. Use a slug as disk_offering_slug in Create a volume; for an offering with custom_size: true, also send size_gb.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Response 200
Disk offerings.dataarray of DiskOfferingrequiredShow 7 child fieldsHide child fields
slugstringrequiredUse this in
disk_offering_slug.namestringrequiredIts name for display.
size_gbinteger or nullFixed size; null for a custom-size offering.
custom_sizebooleanrequiredWhen true, send
size_gbon create; the price is then per GB.storage_typestring or nullThe storage class, e.g.
sharedorlocal; null when not stated.currencystringrequiredNGNorUSD: your organization's currency.hourly_price_minorintegerrequiredPrice per hour in minor units of
currency: for the whole volume, or per GB for a custom-size offering.
next_cursorstring or nullrequiredAlways null: this list is returned whole.
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. - 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/disk-offerings" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"data": [
{
"slug": "slug",
"name": "web-1",
"size_gb": 20,
"custom_size": false,
"storage_type": "shared",
"currency": "NGN",
"hourly_price_minor": 640
}
],
"next_cursor": null
}Price a volume
The monthly price of one volume of this offering. size_gb is required for a custom-size offering and ignored otherwise. Use it to show a price before Create a volume.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Path parameters
slugstringrequiredThe disk offering's slug.
Query parameters
size_gbintegerAt least 1.
Response 200
The price.disk_offering_slugstringrequiredsize_gbintegerrequiredcurrencystringrequiredhourly_price_minorintegerrequiredmonthly_price_minorintegerrequired
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 active disk offering has this slug. Pick one fromGET /public/v1/disk-offerings. - 422
VALIDATION_FAILED: a field is invalid. Each entry oferrorsnames thefieldand itscode:size_gbINVALID_SIZE: send a whole number of GB, at least 1.size_gbSIZE_REQUIRED: this offering is custom-size, sosize_gbis required. - 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/disk-offerings/medium-20gb/quote" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"disk_offering_slug": "medium-20gb",
"size_gb": 20,
"currency": "NGN",
"hourly_price_minor": 640,
"monthly_price_minor": 467200
}Estimate a monthly bill
Prices a whole configuration before you build it: machines by plan and running hours, extra storage, VPC networks and snapshot storage. Nothing is created and nothing is charged, so no Idempotency-Key is needed.
pricing_complete is false when any line could not be priced; that line has priced: false and an unpriced_reason.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Body
application/jsoncurrencystringrequiredThe currency to price in:
NGNorUSD.One of
NGN,USD.machinesarray of objectInstances to price: up to 50 lines, each a plan, a quantity and running hours per month.
At most 50 items.
Show 4 child fieldsHide child fields
plan_slugstringrequiredquantityintegerrequiredAt least 1.
running_hoursintegerrequiredFrom 0 to 730.
placementstringOne of
standard,vpc.
extra_storage_gbintegerExtra volume storage in GB.
At least 0.
network_countintegerNumber of VPC networks.
At least 0.
snapshot_gbintegerSnapshot storage in GB.
At least 0.
Response 200
The estimate.currencystringrequiredNGNorUSD, as requested.nominal_month_hoursintegerrequiredHours in the month prices assume: 730.
machinesarray of objectrequiredShow 7 child fieldsHide child fields
plan_slugstringrequiredquantityintegerrequiredrunning_hoursintegerrequiredpricedbooleanrequiredunpriced_reasonstring or nullunit_monthly_estimate_minorinteger or nulltotal_monthly_estimate_minorinteger or null
extra_storage_gbobjectShow 4 child fieldsHide child fields
requestedintegerrequiredpricedbooleanrequiredunpriced_reasonstring or nullamount_minorinteger or null
networksobjectShow 4 child fieldsHide child fields
requestedintegerrequiredpricedbooleanrequiredunpriced_reasonstring or nullamount_minorinteger or null
snapshot_gbobjectShow 4 child fieldsHide child fields
requestedintegerrequiredpricedbooleanrequiredunpriced_reasonstring or nullamount_minorinteger or null
pricing_completebooleanrequiredFalse when any line could not be priced.
priced_subtotal_minorintegerrequiredThe sum of every priced line, in minor units. Lines that could not be priced are left out.
Errors
- 400
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. - 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:currencyUNSUPPORTED_CURRENCY: useNGNorUSD.machinesTOO_MANY_MACHINES: at most 50 machine lines.machinesINVALID_MACHINE: each machine needs aplan_slug, aquantityabove 0 and 0 to 730running_hours.placementINVALID_PLACEMENT: usestandardorvpc.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.
Every code is explained in Errors.
curl -X POST "https://api.pantechdynamics.com/public/v1/pricing/estimate" \
-H "Authorization: Bearer $PANTECH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"currency": "NGN",
"machines": [
{
"plan_slug": "starter",
"quantity": 2,
"running_hours": 730,
"placement": "standard"
}
]
}'{
"currency": "NGN",
"nominal_month_hours": 730,
"machines": [
{
"plan_slug": "starter",
"quantity": 2,
"running_hours": 730,
"priced": true,
"unpriced_reason": null,
"unit_monthly_estimate_minor": 1,
"total_monthly_estimate_minor": 1
}
],
"extra_storage_gb": {
"requested": 0,
"priced": true,
"unpriced_reason": null,
"amount_minor": 1059200
},
"networks": {
"requested": 0,
"priced": true,
"unpriced_reason": null,
"amount_minor": 1059200
},
"snapshot_gb": {
"requested": 0,
"priced": true,
"unpriced_reason": null,
"amount_minor": 1059200
},
"pricing_complete": true,
"priced_subtotal_minor": 1
}