Heffl Clients API
The Clients API from Heffl — 2 operation(s) for clients.
The Clients API from Heffl — 2 operation(s) for clients.
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/heffl-com:heffl-com-clients-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: Heffl Public API (Legacy v1) Clients API
version: 1.0.0
description: Legacy Heffl REST API v1. Maintained for existing integrations. For new projects, use API v2 at https://docs.heffl.com/api-v2/introduction.
contact:
name: Heffl Support
url: https://heffl.com/support
email: support@heffl.com
servers:
- url: https://api.heffl.com/api/v1
description: Production API Server
security:
- ApiKeyAuth: []
tags:
- name: Clients
paths:
/clients:
post:
operationId: clients.create
summary: Create a new client
description: Creates a new client/company in your CRM. The client will be assigned to the user associated with your API key.
tags:
- Clients
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
enum:
- company
- contact
default: company
description: 'Client type: company for companies, contact for contacts'
name:
type: string
description: Company name (required for companies, optional for contacts)
firstName:
type: string
description: First name (required for contacts)
lastName:
type: string
description: Last name (optional for contacts)
salutation:
type: string
description: Title (Mr., Mrs., Dr., etc.)
phone:
type: string
description: Phone number with country code
email:
anyOf:
- type: string
format: email
- type: 'null'
description: Email address
jobTitle:
type: string
description: Job title or position
website:
anyOf:
- {}
- type: 'null'
description: Company website URL
taxNumber:
anyOf:
- type: string
- type: 'null'
description: Tax ID or VAT number
billingAddress:
anyOf:
- type: object
properties:
city:
anyOf:
- type: string
- type: 'null'
description: City
address:
anyOf:
- type: string
- type: 'null'
description: Street address
landmark:
anyOf:
- type: string
- type: 'null'
description: Nearby landmark
state:
anyOf:
- type: string
- type: 'null'
description: State or province
country:
anyOf:
- type: string
- type: 'null'
description: Country code (2 letters, e.g., US, GB)
postalCode:
anyOf:
- type: string
- type: 'null'
description: Postal code or ZIP code
- type: 'null'
description: Billing address details
openingBalance:
type: number
minimum: 0
default: 0
description: Starting account balance (defaults to 0)
primaryContact:
type: object
properties:
firstName:
type: string
minLength: 1
lastName:
type: string
email:
anyOf:
- type: string
format: email
- type: 'null'
phone:
type: string
salutation:
type: string
jobTitle:
type: string
required:
- firstName
additionalProperties: {}
description: Optional primary contact for company records
additionalProperties: {}
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: Client public ID
number:
type: string
description: Auto-generated client number
name:
type: string
description: Client name
type:
enum:
- company
- contact
description: Client type
firstName:
anyOf:
- type: string
- type: 'null'
description: First name (for contacts)
lastName:
anyOf:
- type: string
- type: 'null'
description: Last name (for contacts)
email:
anyOf:
- type: string
- type: 'null'
description: Email address
phone:
anyOf:
- type: string
- type: 'null'
description: Phone number
website:
anyOf:
- type: string
- type: 'null'
description: Website URL
stageId:
anyOf:
- type: string
- type: 'null'
description: Client stage public ID
createdAt:
type: string
format: date-time
x-native-type: date
description: When the client was created
customFields:
anyOf:
- type: object
propertyNames:
type: string
additionalProperties: {}
- type: 'null'
description: Custom field values
required:
- id
- number
- name
- type
- createdAt
get:
operationId: clients.list
summary: List clients
description: Returns a paginated list of clients. Supports search and type filtering.
tags:
- Clients
parameters:
- name: cursor
in: query
schema:
type: string
description: Cursor for pagination. Pass the previous response nextCursor value to fetch the next page.
allowEmptyValue: true
allowReserved: true
- name: limit
in: query
schema:
type: number
minimum: 1
maximum: 100
default: 20
description: Number of items to return (max 100)
allowEmptyValue: true
allowReserved: true
- name: search
in: query
schema:
type: string
default: ''
description: Search by name, email, or phone
allowEmptyValue: true
allowReserved: true
- name: type
in: query
schema:
enum:
- company
- contact
description: Filter by client type
style: deepObject
explode: true
allowEmptyValue: true
allowReserved: true
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
items:
type: array
items:
type: object
properties:
id:
type: string
description: Client public ID
number:
type: string
description: Auto-generated client number
name:
type: string
description: Client name
type:
enum:
- company
- contact
description: Client type
firstName:
anyOf:
- type: string
- type: 'null'
description: First name (for contacts)
lastName:
anyOf:
- type: string
- type: 'null'
description: Last name (for contacts)
email:
anyOf:
- type: string
- type: 'null'
description: Email address
phone:
anyOf:
- type: string
- type: 'null'
description: Phone number
website:
anyOf:
- type: string
- type: 'null'
description: Website URL
stageId:
anyOf:
- type: string
- type: 'null'
description: Client stage public ID
createdAt:
type: string
format: date-time
x-native-type: date
description: When the client was created
customFields:
anyOf:
- type: object
propertyNames:
type: string
additionalProperties: {}
- type: 'null'
description: Custom field values
required:
- id
- number
- name
- type
- createdAt
nextCursor:
anyOf:
- type: string
- type: 'null'
description: Cursor to fetch the next page. Null if there are no more results.
hasMore:
type: boolean
description: Whether additional results are available
required:
- items
- hasMore
/clients/{id}:
get:
operationId: clients.get
summary: Get a client
description: Returns a single client by its public ID.
tags:
- Clients
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Client public ID
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: Client public ID
number:
type: string
description: Auto-generated client number
name:
type: string
description: Client name
type:
enum:
- company
- contact
description: Client type
firstName:
anyOf:
- type: string
- type: 'null'
description: First name (for contacts)
lastName:
anyOf:
- type: string
- type: 'null'
description: Last name (for contacts)
email:
anyOf:
- type: string
- type: 'null'
description: Email address
phone:
anyOf:
- type: string
- type: 'null'
description: Phone number
website:
anyOf:
- type: string
- type: 'null'
description: Website URL
stageId:
anyOf:
- type: string
- type: 'null'
description: Client stage public ID
createdAt:
type: string
format: date-time
x-native-type: date
description: When the client was created
customFields:
anyOf:
- type: object
propertyNames:
type: string
additionalProperties: {}
- type: 'null'
description: Custom field values
required:
- id
- number
- name
- type
- createdAt
patch:
operationId: clients.update
summary: Update a client
description: Updates an existing client/company in your CRM. Only provided fields will be updated.
tags:
- Clients
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Client public ID
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
type:
enum:
- company
- contact
description: 'Client type: company for companies, contact for contacts'
name:
type: string
description: Company name (required for companies, optional for contacts)
firstName:
type: string
description: First name (required for contacts, optional for companies)
lastName:
type: string
description: Last name (optional for contacts)
salutation:
type: string
description: Title (Mr., Mrs., Dr., etc.)
phone:
type: string
description: Phone number with country code
email:
anyOf:
- type: string
format: email
- type: 'null'
description: Email address
jobTitle:
type: string
description: Job title or position
website:
anyOf:
- {}
- type: 'null'
description: Company website URL
taxNumber:
anyOf:
- type: string
- type: 'null'
description: Tax ID or VAT number
billingAddress:
anyOf:
- type: object
properties:
city:
anyOf:
- type: string
- type: 'null'
description: City
address:
anyOf:
- type: string
- type: 'null'
description: Street address
landmark:
anyOf:
- type: string
- type: 'null'
description: Nearby landmark
state:
anyOf:
- type: string
- type: 'null'
description: State or province
country:
anyOf:
- type: string
- type: 'null'
description: Country code (2 letters, e.g., US, GB)
postalCode:
anyOf:
- type: string
- type: 'null'
description: Postal code or ZIP code
- type: 'null'
description: Billing address details
primaryContact:
type: object
properties:
firstName:
type: string
minLength: 1
lastName:
type: string
email:
anyOf:
- type: string
format: email
- type: 'null'
phone:
type: string
salutation:
type: string
jobTitle:
type: string
required:
- firstName
additionalProperties: {}
description: Optional primary contact for company records
required: []
additionalProperties: {}
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: Client public ID
number:
type: string
description: Auto-generated client number
name:
type: string
description: Client name
type:
enum:
- company
- contact
description: Client type
firstName:
anyOf:
- type: string
- type: 'null'
description: First name (for contacts)
lastName:
anyOf:
- type: string
- type: 'null'
description: Last name (for contacts)
email:
anyOf:
- type: string
- type: 'null'
description: Email address
phone:
anyOf:
- type: string
- type: 'null'
description: Phone number
website:
anyOf:
- type: string
- type: 'null'
description: Website URL
stageId:
anyOf:
- type: string
- type: 'null'
description: Client stage public ID
createdAt:
type: string
format: date-time
x-native-type: date
description: When the client was created
customFields:
anyOf:
- type: object
propertyNames:
type: string
additionalProperties: {}
- type: 'null'
description: Custom field values
required:
- id
- number
- name
- type
- createdAt
delete:
operationId: clients.delete
summary: Delete a client
description: Permanently deletes a client. Will fail if the client has associated deals, invoices, or quotations.
tags:
- Clients
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Client public ID
requestBody:
required: false
content:
application/json:
schema:
type: object
properties: {}
required: []
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
required:
- success
components:
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: x-api-key
description: API key for authentication. Get yours at app.heffl.com/settings/developers