Search a module by criteria
const url = 'https://api.sloose.com/orgs/org_9f3c/connectors/cnn_9f2a/records/Accounts/search?criteria=(Account_Number%3Aequals%3AAC-1001)&limit=10&page=1';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.sloose.com/orgs/org_9f3c/connectors/cnn_9f2a/records/Accounts/search?criteria=(Account_Number%3Aequals%3AAC-1001)&limit=10&page=1' \ --header 'Authorization: Bearer <token>'The destination’s criteria search — for Zoho, (Field:equals:value) as buildSearchCriteria emits it — at most limit records. Empty is a normal answer. Reads are GET so a read-only staff view can still dry-run.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The org id the session was issued for. A token for one org can never read another.
Example
org_9f3cThe org id the session was issued for. A token for one org can never read another.
The connector id, from GET /orgs/{org}/connectors.
Example
cnn_9f2aThe connector id, from GET /orgs/{org}/connectors.
The module’s API name in the destination.
Example
AccountsThe module’s API name in the destination.
Query Parameters
Section titled “Query Parameters”The criteria string.
Example
(Account_Number:equals:AC-1001)The criteria string.
At most this many records. Default 10, max 200.
Example
10At most this many records. Default 10, max 200.
Which page of limit records, from 1. Default 1, max 10: Zoho’s search answers at most 2,000 records, so a caller that must see past the first page to decide (a lookup’s exact match, #928) reads on as far as that and no further.
Example
1Which page of limit records, from 1. Default 1, max 10: Zoho’s search answers at most 2,000 records, so a caller that must see past the first page to decide (a lookup’s exact match, #928) reads on as far as that and no further.
Responses
Section titled “Responses”The matching records.
object
object
Added by Sloose, not the CRM: the record’s name as the CRM shows it, read from the field its module names records by (Zoho’s display_field — Account_Name, Full_Name, Vendor_Name). Absent when that field is empty, and from a search or a single record when the field could not be learned just then.
Examplegenerated
{ "records": [ { "$display_name": "example" } ]}No bearer, or one that is expired, revoked or no longer resolves to a member.
The error envelope every non-2xx answer uses.
object
Human-readable explanation.
Machine-readable reason. Absent on a few legacy 400s.
Examplegenerated
{ "error": "example", "code": "example"}The bearer’s role is too low, or it was issued for a different org.
The error envelope every non-2xx answer uses.
object
Human-readable explanation.
Machine-readable reason. Absent on a few legacy 400s.
Examplegenerated
{ "error": "example", "code": "example"}No such connector, or it is not visible to this session (NOT_FOUND); or the connection has no module of that name — only its modules, as its discovery read them, are asked of the CRM (MODULE_NOT_FOUND).
The error envelope every non-2xx answer uses.
object
Human-readable explanation.
Machine-readable reason. Absent on a few legacy 400s.
Examplegenerated
{ "error": "example", "code": "example"}Zoho rejected the query.
object
object
True when Zoho gave no answer that says what was done — the connection dropped or timed out, Zoho failed on its side (a 5xx, or the same for the one record inside a 2xx), the answer was lost after its status or was not JSON, or Zoho said it made the record without saying which — so what was asked may have been done all the same: a create sent again after one may make a second record. A write that went unanswered stays counted, and its row may be written again for nothing. False when Zoho answered by declining (a 4xx, or a per-record refusal inside a 2xx), which made nothing.
Examplegenerated
{ "error": "example", "zoho": { "code": "example", "status": 1, "details": "example", "retryable": true, "response": "example", "unanswered": true }}Zoho is rate-limiting (zoho.unanswered false: nothing was done), or did not answer — it could not be reached, failed on its side, or answered without saying what it did (zoho.unanswered true: what was asked may have been done). Or this API could not use the connection before anything was sent — a Zoho token that will not refresh (code: CONNECTION_UNAVAILABLE) — and says so on a write with written: false: nothing was written.
object
object
True when Zoho gave no answer that says what was done — the connection dropped or timed out, Zoho failed on its side (a 5xx, or the same for the one record inside a 2xx), the answer was lost after its status or was not JSON, or Zoho said it made the record without saying which — so what was asked may have been done all the same: a create sent again after one may make a second record. A write that went unanswered stays counted, and its row may be written again for nothing. False when Zoho answered by declining (a 4xx, or a per-record refusal inside a 2xx), which made nothing.
object
Why: CONNECTION_UNAVAILABLE when a Zoho token for the connection will not refresh.
On a write: refused before the record was sent to the CRM, so nothing was written and a retry makes no second record. Absent from a read.
Example
{ "written": false}