Supaglue Leads API
The `Lead` Common Object represents a "potential customer" in CRMs.
The `Lead` Common Object represents a "potential customer" in CRMs.
openapi: 3.0.3
info:
version: 0.25.7
title: Unified CRM Accounts Leads API
contact:
name: Supaglue
email: docs@supaglue.com
url: https://supaglue.com
description: '#### Introduction
Welcome to the Unified API (CRM) documentation. You can use this API to write to multiple third-party providers within the CRM category.
[View common schema for CRM](https://docs.supaglue.com/platform/common-schemas/crm)
#### Base API URL
```
https://api.supaglue.io/crm/v2
```
'
servers:
- url: https://api.supaglue.io/crm/v2
description: Supaglue API
tags:
- name: Leads
description: The `Lead` Common Object represents a "potential customer" in CRMs.
paths:
/leads:
parameters:
- $ref: '#/components/parameters/x-customer-id'
- $ref: '#/components/parameters/x-provider-name'
post:
operationId: createLead
summary: Create lead
tags:
- Leads
security:
- x-api-key: []
parameters: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
record:
$ref: '#/components/schemas/create_update_lead'
required:
- record
example:
record:
company: Supaglue
first_name: George
last_name: Xing
lead_source: API Blogger
title: Co-Founder
responses:
'201':
description: Lead created
content:
application/json:
schema:
type: object
properties:
record:
$ref: '#/components/schemas/created_record'
warnings:
$ref: '#/components/schemas/warnings'
'400':
$ref: '#/components/responses/badRequest'
'401':
$ref: '#/components/responses/unauthorized'
'403':
$ref: '#/components/responses/forbidden'
'404':
$ref: '#/components/responses/notFound'
'409':
$ref: '#/components/responses/conflict'
'422':
$ref: '#/components/responses/unprocessableEntity'
'499':
$ref: '#/components/responses/remoteProviderError'
'500':
$ref: '#/components/responses/internalServerError'
'501':
$ref: '#/components/responses/notImplemented'
get:
operationId: listLeads
summary: List leads
tags:
- Leads
security:
- x-api-key: []
parameters:
- $ref: '#/components/parameters/include_raw_data'
- $ref: '#/components/parameters/read_from_cache'
- $ref: '#/components/parameters/modified_after'
- $ref: '#/components/parameters/page_size'
- $ref: '#/components/parameters/cursor'
responses:
'200':
description: Paginated Leads
content:
application/json:
schema:
type: object
properties:
pagination:
$ref: '#/components/schemas/pagination'
records:
type: array
items:
$ref: '#/components/schemas/lead'
required:
- pagination
- records
'400':
$ref: '#/components/responses/badRequest'
'401':
$ref: '#/components/responses/unauthorized'
'403':
$ref: '#/components/responses/forbidden'
'404':
$ref: '#/components/responses/notFound'
'499':
$ref: '#/components/responses/remoteProviderError'
'500':
$ref: '#/components/responses/internalServerError'
'501':
$ref: '#/components/responses/notImplemented'
/leads/_upsert:
parameters:
- $ref: '#/components/parameters/x-customer-id'
- $ref: '#/components/parameters/x-provider-name'
post:
operationId: upsertLead
summary: Upsert lead
description: 'Upsert a lead. If the lead does not exist, it will be created. If the lead does exist, it will be updated.
Only supported for Salesforce.
'
tags:
- Leads
security:
- x-api-key: []
parameters: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
record:
$ref: '#/components/schemas/create_update_lead'
upsert_on:
type: object
properties:
key:
type: string
enum:
- email
description: The key to upsert on. Only `email` is supported.
values:
type: array
description: The values to upsert on. If more than one value is provided, it will act as a logical OR. If more than one account is found that matches, then an error will be thrown.
items:
type: string
example: hello@example.com
required:
- key
- values
required:
- record
- upsert_on
responses:
'201':
description: Lead upserted
content:
application/json:
schema:
type: object
properties:
record:
$ref: '#/components/schemas/created_record'
warnings:
$ref: '#/components/schemas/warnings'
'400':
$ref: '#/components/responses/badRequest'
'401':
$ref: '#/components/responses/unauthorized'
'403':
$ref: '#/components/responses/forbidden'
'404':
$ref: '#/components/responses/notFound'
'409':
$ref: '#/components/responses/conflict'
'422':
$ref: '#/components/responses/unprocessableEntity'
'499':
$ref: '#/components/responses/remoteProviderError'
'500':
$ref: '#/components/responses/internalServerError'
'501':
$ref: '#/components/responses/notImplemented'
/leads/_search:
parameters:
- $ref: '#/components/parameters/x-customer-id'
- $ref: '#/components/parameters/x-provider-name'
post:
operationId: searchLeads
summary: Search leads
description: 'Search leads by a filter.
Support:
| Provider | Search By |
| ----------- | --------------- |
| Hubspot | Email |
| Salesforce | Email |
| Pipedrive | (Not Supported) |
| MS Dynamics | (Not Supported) |
'
tags:
- Leads
security:
- x-api-key: []
parameters:
- $ref: '#/components/parameters/include_raw_data'
- $ref: '#/components/parameters/page_size'
- $ref: '#/components/parameters/cursor'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
filter:
type: object
properties:
email:
type: string
description: The email to search on.
example: hello@example.com
required:
- email
required:
- filter
responses:
'200':
description: Paginated Leads
content:
application/json:
schema:
type: object
properties:
pagination:
$ref: '#/components/schemas/pagination'
records:
type: array
items:
$ref: '#/components/schemas/lead'
required:
- pagination
- records
'400':
$ref: '#/components/responses/badRequest'
'401':
$ref: '#/components/responses/unauthorized'
'403':
$ref: '#/components/responses/forbidden'
'404':
$ref: '#/components/responses/notFound'
'409':
$ref: '#/components/responses/conflict'
'422':
$ref: '#/components/responses/unprocessableEntity'
'499':
$ref: '#/components/responses/remoteProviderError'
'500':
$ref: '#/components/responses/internalServerError'
'501':
$ref: '#/components/responses/notImplemented'
/leads/{lead_id}:
parameters:
- $ref: '#/components/parameters/x-customer-id'
- $ref: '#/components/parameters/x-provider-name'
- name: lead_id
in: path
required: true
schema:
type: string
example: 82de27cb-6f8c-4278-b783-82d1d916eddc
get:
operationId: getLead
summary: Get lead
tags:
- Leads
security:
- x-api-key: []
parameters:
- $ref: '#/components/parameters/include_raw_data'
responses:
'200':
description: Lead
content:
application/json:
schema:
$ref: '#/components/schemas/lead'
patch:
operationId: updateLead
summary: Update lead
tags:
- Leads
security:
- x-api-key: []
parameters: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
record:
$ref: '#/components/schemas/create_update_lead'
required:
- record
examples:
Example:
value:
record:
company: Supaglue
first_name: George
last_name: Xing
lead_source: API Blogger
title: Co-Founder
responses:
'200':
description: Lead updated
content:
application/json:
schema:
type: object
properties:
warnings:
$ref: '#/components/schemas/warnings'
'400':
$ref: '#/components/responses/badRequest'
'401':
$ref: '#/components/responses/unauthorized'
'403':
$ref: '#/components/responses/forbidden'
'404':
$ref: '#/components/responses/notFound'
'409':
$ref: '#/components/responses/conflict'
'422':
$ref: '#/components/responses/unprocessableEntity'
'499':
$ref: '#/components/responses/remoteProviderError'
'500':
$ref: '#/components/responses/internalServerError'
'501':
$ref: '#/components/responses/notImplemented'
components:
schemas:
lifecycle_stage:
type: string
nullable: true
enum:
- subscriber
- lead
- marketingqualifiedlead
- salesqualifiedlead
- opportunity
- customer
- evangelist
- other
lead:
type: object
properties:
addresses:
$ref: '#/components/schemas/addresses'
company:
type: string
nullable: true
example: Supaglue
converted_account_id:
type: string
nullable: true
example: 88cc44ca-7a34-4e8b-b0da-51c3aae34daf
converted_account:
$ref: '#/components/schemas/account'
converted_contact_id:
type: string
nullable: true
example: 8c8de778-a219-4d6c-848c-1d57b52149f6
converted_contact:
$ref: '#/components/schemas/contact'
converted_date:
type: string
nullable: true
format: date-time
example: '2023-02-27T00:00:00Z'
email_addresses:
$ref: '#/components/schemas/email_addresses'
first_name:
type: string
nullable: true
example: George
id:
type: string
example: 54312
last_name:
type: string
nullable: true
example: Xing
lead_source:
type: string
nullable: true
example: API Blogger
owner_id:
type: string
nullable: true
example: 62e5e0f7-becd-4ae2-be82-8b4e1d5ed8a2
phone_numbers:
$ref: '#/components/schemas/phone_numbers'
title:
type: string
nullable: true
example: Co-Founder
created_at:
type: string
nullable: true
format: date-time
example: '2023-02-10T00:00:00Z'
updated_at:
type: string
nullable: true
format: date-time
example: '2023-02-10T00:00:00Z'
is_deleted:
type: boolean
example: false
last_modified_at:
type: string
format: date-time
example: '2022-02-27T00:00:00Z'
required:
- addresses
- company
- converted_account_id
- converted_contact_id
- converted_date
- id
- last_name
- lead_source
- owner_id
- phone_numbers
- title
- created_at
- updated_at
- is_deleted
- last_modified_at
warnings:
type: array
items:
type: object
properties:
detail:
type: string
problem_type:
type: string
title:
type: string
account:
type: object
properties:
addresses:
$ref: '#/components/schemas/addresses'
description:
type: string
nullable: true
example: Integration API
id:
type: string
example: 1234
industry:
type: string
nullable: true
example: API's
last_activity_at:
type: string
nullable: true
format: date-time
example: '2022-02-27T00:00:00Z'
name:
type: string
nullable: true
example: Sample Customer
number_of_employees:
type: integer
nullable: true
example: 276000
owner_id:
type: string
nullable: true
example: d8ceb3ff-8b7f-4fa7-b8de-849292f6ca69
phone_numbers:
$ref: '#/components/schemas/phone_numbers'
lifecycle_stage:
$ref: '#/components/schemas/lifecycle_stage'
website:
type: string
nullable: true
example: https://supaglue.com/
created_at:
type: string
nullable: true
format: date-time
example: '2022-02-27T00:00:00Z'
updated_at:
type: string
nullable: true
format: date-time
example: '2022-02-27T00:00:00Z'
is_deleted:
type: boolean
example: false
last_modified_at:
type: string
format: date-time
example: '2022-02-27T00:00:00Z'
required:
- addresses
- description
- id
- industry
- last_activity_at
- name
- number_of_employees
- owner_id
- phone_numbers
- website
- lifecycle_stage
- created_at
- updated_at
- is_deleted
- last_modified_at
addresses:
type: array
items:
type: object
properties:
address_type:
type: string
enum:
- primary
- mailing
- other
- billing
- shipping
city:
type: string
nullable: true
example: San Francisco
country:
type: string
nullable: true
example: USA
postal_code:
type: string
nullable: true
example: '94107'
state:
type: string
nullable: true
example: CA
street_1:
type: string
nullable: true
example: 525 Brannan
street_2:
type: string
nullable: true
example: null
required:
- address_type
- city
- country
- postal_code
- state
- street_1
- street_2
example:
- address_type: shipping
city: San Francisco
country: US
postal_code: '94107'
state: CA
street_1: 525 Brannan
street_2: null
email_addresses:
type: array
items:
type: object
properties:
email_address:
type: string
example: hello@supaglue.com
email_address_type:
type: string
enum:
- primary
- work
- other
required:
- email_address
- email_address_type
example:
- email_address: hello@supaglue.com
email_address_type: work
created_record:
type: object
properties:
id:
type: string
required:
- id
phone_numbers:
type: array
items:
type: object
properties:
phone_number:
type: string
nullable: true
example: '+14151234567'
phone_number_type:
type: string
enum:
- primary
- mobile
- fax
- other
required:
- phone_number
- phone_number_type
example:
- phone_number: '+14151234567'
phone_number_type: primary
contact:
type: object
properties:
account_id:
type: string
nullable: true
example: fd089246-09b1-4e3b-a60a-7a76314bbcce
owner_id:
type: string
nullable: true
example: 23e640fe-6105-4a11-a636-3aa6b6c6e762
addresses:
$ref: '#/components/schemas/addresses'
email_addresses:
$ref: '#/components/schemas/email_addresses'
first_name:
type: string
nullable: true
example: George
id:
type: string
example: 54312
last_activity_at:
type: string
nullable: true
format: date-time
example: '2022-02-27T00:00:00Z'
last_name:
type: string
nullable: true
example: Xing
phone_numbers:
$ref: '#/components/schemas/phone_numbers'
lifecycle_stage:
$ref: '#/components/schemas/lifecycle_stage'
created_at:
type: string
nullable: true
format: date-time
example: '2022-02-27T00:00:00Z'
updated_at:
type: string
nullable: true
format: date-time
example: '2022-02-27T00:00:00Z'
is_deleted:
type: boolean
example: false
last_modified_at:
type: string
format: date-time
example: '2022-02-27T00:00:00Z'
raw_data:
type: object
additionalProperties: true
required:
- account_id
- owner_id
- description
- id
- addresses
- email_addresses
- first_name
- last_activity_at
- last_name
- phone_numbers
- lifecycle_stage
- created_at
- updated_at
- is_deleted
- last_modified_at
errors:
type: array
items:
type: object
properties:
id:
type: string
description: A unique identifier for the instance of the error. Provide this to support when contacting Supaglue.
example: 9366efb4-8fb1-4a28-bfb0-8d6f9cc6b5c5
detail:
type: string
description: A detailed description of the error.
example: 'Property values were not valid: [{"isValid":false,"message":"Property \"__about_us\" does not exist","error":"PROPERTY_DOESNT_EXIST","name":"__about_us","localizedErrorMessage":"Property \"__about_us\" does not exist"}]'
problem_type:
type: string
description: The Supaglue error code associated with the error.
example: MISSING_REQUIRED_FIELD
deprecated: true
title:
type: string
description: A brief description of the error. The schema and type of message will vary by Provider.
example: 'Property values were not valid
'
code:
type: string
description: The Supaglue error code associated with the error.
example: MISSING_REQUIRED_FIELD
status:
type: string
description: The HTTP status code associated with the error.
example: '400'
meta:
type: object
description: Additional metadata about the error.
properties:
cause:
type: object
description: The cause of the error. Usually the underlying error from the remote Provider.
example:
code: 400
body:
status: error
message: 'Property values were not valid: [{"isValid":false,"message":"Property \"__about_us\" does not exist","error":"PROPERTY_DOESNT_EXIST","name":"__about_us","localizedErrorMessage":"Property \"__about_us\" does not exist"}]'
correlationId: ac94252c-90b5-45d2-ad1d-9a9f7651d7d2
category: VALIDATION_ERROR
headers:
access-control-allow-credentials: 'false'
cf-cache-status: DYNAMIC
cf-ray: 8053d17b9dae9664-SJC
connection: close
content-length: '361'
content-type: application/json;charset=utf-8
date: Mon, 11 Sep 2023 23:51:22 GMT
nel: '{"success_fraction":0.01,"report_to":"cf-nel","max_age":604800}'
report-to: '{"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v3?s=FgwuXObO%2Fz6ahUJKsxjDLaXTWjooJ8tB0w4%2B%2BKaulGStx0FGkn1PoJoOx2KrFMfihzNdfAqikq7CmgbdlmwKB8hkmp3eTb68qpg10LXFlRgiSqRhbWM7yYSfo8CXmPBc"}],"group":"cf-nel","max_age":604800}'
server: cloudflare
strict-transport-security: max-age=31536000; includeSubDomains; preload
vary: origin, Accept-Encoding
x-content-type-options: nosniff
x-envoy-upstream-service-time: '91'
x-evy-trace-listener: listener_https
x-evy-trace-route-configuration: listener_https/all
x-evy-trace-route-service-name: envoyset-translator
x-evy-trace-served-by-pod: iad02/hubapi-td/envoy-proxy-6c94986c56-9xsh2
x-evy-trace-virtual-host: all
x-hubspot-correlation-id: ac94252c-90b5-45d2-ad1d-9a9f7651d7d2
x-hubspot-ratelimit-interval-milliseconds: '10000'
x-hubspot-ratelimit-max: '100'
x-hubspot-ratelimit-remaining: '99'
x-hubspot-ratelimit-secondly: '10'
x-hubspot-ratelimit-secondly-remaining: '9'
x-request-id: ac94252c-90b5-45d2-ad1d-9a9f7651d7d2
x-trace: 2B1B4386362759B6A4C34802AD168B803DDC1BE770000000000000000000
origin:
type: string
enum:
- remote-provider
- supaglue
description: The origin of the error.
example: remote-provider
application_name:
type: string
description: The name of the application that generated the error.
example: MyCompany Production
required:
- origin
additionalProperties: true
required:
- id
- detail
- problem_type
- title
- code
- status
- meta
example:
- meta:
cause:
code: 400
body:
status: error
message: 'Property values were not valid: [{"isValid":false,"message":"Property \"__about_us\" does not exist","error":"PROPERTY_DOESNT_EXIST","name":"__about_us","localizedErrorMessage":"Property \"__about_us\" does not exist"}]'
correlationId: ac94252c-90b5-45d2-ad1d-9a9f7651d7d2
category: VALIDATION_ERROR
headers:
access-control-allow-credentials: 'false'
cf-cache-status: DYNAMIC
cf-ray: 8053d17b9dae9664-SJC
connection: close
content-length: '361'
content-type: application/json;charset=utf-8
date: Mon, 11 Sep 2023 23:51:22 GMT
nel: '{"success_fraction":0.01,"report_to":"cf-nel","max_age":604800}'
report-to: '{"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v3?s=FgwuXObO%2Fz6ahUJKsxjDLaXTWjooJ8tB0w4%2B%2BKaulGStx0FGkn1PoJoOx2KrFMfihzNdfAqikq7CmgbdlmwKB8hkmp3eTb68qpg10LXFlRgiSqRhbWM7yYSfo8CXmPBc"}],"group":"cf-nel","max_age":604800}'
server: cloudflare
strict-transport-security: max-age=31536000; includeSubDomains; preload
vary: origin, Accept-Encoding
x-content-type-options: nosniff
x-envoy-upstream-service-time: '91'
x-evy-trace-listener: listener_https
x-evy-trace-route-configuration: listener_https/all
x-evy-trace-route-service-name: envoyset-translator
x-evy-trace-served-by-pod: iad02/hubapi-td/envoy-proxy-6c94986c56-9xsh2
x-evy-trace-virtual-host: all
x-hubspot-correlation-id: ac94252c-90b5-45d2-ad1d-9a9f7651d7d2
x-hubspot-ratelimit-interval-milliseconds: '10000'
x-hubspot-ratelimit-max: '100'
x-hubspot-ratelimit-remaining: '99'
x-hubspot-ratelimit-secondly: '10'
x-hubspot-ratelimit-secondly-remaining: '9'
x-request-id: ac94252c-90b5-45d2-ad1d-9a9f7651d7d2
x-trace: 2B1B4386362759B6A4C34802AD168B803DDC1BE770000000000000000000
detail: 'Property values were not valid: [{"isValid":false,"message":"Property \"__about_us\" does not exist","error":"PROPERTY_DOESNT_EXIST","name":"__about_us","localizedErrorMessage":"Property \"__about_us\" does not exist"}]'
problem_type: MISSING_REQUIRED_FIELD
title: 'Property values were not valid
'
code: MISSING_REQUIRED_FIELD
status: '400'
id: 9366efb4-8fb1-4a28-bfb0-8d6f9cc6b5c5
create_update_lead:
type: object
properties:
company:
type: string
nullable: true
example: Supaglue
first_name:
type: string
nullable: true
example: George
last_name:
type: string
nullable: true
example: Xing
lead_source:
type: string
nullable: true
example: API Blogger
title:
type: string
example: Co-Founder
email_addresses:
$ref: '#/components/schemas/email_addresses'
addresses:
$ref: '#/components/schemas/addresses'
owner_id:
type: string
nullable: true
example: 9f3e97fd-4d5d-4efc-959d-bbebfac079f5
converted_contact_id:
type: string
nullable: true
example: ad43955d-2b27-4ec3-b38a-0ca07a76d43b
converted_account_id:
type: string
nullable: true
example: 2e1e6813-0459-47f5-ad4c-3d137c0e1fdd
custom_fields:
$ref: '#/components/schemas/custom_fields'
pagination:
type: object
properties:
next:
type: string
nullable: true
example: eyJpZCI6IjQyNTc5ZjczLTg1MjQtNDU3MC05YjY3LWVjYmQ3MDJjNmIxNCIsInJldmVyc2UiOmZhbHNlfQ==
previous:
type: string
nullable: true
example: eyJpZCI6IjBjZDhmYmZkLWU5NmQtNDEwZC05ZjQxLWIwMjU1YjdmNGI4NyIsInJldmVyc2UiOnRydWV9
total_count:
type: number
example: 100
required:
- next
- previous
custom_fields:
type: object
additionalProperties: true
description: Custom properties to be inserted that are not covered by the common object. Object keys must match exactly to the corresponding provider API.
responses:
conflict:
description: Conflict
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
notImplemented:
description: Not implemented
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
unprocessableEntity:
description: Unprocessable entity
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
badRequest:
description: Bad request
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
notFound:
description: Not found
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
forbidden:
description: Forbidden
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
unauthorized:
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
internalServerError:
description: Internal server error
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
remoteProviderError:
description: Remote provider error
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
parameters:
read_from_cache:
name: read_from_cache
in: query
schema:
type: boolean
example: true
description: "Whether to read from Supaglue's Managed Destination cache or to read directly from the provider. \n\n\n**NOTE**: `read_from_cache=true` requires you to have the object synced to the Supaglue Managed Destination.\n"
page_size:
name: page_size
in: query
schema:
type: string
example: 123
description: 'Number of results to return per page. (Max: 1000)'
x-customer-id:
name: x-customer-id
in: header
schema:
type: string
example: my-customer-1
description: The customer ID that uniquely identifies the customer in your application
required: true
x-provider-name:
name: x-provider-name
in: header
schema:
type: string
example: salesforce
description: The provider name
required: true
include_raw_data:
name: include_raw_data
in: query
schema:
type: boolean
description: Whether to include raw data fetched from the 3rd party provider.
example: true
modified_after:
name: modified_after
in: query
schema:
type: string
format: date-time
description: If provided, w
# --- truncated at 32 KB (32 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/supaglue/refs/heads/main/openapi/supaglue-leads-api-openapi.yml