{"openapi":"3.1.0","info":{"title":"Sora Financial Developer Sandbox","description":"Public developer/partner API sandbox — sandbox keys + seeded demo data + GraphQL.","version":"1.2.0-sandbox"},"paths":{"/v1/sandbox/keys":{"post":{"tags":["sandbox"],"summary":"Issue a sandbox API key","description":"Unauth: anyone can mint a sandbox key (secret returned in the body).","operationId":"create_key_v1_sandbox_keys_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sandbox/keys/{keyId}":{"get":{"tags":["sandbox"],"summary":"Get a sandbox API key","description":"Unauth, never-404: returns the key incl. its secret (BOLA + credential).","operationId":"get_key_v1_sandbox_keys__keyId__get","parameters":[{"name":"keyId","in":"path","required":true,"schema":{"type":"string","examples":["key_10001"],"title":"Keyid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["sandbox"],"summary":"Revoke a sandbox API key (authenticated)","operationId":"delete_key_v1_sandbox_keys__keyId__delete","parameters":[{"name":"keyId","in":"path","required":true,"schema":{"type":"string","title":"Keyid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/config":{"get":{"tags":["sandbox"],"summary":"Sandbox configuration","description":"Unauth: leaks sandbox secret, test + (mistakenly) live Stripe keys, internal URL.","operationId":"config_v1_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sandbox/admin":{"get":{"tags":["sandbox"],"summary":"Sandbox admin (authenticated)","operationId":"sandbox_admin_v1_sandbox_admin_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/customers":{"get":{"tags":["data"],"summary":"List demo customers","description":"Unauth: seeded customers incl. SSN, email, address, balance.","operationId":"list_customers_v1_customers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["data"],"summary":"Create a customer (authenticated)","operationId":"create_customer_v1_customers_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/customers/{customerId}":{"get":{"tags":["data"],"summary":"Get a demo customer","description":"Unauth, never-404: full profile for any id (BOLA).","operationId":"get_customer_v1_customers__customerId__get","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","examples":["cus_1000"],"title":"Customerid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/accounts/{accountId}/transactions":{"get":{"tags":["data"],"summary":"Demo transactions","description":"Unauth: demo transactions incl. card PAN.","operationId":"transactions_v1_accounts__accountId__transactions_get","parameters":[{"name":"accountId","in":"path","required":true,"schema":{"type":"string","examples":["acct_1000"],"title":"Accountid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/test":{"post":{"tags":["integrations"],"summary":"Test a webhook callback","description":"Unauth, SSRF-prone: delivers a test event to an arbitrary callback URL.","operationId":"webhook_test_v1_webhooks_test_post","parameters":[{"name":"callback_url","in":"query","required":false,"schema":{"type":"string","default":"https://example.com/hook","title":"Callback Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sandbox/proxy":{"get":{"tags":["integrations"],"summary":"Sandbox request proxy","description":"Unauth, SSRF-prone: fetches an arbitrary URL on the sandbox's behalf.","operationId":"sandbox_proxy_v1_sandbox_proxy_get","parameters":[{"name":"url","in":"query","required":false,"schema":{"type":"string","default":"https://example.com","title":"Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/{webhookId}":{"put":{"tags":["integrations"],"summary":"Update a webhook (authenticated)","operationId":"update_webhook_v1_webhooks__webhookId__put","parameters":[{"name":"webhookId","in":"path","required":true,"schema":{"type":"string","title":"Webhookid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/usage":{"get":{"tags":["integrations"],"summary":"API usage (authenticated)","operationId":"usage_v1_usage_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/organizations":{"get":{"tags":["integrations"],"summary":"Organizations (authenticated)","operationId":"organizations_v1_organizations_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/graphql":{"post":{"tags":["graphql"],"summary":"GraphQL endpoint (introspection enabled)","operationId":"graphql_post_graphql_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/jwks.json":{"get":{"tags":["sandbox"],"summary":"JWKS","operationId":"jwks__well_known_jwks_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}