Search cards on the board
Paginated, filterable search of a board’s cards.
The board detail (GET /crm/boards/{boardId}) returns the stages with their cards inside
and is meant for drawing the board. To look for cards, use this endpoint.
All filters are optional and can be combined.
curl --request GET \
--url https://api.connectadesk.com/api/v1/crm/boards/{boardId}/cards \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.connectadesk.com/api/v1/crm/boards/{boardId}/cards"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.connectadesk.com/api/v1/crm/boards/{boardId}/cards', 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.connectadesk.com/api/v1/crm/boards/{boardId}/cards",
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.connectadesk.com/api/v1/crm/boards/{boardId}/cards"
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.connectadesk.com/api/v1/crm/boards/{boardId}/cards")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.connectadesk.com/api/v1/crm/boards/{boardId}/cards")
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{
"data": [
{
"id": 4471,
"name": "Pedido #88213",
"description": "Customer asked for a call back on Monday morning.",
"won": false,
"wonDate": null,
"statusReason": null,
"boardId": 7,
"list": {
"id": 31,
"name": "Aguardando envio"
},
"status": {
"id": 2,
"name": "Em negociação",
"color": "#F59E0B"
},
"business": {
"id": 9,
"name": "Varejo"
},
"origin": {
"id": 5,
"name": "Instagram"
},
"assignedTo": {
"id": 3,
"name": "Gabriel Goulart"
},
"contacts": [
{
"id": 1042,
"name": "Marina Alves",
"number": "5511999999999",
"email": "marina@exemplo.com.br",
"code": "CLI-8842",
"cpfCnpj": "12345678909",
"origin": "Site",
"profilePicUrl": "https://cdn.exemplo.com.br/avatar/1042.jpg",
"isGroup": false,
"instagramUsername": "marina.alves",
"sourceUrl": "https://loja.exemplo.com.br/promo",
"sourceId": "23851234567890123",
"headline": "Coleção de inverno",
"utmSource": "instagram",
"utmMedium": "cpc",
"utmCampaign": "inverno-2026",
"utmId": "6543210987",
"tags": [
{
"id": 3,
"name": "Cliente VIP",
"color": "#6941C6"
}
],
"customFields": [
{
"key": "plano",
"value": "Ouro",
"customFieldId": 91,
"name": "Plano",
"type": "select"
}
],
"lastChannel": {
"id": 11,
"name": "Instagram Loja",
"type": "instagram"
},
"createdAt": "2026-07-14T13:22:05.412Z",
"updatedAt": "2026-08-18T09:41:17.883Z"
}
],
"products": [
{
"id": 812,
"productId": 55,
"name": "Camiseta preta M",
"sku": "CAM-PRETA-M",
"quantity": 2,
"unitPrice": 149.9,
"totalPrice": 299.8
}
],
"productsTotal": 299.8,
"customFields": [
{
"key": "prioridade",
"value": "Alta",
"customFieldId": 77,
"name": "Prioridade",
"type": "select"
}
],
"creationSource": "api",
"due": "2026-09-15T12:00:00.000Z",
"createdAt": "2026-09-08T14:32:10.000Z",
"updatedAt": "2026-09-08T16:02:44.000Z"
}
],
"meta": {
"page": 1,
"perPage": 20,
"hasMore": true
}
}{
"error": {
"code": "ERR_API_FORBIDDEN_SCOPE",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "ERR_API_UNAUTHORIZED",
"message": "Token de API ausente ou inválido."
}
}{
"error": {
"code": "ERR_API_FORBIDDEN_SCOPE",
"message": "O token não tem permissão para este método neste módulo. A mensagem real nomeia os dois."
}
}{
"error": {
"code": "ERR_API_FORBIDDEN_SCOPE",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "ERR_API_RATE_LIMIT",
"message": "Limite de requisições por minuto excedido para esta empresa."
}
}Authorizations
API token in the sk_live_… format.
Path Parameters
Query Parameters
Page number, starting at 1. An invalid value is treated as 1.
x >= 1Number of items per page. The maximum depends on the environment (default 100).
1 <= x <= 100Searches the card's name and description, ignoring upper and lower case.
Only cards in this board stage.
Only cards assigned to this user.
Only cards from this origin.
Only cards linked to this business.
Only cards with this status. Statuses are configured on each stage.
Only cards linked to this contact.
true returns only won cards and false only cards not won. Without the parameter, both are returned.
Filters by how the card was created. Who created the record:
| value | meaning |
|---|---|
api | This API. |
user | A person, through the panel. |
bot | A chatbot. |
automation | A Flow automation. |
api, user, bot, automation Only cards created from this date on. The day starts in your company's time zone.
Only cards created up to this date. The day ends at 23:59:59 in your company's time zone.
Only cards due from this date on. The day starts in your company's time zone.
Only cards due up to this date. The day ends at 23:59:59 in your company's time zone.
Field used to sort the list. An unknown value falls back to the default. Field used to sort:
| value | meaning |
|---|---|
createdAt | Creation date. |
updatedAt | Date of the last change. |
due | Card due date. |
position | Position within the stage, as on the board. |
name | Card name. |
createdAt, updatedAt, due, position, name Sort direction: asc ascending, desc descending.
Sort direction:
| value | meaning |
|---|---|
asc | Ascending. |
desc | Descending. |
asc, desc curl --request GET \
--url https://api.connectadesk.com/api/v1/crm/boards/{boardId}/cards \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.connectadesk.com/api/v1/crm/boards/{boardId}/cards"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.connectadesk.com/api/v1/crm/boards/{boardId}/cards', 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.connectadesk.com/api/v1/crm/boards/{boardId}/cards",
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.connectadesk.com/api/v1/crm/boards/{boardId}/cards"
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.connectadesk.com/api/v1/crm/boards/{boardId}/cards")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.connectadesk.com/api/v1/crm/boards/{boardId}/cards")
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{
"data": [
{
"id": 4471,
"name": "Pedido #88213",
"description": "Customer asked for a call back on Monday morning.",
"won": false,
"wonDate": null,
"statusReason": null,
"boardId": 7,
"list": {
"id": 31,
"name": "Aguardando envio"
},
"status": {
"id": 2,
"name": "Em negociação",
"color": "#F59E0B"
},
"business": {
"id": 9,
"name": "Varejo"
},
"origin": {
"id": 5,
"name": "Instagram"
},
"assignedTo": {
"id": 3,
"name": "Gabriel Goulart"
},
"contacts": [
{
"id": 1042,
"name": "Marina Alves",
"number": "5511999999999",
"email": "marina@exemplo.com.br",
"code": "CLI-8842",
"cpfCnpj": "12345678909",
"origin": "Site",
"profilePicUrl": "https://cdn.exemplo.com.br/avatar/1042.jpg",
"isGroup": false,
"instagramUsername": "marina.alves",
"sourceUrl": "https://loja.exemplo.com.br/promo",
"sourceId": "23851234567890123",
"headline": "Coleção de inverno",
"utmSource": "instagram",
"utmMedium": "cpc",
"utmCampaign": "inverno-2026",
"utmId": "6543210987",
"tags": [
{
"id": 3,
"name": "Cliente VIP",
"color": "#6941C6"
}
],
"customFields": [
{
"key": "plano",
"value": "Ouro",
"customFieldId": 91,
"name": "Plano",
"type": "select"
}
],
"lastChannel": {
"id": 11,
"name": "Instagram Loja",
"type": "instagram"
},
"createdAt": "2026-07-14T13:22:05.412Z",
"updatedAt": "2026-08-18T09:41:17.883Z"
}
],
"products": [
{
"id": 812,
"productId": 55,
"name": "Camiseta preta M",
"sku": "CAM-PRETA-M",
"quantity": 2,
"unitPrice": 149.9,
"totalPrice": 299.8
}
],
"productsTotal": 299.8,
"customFields": [
{
"key": "prioridade",
"value": "Alta",
"customFieldId": 77,
"name": "Prioridade",
"type": "select"
}
],
"creationSource": "api",
"due": "2026-09-15T12:00:00.000Z",
"createdAt": "2026-09-08T14:32:10.000Z",
"updatedAt": "2026-09-08T16:02:44.000Z"
}
],
"meta": {
"page": 1,
"perPage": 20,
"hasMore": true
}
}{
"error": {
"code": "ERR_API_FORBIDDEN_SCOPE",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "ERR_API_UNAUTHORIZED",
"message": "Token de API ausente ou inválido."
}
}{
"error": {
"code": "ERR_API_FORBIDDEN_SCOPE",
"message": "O token não tem permissão para este método neste módulo. A mensagem real nomeia os dois."
}
}{
"error": {
"code": "ERR_API_FORBIDDEN_SCOPE",
"message": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "ERR_API_RATE_LIMIT",
"message": "Limite de requisições por minuto excedido para esta empresa."
}
}
