{"items":[{"type":"link","label":"OAuth API Reference","link":"/openapi/v1/oauth","routeSlug":"/openapi/v1/oauth","content":{"contentType":"overview","meta":{"name":"OAuth API Reference"},"children":[{"nodeType":"container","panels":[{"title":"Download OpenAPI description","titleTranslationKey":"download.description.title","children":[{"kind":"download","label":"oauth.json","url":"/_bundle/openapi/v1/oauth.json?download"},{"kind":"download","label":"oauth.yaml","url":"/_bundle/openapi/v1/oauth.yaml?download"}]},{"title":"Overview","titleTranslationKey":"info.title","children":[{"kind":"externallink","title":"URL","titleTranslationKey":"info.contact.url","label":"https://app.iclosed.io/support","url":"https://app.iclosed.io/support"},{"kind":"externallink","title":"License","titleTranslationKey":"info.license","label":"Proprietary","url":"https://app.iclosed.io/terms"}]},{"title":"Languages","titleTranslationKey":"languages.title","children":[{"kind":"languages","options":[{"key":"curl","title":"curl","lang":"curl"},{"key":"javascript","title":"JavaScript","lang":"JavaScript"},{"key":"node","title":"Node.js","lang":"Node.js"},{"key":"python","title":"Python","lang":"Python"},{"key":"java","title":"Java","lang":"Java"},{"key":"csharp","title":"C#","lang":"C#"},{"key":"php","title":"PHP","lang":"PHP"},{"key":"go","title":"Go","lang":"Go"},{"key":"ruby","title":"Ruby","lang":"Ruby"},{"key":"r","title":"R","lang":"R"},{"key":"payload","title":"Payload","lang":"Payload"}]}]},{"title":"Servers","titleTranslationKey":"servers.title","children":[{"kind":"servers","servers":[{"url":"/_mock/openapi/v1/oauth","description":"Mock server","isMockServer":true},{"url":"https://public.api.iclosed.io","description":"Production"}],"mode":"default"}]}],"children":[{"nodeType":"overview-section-wrapper","children":[{"nodeType":"header","level":1,"label":"OAuth API Reference (1.0.0)","showPageActions":true},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":"OAuth 2.0 authorization, token management, and dynamic client registration (RFC 7591/7592)"}],"sectionId":"/openapi/v1/oauth"}],"sectionId":"/openapi/v1/oauth"}]}]}},{"label":"OAuth authorization endpoint (authorization code)","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/openapi/v1/oauth/other/oauthauthorize","routeSlug":"/openapi/v1/oauth/other/oauthauthorize","metadata":{"seo":{"title":"OAuth authorization endpoint (authorization code)","description":"Backend step after the iClosed consent UI (https://app.iclosed.io/oauth/authorize): validates client, redirect URI, and scopes, requires an authenticated resource owner session (Bearer session JWT from login — not an API key or OAuth access token), then redirects to redirect_uri with code and optional state. Third-party OAuth clients start the flow in the browser at the consent URL; they do not call this endpoint directly."}},"content":{"contentType":"item","itemVariant":"httpItem","meta":{"sourceId":"oauthAuthorize","name":"OAuth authorization endpoint (authorization code)","isWebhook":false,"pointer":"/paths/~1v1~1oauth~1authorize/get","hasSamples":false},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"OAuth authorization endpoint (authorization code)","isWebhook":false,"showPageActions":true}],"panels":[]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Request","labelTranslationKey":"request","deepLinkSuffix":"request"},{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Backend step after the iClosed consent UI ("},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"https://app.iclosed.io/oauth/authorize"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"): validates client, redirect URI, and scopes, requires an authenticated resource owner session (Bearer session JWT from login — not an API key or OAuth access token), then redirects to "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"redirect_uri"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" with "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"code"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" and optional "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"state"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":". Third-party OAuth clients start the flow in the browser at the consent URL; they do not call this endpoint directly."},"children":[]}]}]}]},{"nodeType":"item-content","variant":"query","label":"Query","labelTranslationKey":"query","parameters":[{"name":"response_type","in":"query","schemaId":"schema_163","description":"OAuth response type. Must be \"code\".","required":true},{"name":"client_id","in":"query","schemaId":"schema_164","description":"OAuth client identifier.","required":true},{"name":"redirect_uri","in":"query","schemaId":"schema_165","description":"Redirect URI registered for the client. Must use https://, or http:// on localhost.","required":true},{"name":"scope","in":"query","schemaId":"schema_166","description":"Space-delimited scopes requested by the client. Defaults to the full client-allowed scope set."},{"name":"state","in":"query","schemaId":"schema_167","description":"Opaque value returned unchanged to prevent CSRF in client-side state handling."},{"name":"code_challenge","in":"query","schemaId":"schema_168","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"PKCE code challenge. Required together with code_challenge_method for public clients and for every client registered through anonymous dynamic client registration; optional for account-owned confidential clients."},"children":[]}]}]}]},{"name":"code_challenge_method","in":"query","schemaId":"schema_169","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"PKCE method; required when code_challenge is present. Only S256 is supported."},"children":[]}]}]}]}],"pointer":"/paths/~1v1~1oauth~1authorize/get/parameters"}],"panels":[{"children":[{"kind":"code-sample","source":{"kind":"code-sample","operationType":"http","method":"GET","path":"/v1/oauth/authorize","servers":[{"url":"/_mock/openapi/v1/oauth","description":"Mock server","isMockServer":true},{"url":"https://public.api.iclosed.io","description":"Production"}],"parameters":{"path":[],"query":[{"name":"response_type","in":"query","required":true,"schemaId":"schema_163"},{"name":"client_id","in":"query","required":true,"schemaId":"schema_164"},{"name":"redirect_uri","in":"query","required":true,"schemaId":"schema_165"},{"name":"scope","in":"query","schemaId":"schema_166"},{"name":"state","in":"query","schemaId":"schema_167"},{"name":"code_challenge","in":"query","schemaId":"schema_168"},{"name":"code_challenge_method","in":"query","schemaId":"schema_169"}],"querystring":[],"header":[],"cookie":[]},"security":[],"responseCodes":["302","400","401","429"],"pointer":"/v1/oauth/authorize","href":"other/oauthauthorize","openApiOperationId":"oauthAuthorize","summary":"OAuth authorization endpoint (authorization code)"},"isWebhook":false,"hideReplay":false,"servers":[{"url":"/_mock/openapi/v1/oauth","description":"Mock server","isMockServer":true},{"url":"https://public.api.iclosed.io","description":"Production"}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Responses","labelTranslationKey":"responses","deepLinkSuffix":"responses"},{"nodeType":"item-content","variant":"responses","responses":[{"code":"302","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Redirect to the validated redirect_uri with code/state query params"},"children":[]}]}]}]},{"code":"400","description":"OAuth request validation failed","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_170","exampleIds":["paths/~1v1~1oauth~1authorize/get/responses/400/content/application~1json/example"]}},"schemaId":"schema_170","exampleIds":["paths/~1v1~1oauth~1authorize/get/responses/400/content/application~1json/example"]},{"code":"401","description":"Resource owner not authenticated or invalid OAuth client credentials","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_170"}},"schemaId":"schema_170"},{"code":"429","description":"Account rate limit exceeded"}],"pointer":"/paths/~1v1~1oauth~1authorize/get/responses"}],"panels":[{"children":[{"kind":"response","responseCodes":[{"code":"302"},{"code":"400","schemaId":"schema_170","exampleIds":["paths/~1v1~1oauth~1authorize/get/responses/400/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_170","exampleIds":["paths/~1v1~1oauth~1authorize/get/responses/400/content/application~1json/example"]}}},{"code":"401","schemaId":"schema_170","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_170"}}},{"code":"429"}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"feedback","pageSlug":"/other/oauthauthorize"}],"panels":[]}]},"httpPath":"/v1/oauth/authorize"},{"label":"OAuth token endpoint","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/openapi/v1/oauth/other/oauthtoken","routeSlug":"/openapi/v1/oauth/other/oauthtoken","metadata":{"seo":{"title":"OAuth token endpoint","description":"Exchanges an authorization code for access/refresh tokens (with code_verifier when the code was issued with PKCE), or rotates refresh tokens. Supports authorization_code and refresh_token grants. Referenced by components.securitySchemes.oauth2 for MCP and OpenAPI OAuth clients."}},"content":{"contentType":"item","itemVariant":"httpItem","meta":{"sourceId":"oauthToken","name":"OAuth token endpoint","isWebhook":false,"pointer":"/paths/~1v1~1oauth~1token/post","hasSamples":true},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"OAuth token endpoint","isWebhook":false,"showPageActions":true}],"panels":[]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Request","labelTranslationKey":"request","deepLinkSuffix":"request"},{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Exchanges an authorization code for access/refresh tokens (with "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"code_verifier"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" when the code was issued with PKCE), or rotates refresh tokens. Supports "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"authorization_code"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" and "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"refresh_token"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" grants. Referenced by "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"components.securitySchemes.oauth2"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" for MCP and OpenAPI OAuth clients."},"children":[]}]}]}]},{"nodeType":"item-content","variant":"body","label":"Request Body","labelTranslationKey":"body","required":true,"mediaTypes":["application/json"],"mediaTypeSchemas":{"application/json":{"schemaId":"schema_171"}},"schemaId":"schema_171","pointer":"/paths/~1v1~1oauth~1token/post/requestBody"}],"panels":[{"children":[{"kind":"code-sample","source":{"kind":"code-sample","operationType":"http","method":"POST","path":"/v1/oauth/token","servers":[{"url":"/_mock/openapi/v1/oauth","description":"Mock server","isMockServer":true},{"url":"https://public.api.iclosed.io","description":"Production"}],"parameters":{"path":[],"query":[],"querystring":[],"header":[],"cookie":[]},"security":[],"requestBody":{"application/json":{"schemaId":"schema_171"}},"responseCodes":["200","400","401","429"],"pointer":"/v1/oauth/token","href":"other/oauthtoken","openApiOperationId":"oauthToken","summary":"OAuth token endpoint"},"isWebhook":false,"hideReplay":false,"servers":[{"url":"/_mock/openapi/v1/oauth","description":"Mock server","isMockServer":true},{"url":"https://public.api.iclosed.io","description":"Production"}],"schemaId":"schema_171","mediaTypes":["application/json"],"mediaTypeSchemas":{"application/json":{"schemaId":"schema_171"}},"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Responses","labelTranslationKey":"responses","deepLinkSuffix":"responses"},{"nodeType":"item-content","variant":"responses","responses":[{"code":"200","description":"OAuth access token response","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_172","exampleIds":["paths/~1v1~1oauth~1token/post/responses/200/content/application~1json/example"]}},"schemaId":"schema_172","exampleIds":["paths/~1v1~1oauth~1token/post/responses/200/content/application~1json/example"]},{"code":"400","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"OAuth token request failed (invalid_grant, invalid_scope, unsupported_grant_type)"},"children":[]}]}]}],"mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_170","exampleIds":["paths/~1v1~1oauth~1token/post/responses/400/content/application~1json/example"]}},"schemaId":"schema_170","exampleIds":["paths/~1v1~1oauth~1token/post/responses/400/content/application~1json/example"]},{"code":"401","description":"Client authentication failed","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_170","exampleIds":["paths/~1v1~1oauth~1token/post/responses/401/content/application~1json/example"]}},"schemaId":"schema_170","exampleIds":["paths/~1v1~1oauth~1token/post/responses/401/content/application~1json/example"]},{"code":"429","description":"IP rate limit exceeded"}],"pointer":"/paths/~1v1~1oauth~1token/post/responses"}],"panels":[{"children":[{"kind":"response","responseCodes":[{"code":"200","schemaId":"schema_172","exampleIds":["paths/~1v1~1oauth~1token/post/responses/200/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_172","exampleIds":["paths/~1v1~1oauth~1token/post/responses/200/content/application~1json/example"]}}},{"code":"400","schemaId":"schema_170","exampleIds":["paths/~1v1~1oauth~1token/post/responses/400/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_170","exampleIds":["paths/~1v1~1oauth~1token/post/responses/400/content/application~1json/example"]}}},{"code":"401","schemaId":"schema_170","exampleIds":["paths/~1v1~1oauth~1token/post/responses/401/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_170","exampleIds":["paths/~1v1~1oauth~1token/post/responses/401/content/application~1json/example"]}}},{"code":"429"}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"feedback","pageSlug":"/other/oauthtoken"}],"panels":[]}]},"httpPath":"/v1/oauth/token"},{"label":"OAuth token revocation endpoint","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/openapi/v1/oauth/other/oauthrevoke","routeSlug":"/openapi/v1/oauth/other/oauthrevoke","metadata":{"seo":{"title":"OAuth token revocation endpoint","description":"Revokes an access token or refresh token. Endpoint is idempotent and always returns 200 for known clients."}},"content":{"contentType":"item","itemVariant":"httpItem","meta":{"sourceId":"oauthRevoke","name":"OAuth token revocation endpoint","isWebhook":false,"pointer":"/paths/~1v1~1oauth~1revoke/post","hasSamples":true},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"OAuth token revocation endpoint","isWebhook":false,"showPageActions":true}],"panels":[]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Request","labelTranslationKey":"request","deepLinkSuffix":"request"},{"nodeType":"markdoc","content":"Revokes an access token or refresh token. Endpoint is idempotent and always returns 200 for known clients."},{"nodeType":"item-content","variant":"body","label":"Request Body","labelTranslationKey":"body","required":true,"mediaTypes":["application/json"],"mediaTypeSchemas":{"application/json":{"schemaId":"schema_173"}},"schemaId":"schema_173","pointer":"/paths/~1v1~1oauth~1revoke/post/requestBody"}],"panels":[{"children":[{"kind":"code-sample","source":{"kind":"code-sample","operationType":"http","method":"POST","path":"/v1/oauth/revoke","servers":[{"url":"/_mock/openapi/v1/oauth","description":"Mock server","isMockServer":true},{"url":"https://public.api.iclosed.io","description":"Production"}],"parameters":{"path":[],"query":[],"querystring":[],"header":[],"cookie":[]},"security":[],"requestBody":{"application/json":{"schemaId":"schema_173"}},"responseCodes":["200","401","429"],"pointer":"/v1/oauth/revoke","href":"other/oauthrevoke","openApiOperationId":"oauthRevoke","summary":"OAuth token revocation endpoint"},"isWebhook":false,"hideReplay":false,"servers":[{"url":"/_mock/openapi/v1/oauth","description":"Mock server","isMockServer":true},{"url":"https://public.api.iclosed.io","description":"Production"}],"schemaId":"schema_173","mediaTypes":["application/json"],"mediaTypeSchemas":{"application/json":{"schemaId":"schema_173"}},"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Responses","labelTranslationKey":"responses","deepLinkSuffix":"responses"},{"nodeType":"item-content","variant":"responses","responses":[{"code":"200","description":"Token revoked (or token not found)","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_174","exampleIds":["paths/~1v1~1oauth~1revoke/post/responses/200/content/application~1json/example"]}},"schemaId":"schema_174","exampleIds":["paths/~1v1~1oauth~1revoke/post/responses/200/content/application~1json/example"]},{"code":"401","description":"Client authentication failed","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_170"}},"schemaId":"schema_170"},{"code":"429","description":"IP rate limit exceeded"}],"pointer":"/paths/~1v1~1oauth~1revoke/post/responses"}],"panels":[{"children":[{"kind":"response","responseCodes":[{"code":"200","schemaId":"schema_174","exampleIds":["paths/~1v1~1oauth~1revoke/post/responses/200/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_174","exampleIds":["paths/~1v1~1oauth~1revoke/post/responses/200/content/application~1json/example"]}}},{"code":"401","schemaId":"schema_170","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_170"}}},{"code":"429"}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"feedback","pageSlug":"/other/oauthrevoke"}],"panels":[]}]},"httpPath":"/v1/oauth/revoke"}],"store":{"schemaStore":{"schema_163":{"kind":"json-schema","data":{"type":"string","enum":["code"]},"id":"schema_163"},"schema_164":{"kind":"json-schema","data":{"type":"string","minLength":1,"maxLength":255,"description":"OAuth client identifier."},"id":"schema_164"},"schema_165":{"kind":"json-schema","data":{"type":"string","maxLength":2048,"format":"uri","description":"Redirect URI registered for the client. Must use https://, or http:// on localhost."},"id":"schema_165"},"schema_166":{"kind":"json-schema","data":{"description":"Space-delimited scopes requested by the client. Defaults to the full client-allowed scope set.","type":"string","maxLength":2000},"id":"schema_166"},"schema_167":{"kind":"json-schema","data":{"description":"Opaque value returned unchanged to prevent CSRF in client-side state handling.","type":"string","maxLength":2048},"id":"schema_167"},"schema_168":{"kind":"json-schema","data":{"description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"PKCE code challenge. Required together with code_challenge_method for public clients and for every client registered through anonymous dynamic client registration; optional for account-owned confidential clients."},"children":[]}]}]}],"type":"string","minLength":43,"maxLength":128},"id":"schema_168"},"schema_169":{"kind":"json-schema","data":{"type":"string","enum":["S256"]},"id":"schema_169"},"schema_170":{"kind":"json-schema","data":{"type":"object","properties":{"error":{"type":"string"},"error_description":{"type":"string"}},"required":["error"],"additionalProperties":false},"id":"schema_170"},"schema_171":{"kind":"json-schema","data":{"type":"object","properties":{"grant_type":{"type":"string","enum":["authorization_code","refresh_token"]},"code":{"type":"string","minLength":1,"maxLength":255},"redirect_uri":{"type":"string","maxLength":2048,"format":"uri"},"code_verifier":{"type":"string","minLength":43,"maxLength":128},"refresh_token":{"type":"string","minLength":1,"maxLength":255},"scope":{"type":"string","maxLength":2000},"client_id":{"type":"string","minLength":1,"maxLength":255},"client_secret":{"type":"string","minLength":1,"maxLength":255}},"required":["grant_type"],"additionalProperties":false},"id":"schema_171"},"schema_172":{"kind":"json-schema","data":{"type":"object","properties":{"access_token":{"type":"string"},"token_type":{"type":"string","enum":["Bearer"]},"expires_in":{"type":"integer","exclusiveMinimum":true,"minimum":0},"refresh_token":{"type":"string"},"scope":{"type":"string"}},"required":["access_token","token_type","expires_in","refresh_token","scope"],"additionalProperties":false},"id":"schema_172"},"schema_173":{"kind":"json-schema","data":{"type":"object","properties":{"token":{"type":"string","minLength":1,"maxLength":2048},"token_type_hint":{"type":"string","enum":["access_token","refresh_token"]},"client_id":{"type":"string","minLength":1,"maxLength":255},"client_secret":{"type":"string","minLength":1,"maxLength":255}},"required":["token"],"additionalProperties":false},"id":"schema_173"},"schema_174":{"kind":"json-schema","data":{"type":"object","additionalProperties":false},"id":"schema_174"}},"exampleStore":{"paths/~1v1~1oauth~1authorize/get/responses/400/content/application~1json/example":{"value":{"error":"invalid_grant","error_description":"Authorization code has already been used"},"id":"paths/~1v1~1oauth~1authorize/get/responses/400/content/application~1json/example"},"paths/~1v1~1oauth~1token/post/responses/200/content/application~1json/example":{"value":{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...","token_type":"Bearer","expires_in":3600,"refresh_token":"kN9b-4wFQxQXoXr3Jra6D2xSAn8YvXSVF0yP9fvQX1A","scope":"contacts:read contacts:write"},"id":"paths/~1v1~1oauth~1token/post/responses/200/content/application~1json/example"},"paths/~1v1~1oauth~1token/post/responses/400/content/application~1json/example":{"value":{"error":"invalid_grant","error_description":"Authorization code has already been used"},"id":"paths/~1v1~1oauth~1token/post/responses/400/content/application~1json/example"},"paths/~1v1~1oauth~1token/post/responses/401/content/application~1json/example":{"value":{"error":"invalid_client","error_description":"client authentication failed"},"id":"paths/~1v1~1oauth~1token/post/responses/401/content/application~1json/example"},"paths/~1v1~1oauth~1revoke/post/responses/200/content/application~1json/example":{"value":{},"id":"paths/~1v1~1oauth~1revoke/post/responses/200/content/application~1json/example"}},"securitySchemeStore":{},"servers":[{"url":"/_mock/openapi/v1/oauth","isMockServer":true,"description":"Mock server"},{"url":"https://public.api.iclosed.io","description":"Production"}],"specType":"openapi"},"options":{"jsonSamplesExpandLevel":"all","hideInfoSection":true,"mockServer":{"url":"/_mock/openapi/v1/oauth","position":"first","description":"Mock server"},"disableRouter":true,"downloadUrls":[{"url":"/_bundle/openapi/v1/oauth.json?download"},{"url":"/_bundle/openapi/v1/oauth.yaml?download"}],"excludeFromSearch":false,"replayFeatures":{"graphql":false},"specType":"openapi","markdocOptions":{"tags":{},"nodes":{},"components":{}},"metadata":{"title":"OAuth API Reference","description":"OAuth 2.0 authorization, token management, and dynamic client registration (RFC 7591/7592)"}},"baseSlug":"/openapi/v1/oauth","routesMapping":{}}