---
title: "Simulate provider quotas, throttling, retries, and concurrency"
method: POST
path: "/simulations/{simulationId}/provider-api-limits"
tags: ["Simulations"]
---

# Simulate provider quotas, throttling, retries, and concurrency

`POST /simulations/{simulationId}/provider-api-limits`

## Request

- Base URL: `https://www.cloudworldmodel.ai/api`
- URL: `https://www.cloudworldmodel.ai/api/simulations/{simulationId}/provider-api-limits`
- Auth: none required

Use this operation for provider quotas, API throttling, retries,
backoff, queueing, worker/concurrency limits, and other control-plane
operations. It runs a bounded, synchronous workload through Cloud World
Model's deterministic provider-limit scheduler and models throttling,
queueing, throughput, completion, retries, timeouts, failures,
dependency blocking, and optional concurrency comparisons.

This is simulated provider-control-plane data, not a provider SDK or a
live quota lookup. It never calls AWS, Azure, GCP, DigitalOcean, OCI,
or any other provider API, discovers negotiated quotas, creates
resources, persists the workload, or changes the simulation's resource
graph or /step state. Provider throttling in the result is distinct
from CWM's own HTTP 429/rate-limit middleware. Use resource `/step` for
cloud workload behavior and use `/simulations/stateless` for the
separate stateless resource simulation; neither substitutes for this
provider-limit operation.

Supply one service per request: the top-level `service` applies to
every operation group in the DAG. To compare services, submit separate
requests. Supported exact provider/service/operation/category tuples
resolve with `result.policyResolutions[].policySource` set to
`catalog_default`; unsupported tuples return `unsupported_policy`
without a scoped caller override.

Execution is protected by a 2-second wall-clock deadline and a
process-local admission limit of two concurrent runs. Identical active
or recently interrupted workloads, and workloads submitted while
execution capacity is full, are rejected with HTTP 409 and must not be
automatically retried. Deadline expiry is an HTTP 422 non-retryable
failure.

Catalog defaults cover `aws.ec2.mutating-api` (`service: ec2`,
`operation: mutating`, `category: compute`), AWS Elastic Load Balancing
v1 and v2 (`service: elbv1` or `elbv2`, `category: network`), and Azure
Resource Manager read/write buckets. For each ELB service the exact
supported operations are `resource-intensive`, `registration`,
`non-mutating`, and `mutating`, yielding `aws.elbv1.resource-intensive`,
`aws.elbv1.registration`, `aws.elbv1.non-mutating`,
`aws.elbv1.mutating`, `aws.elbv2.resource-intensive`,
`aws.elbv2.registration`, `aws.elbv2.non-mutating`, and
`aws.elbv2.mutating`. These are documented API action categories,
not arbitrary AWS action names. Do not infer an ELB category for an
uncategorized action or interchange ELBv1 and ELBv2 buckets.
Aurora Serverless v1 Data API has two **independent** catalog models
(`service: rds-data-api-aurora-serverless-v1`, `category: database`):
`operation: requests-per-second` resolves
`aws.rds-data-api-aurora-serverless-v1.requests-per-second` (1,000
requests/second per account in the current Region);
`operation: concurrent-requests` resolves
`aws.rds-data-api-aurora-serverless-v1.concurrent-requests` (500
concurrent requests to ONE cluster using the SAME secret, with excess
requests queued). Do not interpret them as joint enforcement of one
workload. A request mixing these two selectors is rejected; send
separate requests and do not treat results as simultaneous enforcement.
Both require `quotaScope.account`; concurrency additionally
requires `quotaScope.resource`, an opaque cluster-secret-pair label,
never an actual secret. The rate model has no documented burst; its
fixed 1-second scheduler window approximates the AWS rate limit, not
AWS's documented timing. Source:
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html
Generic RDS control-plane, Aurora Serverless v2 Data API, and
provisioned Aurora Data API are not covered by these selectors.
AWS IAM, generic RDS control-plane, EC2 Auto Scaling, Application Auto Scaling,
and S3 control-plane requests have no numeric scheduler-compatible
public baseline in this catalog. S3 object per-prefix throughput is
data-plane guidance, not a control-plane quota. Such tuples, as well
as GCP, DigitalOcean, and OCI tuples without a caller-supplied quota
override, return `unsupported_policy` rather than HTTP 429. Overrides must use a
concrete account, subscription, or project scope and include
caller-supplied provenance. The catalog policy source, documentation
reference, confidence, and as-of date are returned in `provenance`
and `result.policyResolutions`.

