Canoe Intelligence Authentication API

The Authentication API from Canoe Intelligence — 4 operation(s) for authentication.

Documentation

Specifications

Other Resources

OpenAPI Specification

canoe-intelligence-authentication-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Canoe API v1 Authentication API
  version: 1.0.0
  description: "Canoe's API provides methods for retrieving extracted data from documents and their metadata as well as data from downloaded PDFs. This documentation includes detailed explanations of API endpoints and examples. You may not have access to all of the listed endpoints depending on the services you've purchased from Canoe as well as your user permissions.\n<p>By using Canoe’s API Documentation, you agree to the most recent version of <a href=\"https://canoeintelligence.com/api-terms-of-use/\" target=\"_blank\"><u>Canoe’s Developer Portal Terms of Use.</u></a></p>\n<p>In addition to the <code class=\"prettyprint\">curl</code>, <code class=\"prettyprint\">javascript</code>, <code class=\"prettyprint\">python</code>, <code class=\"prettyprint\">php</code> and <code class=\"prettyprint\">CSharp</code> examples next to each endpoint, we've also included a <a href=\"https://www.getpostman.com\" target=\"_blank\"><u>Postman</u></a> collection. The collection contains API calls for each available endpoint.  Postman is a tool that helps generate and test API calls by providing a clean interface to build and save HTTP requests, and to check and test API responses. </p>\n\n<p>\n    Note: Download Postman from their official website. Find out more about how to import Postman collections <a href=\"https://learning.getpostman.com/docs/postman/collections/data_formats/#importing-postman-data\" target=\"_blank\"><u>here</u></a>.\n</p>\n<p>\n    Your information security team may require whitelisting Canoe’s IP addresses before you can call the API.  Whitelist the IP addresses found in <a href=\"https://client.canoesoftware.com/knowledge-base#/api/canoe-api-overview\" target=\"_blank\"><u>this knowledge base page</u></a> to allow all API addresses of Canoe. <b>(Note: You must be logged into your Canoe account to access the knowledge base page)</b>\n</p>\n<p>\n    Your information technology team may require you to open ports to call the API. The API uses port numbers 443 and 9443.\n</p>\n<p>\n    Additionally, your information security team may request that Canoe limit the IP address(es) from which you can make API calls as an extra layer of data protection. If so, please reach out to our support team.\n</p>\n\n<br>\n<strong><u>Request:</u></strong>\n\nThe base URL for all Canoe API requests is <code class=\"prettyprint\">https://api.canoesoftware.com</code>\n\nThe API is built on RESTful principles with resource-oriented URL endpoints. HTTP status codes are used to indicate any API errors and all responses are returned in JSON format. All requests must be made over an HTTPS connection to ensure a secure transmission of data. Following a RESTful structure, requests should hit API endpoints using the appropriate HTTP method, which will depend on the desired action:\n\n<table><thead>\n    <tr>\n        <th>Method</th>\n        <th>Description</th>\n    </tr>\n    </thead><tbody>\n    <tr>\n        <td>GET</td>\n        <td>Use the <strong>GET</strong> method to retrieve information about your users, their organizations, and available associated data. This will always be a read-only request, so queried objects will never be modified by a GET request. When using filter parameters that include special characters, you should always encode those values to fit URI specifications.</td>\n    </tr>\n    <tr>\n        <td>POST</td>\n        <td>Use a <strong>POST</strong> method to create a new object, such as a new user or organization. Request parameters should be given in JSON format. The response body will typically return the newly created resource.</td>\n    </tr>\n    <tr>\n        <td>PUT</td>\n        <td>Use a <strong>PUT</strong> method to update an object, such as updating user credentials. As with a POST request, parameters should be given in JSON format. If successful, the response body will typically return the modified object.</td>\n    </tr>\n    <tr>\n        <td>DELETE</td>\n        <td>Use a <strong>DELETE</strong> method to delete an object, such as deleting one of your funds. Successful DELETE requests will typically return an empty response body.</td>\n    </tr>\n    </tbody></table>\n\n\n<strong><u>Response:</u></strong>\n\n<p>All non-empty response bodies, including errors, will be formatted as a JSON object. If you are fetching multiple entries, such as <code class=\"prettyprint\">/v1/funds</code> example, the data will be returned as a list. If you are fetching a single entry, such as <code class=\"prettyprint\">GET /v1/funds/1</code>, the data will be returned as a single object.</p>\n<p>Canoe's APIs use standard HTTP status codes to indicate the status of a request.</p>\n<p>Below is a brief overview of the most common status codes:</p>\n<table><thead>\n    <tr>\n        <th>Code</th>\n        <th>Text</th>\n        <th>Definition</th>\n    </tr>\n    </thead><tbody>\n    <tr>\n        <td>200</td>\n        <td>OK</td>\n        <td>Success!</td>\n    </tr>\n    <tr>\n        <td>400</td>\n        <td>Bad Request</td>\n        <td>The request was invalid or cannot be otherwise served. This could be due to an invalid or malformed parameter, etc.</td>\n    </tr>\n    <tr>\n        <td>401</td>\n        <td>Unauthorized</td>\n        <td>The API authentication credentials or access token are missing or incorrect.</td>\n    </tr>\n    <tr>\n        <td>403</td>\n        <td>Forbidden</td>\n        <td>The credentials or access token are authenticated, but you do not have access to the requested resource.</td>\n    </tr>\n    <tr>\n        <td>404</td>\n        <td>Not Found</td>\n        <td>The requested resource is invalid or the resource requested, such as a Fund, does not exist. The 404 status code might indicates that the REST API can't map the client's URI to a resource but may be available in the future.</td>\n    </tr>\n    <tr>\n        <td>405</td>\n        <td>Method Not Allowed</td>\n        <td>The request tried to use an HTTP method that the resource does not allow. For instance, a read-only resource could support only GET, but not PUT or DELETE or POST.</td>\n    </tr>\n    <tr>\n        <td>500</td>\n        <td>Internal Server Error</td>\n        <td>There are internal or API-related errors on Canoe's side. Additional requests will not resolve the issue.</td>\n    </tr>\n    <tr>\n        <td>503</td>\n        <td>Service Unavailable</td>\n        <td>The Canoe servers are up, but overloaded with requests. Try again later.</td>\n    </tr>\n    </tbody></table>\n"
  contact:
    name: Canoe Support
    url: https://canoeintelligence.com
  termsOfService: https://canoeintelligence.com/api-terms-of-use/
