A validation-only endpoint

Send synthetic JSON to POST /api/v1/sandbox/requests. No API key is required.

The sandbox checks request fields and model-to-variant relationships. It does not create a production request or return a real request identifier.

curl --fail-with-body 'https://cardinalsilicon.com/api/v1/sandbox/requests' \
  -H 'Content-Type: application/json' \
  --data '{
  "kind": "buy",
  "modelId": "h100",
  "variantId": "h100-sxm5-80gb",
  "quantity": 2,
  "location": "Example city, Germany",
  "email": "buyer@example.com",
  "notes": "Synthetic integration test. No sourcing action requested.",
  "region": "EU",
  "currency": "EUR",
  "consent": true
}'

Interpret the result correctly

HTTP 200 means the submitted payload passed validation. It does not mean a quote request was received.

The response contains status: validated, sandbox: true and the normalized request. Read the sandbox response schema for exact types. Correct validation errors before moving to production.

The sandbox does not require an idempotency key. Use a fresh UUID v4 for every distinct production inquiry; retain it for retries.

What this test does not prove

Use GET /api/v1/health to inspect request-service readiness. A readiness response is not an end-to-end delivery test.

Move to production deliberately

Obtain the buyer's authorization and replace all synthetic details. Send the payload to POST /api/v1/requests with a new idempotency key.

Production returns HTTP 202 and a request identifier when it accepts an inquiry. Save that identifier for follow-up.

Do not change the sandbox URL to production during automated test runs. Keep the endpoint selection explicit in your application configuration.

Read the request controls before implementing production retries.