Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/canoe-intelligence-password-grant-tokens-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Canoe Intelligence Password Grant Tokens API
version: '1.0'
description: 'Operations tagged Password Grant Tokens across 3 of this provider''s published API definitions: canoe-intelligence-api-docs-v1-original.yaml, canoe-intelligence-api-openapi-original.json, canoe-intelligence-api-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.canoesoftware.com
description: Production API
tags:
- name: Password Grant Tokens
description: ''
paths:
Get an access token:
post:
tags:
- Password Grant Tokens
summary: null
description: '/v1/tokens
Access tokens provide access to all other endpoints within the API. This endpoint allows you to request access tokens securely without going through the OAuth2 authorization code redirect flow.
'
operationId: Tokens
parameters:
- name: username
in: body
description: Your username. This will be the email address associated with your account.
required: true
schema:
type: string
example:
username: abc@xyz.com
- name: password
in: body
description: Your password.
required: true
schema:
type: string
example:
password: ab**9Pe+_.^3a!@~yql
- name: organization_id
in: body
description: The organization you would like to be authenticated under (this is required if your user has access to multiple organizations).
required: false
schema:
type: string
example:
organization_id: account_1
requestBody:
content:
application/json:
schema:
type: string
examples:
bash:
description: "-\n curl -X POST \\\n \"https://api.canoesoftware.com/v1/tokens\" \\\n -H \"Authorization: Bearer {token}\" \\\n -H \"Accept: application/json\" \\\n -H \"X-Requested-With: XMLHttpRequest\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"username\":\"abc@xyz.com\",\"password\":\"ab**9Pe+_.^3a!@~yql\"}'\n"
summary: Bash
Javascript:
description: "-\n const url = new URL(\n \"https://api.canoesoftware.com/v1/tokens\"\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 \"username\": \"abc@xyz.com\",\n \"password\": \"ab**9Pe+_.^3a!@~yql\"\n }\n\n fetch(url, {\n method: \"POST\",\n headers: headers,\n body: body\n })\n .then(response => response.json())\n .then(json => console.log(json));\n"
summary: JavaScript
PHP:
description: "-\n $client = new \\GuzzleHttp\\Client();\n $response = $client->post(\n 'https://api.canoesoftware.com/v1/tokens',\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 'username' => 'abc@xyz.com',\n 'password' => 'ab**9Pe+_.^3a!@~yql',\n ],\n ]\n );\n $body = $response->getBody();\n print_r(json_decode((string) $body));\n"
summary: PHP
Python:
description: "-\n import requests\n import json\n\n url = 'https://api.canoesoftware.com/v1/tokens'\n payload = {\n \"username\": \"abc@xyz.com\",\n \"password\": \"ab**9Pe+_.^3a!@~yql\"\n }\n headers = {\n 'Authorization': 'Bearer {token}',\n 'Accept': 'application/json',\n 'X-Requested-With': 'XMLHttpRequest',\n 'Content-Type': 'application/json'\n }\n response = requests.request('POST', url, headers=headers, json=payload)\n response.json()\n"
summary: Python
CSharp:
description: "-\n using RestSharp;\n\n var client = new RestClient(\"https://api.canoesoftware.com/\");\n var request = new RestRequest(\"v1/tokens\", Method.Post);\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 username = \"abc@xyz.com\",\n password = \"ab**9Pe+_.^3a!@~yql\"\n };\n request.AddJsonBody(body);\n var response = client.Execute(request);\n Console.WriteLine(response.Content);\n"
summary: CSharp
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Token'
/v1/tokens:
post:
tags:
- Password Grant Tokens
summary: Get an access token
description: Access tokens provide access to all other endpoints within the API. This endpoint allows you to request access tokens securely without going through the OAuth2 authorization code redirect flow.
operationId: Tokens
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
username:
type: string
description: Your username. This will be the email address associated with your account.
example: abc@xyz.com
password:
type: string
description: Your password.
example: ab**9Pe+_.^3a!@~yql
organization_id:
type: string
description: The organization you would like to be authenticated under (this is required if your user has access to multiple organizations).
example: account_1
required:
- username
- password
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Token'
x-codeSamples:
- lang: bash
label: Bash
source: "curl -X POST \\\n \"https://api.canoesoftware.com/v1/tokens\" \\\n -H \"Authorization: Bearer {token}\" \\\n -H \"Accept: application/json\" \\\n -H \"X-Requested-With: XMLHttpRequest\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"username\":\"abc@xyz.com\",\"password\":\"ab**9Pe+_.^3a!@~yql\"}'"
- lang: javascript
label: JavaScript
source: "const url = new URL(\n \"https://api.canoesoftware.com/v1/tokens\"\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 \"username\": \"abc@xyz.com\",\n \"password\": \"ab**9Pe+_.^3a!@~yql\"\n }\n\n fetch(url, {\n method: \"POST\",\n headers: headers,\n body: 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/tokens',\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 'username' => 'abc@xyz.com',\n 'password' => 'ab**9Pe+_.^3a!@~yql',\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/tokens'\n payload = {\n \"username\": \"abc@xyz.com\",\n \"password\": \"ab**9Pe+_.^3a!@~yql\"\n }\n headers = {\n 'Authorization': 'Bearer {token}',\n 'Accept': 'application/json',\n 'X-Requested-With': 'XMLHttpRequest',\n 'Content-Type': 'application/json'\n }\n response = requests.request('POST', url, headers=headers, json=payload)\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/tokens\", Method.Post);\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 username = \"abc@xyz.com\",\n password = \"ab**9Pe+_.^3a!@~yql\"\n };\n request.AddJsonBody(body);\n var response = client.Execute(request);\n Console.WriteLine(response.Content);"
security: []
servers:
- url: https://api.canoesoftware.com
description: Production API
components:
schemas:
Token:
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: 3600
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-QeMHn5K5Q7zJx08pzOUXWm_W4pfO7FIwzaHoOEtFmorSihnw7gzDddwASwMzhYgqF839J7CLa_mq6YV53oMP2eCOKX0jN-dd
Eg4Gt6yYkVbh54yOsbztc4P1waUJ4JnJsBV2GdWd
xnB0bhx6QFhj4HrnkQzx1GScFjRzKPHJGGmN9e-6wCEb7TXncbtnuu-8YxCbG5IUfc25BlBtMeqURE1A6Pa7YciBJoPLlEDUAJ8HwfSHspxDkuPhz1ospacDJgl
xHn18Mrkt8lukwIL7dfhM9Wm2b6ZBJrKngFdkFV9ALFImjBwqk2SZVfhLMYvhTG36qGqI7e7uw_SyU2lPiN2MQcVpdaSd0NkCLqGAkRRwuDCaHBfZ35TJguJXHdJuRMDoghUAhYgAwqp7OU1FtgX1gmt5tok'
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: 'Enter your Bearer token in the format: Bearer {token}'
oauth2:
type: oauth2
description: OAuth 2.0 authentication
flows:
authorizationCode:
authorizationUrl: https://api.canoesoftware.com/oauth/authorize
tokenUrl: https://api.canoesoftware.com/oauth/token
scopes: {}
clientCredentials:
tokenUrl: https://api.canoesoftware.com/v1/tokens
scopes: {}
externalDocs:
description: Click to download docs in JSON format
url: /api/docs.json
x-refined-from:
- canoe-intelligence-api-docs-v1-original.yaml
- canoe-intelligence-api-openapi-original.json
- canoe-intelligence-api-openapi.yml
x-tagGroups:
- name: Getting Started
tags:
- Introduction
- Authentication
- Password Grant Tokens
- name: Core Resources
tags:
- Documents
- Funds
- Terms
- Organizations
- Allocations
- Custom Fields
- name: User Management
tags:
- User