Skip to content

Merge two custom object records

client.Merge.MergeObjectValues(ctx, entitySlug, body) (*MergeMergeObjectValuesResponse, error)
POST/v1/objects/{entitySlug}/merge

Merges two records of the specified custom object type into one. The primary record retains its ID; the duplicate is soft-deleted. Both records must belong to the custom object type named in the path.

Required scopes: custom_objects:update + custom_objects:delete

Rate limit category: Write

ParametersExpand Collapse
entitySlug string

The slug of the custom object type.

body MergeMergeObjectValuesParams
DuplicateID param.Field[string]

ID of the duplicate record to merge into the primary and then discard.

PrimaryID param.Field[string]

ID of the record to keep.

FieldResolutions param.Field[map[string, MergeMergeObjectValuesParamsFieldResolutionUnion]]Optional

Per-field resolution overrides keyed by attribute slug.

type MergeMergeObjectValuesParamsFieldResolutionString string
One of the following:
const MergeMergeObjectValuesParamsFieldResolutionStringPrimary MergeMergeObjectValuesParamsFieldResolutionString = "primary"
const MergeMergeObjectValuesParamsFieldResolutionStringDuplicate MergeMergeObjectValuesParamsFieldResolutionString = "duplicate"
type MergeMergeObjectValuesParamsFieldResolutionValue struct{…}
Value MergeMergeObjectValuesParamsFieldResolutionValueValueUnion
One of the following:
string
float64
bool
type MergeMergeObjectValuesParamsFieldResolutionValueValueArray []string
type MergeMergeObjectValuesParamsFieldResolutionValueValueAddress struct{…}
City stringOptional

City name.

Country stringOptional

2-letter ISO 3166-1 alpha-2 country code.

Latitude float64Optional

Latitude coordinate.

Longitude float64Optional

Longitude coordinate.

PostalCode stringOptional

Postal or ZIP code.

State stringOptional

State or province.

Street stringOptional

Street address line 1.

Street2 stringOptional

Street address line 2.

type MergeMergeObjectValuesParamsFieldResolutionValueValueFullName struct{…}
FirstName stringOptional

The contact’s first name.

LastName stringOptional

The contact’s last name.

Options param.Field[MergeMergeObjectValuesParamsOptions]Optional
MultiSelectUnion boolOptional

When true, multi-select fields are merged by union rather than primary-takes-all.

ReturnsExpand Collapse
type MergeMergeObjectValuesResponse struct{…}
Merge MergeMergeObjectValuesResponseMerge
ID string

Unique identifier for the merge operation.

Status string

Current status of the merge: cleanup_pending, done, or failed.

Primary MergeMergeObjectValuesResponsePrimary
ID string

Unique identifier for the entity.

CreatedAt string

ISO 8601 timestamp of when the entity was created.

Fields map[string, MergeMergeObjectValuesResponsePrimaryField]

Map of field names to their typed values. System fields are prefixed with $ (e.g. $name, $email); custom attributes use their bare slug.

Value MergeMergeObjectValuesResponsePrimaryFieldValueUnion

The field value, or null if unset.

One of the following:
string
float64
bool
type MergeMergeObjectValuesResponsePrimaryFieldValueArray []string
type MergeMergeObjectValuesResponsePrimaryFieldValueAddress struct{…}
City stringOptional

City name.

Country stringOptional

2-letter ISO 3166-1 alpha-2 country code.

Latitude float64Optional

Latitude coordinate.

Longitude float64Optional

Longitude coordinate.

PostalCode stringOptional

Postal or ZIP code.

State stringOptional

State or province.

Street stringOptional

Street address line 1.

Street2 stringOptional

Street address line 2.

type MergeMergeObjectValuesResponsePrimaryFieldValueFullName struct{…}
FirstName stringOptional

The contact’s first name.

LastName stringOptional

The contact’s last name.

ValueType string

The data type of the field.

