Skip to content

FOTOhub Cloud Computing API ​

The FOTOhub Cloud Computing API provides programmatic access to our enterprise-grade compute infrastructure. It allows you to provision, monitor, and manage GPU and CPU instances, block storage, network interfaces, and security groups on demand.

Our infrastructure is built on top of AWS, offering raw access to high-performance EC2 instances, Firecracker microVMs, and EBS volumes, all managed through a unified, developer-friendly FOTOhub API.

INFO

Base URL: https://apis.fotohub.app/compute/v1Sandbox URL: https://apis.fotohub.app/sandbox/exec-pythonPrimary Region: eu-central-1 (Frankfurt)

Architecture Overview ​

ascii
+-------------------+       +-----------------------+       +-------------------+
|                   |       |                       |       |                   |
|  Developer / API  +-----> |  FOTOhub API Gateway  +-----> |  Compute Service  |
|                   |       |  (apis.fotohub.app)   |       |  (Port 8801)      |
+-------------------+       +-----------+-----------+       +---------+---------+
                                        |                             |
                                        v                             v
                            +-----------+-----------+       +---------+---------+
                            |                       |       |                   |
                            | Firecracker MicroVM   |       |  AWS Infrastructure|
                            | (Sandbox Exec)        |       |  (EC2, EBS, VPC)  |
                            |                       |       |                   |
                            +-----------------------+       +-------------------+

Authentication ​

All endpoints (except otherwise noted) require authentication via an API Key. Include the key in the Authorization header of your HTTP requests as a Bearer token.

http
Authorization: Bearer fh_live_YOUR_API_KEY

WARNING

If the API key is missing or invalid, the API will return a 401 Unauthorized response.

Billing & Wallet ​

FOTOhub Compute operates strictly on a prepaid wallet model. All costs are calculated and deducted in USD (user_balance.available_usd).

  • Minimum Balance: You must have at least $0.50 USD in your wallet to provision a new instance.
  • Hourly Billing: Instances are billed per hour or partial hour they are running. Stopped instances only incur charges for attached EBS volumes and Elastic IPs.
  • Auto-Stop: If your wallet balance drops below $0.00 USD, running instances will be automatically stopped (not terminated). You will be notified via email.

TIP

Use the /instances/eligibility endpoint before provisioning to ensure your wallet has sufficient funds and you have not reached your instance quotas.

Limits & Quotas ​

ResourceDefault QuotaDescription
Active Instances5Maximum number of running or stopped instances per user.
Total EBS Volumes10Maximum number of attached or detached EBS volumes.
Max Volume Size4096 GBMaximum size for a single root or additional volume.
Security Groups10Maximum number of custom security groups.
Elastic IPs2Maximum number of allocated Elastic IPs.

Reference Tables ​

EBS Volume Types ​

TypeNameUse CaseBaseline Price (USD/GB-mo)
gp3General Purpose SSDBoot volumes, balanced performance$0.08
io2Provisioned IOPS SSDHigh-performance DBs, ML cache$0.125

OS Images ​

IDNameDescription
ubuntu-2204-ltsUbuntu 22.04 LTSStandard Ubuntu image.
ubuntu-2404-ltsUbuntu 24.04 LTSLatest Ubuntu LTS release.
deep-learning-amiAWS Deep Learning AMIPre-installed PyTorch, TensorFlow, CUDA.
fotohub-mlFOTOhub ML StackOptimized FOTOhub image for fast model training.

Available Instance Types Catalog (Partial) ​

FamilyInstance TypevCPURAM (GB)GPUVRAMHourly (USD)
G5g5.xlarge4161x NVIDIA A10G24GB$0.38
G5g5.2xlarge8321x NVIDIA A10G24GB$0.76
G4dng4dn.xlarge4161x NVIDIA T416GB$0.20
C5c5.large24NoneN/A$0.08

Instance Lifecycle ​