servers:
- url: https://api.canoesoftware.com
  description: Production API
security:
- bearerAuth: []
tags:
- name: Authentication
  description: ''
paths:
  /oauth/clients:
    get:
      tags:
      - Authentication
      summary: Managing OAuth Clients
      description: "<p>To verify incoming API requests, Canoe's APIs use access tokens.</p>\n<p>Canoe API users may <a href=\"#managing-oauth-clients\">create and manage their OAuth Client</a>, and use the <code>Client ID</code> and <code>Client Secret</code> to request an authorization code and access token.</p>\n<p>Canoe API users can also use the <code class=\"prettyprint\">/v1/tokens</code> <a href=\"#password-grant-tokens\">endpoint</a> to manage the access tokens. To authenticate to the <code class=\"prettyprint\">/v1/tokens</code> endpoint, you will need API user credentials. This is one of the few API endpoints where you will need to use your user credentials; most other endpoints are authenticated through access tokens.</p>\n<aside class=\"notice\">\n    Note: An access token issued from Canoe will expire in 24 hours.\n</aside>\n<p>Once you have an access token, you can authenticate to Canoe's API endpoints. Pass the access token in the request header in the format <code class=\"prettyprint\">Authorization: Bearer {token}</code>, where <code class=\"prettyprint\">{token}</code> is your newly created personal access token.</p>\n<p>For example, if your newly created access token is \"eyJ0eXAiOiJKV1QiLCJhbG\", your header should look like \"Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbG\"</p>\n<p>If you are using Postman Collection for testing purpose, you could follow the steps here: <a href=\"https://learning.getpostman.com/docs/postman/sending_api_requests/authorization/#bearer-token\" target=\"_blank\"><u>Authorization - Bearer Token</u></a></p>\n<aside class=\"notice\">\n    Note: Sometimes, you want to give API access only to some specific IP addresses. Please contact us to enable that.\n</aside>\n\n<p>Developers building applications that need to interact with Canoe's API need to first register their application by creating a Client account. Typically, this consists of providing the name of their application and a URL that your application can redirect to after users approve their request for authorization. When a Client is created, it will be issued a <code>Client ID</code> and <code>Client Secret</code>. These values will be used when requesting access tokens from your application. </p>\n\n<p>Canoe API users can create and manage their OAuth Clients through the <a href=https://client.canoesoftware.com/api_configuration target=\"_blank\"><u>API Configuration Dashboard</u></a>.</p>"
      operationId: ManageAuthClient
      responses:
        '200':
          description: Success
  /oauth/token:
    post:
      tags:
      - Authentication
      summary: Requesting Tokens - Authorization Code
      description: '/oauth/token


        <p>Once a client has been created, you may use the <code>Client ID</code> and <code>Client Secret</code> to request an

        authorization code and access token from your application. First, your application should make a redirect request to

        Canoe''s <code>oauth/authorize</code> route (see examples on the right panel)</p>


        <p>When receiving authorization requests, Canoe will ask users to approve or deny the authorization request. If users approve the request, they will be redirected back to the <code>redirect_uri</code> that was specified by the application that requested access (your application). The <code>redirect_uri</code> must match the <code>redirect</code> URL that was specified when the client was created.</p>

        <p>If the user approves the authorization request, they will be redirected back to the consuming application with the authorization code. The consumer should then issue a <code>POST</code> request to Canoe to request an access token. The request should include the authorization code that was issued by Canoe when the user approved the authorization request. See examples on the right panel and the parameters for the <code>POST</code> request below.</p>'
      operationId: RequestingTokensAuthCodes
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                grant_type:
                  type: string
                  description: The grant_type parameter must be set to "authorization_code".
                  example: authorization_code
                client_id:
                  type: string
                  description: Your Application's Client ID.
                  example: client-id
                client_secret:
                  type: string
                  description: Your Application's Client Secret.
                  example: your_client_secret
                redirect_uri:
                  type: string
                  description: Your Application's redirect URL. <b>It must match the redirect URL that was specified when the client was created.</b>
                  example: https://your-application.com/callback
                code:
                  type: string
                  description: The authorization code issued by Canoe when the user approved the authorization request.
                  example: code
              required:
              - grant_type
              - client_id
              - client_secret
              - redirect_uri
              - code
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AuthorizationCode'
      x-codeSamples:
      - lang: bash
        label: Bash
        source: "#Please go to the link below to authorize access.\n      https://api.canoesoftware.com/oauth/authorize?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&response_type=code\n\n      #Please copy the 'YOUR_AUTHORIZATION_CODE' in the redirect url(YOUR_REDIRECT_URI?code=YOUR_AUTHORIZATION_CODE) after approving access\n      curl -X POST \"https://api.canoesoftware.com/oauth/token\" \\\n          -H \"Accept: application/json\" \\\n          -H \"X-Requested-With: XMLHttpRequest\" \\\n          -H \"Content-Type: application/x-www-form-urlencoded\" \\\n          -d \"grant_type=authorization_code&code=YOUR_AUTHORIZATION_CODE&redirect_uri=YOUR_REDIRECT_URI&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET\""
      - lang: javascript
        label: JavaScript
        source: "const readline = require('readline');\n      const rl = readline.createInterface({\n          input: process.stdin,\n          output: process.stdout\n      });\n      const client_id = 'client_id';\n      const client_secret = 'client_secret';\n      const redirect_uri = 'https://your-application.com/callback';\n      const url = new URL(\"https://api.canoesoftware.com/oauth/authorize\");\n      let params = {\n          \"client_id\": client_id,\n          \"client_secret\": client_secret,\n          \"redirect_uri\": redirect_uri,\n          \"response_type\": 'code',\n      };\n      Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));\n      console.log('Please go to %s and authorize access.', url)\n      rl.question('Enter the authorization code returned in the callback URL.', (answer) => {\n          let code = answer;\n          let headers = {\n              \"Accept\": \"application/json\",\n              \"X-Requested-With\": \"XMLHttpRequest\",\n              \"Content-Type\": \"application/json\",\n          }\n          let body = {\n              'grant_type': \"authorization_code\",\n              'client_id': client_id,\n              'client_secret': client_secret,\n              'redirect_uri': redirect_uri,\n              'code': code,\n          };\n          axios.request('https://api.canoesoftware.com/oauth/token', {\n              method: \"POST\",\n              headers: headers,\n              data: body\n          })\n              .then(response => {\n                  console.log(response.data)\n              })\n              .catch(error => {\n                  console.log(error);\n              })\n          rl.close();\n      });"
      - lang: php
        label: PHP
        source: "Route::get('/redirect', function () {\n          $query = http_build_query([\n          'client_id' => 'client-id',\n          'redirect_uri' => 'https://your-application.com/callback',\n          'response_type' => 'code',\n          'scope' => '',\n          ]);\n          return redirect('https://api.canoesoftware.com/oauth/authorize?'.$query);\n      });\n\n\n      Route::get('/callback', function (Request $request) {\n          $http = new GuzzleHttp\\Client;\n          $response = $http->post('https://api.canoesoftware.com/oauth/token', [\n              'form_params' => [\n                  'grant_type' => 'authorization_code',\n                  'client_id' => 'client-id',\n                  'client_secret' => 'client-secret',\n                  'redirect_uri' => 'https://your-application.com/callback',\n                  'code' => $request->code,\n              ],\n          ]);\n          return json_decode((string) $response->getBody(), true);\n      });"
      - lang: python
        label: Python
        source: "#This sample requires python OAuth library requests_oauthlib\n\n      from requests_oauthlib import OAuth2Session\n      import json\n      client_id = \"client_id\"\n      client_secret = \"client_secret\"\n      redirect_uri = \"https://your-application.com/callback\"\n      oauth = OAuth2Session(client_id, redirect_uri=redirect_uri)\n      authorization_url, state = oauth.authorization_url('https://api.canoesoftware.com/oauth/authorize')\n      print('Please go to {} and authorize access.'.format(authorization_url))\n      authorization_response = input('Enter the full callback URL')\n      token = oauth.fetch_token(\n      'https://api.canoesoftware.com/oauth/token',\n      authorization_response=authorization_response,\n      client_id=client_id,\n      client_secret=client_secret)\n      print(token)"
      - lang: csharp
        label: CSharp
        source: "using System;\n      using System.Threading;\n      using RestSharp;\n\n      var client_id = \"your_client_id\";\n      var client_secret = \"your_client_secret\";\n      var redirect_uri = \"your_redirect_url\";\n      var baseUrl = \"https://api.canoesoftware.com\";\n      var client = new RestClient(baseUrl);\n      var request = new RestRequest(string.Format(\"/oauth/authorize?response_type=code&client_id={0}&client_secret={1}&redirect_uri={2}\",client_id, client_secret, System.Web.HttpUtility.UrlEncode(redirect_uri)), Method.Get);\n      var url = client.BuildUri(request).ToString();\n      //The below workflow assumes the user does not have control over the redirect_uri\n      //If the redirect_uri goes to your application, you can request a token by exchanging the authorization code directly\n      string auth_code = null;\n      var ps = new System.Diagnostics.ProcessStartInfo(url)\n      {\n          UseShellExecute = true,\n          Verb = \"open\"\n      };\n      //This will open your default browser\n      System.Diagnostics.Process.Start(ps);\n      //Please copy the 'THE_AUTHORIZATION_CODE' in the redirect url(YOUR_REDIRECT_URI?code=THE_AUTHORIZATION_CODE) after approving access \n      Console.WriteLine(\"Enter the authorization code returned in the callback URL:\");\n      string code = Console.ReadLine();\n      request = new RestRequest(\"/oauth/token\", Method.Post);\n      request.AddHeader(\"Accept\", \"application/json\");\n      request.AddHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n      request.AddParameter(\"grant_type\", \"authorization_code\");\n      request.AddParameter(\"code\", code);\n      request.AddParameter(\"client_id\", client_id);\n      request.AddParameter(\"client_secret\", client_secret);\n      request.AddParameter(\"redirect_uri\", redirect_uri);\n      var response = client.Execute(request);\n      Console.WriteLine(response.Content);"
      security: []
  /oauth/token/refresh:
    post:
      tags:
      - Authentication
      summary: Requesting Tokens - Refresh Token
      description: '/oauth/token


        <p>Users can refresh their access tokens via the refresh token that was provided to them when the access token was issued.</p>

        <p>Users should issue a <code>POST</code> request to Canoe to request an access token. See examples on the right panel and the parameters for the <code>POST</code> request below.</p>'
      operationId: RequestingTokensRefreshToken
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                grant_type:
                  type: string
                  description: refresh_token.
                  example: refresh_token
                client_id:
                  type: string
                  description: Your Application's Client ID.
                  example: your_client_id
                client_secret:
                  type: string
                  description: Your Application's Client Secret.
                  example: your_client_secret
                refresh_token:
                  type: string
                  description: The refresh_token issued by Canoe when the access token was issued.
                  example: def50200a24fe7672ce8653724d90090ca68fc4729a04b1051b2c8
              required:
              - grant_type
              - client_id
              - client_secret
              - refresh_token
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AuthorizationCode'
      x-codeSamples:
      - lang: bash
        label: Bash
        source: "curl -X POST \"https://api.canoesoftware.com/oauth/token\" \\\n      -H \"Accept: application/json\" \\\n      -H \"X-Requested-With: XMLHttpRequest\" \\\n      -H \"Content-Type: application/x-www-form-urlencoded\" \\\n      -d \"grant_type=refresh_token&client_id=your_client_id&client_secret=your_client_secret&refresh_token=your_refresh_token\""
      - lang: javascript
        label: JavaScript
        source: "const url = new URL(\"https://api.canoesoftware.com/oauth/token\");\n      let headers = {\n          \"Accept\": \"application/json\",\n          \"X-Requested-With\": \"XMLHttpRequest\",\n          \"Content-Type\": \"application/json\",\n      }\n      let body = {\n        'grant_type': \"refresh_token\",\n        'client_id': client_id,\n        'client_secret': client_secret,\n        'refresh_token': refresh_token,\n      }\n      fetch(url, {\n          method: \"POST\",\n          headers: headers,\n          body: body\n      }).then(response => response.json()) .then(json => console.log(json));"
      - lang: php
        label: PHP
        source: "$client = new \\GuzzleHttp\\Client();\n      $response = $client->post(\"https://api.canoesoftware.com/oauth/token\", [\n          'headers' => [\n              \"Accept\" => \"application/json\",\n              \"X-Requested-With\" => \"XMLHttpRequest\",\n              \"Content-Type\" => \"application/json\",\n          ],\n          'json' => [\n              'grant_type'=> \"refresh_token\",\n              'client_id'=> \"your_client_id\",\n              'client_secret'=> \"your_client_secret\",\n              'refresh_token'=> \"your_refresh_token\",\n          ],\n      ]);\n      $body = $response->getBody();\n      print_r(json_decode((string) $body));"
      - lang: python
        label: Python
        source: "import requests\n      import json\n\n      url = \"https://api.canoesoftware.com/oauth/token\"\n      headers = {\n          \"Accept\": \"application/json\",\n          \"X-Requested-With\": \"XMLHttpRequest\",\n          \"Content-Type\": \"application/json\",\n      }\n      body = {\n          \"grant_type\": \"refresh_token\",\n          \"client_id\": \"your_client_id\",\n          \"client_secret\": \"your_client_secret\",\n          \"refresh_token\": \"def50200a24fe7672ce8653724d90090ca68fc4729a04b1051b2c8\"\n      }\n\n      response = requests.post(url, json.dumps(body), headers=headers, )\n      parsed = json.loads(response.text)\n      print(json.dumps(parsed, indent=4))"
      - lang: csharp
        label: CSharp
        source: "using RestSharp;\n\n      var client = new RestClient(\"https://api.canoesoftware.com/\");\n      var request = new RestRequest(\"oauth/token\", Method.Post);\n      request.AddHeader(\"Accept\", \"application/json\");\n      request.AddHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n      request.AddHeader(\"Content-Type\", \"application/json\");\n      request.AddParameter(\"grant_type\",\"refresh_token\");\n      request.AddParameter(\"client_id\",\"your_client_id\");\n      request.AddParameter(\"client_secret\",\"your_client_secret\");\n      request.AddParameter(\"refresh_token\",\"your_refresh_token\");\n      var response = client.Execute(request);\n      Console.WriteLine(response.Content);"
      security: []
  /oauth/token/client-credentials:
    post:
      tags:
      - Authentication
      summary: Requesting Tokens - Client Credentials
      description: '/oauth/token


        <p>Once a client has been created, you may use the <code>Client ID</code> and <code>Client Secret</code> to request an

        to request an access token. Access tokens provide access to all other endpoints within the API.</p>'
      operationId: RequestingTokensClientCredentials
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                grant_type:
                  type: string
                  description: The grant_type parameter must be set to "client_credentials".
                  example: client_credentials
                client_id:
                  type: string
                  description: Your Application's Client ID.
                  example: client_credentials
                client_secret:
                  type: string
                  description: Your Application's Client Secret.
                  example: your_client_secret
              required:
              - grant_type
              - client_id
              - client_secret
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ClientCredentials'
      x-codeSamples:
      - lang: bash
        label: Bash
        source: "curl -X POST \"https://api.canoesoftware.com/oauth/token\" \\\n      -H \"Accept: application/json\" \\\n      -H \"X-Requested-With: XMLHttpRequest\" \\\n      -H \"Content-Type: application/x-www-form-urlencoded\" \\\n      -d \"grant_type=client_credentials&client_id=your_client_id&client_secret=your_client_secret\""
      - lang: javascript
        label: JavaScript
        source: "const url = new URL(\"https://api.canoesoftware.com/oauth/token\");\n      let headers = {\n          \"Accept\": \"application/json\",\n          \"X-Requested-With\": \"XMLHttpRequest\",\n          \"Content-Type\": \"application/json\",\n      }\n      let body = {\n        'grant_type': \"client_credentials\",\n        'client_id': client_id,\n        'client_secret': client_secret,\n      }\n      fetch(url, {\n          method: \"POST\",\n          headers: headers,\n          body: body\n      }).then(response => response.json()) .then(json => console.log(json));"
      - lang: php
        label: PHP
        source: "$client = new \\GuzzleHttp\\Client();\n      $response = $client->post(\"https://api.canoesoftware.com/oauth/token\", [\n          'headers' => [\n              \"Accept\" => \"application/json\",\n              \"X-Requested-With\" => \"XMLHttpRequest\",\n              \"Content-Type\" => \"application/json\",\n          ],\n          'json' => [\n              'grant_type'=> \"client_credentials\",\n              'client_id'=> \"your_client_id\",\n              'client_secret'=> \"your_client_secret\",\n          ],\n      ]);\n      $body = $response->getBody();\n      print_r(json_decode((string) $body));"
      - lang: python
        label: Python
        source: "import requests\n      import json\n\n      url = \"https://api.canoesoftware.com/oauth/token\"\n      headers = {\n          \"Accept\": \"application/json\",\n          \"X-Requested-With\": \"XMLHttpRequest\",\n          \"Content-Type\": \"application/json\",\n      }\n      body = {\n          \"grant_type\": \"client_credentials\",\n          \"client_id\": \"client_credentials\",\n          \"client_secret\": \"your_client_secret\",\n      }\n\n      response = requests.post(url, json.dumps(body), headers=headers, )\n      parsed = json.loads(response.text)\n      print(json.dumps(parsed, indent=4))"
      - lang: csharp
        label: CSharp
        source: "using RestSharp;\n\n      var client = new RestClient(\"https://api.canoesoftware.com/\");\n      var request = new RestRequest(\"oauth/token\", Method.Post);\n      request.AddHeader(\"Accept\", \"application/json\");\n      request.AddHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n      request.AddHeader(\"Content-Type\", \"application/json\");\n      request.AddParameter(\"grant_type\",\"client_credentials\");\n      request.AddParameter(\"client_id\",\"your_client_id\");\n      request.AddParameter(\"client_secret\",\"your_client_secret\");\n      var response = client.Execute(request);\n      Console.WriteLine(response.Content);"
      security: []
