List Connections
curl --request GET \
--url https://app.thinnest.ai/api/v1/agents/{id}/connections \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.thinnest.ai/api/v1/agents/{id}/connections', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.thinnest.ai/api/v1/agents/{id}/connections"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"items": [
{
"kind": "calcom",
"name": "Cal.com",
"signIn": "key",
"available": true,
"connected": true,
"account": {
"email": "frontdesk@sunrisedental.in",
"name": "Sunrise Dental"
},
"timezone": "Asia/Kolkata",
"lastError": null,
"tools": [
{
"id": "calcom_list_event_types",
"title": "See what can be booked",
"summary": "See what can be booked.",
"writes": false,
"enabled": true,
"phrases": {
"before": null,
"after": null
}
},
{
"id": "calcom_check_availability",
"title": "Check when you are free",
"summary": "Check when you are free.",
"writes": false,
"enabled": true,
"phrases": {
"before": "Let me look at the calendar.",
"after": null
}
},
{
"id": "calcom_hold_slot",
"title": "Hold a slot while you talk",
"summary": "Hold a slot while you talk.",
"writes": true,
"enabled": false,
"phrases": {
"before": null,
"after": null
}
},
{
"id": "calcom_book_meeting",
"title": "Book the meeting",
"summary": "Book the meeting.",
"writes": true,
"enabled": true,
"phrases": {
"before": null,
"after": null
}
},
{
"id": "calcom_find_booking",
"title": "Find their existing booking",
"summary": "Find their existing booking.",
"writes": false,
"enabled": false,
"phrases": {
"before": null,
"after": null
}
},
{
"id": "calcom_reschedule_booking",
"title": "Move a booking",
"summary": "Move a booking.",
"writes": true,
"enabled": false,
"phrases": {
"before": null,
"after": null
}
},
{
"id": "calcom_cancel_booking",
"title": "Cancel a booking",
"summary": "Cancel a booking.",
"writes": true,
"enabled": false,
"phrases": {
"before": null,
"after": null
}
}
]
},
{
"kind": "grist",
"name": "Grist",
"signIn": "key",
"available": true,
"connected": true,
"account": {
"email": "ops@greenleafrealty.in",
"name": null
},
"lastError": null,
"mode": "tool",
"runAsync": false,
"target": {
"doc": "8xQm2KvTzR4pLw",
"table": "Site_Visits",
"columns": [
"Name",
"Phone",
"Budget",
"Locality",
"Visit_Date"
]
},
"match": {
"column": "Phone",
"type": "phone"
},
"variableColumns": {
"Locality": "locality"
},
"tools": [
{
"id": "grist_save_row",
"title": "Fill in a row",
"summary": "Adds or fills the lead's row in your table as the conversation goes.",
"writes": true,
"enabled": true,
"phrases": {
"before": null,
"after": null
}
},
{
"id": "grist_find_rows",
"title": "Look something up",
"summary": "Reads rows from your table to answer a question.",
"writes": false,
"enabled": false,
"phrases": {
"before": null,
"after": null
}
}
]
},
{
"kind": "googlesheets",
"name": "Google Sheets",
"signIn": "browser",
"available": true,
"connected": false,
"signInPending": false,
"account": null,
"lastError": null,
"mode": "tool",
"target": {
"spreadsheet": null,
"sheet": null,
"columns": []
},
"match": null,
"variableColumns": {},
"tools": []
},
{
"kind": "records",
"name": "Records here",
"signIn": "none",
"available": true,
"connected": true,
"account": null,
"lastError": null,
"mode": "tool",
"tools": [
{
"id": "record_save_row",
"title": "Fill in a record",
"summary": "Fills in this conversation's record with the details you asked for.",
"writes": true,
"enabled": true,
"phrases": {
"before": null,
"after": null
}
}
],
"fields": [
{
"id": "Name",
"label": "Name",
"description": null
},
{
"id": "City",
"label": "City",
"description": "where they live"
},
{
"id": "Budget",
"label": "Budget",
"description": "in lakhs"
}
],
"recordCount": 214,
"link": {
"url": "https://app.thinnest.ai/r/k7Qm2xVb9TzPq4Lw",
"hasPasscode": true
}
},
{
"kind": "zendesk",
"name": "Zendesk",
"signIn": "key",
"available": true,
"connected": true,
"account": {
"host": "urbanloom.zendesk.com",
"email": "support@urbanloom.in"
},
"enabled": true,
"lastError": null
}
],
"toolsInUse": 5,
"maxTools": 500
}{
"error": "Send a valid API key as `Authorization: Bearer <key>`."
}{
"error": "That agent was not found."
}{
"error": "Over 240 requests a minute. Slow down and retry."
}Tools
List Connections
Every account the agent can work in, connected or not — a calendar, two spreadsheets, two CRMs, records kept here and two helpdesks — each with its state, what it is pinned to and its tools. toolsInUse / maxTools is the one budget every connection’s switches share. Credentials never appear.
GET
/
agents
/
{id}
/
connections
List Connections
curl --request GET \
--url https://app.thinnest.ai/api/v1/agents/{id}/connections \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.thinnest.ai/api/v1/agents/{id}/connections', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.thinnest.ai/api/v1/agents/{id}/connections"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"items": [
{
"kind": "calcom",
"name": "Cal.com",
"signIn": "key",
"available": true,
"connected": true,
"account": {
"email": "frontdesk@sunrisedental.in",
"name": "Sunrise Dental"
},
"timezone": "Asia/Kolkata",
"lastError": null,
"tools": [
{
"id": "calcom_list_event_types",
"title": "See what can be booked",
"summary": "See what can be booked.",
"writes": false,
"enabled": true,
"phrases": {
"before": null,
"after": null
}
},
{
"id": "calcom_check_availability",
"title": "Check when you are free",
"summary": "Check when you are free.",
"writes": false,
"enabled": true,
"phrases": {
"before": "Let me look at the calendar.",
"after": null
}
},
{
"id": "calcom_hold_slot",
"title": "Hold a slot while you talk",
"summary": "Hold a slot while you talk.",
"writes": true,
"enabled": false,
"phrases": {
"before": null,
"after": null
}
},
{
"id": "calcom_book_meeting",
"title": "Book the meeting",
"summary": "Book the meeting.",
"writes": true,
"enabled": true,
"phrases": {
"before": null,
"after": null
}
},
{
"id": "calcom_find_booking",
"title": "Find their existing booking",
"summary": "Find their existing booking.",
"writes": false,
"enabled": false,
"phrases": {
"before": null,
"after": null
}
},
{
"id": "calcom_reschedule_booking",
"title": "Move a booking",
"summary": "Move a booking.",
"writes": true,
"enabled": false,
"phrases": {
"before": null,
"after": null
}
},
{
"id": "calcom_cancel_booking",
"title": "Cancel a booking",
"summary": "Cancel a booking.",
"writes": true,
"enabled": false,
"phrases": {
"before": null,
"after": null
}
}
]
},
{
"kind": "grist",
"name": "Grist",
"signIn": "key",
"available": true,
"connected": true,
"account": {
"email": "ops@greenleafrealty.in",
"name": null
},
"lastError": null,
"mode": "tool",
"runAsync": false,
"target": {
"doc": "8xQm2KvTzR4pLw",
"table": "Site_Visits",
"columns": [
"Name",
"Phone",
"Budget",
"Locality",
"Visit_Date"
]
},
"match": {
"column": "Phone",
"type": "phone"
},
"variableColumns": {
"Locality": "locality"
},
"tools": [
{
"id": "grist_save_row",
"title": "Fill in a row",
"summary": "Adds or fills the lead's row in your table as the conversation goes.",
"writes": true,
"enabled": true,
"phrases": {
"before": null,
"after": null
}
},
{
"id": "grist_find_rows",
"title": "Look something up",
"summary": "Reads rows from your table to answer a question.",
"writes": false,
"enabled": false,
"phrases": {
"before": null,
"after": null
}
}
]
},
{
"kind": "googlesheets",
"name": "Google Sheets",
"signIn": "browser",
"available": true,
"connected": false,
"signInPending": false,
"account": null,
"lastError": null,
"mode": "tool",
"target": {
"spreadsheet": null,
"sheet": null,
"columns": []
},
"match": null,
"variableColumns": {},
"tools": []
},
{
"kind": "records",
"name": "Records here",
"signIn": "none",
"available": true,
"connected": true,
"account": null,
"lastError": null,
"mode": "tool",
"tools": [
{
"id": "record_save_row",
"title": "Fill in a record",
"summary": "Fills in this conversation's record with the details you asked for.",
"writes": true,
"enabled": true,
"phrases": {
"before": null,
"after": null
}
}
],
"fields": [
{
"id": "Name",
"label": "Name",
"description": null
},
{
"id": "City",
"label": "City",
"description": "where they live"
},
{
"id": "Budget",
"label": "Budget",
"description": "in lakhs"
}
],
"recordCount": 214,
"link": {
"url": "https://app.thinnest.ai/r/k7Qm2xVb9TzPq4Lw",
"hasPasscode": true
}
},
{
"kind": "zendesk",
"name": "Zendesk",
"signIn": "key",
"available": true,
"connected": true,
"account": {
"host": "urbanloom.zendesk.com",
"email": "support@urbanloom.in"
},
"enabled": true,
"lastError": null
}
],
"toolsInUse": 5,
"maxTools": 500
}{
"error": "Send a valid API key as `Authorization: Bearer <key>`."
}{
"error": "That agent was not found."
}{
"error": "Over 240 requests a minute. Slow down and retry."
}Authorizations
Your API key (ta_live_…) from Settings → API keys, sent as Authorization: Bearer <key>. Keep it on a server: it can message every customer you have. A key is full, build or read-only; a request its level does not allow is refused with 403.
Headers
Developers only: the customer workspace this request acts in — its org_… id from POST /customers. Leave it out to act in your own workspace.
Example:
"org_3fKq9TzQ1mN8vB2xR7cLpA"
Path Parameters
The agent's id (ag_…).
Response
Every connection.