Ampersand Objects & Fields API

The Objects & Fields API from Ampersand — 4 operation(s) for objects & fields.

OpenAPI Specification

ampersand-objects-fields-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Ampersand public API Key Objects & Fields API
  version: 1.0.0
servers:
- url: https://api.withampersand.com/v1
security:
- APIKeyHeader: []
- Bearer: []
tags:
- name: Objects & Fields
paths:
  /projects/{projectIdOrName}/integrations/{integrationId}/objects/{objectName}/metadata:
    get:
      summary: Ampersand Get Object Metadata via Installation
      description: 'Retrieves metadata about an object in a customer''s SaaS instance, including its fields. An installation must exist for the given `groupRef` and `integrationId`. The `objectName` can be either the mapped name from your integration config or the native provider name. For Salesforce, nested fields may be included using JSONPath bracket notation (e.g. `$[''billingaddress''][''city'']`).

        '
      tags:
      - Objects & Fields
      operationId: getObjectMetadataForInstallation
      parameters:
      - name: projectIdOrName
        in: path
        required: true
        description: The Ampersand project ID or project name.
        schema:
          type: string
        example: my-project
      - name: integrationId
        in: path
        required: true
        description: The unique identifier of the integration.
        schema:
          type: string
        example: e3a7f9c1-4b2d-4e8a-9f6b-2d5c8a1e3b7f
      - name: objectName
        in: path
        required: true
        description: 'The name of the object to retrieve metadata for. You can use either the mapped name from your integration config (e.g. `people`) or the native provider object name (e.g. `contact`).

          '
        schema:
          type: string
        example: account
      - name: groupRef
        in: query
        required: true
        description: The ID of the user group that has access to this installation.
        example: group-123
        schema:
          type: string
      - name: excludeReadOnly
        in: query
        required: false
        description: Excludes fields where `ReadOnly` is `true` from the response.
        example: true
        schema:
          type: boolean
      responses:
        '200':
          description: The retrieved object metadata.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectMetadata'
              example:
                name: account
                displayName: Account
                mappedObjectName: companies
                fields:
                  name:
                    fieldName: name
                    displayName: Account Name
                    valueType: string
                    providerType: string
                    readOnly: false
                    isCustom: false
                    isRequired: true
                  billingcity:
                    fieldName: billingcity
                    displayName: Billing City
                    valueType: string
                    providerType: string
                    readOnly: false
                    isCustom: false
                    isRequired: false
                  industry:
                    fieldName: industry
                    displayName: Industry
                    valueType: singleSelect
                    providerType: picklist
                    readOnly: false
                    isCustom: false
                    isRequired: false
                    values:
                    - value: technology
                      displayValue: Technology
                    - value: finance
                      displayValue: Finance
        default:
          description: Error
          content:
            application/problem+json:
              schema:
                $ref: ../problem/problem.yaml#/components/schemas/ApiProblem
  /projects/{projectIdOrName}/providers/{provider}/objects/{objectName}/metadata:
    get:
      summary: Ampersand Get Object Metadata via Connection
      description: 'Retrieves metadata about an object in a customer''s SaaS instance, including its fields. A connection must exist for the given `groupRef` and `provider`. For Salesforce, nested fields may be included using JSONPath bracket notation (e.g. `$[''billingaddress''][''city'']`).

        '
      tags:
      - Objects & Fields
      operationId: getObjectMetadataForConnection
      parameters:
      - name: projectIdOrName
        in: path
        required: true
        description: The Ampersand project ID or project name.
        schema:
          type: string
        example: my-project
      - name: provider
        in: path
        required: true
        description: The provider name (e.g. `salesforce`, `hubspot`).
        schema:
          type: string
        example: salesforce
      - name: objectName
        in: path
        required: true
        description: The native provider object name to retrieve metadata for.
        schema:
          type: string
        example: contact
      - name: groupRef
        in: query
        required: true
        description: The ID of the user group whose connection should be used to fetch the metadata.
        example: group-123
        schema:
          type: string
      - name: excludeReadOnly
        in: query
        required: false
        description: Excludes fields where `ReadOnly` is `true` from the response.
        example: true
        schema:
          type: boolean
      responses:
        '200':
          description: The retrieved object metadata.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectMetadata'
              example:
                name: contact
                displayName: Contact
                fields:
                  firstname:
                    fieldName: firstname
                    displayName: First Name
                    valueType: string
                    providerType: string
                    readOnly: false
                    isCustom: false
                    isRequired: true
                  email:
                    fieldName: email
                    displayName: Email
                    valueType: string
                    providerType: string
                    readOnly: false
                    isCustom: false
                    isRequired: false
                  lifecyclestage:
                    fieldName: lifecyclestage
                    displayName: Lifecycle Stage
                    valueType: singleSelect
                    providerType: enumeration
                    readOnly: false
                    isCustom: false
                    isRequired: false
                    values:
                    - value: lead
                      displayValue: Lead
                    - value: customer
                      displayValue: Customer
        default:
          description: Error
          content:
            application/problem+json:
              schema:
                $ref: ../problem/problem.yaml#/components/schemas/ApiProblem
  /projects/{projectIdOrName}/integrations/{integrationId}/object-metadata:
    put:
      summary: Ampersand Upsert Custom Fields for Installation
      operationId: upsertMetadataForInstallation
      description: Create or update fields in the SaaS instance tied to an installation. Only HubSpot and Salesforce are supported currently.
      tags:
      - Objects & Fields
      parameters:
      - name: projectIdOrName
        in: path
        required: true
        description: The Ampersand project ID or project name.
        schema:
          type: string
        example: my-project
      - name: integrationId
        in: path
        required: true
        description: The integration ID.
        schema:
          type: string
        example: 32356abe-d2fd-49c7-9030-abdcbc6456d4
      requestBody:
        required: true
        description: Metadata upsert request containing field definitions to create or update
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpsertMetadataRequest'
            examples:
              createTextFields:
                summary: Create text fields on multiple objects
                value:
                  groupRef: group-123
                  fields:
                    Account:
                    - fieldName: Industry
                      displayName: Industry Sector
                      description: The industry this account operates in
                      valueType: string
                      required: false
                      stringOptions:
                        length: 255
                        defaultValue: Technology
                    - fieldName: Company_Size
                      displayName: Company Size
                      valueType: string
                      stringOptions:
                        values:
                        - Small
                        - Medium
                        - Large
                        - Enterprise
                        valuesRestricted: true
                    Contact:
                    - fieldName: Seniority_Level
                      displayName: Seniority Level
                      valueType: string
                      stringOptions:
                        values:
                        - Junior
                        - Mid
                        - Senior
                        - Executive
                        valuesRestricted: true
              createNumericFields:
                summary: Create numeric fields with constraints
                value:
                  groupRef: group-123
                  fields:
                    Opportunity:
                    - fieldName: Deal_Score
                      displayName: Deal Score
                      description: Likelihood score from 0-100
                      valueType: float
                      required: true
                      numericOptions:
                        precision: 5
                        scale: 2
                        min: 0
                        max: 100
                        defaultValue: 50
              createAssociationField:
                summary: Create field with association to another object
                value:
                  groupRef: group-123
                  fields:
                    Task:
                    - fieldName: Related_Contact
                      displayName: Related Contact
                      valueType: string
                      association:
                        associationType: lookup
                        targetObject: Contact
                        targetField: Id
                        cardinality: many-to-one
                        required: false
                        labels:
                          singular: Contact
                          plural: Contacts
      responses:
        '200':
          description: Metadata creation completed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpsertMetadataResponse'
        '400':
          description: Invalid request payload or validation errors
          content:
            application/problem+json:
              schema:
                $ref: ../problem/problem.yaml#/components/schemas/ApiProblem
        '401':
          description: Authentication required
          content:
            application/problem+json:
              schema:
                $ref: ../problem/problem.yaml#/components/schemas/ApiProblem
        '403':
          description: Insufficient permissions for metadata operations
          content:
            application/problem+json:
              schema:
                $ref: ../problem/problem.yaml#/components/schemas/ApiProblem
        '404':
          description: Project, integration, or installation not found
          content:
            application/problem+json:
              schema:
                $ref: ../problem/problem.yaml#/components/schemas/ApiProblem
        '500':
          description: Internal server error
          content:
            application/problem+json:
              schema:
                $ref: ../problem/problem.yaml#/components/schemas/ApiProblem
  /projects/{projectIdOrName}/providers/{provider}/object-metadata:
    put:
      summary: Ampersand Upsert Custom Fields for Connection
      operationId: upsertMetadataForConnection
      description: Create or update fields in the SaaS instance tied to a connection. Only HubSpot and Salesforce are supported currently.
      tags:
      - Objects & Fields
      parameters:
      - name: projectIdOrName
        in: path
        required: true
        description: The Ampersand project ID or project name.
        schema:
          type: string
        example: my-project
      - name: provider
        in: path
        required: true
        description: The provider that this connection connects to.
        schema:
          type: string
        example: salesforce
      requestBody:
        required: true
        description: Metadata upsert request containing field definitions to create or update
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpsertMetadataRequest'
            examples:
              createTextFields:
                summary: Create text fields on multiple objects
                value:
                  groupRef: group-123
                  fields:
                    Account:
                    - fieldName: Industry
                      displayName: Industry Sector
                      description: The industry this account operates in
                      valueType: string
                      required: false
                      stringOptions:
                        length: 255
                        defaultValue: Technology
                    - fieldName: Company_Size
                      displayName: Company Size
                      valueType: string
                      stringOptions:
                        values:
                        - Small
                        - Medium
                        - Large
                        - Enterprise
                        valuesRestricted: true
                    Contact:
                    - fieldName: Seniority_Level
                      displayName: Seniority Level
                      valueType: string
                      stringOptions:
                        values:
                        - Junior
                        - Mid
                        - Senior
                        - Executive
                        valuesRestricted: true
              createNumericFields:
                summary: Create numeric fields with constraints
                value:
                  groupRef: group-123
                  fields:
                    Opportunity:
                    - fieldName: Deal_Score
                      displayName: Deal Score
                      description: Likelihood score from 0-100
                      valueType: float
                      required: true
                      numericOptions:
                        precision: 5
                        scale: 2
                        min: 0
                        max: 100
                        defaultValue: 50
              createAssociationField:
                summary: Create field with association to another object
                value:
                  groupRef: group-123
                  fields:
                    Task:
                    - fieldName: Related_Contact
                      displayName: Related Contact
                      valueType: string
                      association:
                        associationType: lookup
                        targetObject: Contact
                        targetField: Id
                        cardinality: many-to-one
                        required: false
                        labels:
                          singular: Contact
                          plural: Contacts
      responses:
        '200':
          description: Metadata creation completed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpsertMetadataResponse'
        '400':
          description: Invalid request payload or validation errors
          content:
            application/problem+json:
              schema:
                $ref: ../problem/problem.yaml#/components/schemas/ApiProblem
        '401':
          description: Authentication required
          content:
            application/problem+json:
              schema:
                $ref: ../problem/problem.yaml#/components/schemas/ApiProblem
        '403':
          description: Insufficient permissions for metadata operations
          content:
            application/problem+json:
              schema:
                $ref: ../problem/problem.yaml#/components/schemas/ApiProblem
        '404':
          description: Project or connection not found
          content:
            application/problem+json:
              schema:
                $ref: ../problem/problem.yaml#/components/schemas/ApiProblem
        '500':
          description: Internal server error
          content:
            application/problem+json:
              schema:
                $ref: ../problem/problem.yaml#/components/schemas/ApiProblem