ascii
[ Provision Request ] ---> ( Pending ) ---> ( Running )
                                 |               |
                                 v               |
                           ( Failed )            |---> [ Stop Request ] ---> ( Stopping ) ---> ( Stopped )
                                                 |                                                |
                                                 |                                                |---> [ Start Request ] ---> ( Pending ) ---> ( Running )
                                                 v
                                        [ Terminate Request ] ---> ( Terminating ) ---> ( Terminated )

Real-world Patterns ​

1. Polling for Running Status ​

When you provision an instance, it enters the pending state. You should poll the /instances/:id endpoint until status is running.

2. Spot Instance Interruption ​

Spot instances (spot_instance: true) can save you up to 70% in costs, but they can be interrupted. Monitor the instance state; if it transitions to stopped unexpectedly, it may have been reclaimed.

3. SSH Automation ​

Download the SSH key via /instances/:id/ssh-key immediately after the instance is running. Set its permissions to 600 before using it with ssh.


API Endpoints Reference ​

1. Catalog ​

List Catalog ​

GET /catalog Returns a list of all 22 active instance types.

Response (200 OK):

json
{
  "machines": [
    {
      "id": "dea56b26-a8d9-4243-a2a5-82d325407a46",
      "instance_type": "g5.xlarge",
      "name": "NVIDIA A10G 24GB — g5.xlarge",
      "vcpu": 4,
      "ram_gb": 16,
      "vram": "24GB GDDR6",
      "gpu": "NVIDIA A10G",
      "gpu_count": 1,
      "hourly_rate_usd": 0.38,
      "spot_price_usd": 0.15,
      "currency": "USD",
      "is_active": true
    }
  ]
}
python
import requests
headers = {"Authorization": "Bearer fh_live_YOUR_API_KEY"}
res = requests.get("https://apis.fotohub.app/compute/v1/catalog", headers=headers)
print(res.json())
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/catalog', {
  headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' }
});
const data = await response.json();
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/catalog", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/catalog"   -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Single Instance Type Details ​

GET /catalog/:id

2. Instances (Core CRUD) ​

Check Eligibility ​

GET /instances/eligibility Check if you have the minimum $0.50 USD balance and haven't exceeded instance limits.

Response (200 OK):

json
{
  "allowed": true,
  "reason": null,
  "wallet_balance": 26.54,
  "wallet_currency": "USD",
  "min_balance_usd": 0.50,
  "instance_count": 0,
  "max_instances": 5
}

List Instances ​

GET /instances Returns a list of your instances.

Provision Instance ​

POST /instances

Request Body Schema:

FieldTypeRequiredDefaultDescription
catalog_idstringYes-UUID or instance type (e.g., g5.xlarge)
namestringYes-Display name
regionstringNoeu-central-1AWS Region
availability_zonestringNoeu-central-1aAWS AZ
max_runtime_hoursintNo24Auto-terminate after X hours (1-720)
root_volume_typestringNogp3gp3 or io2
root_volume_size_gbintNo50Root disk size (10-4096)
additional_volumeslistNo[]Array of volume config objects
os_imagestringYes-OS image ID
startup_scriptstringNo""Cloud-init bash script
install_presetslistNo[]e.g. ["docker", "python-ml"]
spot_instanceboolNofalseRequest spot instance
ssh_key_namestringNo""Empty to auto-generate
security_group_ruleslistNo[]Array of rule objects
labelsdictNo{}Key-value tags
attached_bucket_idstringNo""UUID of FOTOhub S3 bucket

Example Request:

json
{
  "catalog_id": "g5.xlarge",
  "name": "ml-training-node",
  "os_image": "ubuntu-2204-lts",
  "spot_instance": true,
  "root_volume_size_gb": 100
}

TIP

Using spot_instance: true is highly recommended for fault-tolerant workloads to significantly reduce USD costs.

Cost Estimator ​

POST /instances/estimate Calculate projected costs before provisioning.

Response (200 OK):

json
{
  "estimate": {
    "machine_per_hour": 0.3800,
    "ebs_per_hour": 0.0164,
    "network_per_hour": 0.0,
    "total_per_hour": 0.3964,
    "total_estimated_cost_usd": 3.9640,
    "hourly_rate_usd": 0.3964,
    "spot_discount_pct": 61,
    "currency": "USD",
    "session_hours": 10
  }
}

