Supaglue CustomObjectSchemas API
A `Custom Object Schema` is an object schema defined by the user.
A `Custom Object Schema` is an object schema defined by the user.
openapi: 3.0.3
info:
version: 0.25.7
title: Unified CRM Accounts CustomObjectSchemas 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: CustomObjectSchemas
description: A `Custom Object Schema` is an object schema defined by the user.
paths:
/metadata/custom_objects:
parameters:
- $ref: '#/components/parameters/x-customer-id'
- $ref: '#/components/parameters/x-provider-name'
get:
operationId: listCustomObjectSchemas
summary: List custom object schemas
tags:
- CustomObjectSchemas
security:
- x-api-key: []
description: 'List custom object schemas
Support:
| Provider | Supported |
| ----------- | --------- |
| Hubspot | Yes |
| Salesforce | Yes |
| Pipedrive | No |
| MS Dynamics | No |
'
parameters: []
responses:
'200':
description: An array containing the names and labels of Custom Objects
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/simple_custom_object_schema'
'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'
post:
operationId: createCustomObjectSchema
summary: Create custom object schema
tags:
- CustomObjectSchemas
parameters: []
description: 'Create custom object schema
Support:
| Provider | Supported | Notes |
| ----------- | --------- | ------------------------------------------------------- |
| Hubspot | Yes | All field types supported except picklist/multipicklist |
| Salesforce | Yes | All field types supported except picklist/multipicklist |
| Pipedrive | No | |
| MS Dynamics | No | |
'
security:
- x-api-key: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
object:
$ref: '#/components/schemas/create_custom_object_schema'
required:
- object
responses:
'201':
description: Custom Object Schema created
content:
application/json:
schema:
type: object
properties:
object:
type: object
properties:
name:
type: string
required:
- name
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'
/metadata/custom_objects/{object_name}:
parameters:
- $ref: '#/components/parameters/x-customer-id'
- $ref: '#/components/parameters/x-provider-name'
- $ref: '#/components/parameters/object_name'
get:
operationId: getCustomObjectSchema
summary: Get custom object schema details
tags:
- CustomObjectSchemas
security:
- x-api-key: []
description: 'Get custom object schema details
Support:
| Provider | Supported |
| ----------- | --------- |
| Hubspot | Yes |
| Salesforce | Yes |
| Pipedrive | No |
| MS Dynamics | No |
'
responses:
'200':
description: CustomObject
content:
application/json:
schema:
$ref: '#/components/schemas/custom_object_schema'
'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'
put:
operationId: updateCustomObjectSchema
summary: Update custom object schema
tags:
- CustomObjectSchemas
description: 'Update custom object schema
Support:
| Provider | Supported | Notes |
| ----------- | --------- | ------------------------------------------------------- |
| Hubspot | Yes | All field types supported except picklist/multipicklist |
| Salesforce | Yes | All field types supported except picklist/multipicklist |
| Pipedrive | No | |
| MS Dynamics | No | |
'
security:
- x-api-key: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
object:
$ref: '#/components/schemas/update_custom_object_schema'
required:
- object
responses:
'200':
description: Custom Object Schema 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:
create_custom_object_schema:
type: object
properties:
name:
type: string
example: ticket
description: The name you'd like to use for the custom object. For Salesforce, we will append `__c` if necessary. For HubSpot, it will pass through as-is.
description:
type: string
nullable: true
example: Ticket object
labels:
type: object
properties:
singular:
type: string
example: Ticket
plural:
type: string
example: Tickets
required:
- singular
- plural
primary_field_id:
type: string
description: The key name of the "primary" field. For example, in HubSpot, this is the field that will be displayed for a record in the UI by default. For Salesforce, this will be referenced as the "Name" field.
example: ticket_id
fields:
type: array
items:
$ref: '#/components/schemas/custom_object_field'
required:
- name
- description
- labels
- primary_field_id
- fields
property_type:
type: string
enum:
- text
- textarea
- number
- picklist
- multipicklist
- date
- datetime
- boolean
- url
- other
description: "Type of the field.\n\n:::note\n`picklist` and `multipicklist` property types are currently only supported in Salesforce and Hubspot\n:::\n\n:::note\n`url` property type currently is only natively supported in Salesforce.\n:::\n\nSupport:\n\n<table>\n <thead>\n <tr>\n <th>Type</th>\n <th>Hubspot (type-fieldType)</th>\n <th>Salesforce</th>\n <th>Pipedrive</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>text</td>\n <td>string-text</td>\n <td>Text</td>\n <td>varchar_auto</td>\n </tr>\n <tr>\n <td>textarea</td>\n <td>string-textarea</td>\n <td>Textarea</td>\n <td>text</td>\n </tr>\n <tr>\n <td>number</td>\n <td>number-number</td>\n <td>Int/Double (depending on scale)</td>\n <td>double</td>\n </tr>\n <tr>\n <td>picklist</td>\n <td>enumeration-select</td>\n <td>Picklist</td>\n <td>enum</td>\n </tr>\n <tr>\n <td>multipicklist</td>\n <td>enumeration-checkbox</td>\n <td>Multipicklist</td>\n <td>set</td>\n </tr>\n <tr>\n <td>date</td>\n <td>date-date</td>\n <td>Date</td>\n <td>date</td>\n </tr>\n <tr>\n <td>datetime</td>\n <td>datetime-date</td>\n <td>Datetime</td>\n <td>date</td>\n </tr>\n <tr>\n <td>boolean</td>\n <td>bool-booleancheckbox</td>\n <td>Checkbox</td>\n <td>enum</td>\n </tr>\n <tr>\n <td>url</td>\n <td>Not Supported</td>\n <td>Url</td>\n <td>Not Supported</td>\n </tr>\n </tbody>\n </table>\n"
simple_custom_object_schema:
type: object
properties:
name:
type: string
example: ticket
labels:
type: object
properties:
singular:
type: string
example: Ticket
plural:
type: string
example: Tickets
required:
- singular
- plural
required:
- name
- label
custom_object_schema:
type: object
properties:
name:
type: string
example: ticket
description:
type: string
nullable: true
example: Ticket object
labels:
type: object
properties:
singular:
type: string
example: Ticket
plural:
type: string
example: Tickets
required:
- singular
- plural
fields:
type: array
items:
$ref: '#/components/schemas/custom_object_field'
required:
- name
- description
- labels
- fields
warnings:
type: array
items:
type: object
properties:
detail:
type: string
problem_type:
type: string
title:
type: string
update_custom_object_schema:
type: object
properties:
description:
type: string
nullable: true
example: Ticket object
labels:
type: object
properties:
singular:
type: string
example: Ticket
plural:
type: string
example: Tickets
required:
- singular
- plural
primary_field_id:
type: string
description: The key name of the "primary" field. For example, in HubSpot, this is the field that will be displayed for a record in the UI by default. For Salesforce, this will be referenced as the "Name" field.
example: ticket_id
fields:
type: array
items:
$ref: '#/components/schemas/custom_object_field'
required:
- description
- labels
- primary_field_id
- fields
picklist_option:
type: object
properties:
label:
type: string
example: Option 1
value:
type: string
example: option_1
description:
type: string
description: A description of this option.
hidden:
type: boolean
description: Defaults to false.
required:
- label
- value
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
custom_object_field:
type: object
properties:
id:
type: string
description: The machine name of the property as it appears in the third-party Provider. In Salesforce, this must end with `__c`.
example: FirstName
label:
type: string
description: The human-readable name of the property as provided by the third-party Provider.
example: First Name
description:
type: string
description: A description of the field.
is_required:
type: boolean
description: Whether or not this field is required. Must be false for Salesforce boolean fields.
example: false
default_value:
description: The default value for the property. Only supported for Salesforce.
oneOf:
- type: string
- type: number
- type: boolean
group_name:
type: string
example: supaglue
description: Only applicable for Hubspot. If specified, Supaglue will attempt to attach the field to this group if it exists, or create it if it doesn't.
type:
$ref: '#/components/schemas/property_type'
precision:
type: number
description: Only applicable in Salesforce. If not given, will default to 18.
scale:
type: number
description: Only applicable in Salesforce. If not given, will default to 0.
options:
type: array
description: The list of options for a picklist/multipicklist field.
items:
$ref: '#/components/schemas/picklist_option'
raw_details:
type: object
description: The raw details of the property as provided by the third-party Provider, if available.
additionalProperties: true
example: {}
required:
- id
- label
- type
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:
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
object_name:
name: object_name
in: path
schema:
type: string
example: MyCustomObject__c
description: The unique name of the custom object. For Salesforce, this should end with __c. For Hubspot, this will typically be the singular form of the object.
required: true
securitySchemes:
x-api-key:
type: apiKey
name: x-api-key
in: header
description: API key to allow developers to access the API