EC2 Auto Scaling (`service: ec2-auto-scaling`, `category: compute`) initially
models `DescribeAutoScalingGroups`, `DescribeScheduledActions`,
`CreateAutoScalingGroup`, `UpdateAutoScalingGroup`, `SetDesiredCapacity`,
and `DeleteAutoScalingGroup`. AWS documents one shared account API token
bucket, `RateExceeded` on throttle, and no public numeric capacity/refill
pair. Use one account/Region-scoped caller `operation: all` token-bucket
override with caller-verified burst capacity and refill for these six
operation groups. Put `operation: all` on the override policy and its
policy `scope`, not on the request's `quotaScope`; the latter can omit
`operation` for a mixed workload. They contend for the same bucket.
Other operations do not inherit this six-action override. Mark `throttled` retryable and
configure exponential backoff to model client retry behavior. This is
not an Auto Scaling resource/configuration quota or an EC2 API bucket.
AWS advises `IncludeInstances=false` for `DescribeAutoScalingGroups`
to omit instance details; this advice does not change modeled token
consumption, latency, or quota. See
https://docs.aws.amazon.com/autoscaling/ec2/APIReference/Welcome.html
and docs/aws-api-limit-evidence.md for the evidence gap.

`latency` is required because it is a Cloud World Model client-side
model input: provide measured client values when available. If no
measurements are available, use the canonical baseline
`meanMs: 40`, `p95Ms: 80`, and `timeoutMs: 5000` shown below. These
values are simulation guidance, not AWS service defaults and not a
live AWS latency claim. The same applies to every latency and retry
value in this operation.

For mixed workloads, each `result.policyResolutions` entry is keyed by
operation category, operation, and resource group (resource is omitted
when absent). Multiple operation IDs with the same three values share
one resolution. Its `accounting` counts that group's planned units,
attempts, retries, throttles, and completions; summing these fields
across resolutions gives the corresponding `result.accounting` totals.
Attempts count initial and retry attempts, while retries and throttles
can count the same work, so do not sum different fields together.
For the `mixedAwsEc2Groups` request example below, the modeled result
contains this fragment (other result fields are omitted):

```json
{
  "policyResolutions": [
    {"operationCategory":"compute","operation":"mutating","resource":"fleet-a","policySource":"catalog_default","accounting":{"plannedOperations":3,"attemptedOperations":3,"retryOperations":0,"throttledOperations":0,"completedOperations":3,"denominator":"planned_operations"}},
    {"operationCategory":"compute","operation":"mutating","resource":"fleet-b","policySource":"catalog_default","accounting":{"plannedOperations":2,"attemptedOperations":2,"retryOperations":0,"throttledOperations":0,"completedOperations":2,"denominator":"planned_operations"}}
  ],
  "accounting": {"plannedOperations":5,"attemptedOperations":5,"retryOperations":0,"throttledOperations":0,"completedOperations":5,"failedOperations":0,"timedOutOperations":0,"dependencyBlockedOperations":0,"unsupportedOperations":0,"pendingOperations":0,"terminalOperations":5,"denominator":"planned_operations"}
}
```

Omitting `retry` without selecting `awsSdkRetryProfile` selects the
legacy one-attempt, no-backoff baseline:
`maxAttempts: 1`, `baseBackoffMs: 0`, `maxBackoffMs: 0`,
`backoffMultiplier: 2`, and `jitterRatio: 0`; although generic retry
conditions are allowed by the default schema, one attempt means no
retry is made.
An explicitly selected `awsSdkRetryProfile` models the shared retry
layer of JavaScript v3 Standard and Adaptive. Adaptive's per-client
request-rate limiter and cross-operation coupling are not modeled.
Explicit `retry` settings override the selected profile. Provider
quota policies remain a separate catalog concern.