Instance Details ​

GET /instances/:id

Full Instance Details (with AWS metadata) ​

GET /instances/:id/full

Start Instance ​

POST /instances/:id/start

Stop Instance ​

POST /instances/:id/stop Stops the instance. EBS volume charges still apply.

Reboot Instance ​

POST /instances/:id/reboot

Terminate Instance ​

POST /instances/:id/terminate Irreversible. Deletes the instance and root volume.

Resize Instance ​

POST /instances/:id/resize Change instance type (must be stopped first).

3. Monitoring ​

Get Metrics ​

GET /instances/:id/metrics

Status Checks ​

GET /instances/:id/status-checks

Performance Insights ​

GET /instances/:id/insights

Get Logs ​

GET /instances/:id/logs

Raw Console Output ​

GET /instances/:id/console-output

4. SSH & Access ​

Download SSH Key ​

GET /instances/:id/ssh-key

Regenerate SSH Key ​

POST /instances/:id/ssh-key/regenerate

Network Interfaces ​

GET /instances/:id/network

5. Networking ​

Allocate & Associate Elastic IP ​

POST /instances/:id/elastic-ip

Release Elastic IP ​

DELETE /instances/:id/elastic-ip

List Security Groups ​

GET /instances/:id/security-groups

Add Security Rule ​

POST /instances/:id/security-rules

Remove Security Rule ​

DELETE /instances/:id/security-rules

Map Subdomain ​

POST /instances/:id/domain

Unmap Domain ​

DELETE /instances/:id/domain

6. Remote Scripts ​

List Presets ​

GET /scripts

Run Script ​

POST /instances/:id/run-script

Poll Script Result ​

GET /instances/:id/script-result/:command_id

7. Snapshots & Images ​

Snapshot Root Volume ​

POST /instances/:id/snapshot

List Snapshots ​

GET /snapshots

Delete Snapshot ​

DELETE /snapshots/:snapshot_id

Restore Snapshot ​

POST /snapshots/:snapshot_id/restore

Create Custom AMI ​

POST /instances/:id/image

List Custom AMIs ​

GET /images

Deregister AMI ​

DELETE /images/:image_id

8. Tags ​

List Tags ​

GET /instances/:id/tags

Set/Update Tags ​

PUT /instances/:id/tags

Remove Tags ​

DELETE /instances/:id/tags

9. Volumes ​

Attach Volume ​

POST /instances/:id/volumes

List Attached Volumes ​

GET /instances/:id/volumes

Update Volume ​

PUT /instances/:id/volumes/:volume_id

Detach Volume ​

DELETE /instances/:id/volumes/:volume_id

10. Infrastructure (AWS Sub-routes) ​

Located at /compute/v1/aws/

  • VPCs: GET /vpcs
  • Subnets: GET /subnets
  • Security Groups: GET /security-groups, POST /security-groups, DELETE /security-groups/:sg_id
  • Load Balancers: POST /load-balancers, GET /load-balancers, DELETE /load-balancers
  • Target Groups: POST /target-groups, GET /target-groups, DELETE /target-groups, POST /target-groups/register, POST /target-groups/deregister
  • Auto Scaling: POST /auto-scaling, GET /auto-scaling, PUT /auto-scaling/:name, DELETE /auto-scaling/:name
  • Alarms: GET /alarms, POST /alarms, DELETE /alarms/:alarm_name
  • S3: POST /s3/buckets, GET /s3/buckets
  • Access Keys: POST /access-keys, GET /access-keys, DELETE /access-keys/:key_id

11. DNS ​

  • Zones: GET /dns/zones, POST /dns/zones, GET /dns/zones/:zone_id, DELETE /dns/zones/:zone_id, POST /dns/zones/:zone_id/verify
  • Records: GET /dns/zones/:zone_id/records, POST /dns/zones/:zone_id/records, DELETE /dns/zones/:zone_id/records
  • Actions: POST /dns/zones/:zone_id/point-to-instance, POST /dns/zones/:zone_id/setup-email

