Supaglue SyncConfigs API

A `SyncConfig` is a configuration for how to sync your Customers' data from a Provider to a Destination on a schedule.

OpenAPI Specification

supaglue-syncconfigs-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  version: 0.25.7
  title: Unified CRM Accounts SyncConfigs 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: SyncConfigs
  description: A `SyncConfig` is a configuration for how to sync your Customers' data from a Provider to a Destination on a schedule.
paths:
  /sync_configs:
    get:
      operationId: getSyncConfigs
      tags:
      - SyncConfigs
      security:
      - x-api-key: []
      summary: List Sync Configs
      description: Get a list of Sync Configs
      responses:
        '200':
          description: SyncConfigs
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/sync_config'
        '400':
          $ref: '#/components/responses/badRequest'
        '401':
          $ref: '#/components/responses/unauthorized'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/notFound'
        '500':
          $ref: '#/components/responses/internalServerError'
        '501':
          $ref: '#/components/responses/notImplemented'
    post:
      operationId: createSyncConfig
      summary: Create Sync Config
      tags:
      - SyncConfigs
      security:
      - x-api-key: []
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/create_sync_config'
      responses:
        '201':
          description: SyncConfig created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/sync_config'
        '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'
        '500':
          $ref: '#/components/responses/internalServerError'
        '501':
          $ref: '#/components/responses/notImplemented'
  /sync_configs/{sync_config_id}:
    parameters:
    - name: sync_config_id
      in: path
      required: true
      schema:
        type: string
      example: d583ec72-55d4-4f35-9668-f6c759674cc1
    get:
      operationId: getSyncConfig
      summary: Get Sync Config
      tags:
      - SyncConfigs
      security:
      - x-api-key: []
      responses:
        '200':
          description: SyncConfig
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/sync_config'
        '400':
          $ref: '#/components/responses/badRequest'
        '401':
          $ref: '#/components/responses/unauthorized'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/notFound'
        '500':
          $ref: '#/components/responses/internalServerError'
        '501':
          $ref: '#/components/responses/notImplemented'
    put:
      operationId: updateSyncConfig
      summary: Update Sync Config
      description: ':::danger

        If `force_delete_syncs` is set to true, any syncs for any deleted objects will be cascadingly deleted for all customers with this sync config.

        :::

        '
      tags:
      - SyncConfigs
      security:
      - x-api-key: []
      parameters:
      - name: force_delete_syncs
        in: query
        required: false
        schema:
          type: boolean
        description: If true, any syncs for any deleted objects will be cascadingly deleted for all customers with this sync config
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update_sync_config'
      responses:
        '200':
          description: SyncConfig
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/sync_config'
        '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'
        '500':
          $ref: '#/components/responses/internalServerError'
        '501':
          $ref: '#/components/responses/notImplemented'
    delete:
      operationId: deleteSyncConfig
      summary: Delete Sync Config
      description: ':::danger

        If `force_delete_syncs` is set to true, all syncs for all customers with this sync config will be cascadingly deleted.

        :::

        '
      tags:
      - SyncConfigs
      security:
      - x-api-key: []
      parameters:
      - name: force_delete_syncs
        in: query
        required: false
        schema:
          type: boolean
        description: If true, all syncs for all customers with this sync config will be cascadingly deleted
      responses:
        '200':
          description: SyncConfig
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/sync_config'
        '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'
        '500':
          $ref: '#/components/responses/internalServerError'
        '501':
          $ref: '#/components/responses/notImplemented'
