What connecting this app asks of me
curl --request GET \
--url https://api.devic.ai/v1/tenant-integrations/{app}/auth \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.devic.ai/v1/tenant-integrations/{app}/auth"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.devic.ai/v1/tenant-integrations/{app}/auth', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.devic.ai/v1/tenant-integrations/{app}/auth",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.devic.ai/v1/tenant-integrations/{app}/auth"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.devic.ai/v1/tenant-integrations/{app}/auth")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.devic.ai/v1/tenant-integrations/{app}/auth")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"schemes": [
{
"mode": "API_KEY",
"composioManaged": true,
"redirect": true,
"appFields": [
{
"name": "generic_api_key",
"label": "API key",
"type": "string",
"required": true,
"secret": true,
"description": "<string>",
"default": "<string>"
}
],
"accountFields": [
{
"name": "generic_api_key",
"label": "API key",
"type": "string",
"required": true,
"secret": true,
"description": "<string>",
"default": "<string>"
}
],
"guideUrl": "<string>"
}
]
}Tenant Integrations
What connecting this app asks of me
The schemes the app supports and the fields to send as accountFields. Apps that authenticate with an API key are connected without ever leaving the page; only redirect schemes open a popup.
GET
/
v1
/
tenant-integrations
/
{app}
/
auth
What connecting this app asks of me
curl --request GET \
--url https://api.devic.ai/v1/tenant-integrations/{app}/auth \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.devic.ai/v1/tenant-integrations/{app}/auth"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.devic.ai/v1/tenant-integrations/{app}/auth', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.devic.ai/v1/tenant-integrations/{app}/auth",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.devic.ai/v1/tenant-integrations/{app}/auth"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.devic.ai/v1/tenant-integrations/{app}/auth")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.devic.ai/v1/tenant-integrations/{app}/auth")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"schemes": [
{
"mode": "API_KEY",
"composioManaged": true,
"redirect": true,
"appFields": [
{
"name": "generic_api_key",
"label": "API key",
"type": "string",
"required": true,
"secret": true,
"description": "<string>",
"default": "<string>"
}
],
"accountFields": [
{
"name": "generic_api_key",
"label": "API key",
"type": "string",
"required": true,
"secret": true,
"description": "<string>",
"default": "<string>"
}
],
"guideUrl": "<string>"
}
]
}Authorizations
An API key from your Devic console, sent as Authorization: Bearer <key>. An embedded front end sends a tenant-session token instead, so no API key reaches the browser, and an OAuth integration sends its access token. Missing, invalid or expired credentials get a 401. See Authentication.