{"ok":true,"data":{"developerSandboxGuide":{"knife":{"total":84,"current":83,"remaining":1},"generatedAt":"2026-07-08T11:21:52.109Z","endpoint":"/api/developer/sandbox/custom-order","method":"POST","writeMode":"sandbox-no-mutation","idempotency":{"header":"Idempotency-Key","requiredFor":["/api/custom-orders","/api/integrations/im-core/order","/api/developer/sandbox/custom-order"],"sameKeySamePayload":"returns the original booking/customOrder response with idempotency.replayed=true","sameKeyDifferentPayload":"returns 409 idempotency_conflict"},"scenarios":[{"id":"happy-path","label":"Valid custom order","request":"带 projectSlug、itemIds、date/startTime、Idempotency-Key","expected":"200 simulatedCustomOrder / writeMode=sandbox-no-mutation"},{"id":"category-alias","label":"Category alias","request":"customCategory=quote/vote/internal/commercial","expected":"规范化成 quote_request/voting/internal_request/commercial_candidate"},{"id":"missing-idempotency","label":"Missing idempotency","request":"不带 Idempotency-Key","expected":"400 missing_idempotency_key，与正式写入一致"},{"id":"unknown-project","label":"Unknown project","request":"传不存在 projectSlug","expected":"404 developer_sandbox_not_available，不写入任何状态"}],"example":{"id":"sandbox-custom-order","label":"Sandbox custom order","language":"curl","command":"curl -fsS -X POST https://api.reits.tech/api/developer/sandbox/custom-order \\\n  -H 'Content-Type: application/json' \\\n  -H 'Idempotency-Key: demo-matrix-public-appointment-001' \\\n  -d '{\"projectSlug\":\"matrix-public-appointment\",\"customCategory\":\"appointment\",\"itemIds\":[\"price_product_demo\"],\"date\":\"2026-07-20\",\"startTime\":\"10:00\",\"nickname\":\"Sandbox User\"}'"},"guardrails":["Developer API catalog is public-safe and never exposes customer PII, private hashes, auth tokens, SDK shared secrets, preview codes, webhook payloads, provider credentials, or deploy credentials.","Sandbox custom order validates and simulates only; it never creates bookings, blocks calendar slots, queues notifications, writes global orders, mutates IM/OpenSDK state, bills, trades, or changes deployment state.","Live write examples are labeled separately and remain custom_order/customCategory until finance-approved commerce modules exist.","Owner/admin route adds operational context, but the public catalog remains enough for third-party developers to start safely."]}}}