components:
  schemas:
    ClientCredentials:
      type: object
      properties:
        token_type:
          type: string
          description: A parameter in the Access Token generation call within the Authorization server. This represents how an access_token will be generated and presented for resource access calls.
          example: Bearer
        expires_in:
          type: integer
          description: The lifetime in seconds of the access token. For example, the value 3600 denotes that the access token will expire in one hour from the time the response was generated.
          example: 86400
        access_token:
          type: string
          description: An access_token is a unique string of letters and numbers that you pass with an API call. The access token represents the authorization of a specific application to access specific parts of a user's data. Access tokens must be kept confidential both in transit and in storage.
          example: eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjM5YjA4ZmZkZjQ5ZmRiNDYxMzk4MTY0ODNkMGVlNmNjMjA2ZmYxMDU1ODVhMDUwM2ViZmY3Mzg4OTMzN2I4NTI5Mzg1MWY5ZTBjN2YzYzNmIn0.eyJhdWQiOiJhZjFhMjVjNC1hNDE3LTExZTktOTZmYy0wNmY3NWI2ZjJiNGEiLCJqdGkiOiIzOWIwOGZmZGY0OWZkYjQ2MTM5ODE2NDgzZDBlZTZjYzIwNmZmMTA1NTg1YTA1MDNlYmZmNzM4ODkzMzdiODUyOTM4NTFmOWUwYzdmM2MzZiIsImlhdCI6MTU2Mjg3NjI1MiwibmJmIjoxNTYyODc2MjUyLCJleHAiOjE1NjQxNzIyNTEsInN1YiI6IjE2MzhlZDRhLTY4MTItYTNhYy0wMDA1LTUzYmI5MjJjNGFiYiIsInNjb3BlcyI6W119.t7wflHG7Og9Vf1rqPWo2QzCyyAo3AUc9duZyoMEQ8dix5Omt5OWqHX6TWYddxbC34fvRi1Gby4CqK9Kz-s-0GMr2YnWxBPCzAIGlKMRVKbs615bQTpChG0a5BWzcUMOww1zhL9Gz8aSg2yI47kAHFnVPZFGH4zA2yqcRvmg7QvoYzQcm4hJR6NatMJgKOChagUDthdj-ezWwWq_pyCXZFU2XwLm1vBZTIkgG40uCbqgsEUffDXFibQypBG9BrUkw03o9wh72UoL-QeMHn5K5Q7zJx08pzOUXWm_W4pfO7FIwzaHoOEtFmorSihnw7gzDddwASwMzhYgqF839J7CLa_mq6YV53oMP2eCOKX0jN-ddEg4Gt6yYkVbh54yOsbztc4P1waUJ4JnJsBV2GdWdxnB0bhx6QFhj4HrnkQzx1GScFjRzKPHJGGmN9e-6wCEb7TXncbtnuu-8YxCbG5IUfc25BlBtMeqURE1A6Pa7YciBJoPLlEDUAJ8HwfSHspxDkuPhz1ospacDJglxHn18Mrkt8lukwIL7dfhM9Wm2b6ZBJrKngFdkFV9ALFImjBwqk2SZVfhLMYvhTG36qGqI7e7uw_SyU2lPiN2MQcVpdaSd0NkCLqGAkRRwuDCaHBfZ35TJguJXHdJuRMDoghUAhYgAwqp7OU1FtgX1gmt5tok
    AuthorizationCode:
      type: object
      properties:
        token_type:
          type: string
          description: A parameter in the Access Token generation call within the Authorization server. This represents how an access_token will be generated and presented for resource access calls.
          example: Bearer
        expires_in:
          type: integer
          description: The lifetime in seconds of the access token. For example, the value 3600 denotes that the access token will expire in one hour from the time the response was generated.
          example: 86400
        access_token:
          type: string
          description: An access_token is a unique string of letters and numbers that you pass with an API call. The access token represents the authorization of a specific application to access specific parts of a user's data. Access tokens must be kept confidential both in transit and in storage.
          example: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjM5YjA4ZmZkZjQ5ZmRiNDYxMzk4MTY0ODNkMGVlNmNjMjA2ZmYxMDU1ODVhMDUwM2ViZmY3Mzg4OTMzN2I4NTI5Mzg1MWY5ZTBjN2YzYzNmIn0.eyJhdWQiOiJhZjFhMjVjNC1hNDE3LTEx

            ZTktOTZmYy0wNmY3NWI2ZjJiNGEiLCJqdGkiOiIz

            OWIwOGZmZGY0OWZkYjQ2MTM5ODE2NDgzZDBlZTZjYzIwNmZmMTA1NTg1YTA1MDNlYmZmNzM4ODkzMzdiODUyOTM4NTFmOWUwYzdmM2MzZiIsImlhdCI6MTU2Mjg3NjI1MiwibmJmIjoxNTYyODc2MjUyLCJleHAiOjE1NjQx

            NzIyNTEsInN1YiI6IjE2MzhlZDRhLTY4MTItYTNh

            Yy0wMDA1LTUzYmI5MjJjNGFiYiIsInNjb3BlcyI6W

            119.t7wflHG7Og9Vf1rqPWo2QzCyyAo3AUc9duZyoM

            EQ8dix5Omt5OWqHX6TWYddxbC34fvRi1Gby4CqK9Kz-s-0GMr2YnWxBPCzAIGlKMRVKbs615bQTpChG0a5BWzcUMOww1zhL9Gz8aSg2yI47kAHFnVPZFGH4zA2yqcRvmg7QvoYzQcm4hJR6NatMJgKOChagUDthdj-ezWwWq_pyCXZFU2XwLm1vBZTIkgG40uCbqgsEUffDXFibQypBG9BrUkw03o9wh72UoL-QeMH

# --- truncated at 32 KB (34 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/canoe-intelligence/refs/heads/main/openapi/canoe-intelligence-authentication-api-openapi.yml