{"issuer":"https://api.fxmacrodata.com","authorization_endpoint":"https://api.fxmacrodata.com/oauth/authorize","token_endpoint":"https://api.fxmacrodata.com/oauth/token","device_authorization_endpoint":"https://api.fxmacrodata.com/oauth/device/authorize","revocation_endpoint":"https://api.fxmacrodata.com/oauth/revoke","registration_endpoint":"https://api.fxmacrodata.com/oauth/register","response_types_supported":["code"],"grant_types_supported":["authorization_code","urn:ietf:params:oauth:grant-type:device_code","refresh_token"],"token_endpoint_auth_methods_supported":["none","client_secret_post","client_secret_basic"],"code_challenge_methods_supported":["S256"],"scopes_supported":["fxmacrodata.read"],"fxmacrodata_auth_guidance":{"recommended_for_hosted_mcp":"oauth_authorization_code_pkce","recommended_for_astrbot":"oauth_device_authorization","recommended_for_manual_local_testing":"api_key_query_or_header","oauth_client_registration":{"preferred":"dynamic_client_registration","cimd_client_id_urls":"Accepted as public clients when the redirect_uri is allowlisted; full client metadata document validation is not required for current FXMacroData access."},"supported_client_types":{"public_pkce":{"token_endpoint_auth_method":"none","recommended_for":["ChatGPT","VS Code","Cursor","local MCP clients"]},"confidential":{"token_endpoint_auth_methods":["client_secret_post","client_secret_basic"],"recommended_for":["Claude Web","managed enterprise connectors"]}},"fallback":"If a host cannot complete OAuth, pass an FXMacroData API key as ?api_key=<key> on the MCP URL, Authorization: Bearer <key> on MCP, or X-API-Key on REST endpoints.","oauth_account_linking":"OAuth authorization requires an FXMacroData API key so the issued access token maps to the customer's plan."}}