Indraft Search API
The search API from Indraft — 1 operation(s) for search.
The search API from Indraft — 1 operation(s) for search.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/indraft-io:indraft-io-search-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Indraft Io Search API
version: '1'
description: 'Operations tagged search across 2 of this provider''s published API definitions: indraft-io-openapi.json, indraft-io.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.indraft.io
security:
- bearerAuth: []
tags:
- name: Search
paths:
/v1/search:
get:
summary: Search across the CRM
description: 'Search companies, contacts, opportunities, tasks, interaction summaries, and this workspace''s own records by keyword. Matches whole words, prefixes, and substrings, so three characters from the middle of a name finds the record. Supports OR, a leading minus to exclude a term, a phrase in double quotes, and field qualifiers such as name:, domain: and email:. It finds records; it never decides that two records are the same one.'
tags:
- Search
operationId: get_v1_search
x-indraft-capability: crm:read
x-indraft-scopes:
- crm:read
- crm:write
- crm:configure
- crm:admin
- crm:revert
- data:export
parameters:
- name: q
in: query
required: true
schema:
type: string
minLength: 1
maxLength: 200
description: The keyword. Matches whole words, prefixes and substrings, and supports OR, a leading minus to exclude, a quoted phrase, and field qualifiers. It finds records; it never decides two records are the same one.
- name: limit
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 100
description: How many to return. The page bound is published in the schema call, and asking for more is refused rather than quietly truncated.
- name: types
in: query
required: false
schema:
type: string
minLength: 1
description: Which object types to search. Absent means all of them, including the types this workspace defined itself.
responses:
'200':
description: Success
headers:
ratelimit-limit:
description: Requests permitted in the window closest to refusing this caller.
schema:
type: integer
ratelimit-remaining:
description: Requests left in that window. Zero means the next request is refused.
schema:
type: integer
ratelimit-reset:
description: Seconds until that window resets.
schema:
type: integer
ratelimit-policy:
description: Every window in force, not only the one reported above.
schema:
type: string
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
type: object
properties:
type:
type: string
minLength: 1
maxLength: 48
id:
type: string
title:
type: string
subtitle:
type: string
matchedText:
type: string
score:
type: integer
required:
- type
- id
- title
- subtitle
- score
additionalProperties: true
truncated:
type: boolean
requestId:
type: string
required:
- results
- requestId
additionalProperties: true
'401':
description: No credential, or one that has been revoked.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Authenticated, and this capability is not held.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: The request does not satisfy the schema on this page.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Infrastructure protection tripped. This is not a product quota.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
headers:
ratelimit-limit:
description: Requests permitted in the window closest to refusing this caller.
schema:
type: integer
ratelimit-remaining:
description: Requests left in that window. Zero means the next request is refused.
schema:
type: integer
ratelimit-reset:
description: Seconds until that window resets.
schema:
type: integer
ratelimit-policy:
description: Every window in force, not only the one reported above.
schema:
type: string
retry-after:
description: Seconds to wait before retrying. The request itself was fine.
schema:
type: integer
'500':
description: A defect on our side. The hint says so, and carries an incident id.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
servers:
- url: https://api.indraft.io
components:
schemas:
ErrorDetail:
type: object
additionalProperties: true
description: The structured payload a recovery needs. Its shape differs per code; the keys below are the ones that recur, and anything else a code carries is present alongside them.
properties:
fieldErrors:
type: object
additionalProperties:
type: string
description: One message per field the caller sent, keyed by that field. The key `(body)` is the request body itself, which is what an unrecognised key reports under.
reason:
type: string
description: One sentence, where the refusal is about the request rather than a field. A refusal that names alternatives puts them here.
available:
type: array
items:
type: string
description: What could have been asked for instead. Present on a filter, sort or group-by the API does not serve, so a correction is one edit rather than a round trip to read the schema.
options:
type: array
items:
type: string
description: The values an enum accepts, on a value it does not.
currentVersion:
type: integer
description: What the record's version actually is, on `stale_version`. With the value you sent it is everything needed to decide whether to re-read and retry or to stop.
expectedVersion:
type: integer
description: The version you sent, echoed back on `stale_version`.
requiredScope:
type: string
description: 'The capability the credential lacks. Empty nowhere: a route no credential can reach is human-only and says so in its scopes instead.'
Error:
type: object
required:
- code
- message
- recoveryHint
- requestId
properties:
code:
type: string
enum:
- unauthorized
- forbidden_scope
- standing_override_refused
- workspace_not_found
- validation_error
- record_not_found
- ambiguous_identity
- duplicate_identity
- stale_version
- invalid_stage_transition
- idempotency_conflict
- not_reversible
- merge_conflict
- rate_limited
- quota_exceeded
- payload_too_large
- workspace_capacity
- payment_required
- billing_state_stale
- operation_in_flight
- internal_error
message:
type: string
recoveryHint:
type: string
requestId:
type: string
detail:
$ref: '#/components/schemas/ErrorDetail'
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: An Indraft API token, or a WorkOS-issued session or MCP access token.
x-refined-from:
- indraft-io-openapi.json
- indraft-io.json