One of the following:
const MergeMergeObjectValuesResponsePrimaryFieldValueTypeAddress MergeMergeObjectValuesResponsePrimaryFieldValueType = "ADDRESS"
const MergeMergeObjectValuesResponsePrimaryFieldValueTypeCheckbox MergeMergeObjectValuesResponsePrimaryFieldValueType = "CHECKBOX"
const MergeMergeObjectValuesResponsePrimaryFieldValueTypeCurrency MergeMergeObjectValuesResponsePrimaryFieldValueType = "CURRENCY"
const MergeMergeObjectValuesResponsePrimaryFieldValueTypeDatetime MergeMergeObjectValuesResponsePrimaryFieldValueType = "DATETIME"
const MergeMergeObjectValuesResponsePrimaryFieldValueTypeEmail MergeMergeObjectValuesResponsePrimaryFieldValueType = "EMAIL"
const MergeMergeObjectValuesResponsePrimaryFieldValueTypeFullName MergeMergeObjectValuesResponsePrimaryFieldValueType = "FULL_NAME"
const MergeMergeObjectValuesResponsePrimaryFieldValueTypeMarkdown MergeMergeObjectValuesResponsePrimaryFieldValueType = "MARKDOWN"
const MergeMergeObjectValuesResponsePrimaryFieldValueTypeMultiSelect MergeMergeObjectValuesResponsePrimaryFieldValueType = "MULTI_SELECT"
const MergeMergeObjectValuesResponsePrimaryFieldValueTypeNumber MergeMergeObjectValuesResponsePrimaryFieldValueType = "NUMBER"
const MergeMergeObjectValuesResponsePrimaryFieldValueTypeSingleSelect MergeMergeObjectValuesResponsePrimaryFieldValueType = "SINGLE_SELECT"
const MergeMergeObjectValuesResponsePrimaryFieldValueTypeSocialHandle MergeMergeObjectValuesResponsePrimaryFieldValueType = "SOCIAL_HANDLE"
const MergeMergeObjectValuesResponsePrimaryFieldValueTypeTelephone MergeMergeObjectValuesResponsePrimaryFieldValueType = "TELEPHONE"
const MergeMergeObjectValuesResponsePrimaryFieldValueTypeText MergeMergeObjectValuesResponsePrimaryFieldValueType = "TEXT"
const MergeMergeObjectValuesResponsePrimaryFieldValueTypeURL MergeMergeObjectValuesResponsePrimaryFieldValueType = "URL"
const MergeMergeObjectValuesResponsePrimaryFieldValueTypeHTML MergeMergeObjectValuesResponsePrimaryFieldValueType = "HTML"
Relationships map[string, MergeMergeObjectValuesResponsePrimaryRelationship]

Map of relationship names to their associated entities. System relationships are prefixed with $ (e.g. $owner, $contact). A self-referential relationship keeps its merged values and includes optional directional values. List filters select the current record’s role with :asSource or :asDestination, for example ?parent:asSource[contains]=account_id.

Cardinality string

Whether the relationship is has_one or has_many.

ObjectType string

The type of the related object (e.g. account, contact).

Values []string

IDs of the related entities.

Directions MergeMergeObjectValuesResponsePrimaryRelationshipDirectionsOptional

Directional values for a self-referential relationship. List filters use the relationship key with :asSource or :asDestination; writes continue to use the bare key.

AsDestination MergeMergeObjectValuesResponsePrimaryRelationshipDirectionsAsDestination

The current record is the destination (incoming) endpoint.

Cardinality string

Whether this endpoint direction is HAS_ONE or HAS_MANY.

One of the following:
const MergeMergeObjectValuesResponsePrimaryRelationshipDirectionsAsDestinationCardinalityHasOne MergeMergeObjectValuesResponsePrimaryRelationshipDirectionsAsDestinationCardinality = "HAS_ONE"
const MergeMergeObjectValuesResponsePrimaryRelationshipDirectionsAsDestinationCardinalityHasMany MergeMergeObjectValuesResponsePrimaryRelationshipDirectionsAsDestinationCardinality = "HAS_MANY"
Values []string