12. Costs ​

Cost Forecast ​

GET /costs/forecast?days=30

Cost Breakdown ​

GET /costs/breakdown?days=7

13. Sandbox (Firecracker microVM) ​

FOTOhub provides a highly secure, isolated environment for executing untrusted Python code using AWS Firecracker microVMs.

POST https://apis.fotohub.app/sandbox/exec-python

Request:

json
{
  "code": "import numpy as np
print(np.mean([1,2,3]))",
  "inputs": {},
  "timeout": 10
}

Response (200 OK):

json
{
  "ok": true,
  "output": "2.0
",
  "error": null,
  "execution_ms": 21,
  "memory_mb": 45
}

TIP

The sandbox has a strict default timeout of 10 seconds. Use it for data transformations, fast inference checks, or evaluating user-submitted code securely.

Single Instance Type Details ​

GET /catalog/:id

Get specs for a single instance type.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/catalog/:id", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/catalog/:id', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/catalog/:id", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/catalog/:id" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

List Instances ​

GET /instances

Returns a list of all instances associated with the user account.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/instances", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/instances", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/instances" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Instance Details ​

GET /instances/:id

Fetch current state and configuration of a specific instance.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/instances/:id", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/instances/:id", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/instances/:id" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Full Instance Details ​

GET /instances/:id/full

Fetch extensive details including raw AWS EC2 metadata.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/instances/:id/full", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/full', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/instances/:id/full", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/instances/:id/full" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Start Instance ​

POST /instances/:id/start

Start a stopped instance.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/instances/:id/start", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/start', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/instances/:id/start", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/instances/:id/start" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Stop Instance ​

POST /instances/:id/stop

Stop a running instance. EBS charges continue to apply.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/instances/:id/stop", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/stop', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/instances/:id/stop", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/instances/:id/stop" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Reboot Instance ​

POST /instances/:id/reboot

Reboot a running instance.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/instances/:id/reboot", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/reboot', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/instances/:id/reboot", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/instances/:id/reboot" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Terminate Instance ​

POST /instances/:id/terminate

Permanently delete an instance and its root volume.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/instances/:id/terminate", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/terminate', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/instances/:id/terminate", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/instances/:id/terminate" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Resize Instance ​

POST /instances/:id/resize

Change the instance type. The instance must be in a stopped state.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/instances/:id/resize", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/resize', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/instances/:id/resize", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/instances/:id/resize" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Get Metrics ​

GET /instances/:id/metrics

Retrieve CloudWatch CPU and Network metrics for the instance.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/instances/:id/metrics", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/metrics', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/instances/:id/metrics", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/instances/:id/metrics" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Status Checks ​

GET /instances/:id/status-checks

Retrieve AWS system and instance status checks.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/instances/:id/status-checks", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/status-checks', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/instances/:id/status-checks", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/instances/:id/status-checks" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Performance Insights ​

GET /instances/:id/insights

Get ML-driven performance insights and recommendations.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/instances/:id/insights", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/insights', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/instances/:id/insights", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/instances/:id/insights" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Get Logs ​

GET /instances/:id/logs

Retrieve standard console output logs.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/instances/:id/logs", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/logs', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/instances/:id/logs", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/instances/:id/logs" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Raw Console Output ​

GET /instances/:id/console-output

Get raw serial console output from the hypervisor.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/instances/:id/console-output", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/console-output', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/instances/:id/console-output", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/instances/:id/console-output" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Download SSH Key ​

GET /instances/:id/ssh-key

Download the private PEM key for SSH access.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/instances/:id/ssh-key", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/ssh-key', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/instances/:id/ssh-key", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/instances/:id/ssh-key" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Regenerate SSH Key ​

POST /instances/:id/ssh-key/regenerate

Rotate the SSH key for the instance.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/instances/:id/ssh-key/regenerate", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/ssh-key/regenerate', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/instances/:id/ssh-key/regenerate", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/instances/:id/ssh-key/regenerate" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Network Interfaces ​

