For AI agents: markdown of this page — /docs-content-en/entities/requisite-links/search.md documentation index — /llms.txt

Search requisite links

POST /v1/requisite-links/search

Search requisite links with filters and auto-pagination. Equivalent to GET /v1/requisite-links, but parameters are passed in the request body — more convenient for complex filters with many conditions and for programmatic request assembly.

Request fields (body)

Parameter Type Default Description
filter object Filtering. Allowed keys: entityTypeId, entityId, requisiteId, bankDetailId, mcRequisiteId, mcBankDetailId. Comparison operators ($gt/$gte/$lt/$lte) and set operators ($in/$nin) are supported. Logical $or/$and are not supported.
Filtering syntax. Example: { "entityTypeId": 2, "entityId": 3773 }
sort string Sort field — one of the filter keys
order string | object asc Direction for sort (asc/desc), or the { "field": "asc|desc" } form
limit number 50 Number of records (up to 5000)
offset number 0 Skip N records

Examples

curl — personal key

Terminal
curl -X POST "https://vibecode.bitrix24.com/v1/requisite-links/search" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "filter": { "entityTypeId": 2, "requisiteId": 45 },
    "limit": 20
  }'

curl — OAuth app

Terminal
curl -X POST "https://vibecode.bitrix24.com/v1/requisite-links/search" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "filter": { "entityTypeId": 2, "requisiteId": 45 },
    "limit": 20
  }'

JavaScript — personal key

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/requisite-links/search', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    filter: { entityTypeId: 2, requisiteId: 45 },
    limit: 20,
  }),
})

const { success, data } = await res.json()
console.log('Found:', data.length)

JavaScript — OAuth app

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/requisite-links/search', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    filter: { entityTypeId: 2, requisiteId: 45 },
    limit: 20,
  }),
})

const { success, data } = await res.json()

Other scenarios

All links for a specific deal:

JSON
{ "filter": { "entityTypeId": 2, "entityId": 3773 } }

All links for a specific requisite (find which entities the requisite with ID 45 is linked to):

JSON
{ "filter": { "requisiteId": 45 } }

All invoice links, entityTypeId is 31:

JSON
{
  "filter": { "entityTypeId": 31 },
  "limit": 100
}

Response fields

Field Type Description
success boolean Always true on success
data array Array of links
data[].ENTITY_TYPE_ID string Owner type: "2" — deal, "31" — invoice
data[].ENTITY_ID string Owner ID. Source: GET /v1/deals or GET /v1/invoices
data[].REQUISITE_ID string Requisite ID; "0" — not linked. Source: GET /v1/requisites
data[].BANK_DETAIL_ID string Bank requisite ID; "0" — not linked. Source: GET /v1/bank-details
data[].MC_REQUISITE_ID string Your company's requisite ID; "0" — not linked
data[].MC_BANK_DETAIL_ID string Your company's bank requisite ID; "0" — not linked
meta.total number How many records matched the filter
meta.hasMore boolean Whether there is a next page

The meta fields sit next to data, not inside it. Pages must be walked by meta.hasMore: a data length equal to limit does not rule out the last page.

Response example

JSON
{
  "success": true,
  "data": [
    {
      "ENTITY_TYPE_ID": "2",
      "ENTITY_ID": "3773",
      "REQUISITE_ID": "45",
      "BANK_DETAIL_ID": "0",
      "MC_REQUISITE_ID": "0",
      "MC_BANK_DETAIL_ID": "0"
    },
    {
      "ENTITY_TYPE_ID": "2",
      "ENTITY_ID": "3825",
      "REQUISITE_ID": "0",
      "BANK_DETAIL_ID": "0",
      "MC_REQUISITE_ID": "0",
      "MC_BANK_DETAIL_ID": "0"
    }
  ],
  "meta": {
    "total": 68,
    "hasMore": true
  }
}

Error response example

403 — no scope:

JSON
{
  "success": false,
  "error": {
    "code": "SCOPE_DENIED",
    "message": "This endpoint requires 'crm' scope"
  }
}

Errors

HTTP Code Description
403 SCOPE_DENIED API key lacks the crm scope
401 TOKEN_MISSING X-Api-Key not provided
400 INVALID_FILTER Error in filter syntax
400 UNKNOWN_FILTER_FIELD Unknown filter field (the response lists the allowed ones)
400 UNKNOWN_SORT_FIELD Unknown sort field
400 INVALID_FILTER_OPERATOR Top-level logical operator ($or/$and) is not supported
400 MISSING_ENTITY_TYPE_ID Filtering by entityId without entityTypeId

Full list of common API errors — Errors.

Known specifics

Response fields use the original Bitrix24 names. All fields are returned in upper case — ENTITY_TYPE_ID, ENTITY_ID, REQUISITE_ID, etc.; numeric identifier values arrive as strings, e.g. "REQUISITE_ID": "45", "BANK_DETAIL_ID": "0". Filter keys, however, are accepted in camelCase: entityTypeId, entityId, requisiteId, bankDetailId.

A value of "0" means no link. For REQUISITE_ID, BANK_DETAIL_ID, MC_REQUISITE_ID, MC_BANK_DETAIL_ID the string "0" means the corresponding requisite is not linked, not that an object with ID 0 is linked.

See also