The `aws-js-v3-standard-pre-2026` profile has transient and throttling
base delays of 100 ms, 10 transient / 5 throttling retry tokens, a
500-token client budget, and 3 maximum attempts. The separately
selectable `aws-js-v3-standard-2026` profile uses 50 ms transient and
1,000 ms throttling bases, 14 transient / 5 throttling tokens, and a
500-token budget. For DynamoDB and DynamoDB Streams, the 2026 profile
uses a 25 ms transient base and 4 attempts; the pre-2026 profile stays
at 100 ms and 3 attempts. Both profiles use seeded full jitter with a
20,000 ms cap. AWS's `x-amz-retry-after` is clamped to the computed
jittered delay through 5,000 ms above it, up to 25,000 ms, without
extra client jitter.

AWS sources:
https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html
https://github.com/aws/aws-sdk-js-v3/issues/8037
https://aws.amazon.com/blogs/developer/announcing-updated-retry-behavior-for-aws-sdks-and-tools/
AWS describes default rollout as no sooner than November 2026; the
exact date is unconfirmed here. Profiles remain explicitly selectable
and no saved or historical simulation is automatically rewritten.

Bounds: up to 256 operation groups, 100,000 aggregate planned units
across all distinct concurrency-sweep runs, 500,000 estimated attempts
(aggregate planned units multiplied by the effective maximum attempts), 1,000
workers, 1,000 concurrency, 16 concurrency sweep values, 10 retry
attempts, and 1,000,000 scheduler events. Aggregate work-budget checks
run before authentication billing or demo-quota consumption and return
HTTP 413 when exceeded. Results with more than 1,000 planned operations
omit per-unit detail: `result.operations` is empty and
`result.outputDetail` is `summary_only`. This endpoint is a modeled
simulation, not a provider SDK or drop-in provider API.

## Path parameters

- `simulationId` string, required

## Request body

- object
  - `contractVersion` 1: Version of the provider API-limit simulation input contract.
  - `provider` 'aws' | 'gcp' | 'azure' | 'oci' | 'digitalocean', required: Cloud provider whose modeled API quota policy will be applied.
  - `region` string, required: Provider region used to resolve regional quota policies.
  - `service` string, required: Provider service whose API operations will be simulated.
  - `operations` object[], required: DAG operation groups. Each item has id, operation, category, plannedCount (1..100,000), optional resource, and dependsOn IDs. The aggregate planned count is bounded at 100,000.
    - `id` string, required: Unique identifier for this operation group and its dependencies.
    - `operation` string, required: Provider operation class or operation name used to select applicable quota policies.
    - `category` 'compute' | 'database' | 'storage' | 'network' | 'kubernetes' | 'identity' | 'monitoring' | 'quota' | 'other', required: Service category used to resolve provider API-limit policies.
    - `plannedCount` integer, required: Number of operations in this group to schedule.
    - `dependsOn` string[]
    - `resource` string: Optional opaque resource label used to match resource-scoped quota policies.
    - `sdkClientId` string: Optional SDK client identity; retry-token budgets are independent for each identity. Defaults to `default`.
    - `longPolling` boolean: Marks a long-poll operation that waits before returning when the selected SDK retry budget is exhausted.
    - `retryAfterMs` number: Simulated AWS `x-amz-retry-after` header delay in milliseconds; requires an explicit AWS SDK profile without a generic retry override and is clamped to AWS's effective delay bounds.
  - `workerCount` integer: Number of simulated workers issuing the planned operations.
  - `maxConcurrency` integer: Maximum simultaneous in-flight operations scheduled across workers.
  - `concurrencySweep` object
    - `values` integer[], required: Concurrency levels at which to repeat the modeled workload.
  - `latency` object, required: Required caller-supplied latency assumptions used by the scheduler.
    - `meanMs` number, required: Caller-supplied mean operation latency in milliseconds.
    - `p95Ms` number, required: Caller-supplied P95 operation latency in milliseconds.
    - `timeoutMs` number, required: Caller-side request timeout in milliseconds.
    - `jitterMs` number: Maximum modeled latency variation in milliseconds.
  - `retry` object
    - `maxAttempts` integer
    - `baseBackoffMs` number
    - `maxBackoffMs` number
    - `backoffMultiplier` number
    - `jitterRatio` number
    - `retryable` string[]
  - `awsSdkRetryProfile` AwsSdkRetryProfile: Explicit JavaScript v3 Standard/Adaptive shared retry-layer profile. Adaptive's per-client request-rate limiter and cross-operation coupling are not modeled. AWS has not confirmed an exact default rollout day; profile selection is explicit and never retroactively changes saved simulations. Explicit caller `retry` settings take precedence. Sources: https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html https://github.com/aws/aws-sdk-js-v3/issues/8037
    - `profile` 'aws-js-v3-standard-pre-2026' | 'aws-js-v3-standard-2026', required
    - `mode` 'standard' | 'adaptive'
  - `quotaScope` object: Scope dimensions; region and service must match the request. Aurora Serverless v1 Data API requires account for both selectors; concurrent-requests additionally requires resource as an opaque cluster-secret-pair label, never an actual secret.
  - `quotaOverrides` object[]: Caller-supplied policy overrides with concrete account, subscription, or project scope. Optional concurrencyOverflow queue/reject applies to concurrency ceilings; absent retains reject behavior.
    - `concurrencyOverflow` 'queue' | 'reject': Optional concurrency-ceiling overflow behavior; absent retains reject behavior.
  - `seed` integer: Seed used to make randomized scheduler outcomes reproducible.
  - `concurrency` integer: Fixed simulated concurrency when a concurrency sweep is not used.
  - `failureProbability` number: Probability that an operation encounters a modeled transient failure.
  - `maxThrottleRate` number: Upper bound on the fraction of planned operations the scheduler may throttle.
  - `maxEvents` integer: Maximum scheduler events permitted for this request.