GET /instances/:id/network

List ENIs and IP addresses attached to the instance.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/instances/:id/network", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/network', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/instances/:id/network", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/instances/:id/network" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Allocate Elastic IP ​

POST /instances/:id/elastic-ip

Allocate and associate a static Elastic IP.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/instances/:id/elastic-ip", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/elastic-ip', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/instances/:id/elastic-ip", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/instances/:id/elastic-ip" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Release Elastic IP ​

DELETE /instances/:id/elastic-ip

Disassociate and release the Elastic IP.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.delete("https://apis.fotohub.app/compute/v1/instances/:id/elastic-ip", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/elastic-ip', { method: 'DELETE', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("DELETE", "https://apis.fotohub.app/compute/v1/instances/:id/elastic-ip", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X DELETE "https://apis.fotohub.app/compute/v1/instances/:id/elastic-ip" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

List Security Groups ​

GET /instances/:id/security-groups

List attached security groups and rules.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/instances/:id/security-groups", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/security-groups', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/instances/:id/security-groups", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/instances/:id/security-groups" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Add Security Rule ​

POST /instances/:id/security-rules

Add an inbound or outbound network rule.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/instances/:id/security-rules", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/security-rules', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/instances/:id/security-rules", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/instances/:id/security-rules" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Remove Security Rule ​

DELETE /instances/:id/security-rules

Remove a network rule.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.delete("https://apis.fotohub.app/compute/v1/instances/:id/security-rules", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/security-rules', { method: 'DELETE', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("DELETE", "https://apis.fotohub.app/compute/v1/instances/:id/security-rules", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X DELETE "https://apis.fotohub.app/compute/v1/instances/:id/security-rules" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Map Subdomain ​

POST /instances/:id/domain

Map a Route53 subdomain to the instance's public IP.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/instances/:id/domain", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/domain', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/instances/:id/domain", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/instances/:id/domain" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Unmap Domain ​

DELETE /instances/:id/domain

Remove the subdomain mapping.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.delete("https://apis.fotohub.app/compute/v1/instances/:id/domain", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/domain', { method: 'DELETE', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("DELETE", "https://apis.fotohub.app/compute/v1/instances/:id/domain", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X DELETE "https://apis.fotohub.app/compute/v1/instances/:id/domain" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

List Presets ​

GET /scripts

List available preset startup and operational scripts.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/scripts", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/scripts', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/scripts", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/scripts" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Run Script ​

POST /instances/:id/run-script

Execute a bash script on the instance via AWS SSM.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/instances/:id/run-script", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/run-script', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/instances/:id/run-script", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/instances/:id/run-script" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Poll Script Result ​

GET /instances/:id/script-result/:command_id

Get the status and output of an SSM script execution.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/instances/:id/script-result/:command_id", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/script-result/:command_id', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/instances/:id/script-result/:command_id", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/instances/:id/script-result/:command_id" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Snapshot Root Volume ​

POST /instances/:id/snapshot

Create an EBS snapshot of the root volume.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/instances/:id/snapshot", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/snapshot', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/instances/:id/snapshot", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/instances/:id/snapshot" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

List Snapshots ​

GET /snapshots

List all user snapshots.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/snapshots", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/snapshots', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/snapshots", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/snapshots" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Delete Snapshot ​

DELETE /snapshots/:snapshot_id

Delete a specific snapshot.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.delete("https://apis.fotohub.app/compute/v1/snapshots/:snapshot_id", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/snapshots/:snapshot_id', { method: 'DELETE', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("DELETE", "https://apis.fotohub.app/compute/v1/snapshots/:snapshot_id", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X DELETE "https://apis.fotohub.app/compute/v1/snapshots/:snapshot_id" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Restore Snapshot ​

POST /snapshots/:snapshot_id/restore

Restore a snapshot to a new EBS volume.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/snapshots/:snapshot_id/restore", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/snapshots/:snapshot_id/restore', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/snapshots/:snapshot_id/restore", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/snapshots/:snapshot_id/restore" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Create Custom AMI ​

POST /instances/:id/image

Create a custom Machine Image from the instance state.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/instances/:id/image", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/image', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/instances/:id/image", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/instances/:id/image" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

List Custom AMIs ​

GET /images

List user's custom Machine Images.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/images", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/images', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/images", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/images" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Deregister AMI ​

DELETE /images/:image_id

Deregister a custom image.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.delete("https://apis.fotohub.app/compute/v1/images/:image_id", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/images/:image_id', { method: 'DELETE', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("DELETE", "https://apis.fotohub.app/compute/v1/images/:image_id", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X DELETE "https://apis.fotohub.app/compute/v1/images/:image_id" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

List Tags ​

GET /instances/:id/tags

List key-value tags attached to the instance.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/instances/:id/tags", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/tags', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/instances/:id/tags", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/instances/:id/tags" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Set/Update Tags ​

PUT /instances/:id/tags

Set or update instance tags.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.put("https://apis.fotohub.app/compute/v1/instances/:id/tags", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/tags', { method: 'PUT', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("PUT", "https://apis.fotohub.app/compute/v1/instances/:id/tags", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X PUT "https://apis.fotohub.app/compute/v1/instances/:id/tags" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Remove Tags ​

DELETE /instances/:id/tags

Remove specific tags from the instance.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.delete("https://apis.fotohub.app/compute/v1/instances/:id/tags", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/tags', { method: 'DELETE', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("DELETE", "https://apis.fotohub.app/compute/v1/instances/:id/tags", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X DELETE "https://apis.fotohub.app/compute/v1/instances/:id/tags" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Attach Volume ​

POST /instances/:id/volumes

Provision and attach a new EBS volume.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/instances/:id/volumes", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/volumes', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/instances/:id/volumes", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/instances/:id/volumes" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

List Attached Volumes ​

GET /instances/:id/volumes

List all volumes attached to the instance.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/instances/:id/volumes", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/volumes', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/instances/:id/volumes", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/instances/:id/volumes" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Update Volume ​

PUT /instances/:id/volumes/:volume_id

Modify volume size, IOPS, or throughput.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.put("https://apis.fotohub.app/compute/v1/instances/:id/volumes/:volume_id", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/volumes/:volume_id', { method: 'PUT', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("PUT", "https://apis.fotohub.app/compute/v1/instances/:id/volumes/:volume_id", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X PUT "https://apis.fotohub.app/compute/v1/instances/:id/volumes/:volume_id" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Detach Volume ​

DELETE /instances/:id/volumes/:volume_id

Detach and optionally delete an EBS volume.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.delete("https://apis.fotohub.app/compute/v1/instances/:id/volumes/:volume_id", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/instances/:id/volumes/:volume_id', { method: 'DELETE', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("DELETE", "https://apis.fotohub.app/compute/v1/instances/:id/volumes/:volume_id", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X DELETE "https://apis.fotohub.app/compute/v1/instances/:id/volumes/:volume_id" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

List VPCs ​

GET /vpcs

List VPCs in the account.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/vpcs", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/vpcs', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/vpcs", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/vpcs" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

List Subnets ​

GET /subnets

List subnets.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/subnets", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/subnets', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/subnets", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/subnets" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

List SGs ​

GET /security-groups

List security groups.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/security-groups", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/security-groups', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/security-groups", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/security-groups" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Create SG ​

POST /security-groups

Create a security group.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/security-groups", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/security-groups', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/security-groups", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/security-groups" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Delete SG ​

DELETE /security-groups/:sg_id

Delete a security group.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.delete("https://apis.fotohub.app/compute/v1/security-groups/:sg_id", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/security-groups/:sg_id', { method: 'DELETE', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("DELETE", "https://apis.fotohub.app/compute/v1/security-groups/:sg_id", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X DELETE "https://apis.fotohub.app/compute/v1/security-groups/:sg_id" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Create LB ​

POST /load-balancers

Provision an Application Load Balancer.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/load-balancers", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/load-balancers', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/load-balancers", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/load-balancers" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

List LBs ​

GET /load-balancers

List Load Balancers.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/load-balancers", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/load-balancers', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/load-balancers", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/load-balancers" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Delete LB ​

DELETE /load-balancers

Delete a Load Balancer.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.delete("https://apis.fotohub.app/compute/v1/load-balancers", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/load-balancers', { method: 'DELETE', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("DELETE", "https://apis.fotohub.app/compute/v1/load-balancers", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X DELETE "https://apis.fotohub.app/compute/v1/load-balancers" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Create Target Group ​

POST /target-groups

Create a Target Group for LB.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/target-groups", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/target-groups', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/target-groups", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/target-groups" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

List Target Groups ​

GET /target-groups

List Target Groups.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/target-groups", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/target-groups', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/target-groups", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/target-groups" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Delete Target Group ​

DELETE /target-groups

Delete a Target Group.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.delete("https://apis.fotohub.app/compute/v1/target-groups", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/target-groups', { method: 'DELETE', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("DELETE", "https://apis.fotohub.app/compute/v1/target-groups", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X DELETE "https://apis.fotohub.app/compute/v1/target-groups" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Register Targets ​

POST /target-groups/register

Register instances to a Target Group.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/target-groups/register", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/target-groups/register', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/target-groups/register", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/target-groups/register" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Deregister Targets ​

POST /target-groups/deregister

Remove instances from a Target Group.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/target-groups/deregister", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/target-groups/deregister', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/target-groups/deregister", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/target-groups/deregister" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Create ASG ​

POST /auto-scaling

Create an Auto Scaling Group.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/auto-scaling", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/auto-scaling', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/auto-scaling", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/auto-scaling" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

List ASGs ​

GET /auto-scaling

List Auto Scaling Groups.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/auto-scaling", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/auto-scaling', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/auto-scaling", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/auto-scaling" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Update ASG ​

PUT /auto-scaling/:name

Update ASG capacity.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.put("https://apis.fotohub.app/compute/v1/auto-scaling/:name", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/auto-scaling/:name', { method: 'PUT', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("PUT", "https://apis.fotohub.app/compute/v1/auto-scaling/:name", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X PUT "https://apis.fotohub.app/compute/v1/auto-scaling/:name" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Delete ASG ​

DELETE /auto-scaling/:name

Delete Auto Scaling Group.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.delete("https://apis.fotohub.app/compute/v1/auto-scaling/:name", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/auto-scaling/:name', { method: 'DELETE', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("DELETE", "https://apis.fotohub.app/compute/v1/auto-scaling/:name", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X DELETE "https://apis.fotohub.app/compute/v1/auto-scaling/:name" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

List Alarms ​

GET /alarms

List CloudWatch Alarms.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/alarms", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/alarms', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/alarms", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/alarms" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Create Alarm ​

POST /alarms

Create a CloudWatch Alarm.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/alarms", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/alarms', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/alarms", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/alarms" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Delete Alarm ​

DELETE /alarms/:alarm_name

Delete a CloudWatch Alarm.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.delete("https://apis.fotohub.app/compute/v1/alarms/:alarm_name", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/alarms/:alarm_name', { method: 'DELETE', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("DELETE", "https://apis.fotohub.app/compute/v1/alarms/:alarm_name", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X DELETE "https://apis.fotohub.app/compute/v1/alarms/:alarm_name" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Create Bucket ​

POST /s3/buckets

Create an S3 Bucket.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/s3/buckets", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/s3/buckets', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/s3/buckets", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/s3/buckets" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

List Buckets ​

GET /s3/buckets

List S3 Buckets.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/s3/buckets", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/s3/buckets', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/s3/buckets", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/s3/buckets" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Create Access Key ​

POST /access-keys

Create IAM Access Key.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/access-keys", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/access-keys', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/access-keys", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/access-keys" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

List Access Keys ​

GET /access-keys

List IAM Access Keys.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/access-keys", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/access-keys', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/access-keys", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/access-keys" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Delete Access Key ​

DELETE /access-keys/:key_id

Delete IAM Access Key.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.delete("https://apis.fotohub.app/compute/v1/access-keys/:key_id", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/access-keys/:key_id', { method: 'DELETE', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("DELETE", "https://apis.fotohub.app/compute/v1/access-keys/:key_id", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X DELETE "https://apis.fotohub.app/compute/v1/access-keys/:key_id" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

List DNS Zones ​

GET /dns/zones

List Route53 Hosted Zones.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/dns/zones", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/dns/zones', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/dns/zones", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/dns/zones" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Create DNS Zone ​

POST /dns/zones

Create a new Hosted Zone.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/dns/zones", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/dns/zones', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/dns/zones", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/dns/zones" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Get DNS Zone ​

GET /dns/zones/:zone_id

Get details of a Hosted Zone.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/dns/zones/:zone_id", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/dns/zones/:zone_id', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/dns/zones/:zone_id", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/dns/zones/:zone_id" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Delete DNS Zone ​

DELETE /dns/zones/:zone_id

Delete a Hosted Zone.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.delete("https://apis.fotohub.app/compute/v1/dns/zones/:zone_id", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/dns/zones/:zone_id', { method: 'DELETE', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("DELETE", "https://apis.fotohub.app/compute/v1/dns/zones/:zone_id", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X DELETE "https://apis.fotohub.app/compute/v1/dns/zones/:zone_id" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Verify DNS Zone ​

POST /dns/zones/:zone_id/verify

Verify domain ownership for Zone.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/verify", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/verify', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/verify", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/verify" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

List DNS Records ​

GET /dns/zones/:zone_id/records

List records in a Zone.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/records", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/records', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/records", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/records" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Create DNS Record ​

POST /dns/zones/:zone_id/records

Create a DNS record.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/records", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/records', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/records", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/records" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Delete DNS Record ​

DELETE /dns/zones/:zone_id/records

Delete a DNS record.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.delete("https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/records", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/records', { method: 'DELETE', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("DELETE", "https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/records", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X DELETE "https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/records" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Point to Instance ​

POST /dns/zones/:zone_id/point-to-instance

Quick setup ALIAS to instance.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/point-to-instance", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/point-to-instance', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/point-to-instance", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/point-to-instance" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Setup Email Records ​

POST /dns/zones/:zone_id/setup-email

Setup standard MX/TXT records.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Request Body:

json
{
  "example_field": "value"
}

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.post("https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/setup-email", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/setup-email', { method: 'POST', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("POST", "https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/setup-email", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X POST "https://apis.fotohub.app/compute/v1/dns/zones/:zone_id/setup-email" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Cost Forecast ​

GET /costs/forecast?days=30

Get USD cost forecast.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/costs/forecast?days=30", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/costs/forecast?days=30', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/costs/forecast?days=30", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/costs/forecast?days=30" -H "Authorization: Bearer fh_live_YOUR_API_KEY"

Cost Breakdown ​

GET /costs/breakdown?days=7

Get USD cost breakdown by service.

Request Parameters:

FieldTypeRequiredDescription
id / namestringYesResource identifier.

Example Response (200 OK):

json
{
  "status": "success",
  "message": "Action completed successfully."
}
python
import requests
res = requests.get("https://apis.fotohub.app/compute/v1/costs/breakdown?days=7", headers={"Authorization": "Bearer fh_live_YOUR_API_KEY"})
typescript
const response = await fetch('https://apis.fotohub.app/compute/v1/costs/breakdown?days=7', { method: 'GET', headers: { 'Authorization': 'Bearer fh_live_YOUR_API_KEY' } });
go
req, _ := http.NewRequest("GET", "https://apis.fotohub.app/compute/v1/costs/breakdown?days=7", nil)
req.Header.Add("Authorization", "Bearer fh_live_YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
bash
curl -X GET "https://apis.fotohub.app/compute/v1/costs/breakdown?days=7" -H "Authorization: Bearer fh_live_YOUR_API_KEY"