components:
  schemas:
    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
    sync_config_data:
      type: object
      properties:
        default_config:
          $ref: '#/components/schemas/sync_strategy_config'
        common_objects:
          description: A list of Supaglue objects to be synced.
          type: array
          items:
            type: object
            properties:
              object:
                type: string
                description: The Supaglue object name
                example: contact
              sync_strategy_override:
                $ref: '#/components/schemas/sync_strategy_config'
              associations_to_fetch:
                type: array
                description: "A list of associated objects to fetch when syncing this object. \nIf empty or unspecified, no additional associations will be fetched other than the ones required to populate the common model.\nOnly relevant for Hubspot.\n"
                items:
                  type: string
                  description: Name of the associated object to fetch
                  example: account
            required:
            - object
        standard_objects:
          description: A list of case-sensitive Provider objects to be synced.
          type: array
          items:
            type: object
            properties:
              object:
                type: string
                description: The Provider object name (case sensitive)
                example: Contact
              sync_strategy_override:
                $ref: '#/components/schemas/sync_strategy_config'
              associations_to_fetch:
                type: array
                description: "A list of associated objects to fetch when syncing this object. \nIf empty or unspecified, no associations will be fetched.\nOnly relevant for Hubspot.\n"
                items:
                  type: string
                  description: Name of the associated object to fetch
                  example: account
            required:
            - object
        custom_objects:
          description: A list of case-sensitive custom objects to be synced. Only supported for Salesforce and Hubspot.
          type: array
          items:
            type: object
            properties:
              object:
                type: string
                description: The custom object name (case sensitive). For Salesforce, this should end with `__c`.
                example: MyCustomObject__c
              sync_strategy_override:
                $ref: '#/components/schemas/sync_strategy_config'
              associations_to_fetch:
                type: array
                description: "A list of associated objects to fetch when syncing this object. \nIf empty or unspecified, no associations will be fetched.\nOnly relevant for Hubspot.\n"
                items:
                  type: string
                  description: Name of the associated object to fetch
                  example: account
            required:
            - object
        entities:
          type: array
          deprecated: true
          items:
            type: object
            properties:
              entity_id:
                type: string
                example: 3a82409f-c98f-4d25-bbd8-3335de3f12cc
            required:
            - entity_id
      required:
      - default_config
    create_sync_config:
      type: object
      properties:
        destination_name:
          type: string
          example: object
        provider_name:
          $ref: '#/components/schemas/provider_name'
        config:
          $ref: '#/components/schemas/sync_config_data'
      required:
      - destination_name
      - provider_name
      - config
    provider_name:
      type: string
      enum:
      - hubspot
      - salesforce
      - pipedrive
      - zendesk_sell
      - ms_dynamics_365_sales
      - zoho_crm
      - capsule
      - outreach
      - gong
      - apollo
      - salesloft
      - intercom
      - linear
      - clearbit
      - 6sense
      - marketo
      - salesforce_marketing_cloud_account_engagement
      - slack
      example: hubspot
    update_sync_config:
      type: object
      properties:
        config:
          $ref: '#/components/schemas/sync_config_data'
      required:
      - config
    sync_config:
      type: object
      properties:
        id:
          type: string
          example: 465fdcb7-26b4-4090-894c-67cab41022bb
        application_id:
          type: string
          example: 9572d08b-f19f-48cc-a992-1eb7031d3f6a
        destination_name:
          type: string
          example: postgres
        provider_name:
          $ref: '#/components/schemas/provider_name'
        config:
          $ref: '#/components/schemas/sync_config_data'
      required:
      - id
      - application_id
      - destination_name
      - provider_name
      - config
    sync_strategy_config:
      type: object
      description: Configuration options for "how" to sync.
      properties:
        period_ms:
          type: integer
          minimum: 60000
          example: 60000
          description: The period (in milliseconds) to run the sync.
        strategy:
          type: string
          enum:
          - full then incremental
          - full only
          description: \"full then incremental\" will run a full sync on the first run, then incremental syncs. \"full only\" will run a full sync on every run.
        auto_start_on_connection:
          type: boolean
          description: 'If true, the sync will start automatically when the connection is created.

            Default: true

            '
        full_sync_every_n_incrementals:
          type: number
          description: If set, Supaglue will run a full sync after N consecutive incremental syncs.
      required:
      - period_ms
      - strategy
  responses:
    conflict:
      description: Conflict
      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'
    internalServerError:
      description: Internal server error
      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'
    notImplemented:
      description: Not implemented
      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'
    unprocessableEntity:
      description: Unprocessable entity
      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'
  securitySchemes:
    x-api-key:
      type: apiKey
      name: x-api-key
      in: header
      description: API key to allow developers to access the API