Canoe Intelligence User API

The User API from Canoe Intelligence — 4 operation(s) for user.

OpenAPI Specification

canoe-intelligence-user-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Canoe API v1 User 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: User
  description: ''
paths:
  /v1/user:
    get:
      tags:
      - User
      summary: Get Your API User Information
      description: Fetch information about your Canoe API user.
      operationId: User
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
      x-codeSamples:
      - lang: bash
        label: Bash
        source: "curl -X GET \\\n          -G \"https://api.canoesoftware.com/v1/user\" \\\n          -H \"Authorization: Bearer {token}\" \\\n          -H \"Accept: application/json\" \\\n          -H \"X-Requested-With: XMLHttpRequest\""
      - lang: javascript
        label: JavaScript
        source: "const url = new URL(\n          \"https://api.canoesoftware.com/v1/user\"\n      );\n\n      let headers = {\n          \"Authorization\": \"Bearer {token}\",\n          \"Accept\": \"application/json\",\n          \"X-Requested-With\": \"XMLHttpRequest\",\n          \"Content-Type\": \"application/json\",\n      };\n\n      fetch(url, {\n          method: \"GET\",\n          headers: headers,\n      })\n          .then(response => response.json())\n          .then(json => console.log(json));"
      - lang: php
        label: PHP
        source: "$client = new \\GuzzleHttp\\Client();\n      $response = $client->get(\n          'https://api.canoesoftware.com/v1/user',\n          [\n              'headers' => [\n                  'Authorization' => 'Bearer {token}',\n                  'Accept' => 'application/json',\n                  'X-Requested-With' => 'XMLHttpRequest',\n              ],\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/v1/user'\n      headers = {\n        'Authorization': 'Bearer {token}',\n        'Accept': 'application/json',\n        'X-Requested-With': 'XMLHttpRequest'\n      }\n      response = requests.request('GET', url, headers=headers)\n      response.json()"
      - lang: csharp
        label: CSharp
        source: "using RestSharp;\n\n      var client = new RestClient(\"https://api.canoesoftware.com/\");\n      var request = new RestRequest(\"v1/user\", Method.Get);\n      request.AddParameter(\"Authorization\", string.Format(\"Bearer {token}\"), ParameterType.HttpHeader);\n      request.AddHeader(\"Accept\", \"application/json\");\n      request.AddHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n      var response = client.Execute(request);\n      Console.WriteLine(response.Content);"
    post:
      tags:
      - User
      summary: Create User
      description: Create a new user within your organization. Requires tenant admin or super admin permissions. The newly created user will receive a password reset email to set up their account.
      operationId: createUser
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: User email address (must be unique)
                  example: john.doe@example.com
                first_name:
                  type: string
                  description: User first name (maximum 255 characters)
                  example: John
                last_name:
                  type: string
                  description: User last name (maximum 255 characters)
                  example: Doe
                title:
                  type: string
                  description: User title (optional, maximum 255 characters)
                  example: Senior Analyst
                status:
                  type: string
                  description: User status (optional, defaults to 'active')
                  enum:
                  - active
                  - inactive
                  example: active
                access_level:
                  type: array
                  description: Array of access levels defining user permissions
                  items:
                    type: object
                    properties:
                      role_id:
                        type: string
                        description: Role ID to assign
                      role_organization_ids:
                        type: array
                        description: Array of organization IDs this role applies to
                        items:
                          type: string
                    required:
                    - role_id
                    - role_organization_ids
                  example:
                  - role_id: role_123
                    role_organization_ids:
                    - org_456
                    - org_789
              required:
              - email
              - first_name
              - last_name
              - access_level
      responses:
        '201':
          description: Success - User created. A password reset email has been sent to the user.
          content:
            application/json:
              schema:
                type: object
                properties:
                  user_id:
                    type: string
                    description: The unique identifier for the newly created user
                  email:
                    type: string
                    description: User email address
                  first_name:
                    type: string
                    description: User first name
                  last_name:
                    type: string
                    description: User last name
                  status:
                    type: string
                    description: User status
              example:
                user_id: user_987654
                email: john.doe@example.com
                first_name: John
                last_name: Doe
                status: active
        '400':
          description: Bad Request - Invalid input or email already exists
        '403':
          description: Forbidden - Insufficient permissions. Requires tenant admin or super admin role.
      x-codeSamples:
      - lang: bash
        label: Bash
        source: "curl -X POST \\\n          \"https://api.canoesoftware.com/v1/user\" \\\n          -H \"Authorization: Bearer {token}\" \\\n          -H \"Accept: application/json\" \\\n          -H \"X-Requested-With: XMLHttpRequest\" \\\n          -H \"Content-Type: application/json\" \\\n          -d '{\"email\":\"john.doe@example.com\",\"first_name\":\"John\",\"last_name\":\"Doe\",\"title\":\"Senior Analyst\",\"status\":\"active\",\"access_level\":[{\"role_id\":\"role_123\",\"role_organization_ids\":[\"org_456\",\"org_789\"]}]}'"
      - lang: javascript
        label: JavaScript
        source: "const url = new URL(\n          \"https://api.canoesoftware.com/v1/user\"\n      );\n\n      let headers = {\n          \"Authorization\": \"Bearer {token}\",\n          \"Accept\": \"application/json\",\n          \"X-Requested-With\": \"XMLHttpRequest\",\n          \"Content-Type\": \"application/json\",\n      };\n\n      let body = {\n          \"email\": \"john.doe@example.com\",\n          \"first_name\": \"John\",\n          \"last_name\": \"Doe\",\n          \"title\": \"Senior Analyst\",\n          \"status\": \"active\",\n          \"access_level\": [\n              {\n                  \"role_id\": \"role_123\",\n                  \"role_organization_ids\": [\"org_456\", \"org_789\"]\n              }\n          ]\n      };\n\n      fetch(url, {\n          method: \"POST\",\n          headers: headers,\n          body: JSON.stringify(body)\n      })\n      .then(response => response.json())\n      .then(json => console.log(json));"
      - lang: php
        label: PHP
        source: "$client = new \\GuzzleHttp\\Client();\n      $response = $client->post(\n          'https://api.canoesoftware.com/v1/user',\n          [\n              'headers' => [\n                  'Authorization' => 'Bearer {token}',\n                  'Accept' => 'application/json',\n                  'X-Requested-With' => 'XMLHttpRequest',\n                  'Content-Type' => 'application/json',\n              ],\n              'json' => [\n                  'email' => 'john.doe@example.com',\n                  'first_name' => 'John',\n                  'last_name' => 'Doe',\n                  'title' => 'Senior Analyst',\n                  'status' => 'active',\n                  'access_level' => [\n                      [\n                          'role_id' => 'role_123',\n                          'role_organization_ids' => ['org_456', 'org_789'],\n                      ],\n                  ],\n              ],\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/v1/user'\n      headers = {\n        'Authorization': 'Bearer {token}',\n        'Accept': 'application/json',\n        'X-Requested-With': 'XMLHttpRequest',\n        'Content-Type': 'application/json'\n      }\n      body = {\n        'email': 'john.doe@example.com',\n        'first_name': 'John',\n        'last_name': 'Doe',\n        'title': 'Senior Analyst',\n        'status': 'active',\n        'access_level': [\n          {\n            'role_id': 'role_123',\n            'role_organization_ids': ['org_456', 'org_789']\n          }\n        ]\n      }\n      response = requests.post(url, headers=headers, json=body)\n      response.json()"
      - lang: csharp
        label: CSharp
        source: "using RestSharp;\n      using Newtonsoft.Json;\n\n      var client = new RestClient(\"https://api.canoesoftware.com/\");\n      var request = new RestRequest(\"v1/user\", Method.Post);\n      request.AddParameter(\"Authorization\", string.Format(\"Bearer {token}\"), ParameterType.HttpHeader);\n      request.AddHeader(\"Accept\", \"application/json\");\n      request.AddHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n      request.AddHeader(\"Content-Type\", \"application/json\");\n      var body = new\n      {\n        email = \"john.doe@example.com\",\n        first_name = \"John\",\n        last_name = \"Doe\",\n        title = \"Senior Analyst\",\n        status = \"active\",\n        access_level = new[]\n        {\n          new { role_id = \"role_123\", role_organization_ids = new[] { \"org_456\", \"org_789\" } }\n        }\n      };\n      request.AddJsonBody(body);\n      var response = client.Execute(request);\n      Console.WriteLine(response.Content);"
  /v1/users:
    get:
      tags:
      - User
      summary: Get Users Within Your Organization
      description: "Fetch information about users within your Canoe organization.\n\n<span name=\"doc-alert-info\">\nThis endpoint offers optional pagination. \nPagination supports the return of large results and is highly recommended for all use cases. \nUnpaginated calls will be depreciated in future versions of the Canoe API.\n<br><br>\nWhen using pagination, the response will contain headers defining the <code>total</code> number of results, \nas well as the <code>first</code>, <code>next</code>, <code>prev</code>, and <code>last</code> page responses for your result set. \nTo enable pagination pass a header parameter of X-API-VERSION with a value of 2024-12-12.\n</span>"
      operationId: findByTags
      parameters:
      - name: page
        in: query
        description: 'This page number. For example, if you specify "2" you will see all users on page 2. By default, this is set to 1. <u>This parameter is only valid if the X-API-VERSION header is set to 2024-12-12.</u> Example: 1'
        required: false
        schema:
          type: integer
        examples:
          page 1:
            value: 1
          page 5:
            value: 5
      - name: limit
        in: query
        description: 'The number of documents for each page. The maximum number of users limit is 100. <u>This parameter is only valid if the X-API-VERSION header is set to 2024-12-12.</u> Example: 50'
        required: false
        schema:
          type: integer
        examples:
          limit:
            value: 50
      - name: user_id
        in: query
        description: 'The IDs of the users in Canoe. Example: user_1,user_2'
        required: false
        schema:
          type: string
        examples:
          user 1:
            value: user_1
          user 2:
            value: user_2
      - name: email_id
        in: query
        description: 'The emails of the users in Canoe. Example: user_1@example.com,user_2@example.com'
        required: false
        schema:
          type: string
        examples:
          user 1 email address:
            value: user_1@example.com
          user 2 email address:
            value: user_2@example.com
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Users'
      x-codeSamples:
      - lang: bash
        label: Bash
        source: "curl -X GET \\\n          -G \"https://api.canoesoftware.com/v1/users?user_id=user_1%2Cuser_2&email=user_1%40example.com%2Cuser_2%40example.com\" \\\n          -H \"Authorization: Bearer {token}\" \\\n          -H \"Accept: application/json\" \\\n          -H \"X-Requested-With: XMLHttpRequest\""
      - lang: javascript
        label: JavaScript
        source: "const url = new URL(\n          \"https://api.canoesoftware.com/v1/user\"\n      );\n\n      let headers = {\n          \"Authorization\": \"Bearer {token}\",\n          \"Accept\": \"application/json\",\n          \"X-Requested-With\": \"XMLHttpRequest\",\n          \"Content-Type\": \"application/json\",\n      };\n\n      fetch(url, {\n          method: \"GET\",\n          headers: headers,\n      })\n          .then(response => response.json())\n          .then(json => console.log(json));"
      - lang: php
        label: PHP
        source: "$client = new \\GuzzleHttp\\Client();\n      $response = $client->get(\n          'https://api.canoesoftware.com/v1/user',\n          [\n              'headers' => [\n                  'Authorization' => 'Bearer {token}',\n                  'Accept' => 'application/json',\n                  'X-Requested-With' => 'XMLHttpRequest',\n              ],\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/v1/user'\n      headers = {\n        'Authorization': 'Bearer {token}',\n        'Accept': 'application/json',\n        'X-Requested-With': 'XMLHttpRequest'\n      }\n      response = requests.request('GET', url, headers=headers)\n      response.json()"
      - lang: csharp
        label: CSharp
        source: "using RestSharp;\n\n      var client = new RestClient(\"https://api.canoesoftware.com/\");\n      var request = new RestRequest(\"v1/user\", Method.Get);\n      request.AddParameter(\"Authorization\", string.Format(\"Bearer {token}\"), ParameterType.HttpHeader);\n      request.AddHeader(\"Accept\", \"application/json\");\n      request.AddHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n      var response = client.Execute(request);\n      Console.WriteLine(response.Content);"
  /v1/users/{id}:
    put:
      tags:
      - User
      summary: Update User
      description: Update an existing user within your organization. Requires tenant admin or super admin permissions. All fields are optional - only include the fields you want to update.
      operationId: updateUser
      parameters:
      - name: id
        in: path
        description: The unique identifier of the user
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: User email address (must be unique, maximum 255 characters)
                  example: updated.email@example.com
                status:
                  type: string
                  description: User status
                  enum:
                  - active
                  - inactive
                  example: active
                access_level:
                  type: array
                  description: Array of access levels defining user permissions
                  items:
                    type: object
                    properties:
                      role_id:
                        type: string
                        description: Role ID to assign
                      role_organization_ids:
                        type: array
                        description: Array of organization IDs this role applies to
                        items:
                          type: string
                    required:
                    - role_id
                    - role_organization_ids
                  example:
                  - role_id: role_123
                    role_organization_ids:
                    - org_456
                    - org_789
      responses:
        '200':
          description: Success - User updated
          content:
            application/json:
              schema:
                type: object
                properties:
                  user_id:
                    type: string
                    description: The unique identifier for the user
                  email:
                    type: string
                    description: User email address
                  first_name:
                    type: string
                    description: User first name
                  last_name:
                    type: string
                    description: User last name
                  status:
                    type: string
                    description: User status
              example:
                user_id: user_123456
                email: updated.email@example.com
                first_name: John
                last_name: Doe
                status: active
        '400':
          description: Bad Request - Invalid input or email already exists
        '403':
          description: Forbidden - Insufficient permissions. Requires tenant admin or super admin role.
        '404':
          description: Not Found - User not found
      x-codeSamples:
      - lang: bash
        label: Bash
        source: "curl -X PUT \\\n          \"https://api.canoesoftware.com/v1/users/user_123456\" \\\n          -H \"Authorization: Bearer {token}\" \\\n          -H \"Accept: application/json\" \\\n          -H \"X-Requested-With: XMLHttpRequest\" \\\n          -H \"Content-Type: application/json\" \\\n          -d '{\"email\":\"updated.email@example.com\",\"status\":\"active\",\"access_level\":[{\"role_id\":\"role_123\",\"role_organization_ids\":[\"org_456\",\"org_789\"]}]}'"
      - lang: javascript
        label: JavaScript
        source: "const url = new URL(\n          \"https://api.canoesoftware.com/v1/users/user_123456\"\n      );\n\n      let headers = {\n          \"Authorization\": \"Bearer {token}\",\n          \"Accept\": \"application/json\",\n          \"X-Requested-With\": \"XMLHttpRequest\",\n          \"Content-Type\": \"application/json\",\n      };\n\n      let body = {\n          \"email\": \"updated.email@example.com\",\n          \"status\": \"active\",\n          \"access_level\": [\n              {\n                  \"role_id\": \"role_123\",\n                  \"role_organization_ids\": [\"org_456\", \"org_789\"]\n              }\n          ]\n      };\n\n      fetch(url, {\n          method: \"PUT\",\n          headers: headers,\n          body: JSON.stringify(body)\n      })\n      .then(response => response.json())\n      .then(json => console.log(json));"
      - lang: php
        label: PHP
        source: "$client = new \\GuzzleHttp\\Client();\n      $response = $client->put(\n          'https://api.canoesoftware.com/v1/users/user_123456',\n          [\n              'headers' => [\n                  'Authorization' => 'Bearer {token}',\n                  'Accept' => 'application/json',\n                  'X-Requested-With' => 'XMLHttpRequest',\n                  'Content-Type' => 'application/json',\n              ],\n              'json' => [\n                  'email' => 'updated.email@example.com',\n                  'status' => 'active',\n                  'access_level' => [\n                      [\n                          'role_id' => 'role_123',\n                          'role_organization_ids' => ['org_456', 'org_789'],\n                      ],\n                  ],\n              ],\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/v1/users/user_123456'\n      headers = {\n        'Authorization': 'Bearer {token}',\n        'Accept': 'application/json',\n        'X-Requested-With': 'XMLHttpRequest',\n        'Content-Type': 'application/json'\n      }\n      body = {\n        'email': 'updated.email@example.com',\n        'status': 'active',\n        'access_level': [\n          {\n            'role_id': 'role_123',\n            'role_organization_ids': ['org_456', 'org_789']\n          }\n        ]\n      }\n      response = requests.put(url, headers=headers, json=body)\n      response.json()"
      - lang: csharp
        label: CSharp
        source: "using RestSharp;\n      using Newtonsoft.Json;\n\n      var client = new RestClient(\"https://api.canoesoftware.com/\");\n      var request = new RestRequest(\"v1/users/user_123456\", Method.Put);\n      request.AddParameter(\"Authorization\", string.Format(\"Bearer {token}\"), ParameterType.HttpHeader);\n      request.AddHeader(\"Accept\", \"application/json\");\n      request.AddHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n      request.AddHeader(\"Content-Type\", \"application/json\");\n      var body = new\n      {\n        email = \"updated.email@example.com\",\n        status = \"active\",\n        access_level = new[]\n        {\n          new { role_id = \"role_123\", role_organization_ids = new[] { \"org_456\", \"org_789\" } }\n        }\n      };\n      request.AddJsonBody(body);\n      var response = client.Execute(request);\n      Console.WriteLine(response.Content);"
  /v1/users/roles:
    get:
      tags:
      - User
      summary: Get User Roles
      description: Get available user roles within your organization. Requires tenant admin or super admin permissions. Returns a list of roles that can be assigned when creating or updating users.
      operationId: getUserRoles
      responses:
        '200':
          description: Success - Returns list of available roles
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    role_id:
                      type: string
                      description: The unique identifier for the role
                    access_level_name:
                      type: string
                      description: The display name of the role/access level
              example:
              - role_id: role_123
                access_level_name: Organization Admin
              - role_id: role_456
                access_level_name: Fund Manager
              - role_id: role_789
                access_level_name: Viewer
        '403':
          description: Forbidden - Insufficient permissions. Requires tenant admin or super admin role.
      x-codeSamples:
      - lang: bash
        label: Bash
        source: "curl -X GET \\\n          -G \"https://api.canoesoftware.com/v1/users/roles\" \\\n          -H \"Authorization: Bearer {token}\" \\\n          -H \"Accept: application/json\" \\\n          -H \"X-Requested-With: XMLHttpRequest\""
      - lang: javascript
        label: JavaScript
        source: "const url = new URL(\n          \"https://api.canoesoftware.com/v1/users/roles\"\n      );\n\n      let headers = {\n          \"Authorization\": \"Bearer {token}\",\n          \"Accept\": \"application/json\",\n          \"X-Requested-With\": \"XMLHttpRequest\",\n          \"Content-Type\": \"application/json\",\n      };\n\n      fetch(url, {\n          method: \"GET\",\n          headers: headers,\n      })\n      .then(response => response.json())\n      .then(json => console.log(json));"
      - lang: php
        label: PHP
        source: "$client = new \\GuzzleHttp\\Client();\n      $response = $client->get(\n          'https://api.canoesoftware.com/v1/users/roles',\n          [\n              'headers' => [\n                  'Authorization' => 'Bearer {token}',\n                  'Accept' => 'application/json',\n                  'X-Requested-With' => 'XMLHttpRequest',\n              ],\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/v1/users/roles'\n      headers = {\n        'Authorization': 'Bearer {token}',\n        'Accept': 'application/json',\n        'X-R

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