components:
  schemas:
    ObjectMetadata:
      title: Object Metadata
      type: object
      required:
      - name
      - fields
      properties:
        name:
          type: string
          description: The provider name of the object
          example: contact
        displayName:
          type: string
          description: Human-readable name of the object
          example: Contact
        mappedObjectName:
          type: string
          description: The mapped name of the object as defined in your integration config, if a mapping was applied. Only present when using the installation-scoped metadata endpoint.
          example: people
        fields:
          type: object
          description: Map of field metadata keyed by field name
          additionalProperties:
            $ref: ../manifest/manifest.yaml#/components/schemas/FieldMetadata
    AssociationDefinition:
      type: object
      description: Relationship information for a field to another object
      properties:
        associationType:
          type: string
          description: High-level association variety (e.g., 'foreignKey', 'lookup', 'ref')
          example: foreignKey
        targetObject:
          type: string
          description: Name of the referenced/parent object
          example: Account
        targetField:
          type: string
          description: Name of the referenced field on the target object
        cardinality:
          type: string
          description: Association cardinality from the referencing field's perspective
          example: many-to-one
        onDelete:
          type: string
          description: Behavior upon foreign object deletion
          example: setNull
        required:
          type: boolean
          description: If true, a referenced record must exist
        reverseLookupFieldName:
          type: string
          description: Optional inverse relationship/property name exposed on the target object
        labels:
          $ref: '#/components/schemas/AssociationLabels'
      required:
      - associationType
      - targetObject
    UpsertMetadataResponse:
      type: object
      description: Response containing results for all created/updated fields
      properties:
        success:
          type: boolean
          description: Indicates if the upsert operation was successful
        fields:
          type: object
          description: Maps object name -> field name -> upsert result
          additionalProperties:
            type: object
            additionalProperties:
              $ref: '#/components/schemas/FieldUpsertResult'
      required:
      - success
      - fields
    FieldUpsertResult:
      type: object
      description: Result of an upsert operation for a single field
      properties:
        fieldName:
          type: string
          description: Name of the field
        action:
          type: string
          description: Action taken (create, update, none)
        metadata:
          type: object
          description: Provider-specific metadata about the field
          additionalProperties: true
        warnings:
          type: array
          description: Warnings that occurred during the upsert operation
          items:
            type: string
      required:
      - fieldName
      - action
    AssociationLabels:
      type: object
      description: UI labels for an association
      properties:
        singular:
          type: string
          description: Singular display label
        plural:
          type: string
          description: Plural display label
    StringFieldOptions:
      type: object
      description: Additional options for string fields
      properties:
        length:
          type: integer
          description: Maximum length of the string field
        pattern:
          type: string
          description: Regex pattern that the string field value must match
        values:
          type: array
          description: List of allowed values for enum fields
          items:
            type: string
        valuesRestricted:
          type: boolean
          description: Indicates if the field value must be limited to what's in Values
        defaultValue:
          type: string
          description: Default value for the field
    UpsertMetadataRequest:
      type: object
      description: Request payload for upserting metadata (fields only)
      properties:
        groupRef:
          type: string
          description: The ID that your app uses to identify the group of users for this request.
          example: group-123
        fields:
          type: object
          description: Maps object names to field definitions
          additionalProperties:
            type: array
            items:
              $ref: '#/components/schemas/FieldDefinition'
      required:
      - groupRef
      - fields
    FieldDefinition:
      type: object
      description: Field definition for creating or updating custom fields
      properties:
        fieldName:
          type: string
          description: The identifier of the field
          example: My_Custom_Field
        displayName:
          type: string
          description: The human-readable name of the field
          example: My Custom Field
        description:
          type: string
          description: Optional description of the field
        valueType:
          type: string
          description: The data type of the field. Valid values are string, boolean, date, datetime, singleSelect, multiSelect, int, float, reference
          example: string
        required:
          type: boolean
          description: Indicates if the field is required
        unique:
          type: boolean
          description: Indicates if the field must be unique across all records
        indexed:
          type: boolean
          description: Indicates if the field should be indexed for faster search
        stringOptions:
          $ref: '#/components/schemas/StringFieldOptions'
        numericOptions:
          $ref: '#/components/schemas/NumericFieldOptions'
        association:
          $ref: '#/components/schemas/AssociationDefinition'
      required:
      - fieldName
      - displayName
      - valueType
    NumericFieldOptions:
      type: object
      description: Additional options for numeric fields
      properties:
        precision:
          type: integer
          description: Total number of digits (for decimal types)
        scale:
          type: integer
          description: Number of digits to the right of the decimal point (for decimal types)
        min:
          type: number
          description: Minimum value for numeric fields
        max:
          type: number
          description: Maximum value for numeric fields
        defaultValue:
          type: number
          description: Default value for the field
  securitySchemes:
    APIKeyHeader:
      type: apiKey
      name: X-Api-Key
      in: header
    Bearer:
      type: http
      scheme: bearer
      bearerFormat: JWT