curl --request GET \
--url https://api.blinq.me/v1/workspaces/{workspace_id}/contacts \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.blinq.me/v1/workspaces/{workspace_id}/contacts"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.blinq.me/v1/workspaces/{workspace_id}/contacts', 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.blinq.me/v1/workspaces/{workspace_id}/contacts",
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.blinq.me/v1/workspaces/{workspace_id}/contacts"
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.blinq.me/v1/workspaces/{workspace_id}/contacts")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.blinq.me/v1/workspaces/{workspace_id}/contacts")
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{
"contacts": [
{
"id": "contact-id",
"type": "personal",
"full_name": "Jane Doe",
"job_title": "Designer",
"company_name": "Example",
"created_at": "2026-10-01T00:00:00.000Z",
"updated_at": "2026-10-01T00:00:00.000Z",
"workspace_id": "workspace-id"
}
],
"has_more": true,
"next_cursor": "cursor-token",
"total_count": 42
}List contacts
Returns a paginated list of contact summaries from your personal workspace or a business workspace you own or administer. Business members receive an empty list. The workspace path segment only narrows which accessible contacts are returned; it never grants additional access.
Deleted contacts, hidden contacts, and company-directory entries are excluded.
Contacts are sorted by creation time, newest first, with the contact ID as a tie-breaker, so pages are deterministic.
Use a contact’s id to retrieve its full details from the same workspace.
Requires the blinq:contacts:read scope.
curl --request GET \
--url https://api.blinq.me/v1/workspaces/{workspace_id}/contacts \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.blinq.me/v1/workspaces/{workspace_id}/contacts"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.blinq.me/v1/workspaces/{workspace_id}/contacts', 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.blinq.me/v1/workspaces/{workspace_id}/contacts",
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.blinq.me/v1/workspaces/{workspace_id}/contacts"
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.blinq.me/v1/workspaces/{workspace_id}/contacts")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.blinq.me/v1/workspaces/{workspace_id}/contacts")
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{
"contacts": [
{
"id": "contact-id",
"type": "personal",
"full_name": "Jane Doe",
"job_title": "Designer",
"company_name": "Example",
"created_at": "2026-10-01T00:00:00.000Z",
"updated_at": "2026-10-01T00:00:00.000Z",
"workspace_id": "workspace-id"
}
],
"has_more": true,
"next_cursor": "cursor-token",
"total_count": 42
}Authorizations
Send a Blinq API key as Authorization: Bearer <api-key>; enter only the key in the documentation playground.
Create and revoke keys in the Blinq web app under Settings > API keys.
The key needs the scopes required by the operation, and public API access requires a Pro or Business plan.
Path Parameters
The workspace ID. Use an id returned by the list workspaces endpoint.
1Query Parameters
The next_cursor returned by the previous response. Omit for the first page. Keep filters unchanged between pages.
1Filters contacts using a case-insensitive substring match against card names, job titles, company names, and saved text notes.
1Return contact records last updated at or after this ISO 8601 timestamp with a timezone, such as 2026-10-01T00:00:00Z (inclusive). Deleted contacts are excluded. Changes to linked resources do not necessarily update the contact record.
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$Include contacts created at or after this ISO 8601 timestamp with a timezone, such as 2026-10-01T00:00:00Z (inclusive).
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$Include contacts created at or before this ISO 8601 timestamp with a timezone, such as 2026-10-31T23:59:59Z (inclusive).
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$The maximum number of contacts to return per page.
x <= 50Response
One page of contact summaries.
One page of contact summaries.
Contact summaries for this page. Empty when no contacts match the request.
Show child attributes
Show child attributes
Whether another page of contacts is available.
The cursor for the next page. When has_more is true, pass this value as cursor. Otherwise, this value is null.
The total number of contacts matching the filters across all pages. Returned on the first page; null on subsequent pages.
0 <= x <= 9007199254740991