Vendasta CRM API (gRPC gateway)

The CRM surface exposed through the gRPC reverse-proxy gateway: CRMService, CRMAssociationService, CRMCompanyService, CRMOpportunityService, CRMFieldSchemaService and CRMFieldSchemaCustomizationService. 53 operations covering contact, company, opportunity, association and schema management.

OpenAPI Specification

vendasta-crm-grpc-openapi.json Raw ↑
{
  "components": {
    "requestBodies": {
      "v1CreateCrmObjectRequest": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/v1CreateCrmObjectRequest"
            }
          }
        },
        "description": "Request to create a new CRM object (contact, company, opportunity, or custom object) within a namespace.",
        "required": true
      },
      "v1DeleteCrmObjectRequest": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/v1DeleteCrmObjectRequest"
            }
          }
        },
        "description": "Request to soft-delete a CRM object within a namespace.",
        "required": true
      },
      "v1GetMultiCrmObjectRequest": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/v1GetMultiCrmObjectRequest"
            }
          }
        },
        "description": "Request to retrieve multiple CRM objects by their IDs within a namespace.",
        "required": true
      },
      "v1ListCrmObjectsRequest": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/v1ListCrmObjectsRequest"
            }
          }
        },
        "description": "Request to list CRM objects within a namespace, with optional filtering, sorting, and pagination.",
        "required": true
      },
      "v1ListFieldOptionsRequest": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/v1ListFieldOptionsRequest"
            }
          }
        },
        "description": "Request to list the valid values for a string-based field type on a CRM object.",
        "required": true
      },
      "v1UpdateCrmObjectRequest": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/v1UpdateCrmObjectRequest"
            }
          }
        },
        "description": "Request to update an existing CRM object within a namespace. Use the field mask to specify which fields to update.",
        "required": true
      }
    },
    "schemas": {
      "ValidateCrmObjectResponseUniquenessCheck": {
        "properties": {
          "existingCrmObjectIds": {
            "description": "Output only. The IDs of existing CRM objects that share the same value for this field.",
            "items": {
              "type": "string"
            },
            "readOnly": true,
            "type": "array"
          },
          "fieldId": {
            "description": "Output only. The identifier of the field that is restricted to be unique.",
            "readOnly": true,
            "type": "string"
          },
          "uniqueness": {
            "$ref": "#/components/schemas/v1ValidateCrmObjectResponseFieldUniqueness"
          }
        },
        "type": "object"
      },
      "ValidateCrmObjectResponseValidationErrorDetails": {
        "properties": {
          "fieldIds": {
            "description": "Output only. The field IDs associated with this validation error.",
            "items": {
              "type": "string"
            },
            "readOnly": true,
            "type": "array"
          },
          "uniquenessCheck": {
            "$ref": "#/components/schemas/ValidateCrmObjectResponseUniquenessCheck"
          }
        },
        "type": "object"
      },
      "ValidateCrmObjectResponseValidationErrorSeverity": {
        "default": "VALIDATION_ERROR_SEVERITY_UNKNOWN",
        "enum": [
          "VALIDATION_ERROR_SEVERITY_UNKNOWN",
          "VALIDATION_ERROR_SEVERITY_INVALID",
          "VALIDATION_ERROR_SEVERITY_WARNING"
        ],
        "type": "string"
      },
      "crmv1FieldUniqueness": {
        "default": "FIELD_UNIQUENESS_NONE",
        "description": "FieldUniqueness describes whether values in a field must be unique across a namespace's\nobjects of the same type. It is surfaced read-only on FieldSchema; it cannot be set or\nchanged through the CRM API.\n\n - FIELD_UNIQUENESS_NONE: No uniqueness constraint (the default for most fields).\n - FIELD_UNIQUENESS_WARNING: Duplicates are allowed but surfaced as a warning (e.g. phone-number fields).\n - FIELD_UNIQUENESS_ENFORCED: Duplicates are rejected / deduplicated — the enforced key field (e.g. email).",
        "enum": [
          "FIELD_UNIQUENESS_NONE",
          "FIELD_UNIQUENESS_WARNING",
          "FIELD_UNIQUENESS_ENFORCED"
        ],
        "type": "string"
      },
      "crmv1Tag": {
        "properties": {
          "tagValue": {
            "description": "Required. The tag value string.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "protobufAny": {
        "additionalProperties": {},
        "properties": {
          "@type": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "rpcStatus": {
        "properties": {
          "code": {
            "format": "int32",
            "type": "integer"
          },
          "details": {
            "items": {
              "$ref": "#/components/schemas/protobufAny"
            },
            "type": "array"
          },
          "message": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1ArchiveFieldSchemaRequest": {
        "description": "Request to archive a field schema. Archived schemas are hidden from default list responses and are not used when reading or writing CRM objects, but their historical values on existing CRM objects are preserved.",
        "properties": {
          "crmObjectSubtype": {
            "description": "Optional. The custom object subtype the field belongs to. Only used when `crm_object_type` refers to a custom object type that defines subtypes.",
            "type": "string"
          },
          "crmObjectType": {
            "description": "Required. The CRM object type the field belongs to. Valid values include \"Contact\", \"Activity\", \"Company\", \"Opportunity\", \"PotentialContact\", and the ID of any custom object type.",
            "type": "string"
          },
          "fieldId": {
            "description": "Required. The ID of the field schema to archive.",
            "type": "string"
          },
          "namespace": {
            "description": "Required. The namespace (partner ID or account group ID) the field schema belongs to.",
            "type": "string"
          }
        },
        "required": [
          "namespace",
          "crmObjectType",
          "fieldId"
        ],
        "title": "Archive Field Schema Request",
        "type": "object"
      },
      "v1Association": {
        "description": "Represents a directional link between two CRM objects, such as a contact-to-company or opportunity-to-contact relationship.",
        "properties": {
          "associationId": {
            "description": "Output only. The unique identifier of this association.",
            "readOnly": true,
            "type": "string"
          },
          "associationType": {
            "description": "Required. The type of association (e.g. \"contact_to_company\", \"opportunity_to_contact\"). Determines the relationship semantics.",
            "type": "string"
          },
          "created": {
            "description": "Output only. The time the association was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "deleted": {
            "description": "Output only. The time the association was soft-deleted. Zero value if the association has not been deleted.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "fromCrmObjectSubtype": {
            "description": "Optional. The custom object subtype of the source CRM object. Only needed when the source is a custom object type.",
            "type": "string"
          },
          "fromId": {
            "description": "Required. The CRM object ID on the source side of the association.",
            "type": "string"
          },
          "tags": {
            "description": "Optional. Tags attached to this association for categorization.",
            "items": {
              "$ref": "#/components/schemas/crmv1Tag"
            },
            "type": "array"
          },
          "toCrmObjectSubtype": {
            "description": "Optional. The custom object subtype of the target CRM object. Only needed when the target is a custom object type.",
            "type": "string"
          },
          "toId": {
            "description": "Required. The CRM object ID on the target side of the association.",
            "type": "string"
          },
          "updated": {
            "description": "Output only. The time the association was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          }
        },
        "title": "Association",
        "type": "object"
      },
      "v1BulkDeleteCrmObjectsRequest": {
        "description": "Request to bulk-delete CRM objects matching the specified filters within a namespace.",
        "properties": {
          "crmObjectSubtype": {
            "description": "Optional. The custom object subtype to restrict deletion to. Only relevant for custom object types.",
            "type": "string"
          },
          "filters": {
            "$ref": "#/components/schemas/v1FilterGroup"
          },
          "namespace": {
            "description": "Required. The namespace (partner ID or account group ID) to delete objects from.",
            "type": "string"
          },
          "search": {
            "$ref": "#/components/schemas/v1CrmObjectSearch"
          }
        },
        "required": [
          "namespace"
        ],
        "title": "Bulk Delete CRM Objects Request",
        "type": "object"
      },
      "v1CreateAssociationRequest": {
        "description": "Request to create a new association between two CRM objects within a namespace.",
        "properties": {
          "association": {
            "$ref": "#/components/schemas/v1Association"
          },
          "namespace": {
            "description": "Required. The namespace (partner ID or account group ID) the association belongs to.",
            "type": "string"
          }
        },
        "required": [
          "namespace",
          "association"
        ],
        "title": "Create Association Request",
        "type": "object"
      },
      "v1CreateAssociationResponse": {
        "description": "Response containing the identifier of the newly created association.",
        "properties": {
          "associationId": {
            "description": "Output only. The unique identifier of the newly created association.",
            "readOnly": true,
            "type": "string"
          }
        },
        "title": "Create Association Response",
        "type": "object"
      },
      "v1CreateCrmObjectRequest": {
        "description": "Request to create a new CRM object (contact, company, opportunity, or custom object) within a namespace.",
        "properties": {
          "crmObject": {
            "$ref": "#/components/schemas/v1CrmObject"
          },
          "namespace": {
            "description": "Required. The namespace (partner ID or account group ID) the object belongs to.",
            "type": "string"
          }
        },
        "required": [
          "namespace",
          "crmObject"
        ],
        "title": "Create CRM Object Request",
        "type": "object"
      },
      "v1CreateCrmObjectResponse": {
        "description": "Response containing the identifier of the newly created CRM object.",
        "properties": {
          "crmObjectId": {
            "description": "Output only. The unique identifier of the newly created CRM object.",
            "readOnly": true,
            "type": "string"
          }
        },
        "title": "Create CRM Object Response",
        "type": "object"
      },
      "v1CreateCustomObjectTypeRequest": {
        "description": "Request to create a new custom object type within a namespace.",
        "properties": {
          "customObjectType": {
            "$ref": "#/components/schemas/v1CustomObjectType"
          },
          "namespace": {
            "description": "Required. The namespace (partner ID or account group ID) the custom object type will belong to.",
            "type": "string"
          }
        },
        "required": [
          "namespace",
          "customObjectType"
        ],
        "title": "Create Custom Object Type Request",
        "type": "object"
      },
      "v1CreateCustomObjectTypeResponse": {
        "description": "Response containing the identifier of the newly created custom object type.",
        "properties": {
          "customObjectTypeId": {
            "description": "Output only. The unique identifier of the newly created custom object type.",
            "readOnly": true,
            "type": "string"
          }
        },
        "title": "Create Custom Object Type Response",
        "type": "object"
      },
      "v1CreateFieldSchemaCustomizationRequest": {
        "description": "Request to create a field schema customization, which restricts the allowed values for a specific field on a CRM object type within a namespace.",
        "properties": {
          "crmObjectType": {
            "description": "Required. The CRM object type the field belongs to (e.g. \"contact\", \"company\", \"opportunity\").",
            "type": "string"
          },
          "fieldSchemaCustomization": {
            "$ref": "#/components/schemas/v1FieldSchemaCustomization"
          },
          "namespace": {
            "description": "Required. The namespace (partner ID or account group ID) the customization applies to.",
            "type": "string"
          }
        },
        "required": [
          "namespace",
          "crmObjectType",
          "fieldSchemaCustomization"
        ],
        "title": "Create Field Schema Customization Request",
        "type": "object"
      },
      "v1CreateFieldSchemaRequest": {
        "description": "Request to create a new custom field schema on a CRM object type within a namespace.",
        "properties": {
          "crmObjectSubtype": {
            "description": "Optional. The custom object subtype the field belongs to. Only used when `crm_object_type` refers to a custom object type that defines subtypes.",
            "type": "string"
          },
          "crmObjectType": {
            "description": "Required. The CRM object type the field belongs to. Valid values include \"Contact\", \"Activity\", \"Company\", \"Opportunity\", \"PotentialContact\", and the ID of any custom object type.",
            "type": "string"
          },
          "fieldSchema": {
            "$ref": "#/components/schemas/v1FieldSchema"
          },
          "namespace": {
            "description": "Required. The namespace (partner ID or account group ID) the new field schema will belong to.",
            "type": "string"
          }
        },
        "required": [
          "namespace",
          "crmObjectType",
          "fieldSchema"
        ],
        "title": "Create Field Schema Request",
        "type": "object"
      },
      "v1CreateFieldSchemaResponse": {
        "description": "Response containing the identifier of the newly created field schema.",
        "properties": {
          "fieldId": {
            "description": "The unique identifier of the newly created field schema. Use this value to reference the field on subsequent CRM object create/update requests and on `UpdateFieldSchema`, `ArchiveFieldSchema`, and `GetMultiFieldSchema` calls.",
            "type": "string"
          }
        },
        "title": "Create Field Schema Response",
        "type": "object"
      },
      "v1CreatePipelineRequest": {
        "description": "Request to create a new pipeline within a namespace.",
        "properties": {
          "pipeline": {
            "$ref": "#/components/schemas/v1Pipeline"
          }
        },
        "required": [
          "pipeline"
        ],
        "title": "Create Pipeline Request",
        "type": "object"
      },
      "v1CreatePipelineResponse": {
        "description": "Response containing the identifier of the newly created pipeline.",
        "properties": {
          "pipelineId": {
            "description": "Output only. The unique identifier of the newly created pipeline.",
            "readOnly": true,
            "type": "string"
          }
        },
        "title": "Create Pipeline Response",
        "type": "object"
      },
      "v1CrmObject": {
        "description": "Represents a CRM record such as a contact, company, opportunity, or custom object. Contains the object's field values, metadata, and system-managed timestamps.",
        "properties": {
          "created": {
            "description": "Output only. The time the object was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "crmObjectId": {
            "description": "The unique identifier of the CRM object. Assigned by the system on create; must be provided on update.",
            "type": "string"
          },
          "crmObjectSubtype": {
            "description": "Optional. The subtype of the CRM object, used primarily by custom objects to differentiate between subtypes.",
            "type": "string"
          },
          "deleted": {
            "description": "Output only. The time the object was soft-deleted. Zero value if the object has not been deleted.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "externalId": {
            "description": "Optional. A partner-defined external identifier for this object, used to correlate it with records in an external system.",
            "type": "string"
          },
          "fields": {
            "description": "Optional. The set of field values on this CRM object. Each entry corresponds to a field defined in the object's field schema.",
            "items": {
              "$ref": "#/components/schemas/v1FieldValue"
            },
            "type": "array"
          },
          "groupId": {
            "description": "Optional. A group identifier used for multi-location linking.",
            "type": "string"
          },
          "idempotencyId": {
            "description": "Optional. A client-generated unique identifier used for idempotent object creation.",
            "type": "string"
          },
          "namespace": {
            "description": "Output only. The namespace this object belongs to. Populated only in multi-location responses; safe to ignore on requests.",
            "readOnly": true,
            "type": "string"
          },
          "ownerId": {
            "description": "Optional. The identifier of the user who owns this CRM object.",
            "type": "string"
          },
          "updated": {
            "description": "Output only. The time the object was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          }
        },
        "title": "CRM Object",
        "type": "object"
      },
      "v1CrmObjectSearch": {
        "properties": {
          "searchTerm": {
            "title": "As of now, we are only searching by string",
            "type": "string"
          }
        },
        "title": "CrmObjectSearch represents the possible ways to search data in the CRM",
        "type": "object"
      },
      "v1Currency": {
        "properties": {
          "currencyCode": {
            "title": "ISO 4217 currency code",
            "type": "string"
          },
          "value": {
            "format": "double",
            "title": "Amount",
            "type": "number"
          }
        },
        "type": "object"
      },
      "v1CustomObjectType": {
        "description": "Defines a partner-created custom object type in the CRM, including its display names and system-managed timestamps.",
        "properties": {
          "created": {
            "description": "Output only. The time the custom object type was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "customObjectTypeId": {
            "description": "The unique identifier of the custom object type. Assigned by the system on create; must be provided on update.",
            "type": "string"
          },
          "deleted": {
            "description": "Output only. The time the custom object type was soft-deleted. Zero value if it has not been deleted.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "namespace": {
            "description": "Output only. The namespace (partner ID or account group ID) the custom object type belongs to.",
            "readOnly": true,
            "type": "string"
          },
          "pluralObjectName": {
            "description": "Required on Create. The plural display name for this custom object type (e.g. \"Projects\").",
            "type": "string"
          },
          "singularObjectName": {
            "description": "Required on Create. The singular display name for this custom object type (e.g. \"Project\").",
            "type": "string"
          },
          "updated": {
            "description": "Output only. The time the custom object type was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          }
        },
        "title": "Custom Object Type",
        "type": "object"
      },
      "v1DateDefault": {
        "default": "DATE_DEFAULT_INVALID",
        "enum": [
          "DATE_DEFAULT_INVALID",
          "DATE_DEFAULT_TODAY",
          "DATE_DEFAULT_YESTERDAY",
          "DATE_DEFAULT_TOMORROW",
          "DATE_DEFAULT_THIS_WEEK",
          "DATE_DEFAULT_LAST_WEEK",
          "DATE_DEFAULT_NEXT_WEEK",
          "DATE_DEFAULT_THIS_MONTH",
          "DATE_DEFAULT_LAST_MONTH",
          "DATE_DEFAULT_NEXT_MONTH",
          "DATE_DEFAULT_THIS_QUARTER",
          "DATE_DEFAULT_LAST_QUARTER",
          "DATE_DEFAULT_NEXT_QUARTER",
          "DATE_DEFAULT_THIS_YEAR",
          "DATE_DEFAULT_LAST_YEAR",
          "DATE_DEFAULT_NEXT_YEAR"
        ],
        "type": "string"
      },
      "v1DeleteAssociationRequest": {
        "description": "Request to delete an association between CRM objects within a namespace.",
        "properties": {
          "associationId": {
            "description": "Required. The identifier of the association to delete.",
            "type": "string"
          },
          "namespace": {
            "description": "Required. The namespace (partner ID or account group ID) the association belongs to.",
            "type": "string"
          }
        },
        "required": [
          "namespace",
          "associationId"
        ],
        "title": "Delete Association Request",
        "type": "object"
      },
      "v1DeleteCrmObjectRequest": {
        "description": "Request to soft-delete a CRM object within a namespace.",
        "properties": {
          "crmObjectId": {
            "description": "Required. The identifier of the CRM object to delete.",
            "type": "string"
          },
          "namespace": {
            "description": "Required. The namespace (partner ID or account group ID) the object belongs to.",
            "type": "string"
          }
        },
        "required": [
          "namespace",
          "crmObjectId"
        ],
        "title": "Delete CRM Object Request",
        "type": "object"
      },
      "v1DeleteCustomObjectTypeRequest": {
        "description": "Request to delete a custom object type within a namespace.",
        "properties": {
          "customObjectTypeId": {
            "description": "Required. The identifier of the custom object type to delete.",
            "type": "string"
          },
          "namespace": {
            "description": "Required. The namespace (partner ID or account group ID) the custom object type belongs to.",
            "type": "string"
          }
        },
        "required": [
          "namespace",
          "customObjectTypeId"
        ],
        "title": "Delete Custom Object Type Request",
        "type": "object"
      },
      "v1DeleteFieldSchemaCustomizationRequest": {
        "description": "Request to delete a field schema customization for a specific field on a CRM object type within a namespace.",
        "properties": {
          "crmObjectType": {
            "description": "Required. The CRM object type the field belongs to (e.g. \"contact\", \"company\", \"opportunity\").",
            "type": "string"
          },
          "fieldId": {
            "description": "Required. The field ID whose customization should be deleted.",
            "type": "string"
          },
          "namespace": {
            "description": "Required. The namespace (partner ID or account group ID) the customization applies to.",
            "type": "string"
          }
        },
        "required": [
          "namespace",
          "crmObjectType",
          "fieldId"
        ],
        "title": "Delete Field Schema Customization Request",
        "type": "object"
      },
      "v1DeletePipelineRequest": {
        "description": "Request to delete a pipeline within a namespace.",
        "properties": {
          "namespace": {
            "description": "Required. The namespace (account group ID) the pipeline belongs to.",
            "type": "string"
          },
          "pipelineId": {
            "description": "Required. The identifier of the pipeline to delete.",
            "type": "string"
          }
        },
        "required": [
          "namespace",
          "pipelineId"
        ],
        "title": "Delete Pipeline Request",
        "type": "object"
      },
      "v1DropdownOption": {
        "properties": {
          "label": {
            "description": "The human-readable label displayed for this option in the partner UI.",
            "type": "string"
          },
          "value": {
            "description": "The stored value written to the CRM object when this option is selected.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1FieldSchema": {
        "description": "Defines a field on a CRM object type. Field schemas describe the type, label, and validation rules for both built-in fields (provided by Vendasta) and partner-defined custom fields.",
        "properties": {
          "archived": {
            "description": "Output only. Set when the schema has been archived via `ArchiveFieldSchema`. Absent on non-archived schemas.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "created": {
            "description": "Output only. The time the schema was created.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "crmObjectSubtype": {
            "description": "Output only. The custom object subtype the field belongs to. Set by the service from the request `crm_object_subtype`; ignored on Create and Update.",
            "readOnly": true,
            "type": "string"
          },
          "crmObjectType": {
            "description": "Output only. The CRM object type the field belongs to. Set by the service from the request `crm_object_type`; ignored on Create and Update.",
            "readOnly": true,
            "type": "string"
          },
          "currencyCode": {
            "description": "Optional. The ISO 4217 currency code (e.g. \"USD\", \"EUR\", \"CAD\") used when `field_type` is `FIELD_TYPE_CURRENCY`. Ignored for other field types.",
            "type": "string"
          },
          "dropdownOptions": {
            "description": "Optional. The set of allowed values when `field_type` is `FIELD_TYPE_DROPDOWN`. Ignored for other field types.",
            "items": {
              "$ref": "#/components/schemas/v1DropdownOption"
            },
            "type": "array"
          },
          "externalId": {
            "description": "Optional. A partner-defined alternate identifier for this field, used to map an external system's field name onto this schema. Has no effect on Vendasta storage or validation.",
            "type": "string"
          },
          "fieldDescription": {
            "description": "Optional. The display description of the field shown in the partner UI. For dropdown fields, this should indicate which values from `dropdown_options` are valid.",
            "type": "string"
          },
          "fieldId": {
            "description": "The unique identifier of the field schema. Required on `UpdateFieldSchema` to identify the schema being updated. On `CreateFieldSchema` it is auto-assigned by the service and must be omitted on the request.",
            "type": "string"
          },
          "fieldName": {
            "description": "Required on Create. The display name of the field shown in the partner UI.",
            "type": "string"
          },
          "fieldType": {
            "$ref": "#/components/schemas/v1FieldType"
          },
          "namespace": {
            "description": "Output only. The namespace (partner ID or account group ID) the schema belongs to. Set by the service from the request namespace; ignored on Create and Update.",
            "readOnly": true,
            "type": "string"
          },
          "readonly": {
            "description": "Optional. When true, the value of this field on CRM objects cannot be modified by API or UI callers (the field is treated as system-managed). Default false.",
            "type": "boolean"
          },
          "skipAutomation": {
            "description": "Optional. When true, value changes to this field on a CRM object will not trigger automations. Default false.",
            "type": "boolean"
          },
          "uniqueness": {
            "$ref": "#/components/schemas/crmv1FieldUniqueness"
          },
          "updated": {
            "description": "Output only. The time the schema was last updated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          }
        },
        "title": "Field Schema",
        "type": "object"
      },
      "v1FieldSchemaCustomization": {
        "properties": {
          "created": {
            "format": "date-time",
            "type": "string"
          },
          "deleted": {
            "format": "date-time",
            "type": "string"
          },
          "fieldId": {
            "type": "string"
          },
          "namespace": {
            "description": "For create or update requests, this should be omitted.",
            "type": "string"
          },
          "restrictedFieldValues": {
            "items": {
              "$ref": "#/components/schemas/v1FieldValue"
            },
            "type": "array"
          },
          "updated": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1FieldType": {
        "default": "FIELD_TYPE_INVALID",
        "description": "- FIELD_TYPE_DROPDOWN: FIELD_TYPE_DROPDOWN is passed as a string in the field_value\n - FIELD_TYPE_CURRENCY: FIELD_TYPE_CURRENCY is passed as a Currency message containing a code and value\n - FIELD_TYPE_EMAIL: FIELD_TYPE_EMAIL is passed as a string in the field_value\n - FIELD_TYPE_PHONE: FIELD_TYPE_PHONE is passed as a string in the field_value\n - FIELD_TYPE_TAG: FIELD_TYPE_TAG is passed as a StringList in the field_value\n - FIELD_TYPE_GEOPOINT: FIELD_TYPE_GEOPOINT is passed as a Geopoint message containing lat and long fields in the field_value",
        "enum": [
          "FIELD_TYPE_INVALID",
          "FIELD_TYPE_STRING",
          "FIELD_TYPE_INTEGER",
          "FIELD_TYPE_DATE",
          "FIELD_TYPE_DROPDOWN",
          "FIELD_TYPE_CURRENCY",
          "FIELD_TYPE_EMAIL",
          "FIELD_TYPE_PHONE",
          "FIELD_TYPE_BOOLEAN",
          "FIELD_TYPE_TAG",
          "FIELD_TYPE_DATETIME",
          "FIELD_TYPE_STRING_LIST",
          "FIE

# --- truncated at 32 KB (153 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/vendasta/refs/heads/main/openapi/vendasta-crm-grpc-openapi.json