{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/ampersand/refs/heads/main/json-schema/ampersand-api-association-definition-schema.json",
  "title": "AssociationDefinition",
  "description": "Relationship information for a field to another object",
  "type": "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"
  ]
}