Supaglue CustomObjectSchemas API

A `Custom Object Schema` is an object schema defined by the user.

OpenAPI Specification

supaglue-customobjectschemas-api-openapi.yml Raw ↑
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