curl --request GET \
--url https://api.zivio.net/api/v4/suppliers \
--header 'Authorization: Bearer <token>' \
--header 'zivio-tenant-id: <api-key>'import requests
url = "https://api.zivio.net/api/v4/suppliers"
headers = {
"Authorization": "Bearer <token>",
"zivio-tenant-id": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {Authorization: 'Bearer <token>', 'zivio-tenant-id': '<api-key>'}
};
fetch('https://api.zivio.net/api/v4/suppliers', 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.zivio.net/api/v4/suppliers",
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>",
"zivio-tenant-id: <api-key>"
],
]);
$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.zivio.net/api/v4/suppliers"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("zivio-tenant-id", "<api-key>")
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.zivio.net/api/v4/suppliers")
.header("Authorization", "Bearer <token>")
.header("zivio-tenant-id", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zivio.net/api/v4/suppliers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
request["zivio-tenant-id"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"suppliers": [
{
"id": 101,
"name": "Acme Corporation",
"description": "Complete redesign of corporate website with modern UX",
"headline": "Example headline",
"tax_number": "Example tax_number",
"tax_registered": true,
"tax_jurisdiction": "Example tax_jurisdiction",
"duns_number": "Example duns_number",
"utr": "Example utr",
"ni_number": "Example ni_number",
"company_registration_number": "Example company_registration_number",
"website": "Example website",
"display_location": "Example display_location",
"display_location_country_code": "Example display_location_country_code",
"vetting_status": "PASSED",
"uuid": "Example uuid",
"onboarding_template_id": 501,
"linkedin_url": "Example linkedin_url",
"cis_contractor": null,
"cis_rate": {
"id": 101,
"label": "Example label",
"country_code": "Example country_code",
"rate": "1500.00",
"domestic_recharge": true,
"tax_reference": 101,
"archived": true,
"custom_fields": {
"department": "Engineering",
"priority": "high",
"cost_code": "CC-001"
},
"created_at": "2024-01-16T10:30:00+00:00",
"updated_at": "2024-01-16T10:30:00+00:00"
},
"payment_terms_in_days": 30,
"primary_address": null,
"invoice_address": null,
"onboarding_template_name": null,
"admin_custom_fields": null,
"accreditations": null,
"skills": null,
"supplier_risk_factors": null,
"badges": [
"urgent",
"featured"
],
"invited_by": {
"id": 101,
"first_name": "Demo",
"last_name": "User",
"email": "user1@example.com",
"org_id": 501,
"org_name": "Acme Corporation"
},
"archived_at": "2024-01-16T10:30:00+00:00",
"archived_reason": "Example archived_reason",
"custom_fields": {
"department": "Engineering",
"priority": "high",
"cost_code": "CC-001"
},
"created_at": "2024-01-16T10:30:00+00:00",
"updated_at": "2024-01-16T10:30:00+00:00",
"project_matches_count": 5
},
{
"id": 102,
"name": "Global Services Ltd",
"description": "Native iOS and Android application",
"headline": "Example headline",
"tax_number": "Example tax_number",
"tax_registered": true,
"tax_jurisdiction": "Example tax_jurisdiction",
"duns_number": "Example duns_number",
"utr": "Example utr",
"ni_number": "Example ni_number",
"company_registration_number": "Example company_registration_number",
"website": "Example website",
"display_location": "Example display_location",
"display_location_country_code": "Example display_location_country_code",
"vetting_status": "FAILED",
"uuid": "Example uuid",
"onboarding_template_id": 502,
"linkedin_url": "Example linkedin_url",
"cis_contractor": null,
"cis_rate": {
"id": 102,
"label": "Example label",
"country_code": "Example country_code",
"rate": "1500.00",
"domestic_recharge": true,
"tax_reference": 102,
"archived": true,
"custom_fields": {
"department": "Engineering",
"priority": "high",
"cost_code": "CC-001"
},
"created_at": "2024-01-17T10:30:00+00:00",
"updated_at": "2024-01-17T10:30:00+00:00"
},
"payment_terms_in_days": 30,
"primary_address": null,
"invoice_address": null,
"onboarding_template_name": null,
"admin_custom_fields": null,
"accreditations": null,
"skills": null,
"supplier_risk_factors": null,
"badges": [
"urgent",
"featured"
],
"invited_by": {
"id": 102,
"first_name": "Jane",
"last_name": "Smith",
"email": "user2@example.com",
"org_id": 502,
"org_name": "Global Services Ltd"
},
"archived_at": "2024-01-17T10:30:00+00:00",
"archived_reason": "Example archived_reason",
"custom_fields": {
"department": "Engineering",
"priority": "high",
"cost_code": "CC-001"
},
"created_at": "2024-01-17T10:30:00+00:00",
"updated_at": "2024-01-17T10:30:00+00:00",
"project_matches_count": 10
}
]
}List Suppliers
Retrieve a paginated list of suppliers. Use filters to narrow results.
Filtering
Use the filter[<attribute>] parameter to filter results. Multiple filters are combined with AND logic.
Basic Examples
# Equality (implicit)
GET /api/v4/suppliers?filter[vetting_status]=NOT REGISTERED
# Multiple values (implicit IN)
GET /api/v4/suppliers?filter[vetting_status]=NOT REGISTERED,FAILED
# With explicit operator
GET /api/v4/suppliers?filter[created_at][gte]=2024-01-01
# Range query
GET /api/v4/suppliers?filter[onboarding_template_id][between]=10,100
# Multiple filters (AND)
GET /api/v4/suppliers?filter[vetting_status]=NOT REGISTERED&filter[onboarding_template_id][gte]=10
Available Attributes
| Attribute | Type | Operators | Permitted Values |
|---|---|---|---|
| archived_at | datetime | eq, not_eq, gt, gte, lt, lte, between | - |
| archived_reason | string | eq, not_eq, in, not_in, like, not_like | - |
| cis_contractor | boolean | eq, not_eq | - |
| cis_rate_id | integer | eq, not_eq, in, not_in, gt, gte, lt, lte, between | - |
| company_registration_number | string | eq, not_eq, in, not_in, like, not_like | - |
| created_at | datetime | eq, not_eq, gt, gte, lt, lte, between | - |
| description | string | eq, not_eq, in, not_in, like, not_like | - |
| display_location | string | eq, not_eq, in, not_in, like, not_like | - |
| display_location_country_code | string | eq, not_eq, in, not_in, like, not_like | - |
| duns_number | string | eq, not_eq, in, not_in, like, not_like | - |
| headline | string | eq, not_eq, in, not_in, like, not_like | - |
| id | integer | eq, not_eq, in, not_in, gt, gte, lt, lte, between | - |
| invited_by_id | integer | eq, not_eq, in, not_in, gt, gte, lt, lte, between | - |
| linkedin_url | string | eq, not_eq, in, not_in, like, not_like | - |
| name | string | eq, not_eq, in, not_in, like, not_like | - |
| ni_number | string | eq, not_eq, in, not_in, like, not_like | - |
| onboarding_template_id | integer | eq, not_eq, in, not_in, gt, gte, lt, lte, between | - |
| payment_terms_in_days | integer | eq, not_eq, in, not_in, gt, gte, lt, lte, between | - |
| project_matches_count | integer | eq, not_eq, in, not_in, gt, gte, lt, lte, between | - |
| tax_jurisdiction | string | eq, not_eq, in, not_in, like, not_like | - |
| tax_number | string | eq, not_eq, in, not_in, like, not_like | - |
| tax_registered | boolean | eq, not_eq | - |
| updated_at | datetime | eq, not_eq, gt, gte, lt, lte, between | - |
| utr | string | eq, not_eq, in, not_in, like, not_like | - |
| uuid | string | eq, not_eq, in, not_in, like, not_like | - |
| vetting_status | string | eq, not_eq, in, not_in | NOT REGISTERED, PASSED, FAILED, PENDING |
| website | string | eq, not_eq, in, not_in, like, not_like | - |
Custom Fields
This resource supports custom field filtering using cf[key] syntax:
# Equality
GET /api/v4/suppliers?cf[priority]=high
# With operator
GET /api/v4/suppliers?cf[department][in]=engineering,design
# Check existence
GET /api/v4/suppliers?cf[priority][exists]=
# Negation
GET /api/v4/suppliers?cf[priority][not_eq]=low
OR Conditions
Use or[group] to combine filter groups with OR logic. Filters within a group are ANDed:
# Simple OR
GET /api/v4/suppliers?or[1][vetting_status]=PASSED&or[2][vetting_status]=NOT REGISTERED
# Complex OR (vetting_status=PASSED AND onboarding_template_id>=10) OR (vetting_status=NOT REGISTERED)
GET /api/v4/suppliers?or[1][vetting_status]=PASSED&or[1][onboarding_template_id][gte]=10&or[2][vetting_status]=NOT REGISTERED
Sorting
Use sort[<attribute>] to order results. Default direction is ascending.
# Ascending (implicit)
GET /api/v4/suppliers?sort[created_at]=
# Descending
GET /api/v4/suppliers?sort[created_at]=desc
# Combined with filters
GET /api/v4/suppliers?filter[vetting_status]=NOT REGISTERED&sort[created_at]=desc
curl --request GET \
--url https://api.zivio.net/api/v4/suppliers \
--header 'Authorization: Bearer <token>' \
--header 'zivio-tenant-id: <api-key>'import requests
url = "https://api.zivio.net/api/v4/suppliers"
headers = {
"Authorization": "Bearer <token>",
"zivio-tenant-id": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {Authorization: 'Bearer <token>', 'zivio-tenant-id': '<api-key>'}
};
fetch('https://api.zivio.net/api/v4/suppliers', 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.zivio.net/api/v4/suppliers",
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>",
"zivio-tenant-id: <api-key>"
],
]);
$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.zivio.net/api/v4/suppliers"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("zivio-tenant-id", "<api-key>")
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.zivio.net/api/v4/suppliers")
.header("Authorization", "Bearer <token>")
.header("zivio-tenant-id", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zivio.net/api/v4/suppliers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
request["zivio-tenant-id"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"suppliers": [
{
"id": 101,
"name": "Acme Corporation",
"description": "Complete redesign of corporate website with modern UX",
"headline": "Example headline",
"tax_number": "Example tax_number",
"tax_registered": true,
"tax_jurisdiction": "Example tax_jurisdiction",
"duns_number": "Example duns_number",
"utr": "Example utr",
"ni_number": "Example ni_number",
"company_registration_number": "Example company_registration_number",
"website": "Example website",
"display_location": "Example display_location",
"display_location_country_code": "Example display_location_country_code",
"vetting_status": "PASSED",
"uuid": "Example uuid",
"onboarding_template_id": 501,
"linkedin_url": "Example linkedin_url",
"cis_contractor": null,
"cis_rate": {
"id": 101,
"label": "Example label",
"country_code": "Example country_code",
"rate": "1500.00",
"domestic_recharge": true,
"tax_reference": 101,
"archived": true,
"custom_fields": {
"department": "Engineering",
"priority": "high",
"cost_code": "CC-001"
},
"created_at": "2024-01-16T10:30:00+00:00",
"updated_at": "2024-01-16T10:30:00+00:00"
},
"payment_terms_in_days": 30,
"primary_address": null,
"invoice_address": null,
"onboarding_template_name": null,
"admin_custom_fields": null,
"accreditations": null,
"skills": null,
"supplier_risk_factors": null,
"badges": [
"urgent",
"featured"
],
"invited_by": {
"id": 101,
"first_name": "Demo",
"last_name": "User",
"email": "user1@example.com",
"org_id": 501,
"org_name": "Acme Corporation"
},
"archived_at": "2024-01-16T10:30:00+00:00",
"archived_reason": "Example archived_reason",
"custom_fields": {
"department": "Engineering",
"priority": "high",
"cost_code": "CC-001"
},
"created_at": "2024-01-16T10:30:00+00:00",
"updated_at": "2024-01-16T10:30:00+00:00",
"project_matches_count": 5
},
{
"id": 102,
"name": "Global Services Ltd",
"description": "Native iOS and Android application",
"headline": "Example headline",
"tax_number": "Example tax_number",
"tax_registered": true,
"tax_jurisdiction": "Example tax_jurisdiction",
"duns_number": "Example duns_number",
"utr": "Example utr",
"ni_number": "Example ni_number",
"company_registration_number": "Example company_registration_number",
"website": "Example website",
"display_location": "Example display_location",
"display_location_country_code": "Example display_location_country_code",
"vetting_status": "FAILED",
"uuid": "Example uuid",
"onboarding_template_id": 502,
"linkedin_url": "Example linkedin_url",
"cis_contractor": null,
"cis_rate": {
"id": 102,
"label": "Example label",
"country_code": "Example country_code",
"rate": "1500.00",
"domestic_recharge": true,
"tax_reference": 102,
"archived": true,
"custom_fields": {
"department": "Engineering",
"priority": "high",
"cost_code": "CC-001"
},
"created_at": "2024-01-17T10:30:00+00:00",
"updated_at": "2024-01-17T10:30:00+00:00"
},
"payment_terms_in_days": 30,
"primary_address": null,
"invoice_address": null,
"onboarding_template_name": null,
"admin_custom_fields": null,
"accreditations": null,
"skills": null,
"supplier_risk_factors": null,
"badges": [
"urgent",
"featured"
],
"invited_by": {
"id": 102,
"first_name": "Jane",
"last_name": "Smith",
"email": "user2@example.com",
"org_id": 502,
"org_name": "Global Services Ltd"
},
"archived_at": "2024-01-17T10:30:00+00:00",
"archived_reason": "Example archived_reason",
"custom_fields": {
"department": "Engineering",
"priority": "high",
"cost_code": "CC-001"
},
"created_at": "2024-01-17T10:30:00+00:00",
"updated_at": "2024-01-17T10:30:00+00:00",
"project_matches_count": 10
}
]
}Authorizations
OAuth 2.0 client credentials. The access token from POST /oauth/token is sent as a bearer token. Request only the scopes you need.
Your Zivio organisation identifier. The regional API endpoints serve every Zivio organisation, so each request must identify yours.
Query Parameters
Page number for pagination
Number of results per page (max 100)
x <= 100Filterable attributes:
integer (operators: eq, not_eq, in, not_in, gt, gte, lt, lte, between): cis_rate_id, id, invited_by_id, onboarding_template_id, payment_terms_in_days, project_matches_count datetime (operators: eq, not_eq, gt, gte, lt, lte, between): archived_at, created_at, updated_at string (operators: eq, not_eq, in, not_in, like, not_like): archived_reason, company_registration_number, description, display_location, display_location_country_code, duns_number, headline, linkedin_url, name, ni_number, tax_jurisdiction, tax_number, utr, uuid, vetting_status (one of: NOT REGISTERED, PASSED, FAILED, PENDING), website boolean (operators: eq, not_eq): cis_contractor, tax_registered
Note: like is a case-insensitive substring match — pass the bare term (filter[title][like]=redesign). Do not add % wildcards; they are not needed.
OR condition groups. Filters within a group are ANDed; groups are ORed.
Syntax: or[group_key][<attribute>]=value or or[group_key][<attribute>][operator]=value
Examples:
- Simple OR:
or[1][state]=draft&or[2][state]=pending - Complex:
or[1][state]=draft&or[1][budget][gte]=50000&or[2][state]=closed - With custom fields:
or[1][cf][priority]=high&or[2][state]=pending
Group keys can be any string (1, 2, a, b, etc.) - they just need to be unique.
Custom field filters using concise syntax.
Syntax:
- Equality:
cf[key]=value - With operator:
cf[key][operator]=value
Operators: eq (default), not_eq, in, not_in, contains, not_contains, exists, not_exists
Examples:
cf[priority]=high- exact matchcf[department][in]=eng,design- matches anycf[priority][not_eq]=low- not equalcf[notes][contains]=urgent- contains textcf[legacy_field][exists]=- field exists (value ignored)cf[deprecated][not_exists]=- field does not exist
Custom field filters within OR condition groups.
Syntax: or[group][cf][key]=value or or[group][cf][key][operator]=value
Example: or[1][cf][priority]=high&or[2][state]=pending
Sort results by attribute. Direction defaults to ascending.
Syntax: sort[<attribute>]= (ascending) or sort[<attribute>]=desc (descending)
Sortable attributes: archived_at, archived_reason, cis_contractor, cis_rate_id, company_registration_number, created_at, description, display_location, display_location_country_code, duns_number, headline, id, invited_by_id, linkedin_url, name, ni_number, onboarding_template_id, payment_terms_in_days, project_matches_count, tax_jurisdiction, tax_number, tax_registered, updated_at, utr, uuid, vetting_status, website
Examples:
- Ascending:
sort[created_at]=orsort[created_at]=asc - Descending:
sort[created_at]=desc
Response
List of suppliers
Show child attributes
Show child attributes