## Response `200`

Deterministic provider-limit simulation result with catalog/override provenance.

- object
  - `simulation` object, required
    - `id` string, required
    - `name` string, required
    - `currentTime` number, required
  - `modeled` object, required
    - `namespace` string, required
    - `platformRateLimitNamespace` string, required
    - `providerThrottlingIsModeled` true, required
    - `platformHttpRateLimitsAreNotModeled` true, required
  - `request` ProviderApiLimitSimulationRequest, required: Caller-defined workload and client behavior for a deterministic provider API-quota simulation.
    - `contractVersion` 1
    - `provider` 'aws' | 'gcp' | 'azure' | 'oci' | 'digitalocean', required: Cloud provider whose modeled API quota policy will be applied.
    - `region` string, required: Provider region used to resolve regional quota policies.
    - `service` string, required: Provider service whose API operations will be simulated.
    - `operations` ProviderApiOperation[], required: Ordered or dependency-linked groups of provider API operations to schedule.
      - `id` string, required: Unique identifier for this group and any groups that depend on it.
      - `operation` string, required: Provider operation class or operation name used to select quota policies.
      - `category` 'compute' | 'database' | 'storage' | 'network' | 'kubernetes' | 'identity' | 'monitoring' | 'quota' | 'other', required: Service category used to resolve provider API-limit policies.
      - `plannedCount` integer, required: Number of operations in this group to schedule.
      - `dependsOn` string[]: IDs of operation groups that must complete before this group is scheduled.
      - `resource` string: Optional opaque resource label used to match resource-scoped quota policies.
      - `sdkClientId` string: Optional SDK client identity; retry-token budgets are independent for each identity. Defaults to `default`.
      - `longPolling` boolean: Marks a long-poll operation that waits before returning when the selected SDK retry budget is exhausted.
      - `retryAfterMs` number: Simulated AWS `x-amz-retry-after` header delay in milliseconds; requires an explicit AWS SDK profile without a generic retry override and is clamped to AWS's effective delay bounds.
    - `workerCount` integer: Number of simulated workers issuing the planned operations.
    - `maxConcurrency` integer: Maximum simultaneous in-flight operations scheduled across workers.
    - `concurrencySweep` ProviderApiConcurrencySweep: Optional set of concurrency levels at which to repeat the modeled workload.
      - `values` integer[], required: Distinct concurrency levels to evaluate.
    - `latency` ProviderApiLatency, required: Required modeled client-side latency inputs. These values represent caller assumptions for the Cloud World Model scheduler, not AWS service defaults or a live provider latency claim. When measurements are unavailable, use the canonical baseline meanMs 40, p95Ms 80, and timeoutMs 5000 from the provider-limit operation example.
      - `meanMs` number, required: Caller-supplied mean operation latency in milliseconds.
      - `p95Ms` number, required: Caller-supplied P95 operation latency in milliseconds.
      - `timeoutMs` number, required: Caller-side request timeout in milliseconds.
      - `jitterMs` number: Maximum modeled latency variation in milliseconds.
    - `retry` ProviderApiRetry: Generic caller/client retry settings, not AWS SDK or service defaults. If supplied together with an AWS SDK retry profile, these settings take precedence and use the generic retry mechanics. When omitted, the scheduler uses one attempt with no backoff and no retries: maxAttempts 1, baseBackoffMs 0, maxBackoffMs 0, backoffMultiplier 2, jitterRatio 0.
      - `maxAttempts` integer
      - `baseBackoffMs` number
      - `maxBackoffMs` number
      - `backoffMultiplier` number
      - `jitterRatio` number
      - `retryable` string[]
    - `awsSdkRetryProfile` AwsSdkRetryProfile: Explicit JavaScript v3 Standard/Adaptive shared retry-layer profile. Adaptive's per-client request-rate limiter and cross-operation coupling are not modeled. AWS has not confirmed an exact default rollout day; profile selection is explicit and never retroactively changes saved simulations. Explicit caller `retry` settings take precedence. Sources: https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html https://github.com/aws/aws-sdk-js-v3/issues/8037
      - `profile` 'aws-js-v3-standard-pre-2026' | 'aws-js-v3-standard-2026', required
      - `mode` 'standard' | 'adaptive'
    - `quotaScope` ProviderApiQuotaScope
      - `account` string
      - `subscription` string
      - `project` string
      - `servicePrincipal` string
      - `region` string
      - `zone` string
      - `resource` string
      - `service` string
      - `operation` string
    - `quotaOverrides` ProviderApiQuotaPolicy[]: Optional caller-supplied provider quota policies for this workload.
      - `policyId` string, required
      - `provider` 'aws' | 'gcp' | 'azure' | 'oci' | 'digitalocean', required
      - `service` string, required
      - `operationCategory` 'compute' | 'database' | 'storage' | 'network' | 'kubernetes' | 'identity' | 'monitoring' | 'quota' | 'other', required
      - `operation` string, required
      - `scope` ProviderApiQuotaScope, required
        - `account` string
        - `subscription` string
        - `project` string
        - `servicePrincipal` string
        - `region` string
        - `zone` string
        - `resource` string
        - `service` string
        - `operation` string
      - `classification` 'documented_public_default' | 'configurable_account_quota' | 'observed_behavior', required
      - `provenance` ProviderApiQuotaProvenance, required
        - `sourceKind` 'provider_documentation' | 'provider_quota_documentation' | 'provider_observation' | 'caller_supplied', required
        - `sourceReference` string, required
        - `asOfDate` string, date, required
        - `customerSpecific` boolean, required
        - `observed` boolean, required
        - `confidence` 'low' | 'medium' | 'high', required
      - `sustainedRate` ProviderApiRateQuantity
        - `limit` number, required
        - `unit` 'requests_per_second' | 'requests_per_minute' | 'requests_per_hour' | 'requests_per_window' | 'operations_per_second' | 'operations_per_minute' | 'operations_per_window' | 'concurrent_requests', required
        - `windowSeconds` number, required
      - `burstCapacity` ProviderApiBurstCapacity
        - `capacity` number, required
        - `unit` 'requests_per_second' | 'requests_per_minute' | 'requests_per_hour' | 'requests_per_window' | 'operations_per_second' | 'operations_per_minute' | 'operations_per_window' | 'concurrent_requests', required
        - `windowSeconds` number, required
        - `refill` 'none' | 'fixed_window' | 'token_bucket', required
        - `refillRate` number
      - `concurrencyCeiling` integer
      - `concurrencyOverflow` 'queue' | 'reject': Optional concurrency-ceiling overflow behavior. Absent retains the existing reject behavior; queue waits for an in-process request to finish.
      - `enforcement` 'token_bucket' | 'fixed_window' | 'sliding_window' | 'concurrency_ceiling' | 'provider_defined', required
      - `notes` string, required
    - `seed` integer: Seed used to make randomized scheduler outcomes reproducible.
    - `concurrency` integer: Fixed simulated concurrency when a concurrency sweep is not used.
    - `failureProbability` number: Probability that an operation encounters a modeled transient failure.
    - `maxThrottleRate` number: Upper bound on the fraction of planned operations the scheduler may throttle.
    - `maxEvents` integer: Maximum scheduler events permitted for this request.
  - `result` ProviderApiSchedulerResult, required
    - `schedulerVersion` 1, required
    - `contractVersion` integer, required
    - `status` 'supported' | 'unsupported_policy' | 'rejected', required
    - `seed` integer, required
    - `concurrency` integer, required
    - `policyResolutions` ProviderApiLimitResolution[], required
      - `contractVersion` 1, required
      - `status` 'supported' | 'unsupported', required
      - `operationCategory` 'compute' | 'database' | 'storage' | 'network' | 'kubernetes' | 'identity' | 'monitoring' | 'quota' | 'other'
      - `operation` string
      - `resource` string
      - `policySource` 'catalog_default' | 'caller_override'
      - `policy` ProviderApiQuotaPolicy
        - `policyId` string, required
        - `provider` 'aws' | 'gcp' | 'azure' | 'oci' | 'digitalocean', required
        - `service` string, required
        - `operationCategory` 'compute' | 'database' | 'storage' | 'network' | 'kubernetes' | 'identity' | 'monitoring' | 'quota' | 'other', required
        - `operation` string, required
        - `scope` ProviderApiQuotaScope, required
          - `account` string
          - `subscription` string
          - `project` string
          - `servicePrincipal` string
          - `region` string
          - `zone` string
          - `resource` string
          - `service` string
          - `operation` string
        - `classification` 'documented_public_default' | 'configurable_account_quota' | 'observed_behavior', required
        - `provenance` ProviderApiQuotaProvenance, required
          - `sourceKind` 'provider_documentation' | 'provider_quota_documentation' | 'provider_observation' | 'caller_supplied', required
          - `sourceReference` string, required
          - `asOfDate` string, date, required
          - `customerSpecific` boolean, required
          - `observed` boolean, required
          - `confidence` 'low' | 'medium' | 'high', required
        - `sustainedRate` ProviderApiRateQuantity
          - `limit` number, required
          - `unit` 'requests_per_second' | 'requests_per_minute' | 'requests_per_hour' | 'requests_per_window' | 'operations_per_second' | 'operations_per_minute' | 'operations_per_window' | 'concurrent_requests', required
          - `windowSeconds` number, required
        - `burstCapacity` ProviderApiBurstCapacity
          - `capacity` number, required
          - `unit` 'requests_per_second' | 'requests_per_minute' | 'requests_per_hour' | 'requests_per_window' | 'operations_per_second' | 'operations_per_minute' | 'operations_per_window' | 'concurrent_requests', required
          - `windowSeconds` number, required
          - `refill` 'none' | 'fixed_window' | 'token_bucket', required
          - `refillRate` number
        - `concurrencyCeiling` integer
        - `concurrencyOverflow` 'queue' | 'reject': Optional concurrency-ceiling overflow behavior. Absent retains the existing reject behavior; queue waits for an in-process request to finish.
        - `enforcement` 'token_bucket' | 'fixed_window' | 'sliding_window' | 'concurrency_ceiling' | 'provider_defined', required
        - `notes` string, required
      - `reason` string
      - `accounting` ProviderApiOperationAccounting, required
        - `plannedOperations` integer, required
        - `attemptedOperations` integer, required
        - `retryOperations` integer, required
        - `throttledOperations` integer, required
        - `completedOperations` integer, required
        - `denominator` 'planned_operations', required
    - `unsupportedGroups` object[], required
      - `operationCategory` string, required
      - `operation` string, required
      - `resource` string
      - `reason` string, required
    - `accounting` ProviderApiSchedulerAccounting, required
      - `plannedOperations` integer, required
      - `attemptedOperations` integer, required
      - `retryOperations` integer, required
      - `throttledOperations` integer, required
      - `completedOperations` integer, required
      - `denominator` 'planned_operations', required
      - `failedOperations` integer, required
      - `timedOutOperations` integer, required
      - `dependencyBlockedOperations` integer, required
      - `unsupportedOperations` integer, required
      - `pendingOperations` integer, required
      - `terminalOperations` integer, required
    - `byCategory` object[], required
      - `plannedOperations` integer, required
      - `attemptedOperations` integer, required
      - `retryOperations` integer, required
      - `throttledOperations` integer, required
      - `completedOperations` integer, required
      - `denominator` 'planned_operations', required
      - `failedOperations` integer, required
      - `timedOutOperations` integer, required
      - `dependencyBlockedOperations` integer, required
      - `unsupportedOperations` integer, required
      - `pendingOperations` integer, required
      - `terminalOperations` integer, required
      - `category` string, required
    - `operations` ProviderApiUnitOutcome[], required: Per-unit outcomes. Empty when the workload has more than 1,000 planned operations; use the accounting and timing summaries in that case.
      - `operationId` string, required
      - `operation` string, required
      - `category` string, required
      - `resource` string
      - `unitIndex` integer, required
      - `outcome` 'completed' | 'failed' | 'timed_out' | 'dependency_blocked' | 'unsupported_policy', required
      - `attempts` integer, required
      - `retryOperations` integer, required
      - `throttledAttempts` integer, required
      - `timedOutAttempts` integer, required
      - `readyAtMs` number, required
      - `firstAttemptAtMs` number
      - `terminalAtMs` number, required
      - `queueWaitMs` number, required
      - `throttleWaitMs` number, required
      - `retryBackoffMs` number, required
      - `serviceTimeMs` number, required
    - `outputDetail` 'full' | 'summary_only': Optional detail marker. `summary_only` is returned when more than 1,000 planned operations cause `operations` to be empty. `full` denotes itemized operation output when explicitly present; omission also means full itemized output.
    - `queue` object, required
      - `currentDepth` integer, required
      - `peakDepth` integer, required
      - `backpressureEvents` integer, required
    - `timing` object, required
      - `completionTimeMs` number, nullable, required
      - `terminalCompletionTimeMs` number, nullable, required
      - `successfulCompletionTimeMs` number, nullable, required
      - `completionRatio` number, required
      - `effectiveThroughputPerSecond` number, required
      - `totalQueueWaitMs` number, required
      - `totalServiceTimeMs` number, required
    - `retryBehavior` ProviderApiRetryBehavior, required: Resolved retry contract. It is distinct from provider quota-policy resolution.
      - `source` 'aws_sdk_profile' | 'caller_override' | 'caller_generic' | 'legacy_generic', required
      - `selectedProfile` 'aws-js-v3-standard-pre-2026' | 'aws-js-v3-standard-2026', nullable, required
      - `mode` 'standard' | 'adaptive', nullable, required
      - `serviceDefault` 'dynamodb', nullable, required
      - `mechanics` 'aws_shared_retry_layer' | 'caller_generic', required
      - `adaptiveRateLimiterModeled` false, required
      - `historicalRunsRewritten` false, required
      - `maxAttempts` integer, required
      - `retryable` string[], required
      - `generic` object, nullable, required
        - `baseBackoffMs` number, required
        - `maxBackoffMs` number, required
        - `backoffMultiplier` number, required
        - `jitterRatio` number, required
      - `transientBaseDelayMs` number, nullable, required
      - `throttlingBaseDelayMs` number, nullable, required
      - `retryTokenCapacity` integer, nullable, required
      - `transientRetryTokenCost` integer, nullable, required
      - `throttlingRetryTokenCost` integer, nullable, required
      - `maxBackoffCapMs` number, nullable, required
      - `retryAfterMaxExtraMs` number, nullable, required
      - `rolloutNote` string, nullable, required
      - `clientBudgets` object[], required
        - `clientId` string, required
        - `capacity` integer, required
        - `remaining` integer, required
        - `retriesDenied` integer, required
        - `tokensConsumed` integer, required
        - `tokensRestored` integer, required
        - `tokensSpent` integer, required
    - `optimization` object, required
      - `objective` string, required
      - `maxThrottleRate` number, required
      - `acceptableConcurrency` integer[], required
      - `recommendedConcurrency` integer, nullable, required: Deterministic recommended candidate. Null when no candidate is supported, fully completes, and stays within maxThrottleRate.
      - `optimalConcurrencyRange` object, nullable, required
        - `min` integer, required
        - `max` integer, required
      - `comparisons` object[], required
        - `concurrency` integer, required
        - `status` 'supported' | 'unsupported_policy' | 'rejected', required
        - `plannedOperations` integer, required
        - `attemptedOperations` integer, required
        - `completedOperations` integer, required
        - `completionTimeMs` number, nullable, required
        - `terminalCompletionTimeMs` number, nullable, required
        - `successfulCompletionTimeMs` number, nullable, required
        - `completionRatio` number, required
        - `effectiveThroughputPerSecond` number, required
        - `throttledOperations` integer, required
        - `retryOperations` integer, required
        - `failedOperations` integer, required
        - `timedOutOperations` integer, required
        - `dependencyBlockedOperations` integer, required
        - `unsupportedOperations` integer, required
        - `pendingOperations` integer, required
        - `terminalOperations` integer, required
        - `queuePeak` integer, required
        - `objectiveValue` number, nullable, required
    - `reason` string
  - `provenance` object, required
    - `catalogVersion` integer, required
    - `policies` ProviderApiQuotaPolicy[], required: Effective policies with sourceKind, sourceReference, asOfDate, classification, and confidence.
      - `policyId` string, required
      - `provider` 'aws' | 'gcp' | 'azure' | 'oci' | 'digitalocean', required
      - `service` string, required
      - `operationCategory` 'compute' | 'database' | 'storage' | 'network' | 'kubernetes' | 'identity' | 'monitoring' | 'quota' | 'other', required
      - `operation` string, required
      - `scope` ProviderApiQuotaScope, required
        - `account` string
        - `subscription` string
        - `project` string
        - `servicePrincipal` string
        - `region` string
        - `zone` string
        - `resource` string
        - `service` string
        - `operation` string
      - `classification` 'documented_public_default' | 'configurable_account_quota' | 'observed_behavior', required
      - `provenance` ProviderApiQuotaProvenance, required
        - `sourceKind` 'provider_documentation' | 'provider_quota_documentation' | 'provider_observation' | 'caller_supplied', required
        - `sourceReference` string, required
        - `asOfDate` string, date, required
        - `customerSpecific` boolean, required
        - `observed` boolean, required
        - `confidence` 'low' | 'medium' | 'high', required
      - `sustainedRate` ProviderApiRateQuantity
        - `limit` number, required
        - `unit` 'requests_per_second' | 'requests_per_minute' | 'requests_per_hour' | 'requests_per_window' | 'operations_per_second' | 'operations_per_minute' | 'operations_per_window' | 'concurrent_requests', required
        - `windowSeconds` number, required
      - `burstCapacity` ProviderApiBurstCapacity
        - `capacity` number, required
        - `unit` 'requests_per_second' | 'requests_per_minute' | 'requests_per_hour' | 'requests_per_window' | 'operations_per_second' | 'operations_per_minute' | 'operations_per_window' | 'concurrent_requests', required
        - `windowSeconds` number, required
        - `refill` 'none' | 'fixed_window' | 'token_bucket', required
        - `refillRate` number
      - `concurrencyCeiling` integer
      - `concurrencyOverflow` 'queue' | 'reject': Optional concurrency-ceiling overflow behavior. Absent retains the existing reject behavior; queue waits for an in-process request to finish.
      - `enforcement` 'token_bucket' | 'fixed_window' | 'sliding_window' | 'concurrency_ceiling' | 'provider_defined', required
      - `notes` string, required

