curl --request GET \
--url https://api.onecli.sh/v1/apps/{provider} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.onecli.sh/v1/apps/{provider}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.onecli.sh/v1/apps/{provider}', 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.onecli.sh/v1/apps/{provider}",
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.onecli.sh/v1/apps/{provider}"
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.onecli.sh/v1/apps/{provider}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.onecli.sh/v1/apps/{provider}")
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{
"id": "<string>",
"name": "<string>",
"available": true,
"connectionType": "oauth",
"configurable": true,
"config": {
"hasCredentials": true,
"enabled": true,
"source": "organization"
},
"connection": {
"status": "<string>",
"scopes": [
"<string>"
],
"connectedAt": "2023-11-07T05:31:56Z"
},
"connections": [
{
"id": "<string>",
"label": "<string>",
"status": "<string>",
"scopes": [
"<string>"
],
"connectedAt": "2023-11-07T05:31:56Z"
}
],
"credentialStubs": [
{
"path": "<string>",
"content": {}
}
],
"hint": "<string>"
}{
"error": "<string>"
}Get an app
One app with its connections in the current workspace and a human-readable hint on what to do next.
curl --request GET \
--url https://api.onecli.sh/v1/apps/{provider} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.onecli.sh/v1/apps/{provider}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.onecli.sh/v1/apps/{provider}', 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.onecli.sh/v1/apps/{provider}",
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.onecli.sh/v1/apps/{provider}"
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.onecli.sh/v1/apps/{provider}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.onecli.sh/v1/apps/{provider}")
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{
"id": "<string>",
"name": "<string>",
"available": true,
"connectionType": "oauth",
"configurable": true,
"config": {
"hasCredentials": true,
"enabled": true,
"source": "organization"
},
"connection": {
"status": "<string>",
"scopes": [
"<string>"
],
"connectedAt": "2023-11-07T05:31:56Z"
},
"connections": [
{
"id": "<string>",
"label": "<string>",
"status": "<string>",
"scopes": [
"<string>"
],
"connectedAt": "2023-11-07T05:31:56Z"
}
],
"credentialStubs": [
{
"path": "<string>",
"content": {}
}
],
"hint": "<string>"
}{
"error": "<string>"
}Authorizations
A workspace API key (oc_…) or organization API key (oc_org_…). Workspace-scoped endpoints called with an organization key also need X-Workspace-Id.
Path Parameters
App provider identifier (for example gmail, github, jira).
Response
The app
Always true. Kept for older clients that read a missing field as false.
oauth, credentials_import, api_key, cloud_only Whether the app accepts your own OAuth client credentials (POST /apps/{provider}/config).
Show child attributes
Show child attributes
The first connection only. Misleading for multi-account providers; read connections instead.
Show child attributes
Show child attributes
All of the provider's connections in the current workspace.
Show child attributes
Show child attributes
Local credential stub files some MCP servers need before they can start (secrets replaced with onecli-managed placeholders).
Show child attributes
Show child attributes
A human-readable next step — how to create credential stubs when the app is configured, or where to configure it when it is not.