---
title: "Search multi-cloud deployment strategies"
method: POST
path: "/multi-cloud/explore"
tags: ["Optimize & Predict"]
---

# Search multi-cloud deployment strategies

`POST /multi-cloud/explore`

## Request

- Base URL: `https://www.cloudworldmodel.ai/api`
- URL: `https://www.cloudworldmodel.ai/api/multi-cloud/explore`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-PAYMENT`
  - API key in header `PAYMENT-SIGNATURE`

Analyze a workload profile and generate optimized multi-cloud deployment strategies.
The system evaluates different provider combinations across AWS, GCP, Azure, OCI, and DigitalOcean
based on cost, latency, and vendor lock-in considerations.

**DigitalOcean as a candidate provider:** DigitalOcean is a first-class candidate in every
exploration run. It is particularly well-suited for cost-optimized workloads — Droplets and
Managed Databases typically produce the lowest monthly spend in the comparison report. Set a
high `cost` weight (e.g. 0.7+) and a moderate budget to see DigitalOcean-primary strategies
appear at the top of `topStrategies` in the results.

**Request body fields:** The request body has two top-level fields that are independent of
each other. `workloadProfile` describes the workload being evaluated (compute/database
instances, traffic, latency requirements, and primary region). `optimizationWeights` is a
separate top-level object — **not** nested inside `workloadProfile` — that controls how
strategies are ranked: `cost` (default 0.4), `latency` (default 0.4), and `vendorLockIn`
(default 0.2). Weights need not sum to 1.0; the engine normalises them during scoring. A
cost-heavy weight (e.g. `cost: 0.9`) surfaces the cheapest strategies at the top of
`topStrategies`; a latency-heavy weight (e.g. `latency: 0.9`) surfaces the lowest-latency
strategies instead.

## Request body

- object
  - `workloadProfile` object, required: Workload characteristics to evaluate. Must contain only the documented properties listed below. Unknown keys are rejected with HTTP 400 — place optimizationWeights as a separate top-level field alongside workloadProfile, not inside it.
    - `computeInstances` integer, required: Number of compute instances required
    - `databaseInstances` integer, required: Number of database instances required
    - `storageGB` integer, required: Storage capacity in gigabytes
    - `trafficRPS` integer, required: Expected traffic in requests per second
    - `latencyRequirementMs` integer, required: Maximum acceptable latency in milliseconds
    - `primaryRegion` string, required: Primary deployment region
    - `secondaryRegions` string[]: Optional secondary regions for multi-region deployment
    - `requiresMultiRegion` boolean: Whether multi-region deployment is required
    - `dataResidencyRequirements` string[]: Data residency constraints (e.g., GDPR regions)
    - `sourceProvider` 'aws' | 'gcp' | 'azure' | 'oci' | 'digitalocean': The cloud provider you are currently on
    - `workloadType` 'standard' | 'inference': Workload category. `standard` (default) generates CPU compute strategies only. `inference` additionally generates one GPU Kubernetes strategy per provider — EKS g5.xlarge (A10G), GKE n1-standard-4+T4, AKS NC8ads_A10_v4 (fractional A10), OKE VM.GPU.A10.1, and DOKS gpu-h100x1-80gb — priced from GPU_NODE_HOURLY_RATES in shared/provider-pricing.ts.
    - `targetTokensPerSec` number: Target sustained output-token throughput (tokens/sec) for `workloadType: inference` workloads. When set, the generator sizes each provider's GPU node count to meet this target (ceil(targetTokensPerSec / acceleratorThroughput)). If omitted, `computeInstances` is used as the GPU node count directly. Ignored for `workloadType: standard`.
  - `optimizationWeights` object: Weights for optimization objectives. Each field is a number 0–1; a per-field value > 1 returns 400. The engine normalises the weights during scoring so the sum need not equal 1.0 — e.g. {cost: 0.9, latency: 0.3} is valid. Unknown keys return 400.
    - `cost` number: Weight for cost optimization
    - `latency` number: Weight for latency optimization
    - `vendorLockIn` number: Weight for minimizing vendor lock-in
  - `maxCostPerHour` number: Optional hard budget ceiling (USD/hr). Strategies whose `totalCostPerHour` exceeds this value are ranked last in the results rather than filtered out, so you can see what is available within and outside your budget in a single response.
  - `errorBudgetPct` number: Optional SLO error-budget constraint (%). Strategies whose implied error rate (derived from provider-count redundancy: single-provider ~0.5%, two-provider ~0.15%, three+ ~0.05%) exceeds this threshold are ranked last. For example, setting `0.1` means any single-provider strategy is demoted below multi-provider alternatives.
  - `webhookUrl` string, uri: Optional HTTPS URL to receive webhook notification when job completes
  - `webhookSecret` string: Optional secret for HMAC-SHA256 webhook signature verification
  - `modifiers` object: Optional pricing modifier overrides for this exploration run. All fields default to off/on-demand. Pass these to apply discount-adjusted cost estimates in the returned strategies and comparison report.
    - `awsCommitment` 'on-demand' | '1yr' | '3yr': AWS Savings Plan commitment tier. `1yr` applies ~40% off EC2 compute costs; `3yr` applies ~60% off. Only affects AWS allocations in the returned strategies.
    - `azureHybridBenefit` boolean: When true, applies Azure Hybrid Benefit (~40% off Azure compute and database) for existing Windows Server / SQL Server licence holders.
    - `spotEligible` boolean: When true, shows estimated Spot / Preemptible VM pricing alongside on-demand costs for eligible providers (AWS ~70% off, GCP ~80% off, Azure ~75% off, OCI ~50% off). DigitalOcean has no spot offering.
    - `oracleLicenseHolder` boolean: When true, notes an OCI BYOL (Bring Your Own Oracle Licence) cost impact in the comparison report (~50% off OCI database costs for Standard Edition or Enterprise Edition licence holders). BYOL is informational — it does not change strategy cost figures.

## Response `202`

Multi-cloud exploration job started

- object
  - `job` object
    - `id` string, uuid
    - `type` 'multicloud_exploration'
    - `status` 'pending' | 'running'
    - `createdAt` string, date-time
  - `message` string

## Other responses

- `400`: Invalid request data — structured field-level error
- `401`: Authentication required or invalid API key
- `402`: Payment required — the endpoint is metered and no API key was provided. The response body follows the [x402 v2 protocol](https://x402.org) and describes one or more USDC payment options that the caller can select before retrying the request. Base is always the first option and uses `X-PAYMENT`. When an `accepts` entry for Solana is present, it is an additional USDC-SPL option that uses `PAYMENT-SIGNATURE` and its `extra.feePayer` value. The server verifies either payment through the PayAI facilitator at `https://facilitator.payai.network`. The `PAYMENT-REQUIRED` response header carries this entire JSON body as a base64-encoded string for protocol-aware clients. Call `GET /api/billing/x402/config` to retrieve the current price table and wallet address and `paymentOptions` before constructing a payment.

---

[API](https://skmtc.dev/cloudworldmodel/apis/cloud-world-model-agent-api.md) · [All operations](https://skmtc.dev/cloudworldmodel/apis/cloud-world-model-agent-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cloudworldmodel/apis/cloud-world-model-agent-api/revisions/ecc3ad1ff07f?raw)