## Other responses

- `400`: Request exceeds a documented bound, contains an invalid DAG/scope, or uses an invalid quota override.
- `401`: No credentials provided to a wallet-session-protected endpoint. The response body includes a machine-readable `walletAuth` block with the endpoints and ordered steps needed to complete EIP-191 wallet authentication and obtain a JWT.
- `402`: x402 payment required when no API key or wallet session is available.
- `403`: Simulation not owned by the caller.
- `404`: Simulation not found.
- `409`: Non-retryable execution admission rejection. The response code is `PROVIDER_LIMIT_DUPLICATE` when the same workload is active or was interrupted in the preceding five minutes, or `PROVIDER_LIMIT_BUSY` when this process already has two active runs (or its interrupted-run guard capacity is full). Do not automatically retry.
- `413`: Non-retryable aggregate work-budget rejection performed before billing. Returned when concurrency-sweep runs exceed 100,000 aggregate planned units or 500,000 estimated attempts.
- `422`: Non-retryable execution interruption. `PROVIDER_LIMIT_DEADLINE` means the 2-second execution deadline expired; `PROVIDER_LIMIT_DISCONNECTED` means execution stopped after the client disconnected. Reduce the workload rather than automatically retrying.
- `429`: CWM platform HTTP rate limit. Modeled provider throttling is returned inside the 200 result and does not use this response.
- `500`: Internal server error

---

[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)