IDs of the related entities in this direction.

AsSource MergeMergeObjectValuesResponsePrimaryRelationshipDirectionsAsSource

The current record is the source (outgoing) endpoint.

Cardinality string

Whether this endpoint direction is HAS_ONE or HAS_MANY.

One of the following:
const MergeMergeObjectValuesResponsePrimaryRelationshipDirectionsAsSourceCardinalityHasOne MergeMergeObjectValuesResponsePrimaryRelationshipDirectionsAsSourceCardinality = "HAS_ONE"
const MergeMergeObjectValuesResponsePrimaryRelationshipDirectionsAsSourceCardinalityHasMany MergeMergeObjectValuesResponsePrimaryRelationshipDirectionsAsSourceCardinality = "HAS_MANY"
Values []string

IDs of the related entities in this direction.

UpdatedAt string

ISO 8601 timestamp of when the entity was last updated, or null.

ExternalID stringOptional

External identifier for the entity, or null if unset.

Summary MergeMergeObjectValuesResponseSummary
FieldWriteCount int64

Number of attribute fields written onto the primary record.

minimum-9007199254740991
maximum9007199254740991
SyncRepointedCount int64

Number of related records re-pointed from the duplicate to the primary.

minimum-9007199254740991
maximum9007199254740991
Warnings []string

Non-fatal warnings from the merge (e.g. skipped transfers).

Merge two custom object records

package main

import (
  "context"
  "fmt"

  "github.com/Lightfld/lightfield-go"
  "github.com/Lightfld/lightfield-go/option"
)

func main() {
  client := githubcomlightfldlightfieldgo.NewClient(
    option.WithAPIKey("My API Key"),
  )
  mergeMergeObjectValuesResponse, err := client.Merge.MergeObjectValues(
    context.TODO(),
    "entitySlug",
    githubcomlightfldlightfieldgo.MergeMergeObjectValuesParams{
      DuplicateID: "duplicateId",
      PrimaryID: "primaryId",
    },
  )
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", mergeMergeObjectValuesResponse.Merge)
}
{
  "merge": {
    "id": "id",
    "status": "status"
  },
  "primary": {
    "id": "id",
    "createdAt": "createdAt",
    "fields": {
      "foo": {
        "value": "string",
        "valueType": "ADDRESS"
      }
    },
    "httpLink": "httpLink",
    "relationships": {
      "foo": {
        "cardinality": "cardinality",
        "objectType": "objectType",
        "values": [
          "string"
        ],
        "directions": {
          "asDestination": {
            "cardinality": "HAS_ONE",
            "values": [
              "string"
            ]
          },
          "asSource": {
            "cardinality": "HAS_ONE",
            "values": [
              "string"
            ]
          }
        }
      }
    },
    "updatedAt": "updatedAt",
    "externalId": "externalId"
  },
  "summary": {
    "fieldWriteCount": -9007199254740991,
    "syncRepointedCount": -9007199254740991,
    "warnings": [
      "string"
    ]
  }
}
Returns Examples
{
  "merge": {
    "id": "id",
    "status": "status"
  },
  "primary": {
    "id": "id",
    "createdAt": "createdAt",
    "fields": {
      "foo": {
        "value": "string",
        "valueType": "ADDRESS"
      }
    },
    "httpLink": "httpLink",
    "relationships": {
      "foo": {
        "cardinality": "cardinality",
        "objectType": "objectType",
        "values": [
          "string"
        ],
        "directions": {
          "asDestination": {
            "cardinality": "HAS_ONE",
            "values": [
              "string"
            ]
          },
          "asSource": {
            "cardinality": "HAS_ONE",
            "values": [
              "string"
            ]
          }
        }
      }
    },
    "updatedAt": "updatedAt",
    "externalId": "externalId"
  },
  "summary": {
    "fieldWriteCount": -9007199254740991,
    "syncRepointedCount": -9007199254740991,
    "warnings": [
      "string"
    ]
  }
}