{
    "openapi": "3.1.0",
    "info": {
        "title": "Friends of Ryan Grissinger",
        "version": "2.5.0",
        "description": "Campaign CRM API for contact management and engagement tracking."
    },
    "servers": [
        {
            "url": "https:\/\/ryangrissinger.com\/api",
            "description": "Production"
        }
    ],
    "security": [
        {
            "http": []
        }
    ],
    "paths": {
        "\/contacts\/{contact}\/activity-logs": {
            "get": {
                "operationId": "activity-logs.index",
                "tags": [
                    "ActivityLog"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/ActivityLog"
                                            }
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "total": {
                                                    "type": "integer"
                                                }
                                            },
                                            "required": [
                                                "total"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "activity-logs.store",
                "tags": [
                    "ActivityLog"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StoreActivityLogRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ActivityLog"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/contacts\/{contact}\/activity-logs\/{activityLog}": {
            "get": {
                "operationId": "activity-logs.show",
                "tags": [
                    "ActivityLog"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "activityLog",
                        "in": "path",
                        "required": true,
                        "description": "The activity log ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ActivityLog"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/committee\/regions": {
            "get": {
                "operationId": "committee.regions",
                "tags": [
                    "Committee"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "region": {
                                                        "type": "string"
                                                    },
                                                    "label": {
                                                        "type": "string"
                                                    },
                                                    "party_email": {
                                                        "type": [
                                                            "string",
                                                            "null"
                                                        ]
                                                    },
                                                    "covered": {
                                                        "type": "integer"
                                                    },
                                                    "total": {
                                                        "type": "integer"
                                                    },
                                                    "vacant": {
                                                        "type": "string"
                                                    },
                                                    "pct": {
                                                        "anyOf": [
                                                            {
                                                                "type": "integer"
                                                            },
                                                            {
                                                                "type": "integer",
                                                                "enum": [
                                                                    0
                                                                ]
                                                            }
                                                        ]
                                                    }
                                                },
                                                "required": [
                                                    "region",
                                                    "label",
                                                    "party_email",
                                                    "covered",
                                                    "total",
                                                    "vacant",
                                                    "pct"
                                                ]
                                            }
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "total": {},
                                                "covered": {},
                                                "vacant": {},
                                                "generated_at": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "total",
                                                "covered",
                                                "vacant",
                                                "generated_at"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/committee\/precincts": {
            "get": {
                "operationId": "committee.precincts",
                "tags": [
                    "Committee"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "string"
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "total": {
                                                    "type": "integer"
                                                },
                                                "covered": {
                                                    "type": "integer"
                                                },
                                                "vacant": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "total",
                                                "covered",
                                                "vacant"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/committee\/members": {
            "get": {
                "operationId": "committee.members",
                "tags": [
                    "Committee"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "string"
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "total": {
                                                    "type": "integer"
                                                }
                                            },
                                            "required": [
                                                "total"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/contacts\/export": {
            "get": {
                "operationId": "contacts.export",
                "tags": [
                    "Contact"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "string"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/contacts\/import": {
            "post": {
                "operationId": "contacts.import",
                "tags": [
                    "Contact"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart\/form-data": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/ImportContactsRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "imported": {
                                                    "type": "string"
                                                },
                                                "skipped": {
                                                    "type": "integer"
                                                },
                                                "errors": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string"
                                                    }
                                                }
                                            },
                                            "required": [
                                                "imported",
                                                "skipped",
                                                "errors"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/contacts\/{id}\/restore": {
            "patch": {
                "operationId": "contacts.restore",
                "tags": [
                    "Contact"
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "string"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/contacts": {
            "get": {
                "operationId": "contacts.index",
                "tags": [
                    "Contact"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            }
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "current_page": {
                                                    "type": "integer"
                                                },
                                                "last_page": {
                                                    "type": "integer"
                                                },
                                                "per_page": {
                                                    "type": "integer"
                                                },
                                                "total": {
                                                    "type": "integer"
                                                }
                                            },
                                            "required": [
                                                "current_page",
                                                "last_page",
                                                "per_page",
                                                "total"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "contacts.store",
                "tags": [
                    "Contact"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StoreContactRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "string"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/contacts\/{contact}": {
            "get": {
                "operationId": "contacts.show",
                "tags": [
                    "Contact"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/Contact"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "put": {
                "operationId": "contacts.update",
                "tags": [
                    "Contact"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/UpdateContactRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/Contact"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            },
            "delete": {
                "operationId": "contacts.destroy",
                "tags": [
                    "Contact"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/contacts\/intake": {
            "post": {
                "operationId": "contacts.intake",
                "summary": "Accept a business card photo or text description, extract contact info via Claude vision,\ncreate the contact (or update existing), run FEC research, and return a CRM link",
                "tags": [
                    "ContactIntake"
                ],
                "requestBody": {
                    "content": {
                        "multipart\/form-data": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "photo": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "format": "binary",
                                        "contentMediaType": "application\/octet-stream",
                                        "maxLength": 10240
                                    },
                                    "description": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 5000
                                    },
                                    "context": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 1000
                                    },
                                    "familiarity": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "enum": [
                                            "know_of",
                                            "met",
                                            "know"
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "contact_id": {
                                            "type": "string"
                                        },
                                        "url": {
                                            "type": "string"
                                        },
                                        "name": {
                                            "type": "string"
                                        },
                                        "created": {},
                                        "partisan_lean": {
                                            "type": "string"
                                        },
                                        "temperature": {
                                            "type": "string"
                                        },
                                        "fec": {},
                                        "summary": {
                                            "type": "string"
                                        }
                                    },
                                    "required": [
                                        "contact_id",
                                        "url",
                                        "name",
                                        "created",
                                        "partisan_lean",
                                        "temperature",
                                        "fec",
                                        "summary"
                                    ]
                                }
                            }
                        }
                    },
                    "502": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string"
                                        }
                                    },
                                    "required": [
                                        "error"
                                    ]
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/contacts\/merge": {
            "post": {
                "operationId": "contacts.merge",
                "tags": [
                    "ContactMerge"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/MergeContactRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "source_id": {
                                            "type": "integer"
                                        },
                                        "target_id": {
                                            "type": "integer"
                                        },
                                        "dry_run": {
                                            "type": "boolean"
                                        },
                                        "executed": {
                                            "type": "boolean"
                                        },
                                        "field_changes": {
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            },
                                            "minItems": 0,
                                            "maxItems": 0,
                                            "additionalItems": false
                                        },
                                        "notes_appended": {
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            },
                                            "minItems": 0,
                                            "maxItems": 0,
                                            "additionalItems": false
                                        },
                                        "channel_summary": {
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            },
                                            "minItems": 0,
                                            "maxItems": 0,
                                            "additionalItems": false
                                        },
                                        "moved_counts": {
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            },
                                            "minItems": 0,
                                            "maxItems": 0,
                                            "additionalItems": false
                                        },
                                        "profile_actions": {
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            },
                                            "minItems": 0,
                                            "maxItems": 0,
                                            "additionalItems": false
                                        },
                                        "source_soft_deleted": {
                                            "type": "boolean"
                                        },
                                        "warnings": {
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            },
                                            "minItems": 0,
                                            "maxItems": 0,
                                            "additionalItems": false
                                        }
                                    },
                                    "required": [
                                        "source_id",
                                        "target_id",
                                        "dry_run",
                                        "executed",
                                        "field_changes",
                                        "notes_appended",
                                        "channel_summary",
                                        "moved_counts",
                                        "profile_actions",
                                        "source_soft_deleted",
                                        "warnings"
                                    ]
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    }
                }
            }
        },
        "\/contacts\/{contact}\/profile": {
            "get": {
                "operationId": "contacts.profile.show",
                "tags": [
                    "ContactProfile"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "anyOf": [
                                        {
                                            "type": "object",
                                            "properties": {
                                                "data": {
                                                    "$ref": "#\/components\/schemas\/ContactProfile"
                                                }
                                            },
                                            "required": [
                                                "data"
                                            ]
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "data": {
                                                    "type": "null"
                                                }
                                            },
                                            "required": [
                                                "data"
                                            ]
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "put": {
                "operationId": "contacts.profile.upsert",
                "tags": [
                    "ContactProfile"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "content": {
                                        "type": "string"
                                    },
                                    "source": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 100
                                    },
                                    "generated_at": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "format": "date-time"
                                    }
                                },
                                "required": [
                                    "content"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "string"
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/contacts\/{contact}\/roles": {
            "get": {
                "operationId": "contact-roles.index",
                "tags": [
                    "ContactRole"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/ContactRole"
                                            }
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "contact-roles.store",
                "tags": [
                    "ContactRole"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StoreContactRoleRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ContactRole"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/contacts\/{contact}\/roles\/{role}": {
            "delete": {
                "operationId": "contact-roles.destroy",
                "tags": [
                    "ContactRole"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "role",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/contacts\/{contact}\/skills": {
            "get": {
                "operationId": "contact-skills.index",
                "tags": [
                    "ContactSkill"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/ContactSkill"
                                            }
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "contact-skills.store",
                "tags": [
                    "ContactSkill"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StoreContactSkillRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/ContactSkill"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/contacts\/{contact}\/skills\/{skill}": {
            "delete": {
                "operationId": "contact-skills.destroy",
                "tags": [
                    "ContactSkill"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "skill",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/contacts\/stats": {
            "get": {
                "operationId": "contacts.stats",
                "tags": [
                    "ContactStats"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "contacts": {
                                                    "type": "object",
                                                    "properties": {
                                                        "total": {
                                                            "type": "integer"
                                                        },
                                                        "subscribed": {
                                                            "type": "integer"
                                                        },
                                                        "hotlist": {
                                                            "type": "integer"
                                                        },
                                                        "with_profile": {
                                                            "type": "integer"
                                                        },
                                                        "by_party_affiliation": {
                                                            "type": "object",
                                                            "additionalProperties": {}
                                                        },
                                                        "by_warmth": {
                                                            "type": "object",
                                                            "additionalProperties": {}
                                                        },
                                                        "by_influence_level": {
                                                            "type": "object",
                                                            "additionalProperties": {}
                                                        },
                                                        "by_community_top_10": {
                                                            "type": "object",
                                                            "additionalProperties": {}
                                                        },
                                                        "by_partisan_lean": {
                                                            "type": "object",
                                                            "additionalProperties": {}
                                                        }
                                                    },
                                                    "required": [
                                                        "total",
                                                        "subscribed",
                                                        "hotlist",
                                                        "with_profile",
                                                        "by_party_affiliation",
                                                        "by_warmth",
                                                        "by_influence_level",
                                                        "by_community_top_10",
                                                        "by_partisan_lean"
                                                    ]
                                                },
                                                "interactions": {
                                                    "type": "object",
                                                    "properties": {
                                                        "total": {
                                                            "type": "integer"
                                                        },
                                                        "by_type": {
                                                            "type": "array",
                                                            "items": {}
                                                        },
                                                        "last_30_days": {
                                                            "type": "integer"
                                                        },
                                                        "last_7_days": {
                                                            "type": "integer"
                                                        },
                                                        "follow_up_needed": {
                                                            "type": "integer"
                                                        }
                                                    },
                                                    "required": [
                                                        "total",
                                                        "by_type",
                                                        "last_30_days",
                                                        "last_7_days",
                                                        "follow_up_needed"
                                                    ]
                                                },
                                                "donations": {
                                                    "type": "object",
                                                    "properties": {
                                                        "total_count": {
                                                            "type": "integer"
                                                        },
                                                        "total_amount": {
                                                            "type": "string"
                                                        },
                                                        "average_amount": {
                                                            "type": "string"
                                                        },
                                                        "unacknowledged": {
                                                            "type": "integer"
                                                        },
                                                        "last_30_days_count": {
                                                            "type": "integer"
                                                        },
                                                        "last_30_days_amount": {
                                                            "type": "string"
                                                        },
                                                        "by_method": {
                                                            "type": "array",
                                                            "items": {}
                                                        }
                                                    },
                                                    "required": [
                                                        "total_count",
                                                        "total_amount",
                                                        "average_amount",
                                                        "unacknowledged",
                                                        "last_30_days_count",
                                                        "last_30_days_amount",
                                                        "by_method"
                                                    ]
                                                },
                                                "journal": {
                                                    "type": "object",
                                                    "properties": {
                                                        "total": {
                                                            "type": "integer"
                                                        }
                                                    },
                                                    "required": [
                                                        "total"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "contacts",
                                                "interactions",
                                                "donations",
                                                "journal"
                                            ]
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "generated_at": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "generated_at"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/contacts\/{contact}\/coverage": {
            "put": {
                "operationId": "contacts.coverage.update",
                "tags": [
                    "Coverage"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "seed_from_home": {
                                        "type": [
                                            "boolean",
                                            "null"
                                        ]
                                    },
                                    "communities": {
                                        "type": [
                                            "array",
                                            "null"
                                        ],
                                        "items": {
                                            "type": "string",
                                            "enum": [
                                                "Ashley",
                                                "Delaware",
                                                "Dublin",
                                                "Galena",
                                                "Ostrander",
                                                "Powell",
                                                "Shawnee Hills",
                                                "Sunbury",
                                                "Westerville",
                                                "Radnor",
                                                "Columbus (Delaware County)",
                                                "Berlin Township",
                                                "Berkshire Township",
                                                "Brown Township",
                                                "Concord Township",
                                                "Delaware Township",
                                                "Genoa Township",
                                                "Harlem Township",
                                                "Kingston Township",
                                                "Liberty Township",
                                                "Marlboro Township",
                                                "Orange Township",
                                                "Oxford Township",
                                                "Porter Township",
                                                "Radnor Township",
                                                "Scioto Township",
                                                "Sunbury Township",
                                                "Thompson Township",
                                                "Trenton Township",
                                                "Troy Township",
                                                "Washington Township"
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "contact_id": {
                                            "type": "integer"
                                        },
                                        "coverage_areas": {
                                            "type": "object",
                                            "additionalProperties": {}
                                        }
                                    },
                                    "required": [
                                        "contact_id",
                                        "coverage_areas"
                                    ]
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/contacts\/{contact}\/donations": {
            "get": {
                "operationId": "donations.index",
                "tags": [
                    "Donation"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/Donation"
                                            }
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "total": {
                                                    "type": "integer"
                                                }
                                            },
                                            "required": [
                                                "total"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "donations.store",
                "tags": [
                    "Donation"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StoreDonationRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/Donation"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/contacts\/{contact}\/donations\/{donation}": {
            "get": {
                "operationId": "donations.show",
                "tags": [
                    "Donation"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "donation",
                        "in": "path",
                        "required": true,
                        "description": "The donation ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/Donation"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "put": {
                "operationId": "donations.update",
                "tags": [
                    "Donation"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "donation",
                        "in": "path",
                        "required": true,
                        "description": "The donation ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/UpdateDonationRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/Donation"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            },
            "delete": {
                "operationId": "donations.destroy",
                "tags": [
                    "Donation"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "donation",
                        "in": "path",
                        "required": true,
                        "description": "The donation ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/contacts\/{contact}\/donor-ask-statuses": {
            "get": {
                "operationId": "donor-ask-statuses.index",
                "tags": [
                    "DonorAskStatus"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/DonorAskStatus"
                                            }
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "total": {
                                                    "type": "integer"
                                                }
                                            },
                                            "required": [
                                                "total"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "donor-ask-statuses.store",
                "tags": [
                    "DonorAskStatus"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StoreDonorAskStatusRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/DonorAskStatus"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/contacts\/{contact}\/donor-ask-statuses\/{donorAskStatus}": {
            "get": {
                "operationId": "donor-ask-statuses.show",
                "tags": [
                    "DonorAskStatus"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "donorAskStatus",
                        "in": "path",
                        "required": true,
                        "description": "The donor ask status ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/DonorAskStatus"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "put": {
                "operationId": "donor-ask-statuses.update",
                "tags": [
                    "DonorAskStatus"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "donorAskStatus",
                        "in": "path",
                        "required": true,
                        "description": "The donor ask status ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/UpdateDonorAskStatusRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/DonorAskStatus"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            },
            "delete": {
                "operationId": "donor-ask-statuses.destroy",
                "tags": [
                    "DonorAskStatus"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "donorAskStatus",
                        "in": "path",
                        "required": true,
                        "description": "The donor ask status ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/contacts\/{contact}\/research-finances": {
            "post": {
                "operationId": "contacts.research-finances",
                "summary": "Run FEC financial research for a contact, store results, and return a summary",
                "tags": [
                    "DonorResearch"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "include_state_search": {
                                        "type": "boolean",
                                        "default": false
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "contact_id": {
                                                    "type": "integer"
                                                },
                                                "name": {
                                                    "type": "string"
                                                },
                                                "contributions_found": {
                                                    "type": "integer"
                                                },
                                                "analysis": {
                                                    "anyOf": [
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "total_federal_giving": {
                                                                    "type": "number"
                                                                },
                                                                "total_state_giving": {
                                                                    "type": "number"
                                                                },
                                                                "total_giving": {
                                                                    "type": "number"
                                                                },
                                                                "partisan_lean": {
                                                                    "type": "string",
                                                                    "enum": [
                                                                        "strong_rep"
                                                                    ]
                                                                },
                                                                "giving_capacity": {
                                                                    "type": "string",
                                                                    "enum": [
                                                                        "unknown"
                                                                    ]
                                                                },
                                                                "max_single_contribution": {
                                                                    "type": "number"
                                                                },
                                                                "most_recent_date": {
                                                                    "type": [
                                                                        "string",
                                                                        "null"
                                                                    ]
                                                                },
                                                                "gave_to_opponent": {
                                                                    "type": "boolean"
                                                                },
                                                                "gave_to_allies": {
                                                                    "type": "boolean"
                                                                },
                                                                "gave_to_local_races": {
                                                                    "type": "boolean"
                                                                },
                                                                "recent_donor": {
                                                                    "type": "boolean"
                                                                },
                                                                "contribution_count": {
                                                                    "type": "integer"
                                                                }
                                                            },
                                                            "required": [
                                                                "total_federal_giving",
                                                                "total_state_giving",
                                                                "total_giving",
                                                                "partisan_lean",
                                                                "giving_capacity",
                                                                "max_single_contribution",
                                                                "most_recent_date",
                                                                "gave_to_opponent",
                                                                "gave_to_allies",
                                                                "gave_to_local_races",
                                                                "recent_donor",
                                                                "contribution_count"
                                                            ]
                                                        },
                                                        {
                                                            "type": "object",
                                                            "properties": {
                                                                "total_federal_giving": {
                                                                    "type": "integer",
                                                                    "enum": [
                                                                        0
                                                                    ]
                                                                },
                                                                "total_state_giving": {
                                                                    "type": "integer",
                                                                    "enum": [
                                                                        0
                                                                    ]
                                                                },
                                                                "total_giving": {
                                                                    "type": "integer",
                                                                    "enum": [
                                                                        0
                                                                    ]
                                                                },
                                                                "partisan_lean": {
                                                                    "type": "string",
                                                                    "enum": [
                                                                        "unknown"
                                                                    ]
                                                                },
                                                                "giving_capacity": {
                                                                    "type": "string",
                                                                    "enum": [
                                                                        "unknown"
                                                                    ]
                                                                },
                                                                "max_single_contribution": {
                                                                    "type": "integer",
                                                                    "enum": [
                                                                        0
                                                                    ]
                                                                },
                                                                "most_recent_date": {
                                                                    "type": "null"
                                                                },
                                                                "gave_to_opponent": {
                                                                    "type": "boolean"
                                                                },
                                                                "gave_to_allies": {
                                                                    "type": "boolean"
                                                                },
                                                                "gave_to_local_races": {
                                                                    "type": "boolean"
                                                                },
                                                                "recent_donor": {
                                                                    "type": "boolean"
                                                                },
                                                                "contribution_count": {
                                                                    "type": "integer",
                                                                    "enum": [
                                                                        0
                                                                    ]
                                                                }
                                                            },
                                                            "required": [
                                                                "total_federal_giving",
                                                                "total_state_giving",
                                                                "total_giving",
                                                                "partisan_lean",
                                                                "giving_capacity",
                                                                "max_single_contribution",
                                                                "most_recent_date",
                                                                "gave_to_opponent",
                                                                "gave_to_allies",
                                                                "gave_to_local_races",
                                                                "recent_donor",
                                                                "contribution_count"
                                                            ]
                                                        }
                                                    ]
                                                },
                                                "suggested_ask_amount": {
                                                    "type": [
                                                        "number",
                                                        "null"
                                                    ]
                                                },
                                                "match_confidence": {
                                                    "type": "string",
                                                    "enum": [
                                                        "low",
                                                        "medium",
                                                        "high"
                                                    ]
                                                },
                                                "ask_status_created": {
                                                    "type": "boolean"
                                                },
                                                "research_date": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "contact_id",
                                                "name",
                                                "contributions_found",
                                                "analysis",
                                                "suggested_ask_amount",
                                                "match_confidence",
                                                "ask_status_created",
                                                "research_date"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/fundraising\/upsert": {
            "post": {
                "operationId": "fundraising.upsert",
                "tags": [
                    "Fundraising"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/FundraisingUpsertRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    }
                }
            }
        },
        "\/contacts\/{contact}\/fundraising-profile": {
            "get": {
                "operationId": "fundraisingProfile.show",
                "tags": [
                    "FundraisingProfile"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "$ref": "#\/components\/schemas\/ContactFundraisingProfile"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "put": {
                "operationId": "fundraisingProfile.update",
                "tags": [
                    "FundraisingProfile"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/FundraisingProfileRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "$ref": "#\/components\/schemas\/ContactFundraisingProfile"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "403": {
                        "$ref": "#\/components\/responses\/AuthorizationException"
                    }
                }
            }
        },
        "\/fundraising-profiles": {
            "get": {
                "operationId": "fundraisingProfile.index",
                "tags": [
                    "FundraisingProfile"
                ],
                "parameters": [
                    {
                        "name": "tier",
                        "in": "query",
                        "schema": {
                            "type": [
                                "string",
                                "null"
                            ],
                            "enum": [
                                "1",
                                "2",
                                "3",
                                "not_now"
                            ]
                        }
                    },
                    {
                        "name": "donor_grade",
                        "in": "query",
                        "schema": {
                            "type": [
                                "string",
                                "null"
                            ],
                            "enum": [
                                "A",
                                "B",
                                "C",
                                "D",
                                "F"
                            ]
                        }
                    },
                    {
                        "name": "ask_cycle_position",
                        "in": "query",
                        "schema": {
                            "type": [
                                "string",
                                "null"
                            ],
                            "enum": [
                                "planned",
                                "asked_1",
                                "asked_2",
                                "asked_3",
                                "committed",
                                "received",
                                "declined",
                                "recurring"
                            ]
                        }
                    },
                    {
                        "name": "motivation",
                        "in": "query",
                        "schema": {
                            "type": [
                                "string",
                                "null"
                            ],
                            "enum": [
                                "issue",
                                "relationship",
                                "party",
                                "accountability"
                            ]
                        }
                    },
                    {
                        "name": "next_action_due_before",
                        "in": "query",
                        "schema": {
                            "type": [
                                "string",
                                "null"
                            ],
                            "format": "date-time"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "schema": {
                            "type": [
                                "integer",
                                "null"
                            ],
                            "minimum": 1,
                            "maximum": 500
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            }
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "total": {
                                                    "type": "integer"
                                                }
                                            },
                                            "required": [
                                                "total"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/initiatives": {
            "get": {
                "operationId": "initiatives.index",
                "tags": [
                    "Initiative"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "id": {
                                                        "type": "integer"
                                                    },
                                                    "name": {
                                                        "type": "string"
                                                    },
                                                    "slug": {
                                                        "type": "string"
                                                    },
                                                    "description": {
                                                        "type": [
                                                            "string",
                                                            "null"
                                                        ]
                                                    },
                                                    "status": {
                                                        "type": "string"
                                                    },
                                                    "total": {
                                                        "type": "integer"
                                                    },
                                                    "contacted": {
                                                        "type": "integer"
                                                    },
                                                    "remaining": {
                                                        "type": "string"
                                                    }
                                                },
                                                "required": [
                                                    "id",
                                                    "name",
                                                    "slug",
                                                    "description",
                                                    "status",
                                                    "total",
                                                    "contacted",
                                                    "remaining"
                                                ]
                                            }
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "total": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "total"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "initiatives.store",
                "tags": [
                    "Initiative"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "maxLength": 120
                                    },
                                    "description": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 2000
                                    },
                                    "status": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "enum": [
                                            "active",
                                            "archived"
                                        ]
                                    }
                                },
                                "required": [
                                    "name"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "id": {
                                                    "type": "integer"
                                                },
                                                "name": {
                                                    "type": "string"
                                                },
                                                "slug": {
                                                    "type": "string"
                                                },
                                                "description": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "status": {
                                                    "type": "string"
                                                },
                                                "total": {
                                                    "type": "integer"
                                                },
                                                "contacted": {
                                                    "type": "integer"
                                                },
                                                "remaining": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "id",
                                                "name",
                                                "slug",
                                                "description",
                                                "status",
                                                "total",
                                                "contacted",
                                                "remaining"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/initiatives\/{initiative}": {
            "get": {
                "operationId": "initiatives.show",
                "tags": [
                    "Initiative"
                ],
                "parameters": [
                    {
                        "name": "initiative",
                        "in": "path",
                        "required": true,
                        "description": "The initiative ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "id": {
                                                    "type": "integer"
                                                },
                                                "name": {
                                                    "type": "string"
                                                },
                                                "slug": {
                                                    "type": "string"
                                                },
                                                "description": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "status": {
                                                    "type": "string"
                                                },
                                                "total": {
                                                    "type": "integer"
                                                },
                                                "contacted": {
                                                    "type": "integer"
                                                },
                                                "remaining": {
                                                    "type": "string"
                                                },
                                                "members": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "id",
                                                "name",
                                                "slug",
                                                "description",
                                                "status",
                                                "total",
                                                "contacted",
                                                "remaining",
                                                "members"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "put": {
                "operationId": "initiatives.update",
                "tags": [
                    "Initiative"
                ],
                "parameters": [
                    {
                        "name": "initiative",
                        "in": "path",
                        "required": true,
                        "description": "The initiative ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "maxLength": 120
                                    },
                                    "description": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 2000
                                    },
                                    "status": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "enum": [
                                            "active",
                                            "archived"
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "id": {
                                                    "type": "integer"
                                                },
                                                "name": {
                                                    "type": "string"
                                                },
                                                "slug": {
                                                    "type": "string"
                                                },
                                                "description": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "status": {
                                                    "type": "string"
                                                },
                                                "total": {
                                                    "type": "integer"
                                                },
                                                "contacted": {
                                                    "type": "integer"
                                                },
                                                "remaining": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "id",
                                                "name",
                                                "slug",
                                                "description",
                                                "status",
                                                "total",
                                                "contacted",
                                                "remaining"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "delete": {
                "operationId": "initiatives.destroy",
                "tags": [
                    "Initiative"
                ],
                "parameters": [
                    {
                        "name": "initiative",
                        "in": "path",
                        "required": true,
                        "description": "The initiative ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Initiative deleted."
                                            ]
                                        }
                                    },
                                    "required": [
                                        "message"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/initiatives\/{initiative}\/contacts": {
            "post": {
                "operationId": "initiatives.contacts.add",
                "tags": [
                    "Initiative"
                ],
                "parameters": [
                    {
                        "name": "initiative",
                        "in": "path",
                        "required": true,
                        "description": "The initiative ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "contact_id": {
                                        "type": "integer"
                                    }
                                },
                                "required": [
                                    "contact_id"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "id": {
                                                    "type": "integer"
                                                },
                                                "name": {
                                                    "type": "string"
                                                },
                                                "slug": {
                                                    "type": "string"
                                                },
                                                "description": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "status": {
                                                    "type": "string"
                                                },
                                                "total": {
                                                    "type": "integer"
                                                },
                                                "contacted": {
                                                    "type": "integer"
                                                },
                                                "remaining": {
                                                    "type": "string"
                                                },
                                                "contact": {
                                                    "type": "object",
                                                    "properties": {
                                                        "contact_id": {
                                                            "type": "string"
                                                        },
                                                        "name": {
                                                            "type": "string"
                                                        }
                                                    },
                                                    "required": [
                                                        "contact_id",
                                                        "name"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "id",
                                                "name",
                                                "slug",
                                                "description",
                                                "status",
                                                "total",
                                                "contacted",
                                                "remaining",
                                                "contact"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/initiatives\/{initiative}\/contacts\/{contact}": {
            "delete": {
                "operationId": "initiatives.contacts.remove",
                "tags": [
                    "Initiative"
                ],
                "parameters": [
                    {
                        "name": "initiative",
                        "in": "path",
                        "required": true,
                        "description": "The initiative ID",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "id": {
                                                    "type": "integer"
                                                },
                                                "name": {
                                                    "type": "string"
                                                },
                                                "slug": {
                                                    "type": "string"
                                                },
                                                "description": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "status": {
                                                    "type": "string"
                                                },
                                                "total": {
                                                    "type": "integer"
                                                },
                                                "contacted": {
                                                    "type": "integer"
                                                },
                                                "remaining": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "id",
                                                "name",
                                                "slug",
                                                "description",
                                                "status",
                                                "total",
                                                "contacted",
                                                "remaining"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/initiatives\/{initiative}\/contacts\/{contact}\/contacted": {
            "post": {
                "operationId": "initiatives.contacts.contacted",
                "tags": [
                    "Initiative"
                ],
                "parameters": [
                    {
                        "name": "initiative",
                        "in": "path",
                        "required": true,
                        "description": "The initiative ID",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "contacted": {
                                        "type": "boolean"
                                    }
                                },
                                "required": [
                                    "contacted"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "id": {
                                                    "type": "integer"
                                                },
                                                "name": {
                                                    "type": "string"
                                                },
                                                "slug": {
                                                    "type": "string"
                                                },
                                                "description": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "status": {
                                                    "type": "string"
                                                },
                                                "total": {
                                                    "type": "integer"
                                                },
                                                "contacted": {
                                                    "type": "integer"
                                                },
                                                "remaining": {
                                                    "type": "string"
                                                },
                                                "contact_id": {
                                                    "type": "integer"
                                                },
                                                "marked_contacted": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "id",
                                                "name",
                                                "slug",
                                                "description",
                                                "status",
                                                "total",
                                                "contacted",
                                                "remaining",
                                                "contact_id",
                                                "marked_contacted"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/contacts\/{contact}\/interactions": {
            "get": {
                "operationId": "interactions.index",
                "tags": [
                    "Interaction"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/Interaction"
                                            }
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "total": {
                                                    "type": "integer"
                                                }
                                            },
                                            "required": [
                                                "total"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "interactions.store",
                "tags": [
                    "Interaction"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StoreInteractionRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/Interaction"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/contacts\/{contact}\/interactions\/{interaction}": {
            "get": {
                "operationId": "interactions.show",
                "tags": [
                    "Interaction"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "interaction",
                        "in": "path",
                        "required": true,
                        "description": "The interaction ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/Interaction"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "put": {
                "operationId": "interactions.update",
                "tags": [
                    "Interaction"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "interaction",
                        "in": "path",
                        "required": true,
                        "description": "The interaction ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/UpdateInteractionRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/Interaction"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            },
            "delete": {
                "operationId": "interactions.destroy",
                "tags": [
                    "Interaction"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "interaction",
                        "in": "path",
                        "required": true,
                        "description": "The interaction ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/journal": {
            "get": {
                "operationId": "journal.index",
                "tags": [
                    "Journal"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            }
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "current_page": {
                                                    "type": "integer"
                                                },
                                                "last_page": {
                                                    "type": "integer"
                                                },
                                                "total": {
                                                    "type": "integer"
                                                }
                                            },
                                            "required": [
                                                "current_page",
                                                "last_page",
                                                "total"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "journal.store",
                "tags": [
                    "Journal"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "title": {
                                        "type": "string",
                                        "maxLength": 255
                                    },
                                    "body": {
                                        "type": "string"
                                    },
                                    "entry_date": {
                                        "type": "string",
                                        "format": "date-time"
                                    },
                                    "project": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 255
                                    },
                                    "location": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 255
                                    },
                                    "community": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 100
                                    },
                                    "contact_ids": {
                                        "type": [
                                            "array",
                                            "null"
                                        ],
                                        "items": {
                                            "type": "integer"
                                        }
                                    }
                                },
                                "required": [
                                    "title",
                                    "body",
                                    "entry_date"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "string"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/journal\/{journal}": {
            "get": {
                "operationId": "journal.show",
                "tags": [
                    "Journal"
                ],
                "parameters": [
                    {
                        "name": "journal",
                        "in": "path",
                        "required": true,
                        "description": "The journal ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/JournalEntry"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "put": {
                "operationId": "journal.update",
                "tags": [
                    "Journal"
                ],
                "parameters": [
                    {
                        "name": "journal",
                        "in": "path",
                        "required": true,
                        "description": "The journal ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "title": {
                                        "type": "string",
                                        "maxLength": 255
                                    },
                                    "body": {
                                        "type": "string"
                                    },
                                    "entry_date": {
                                        "type": "string",
                                        "format": "date-time"
                                    },
                                    "project": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 255
                                    },
                                    "location": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 255
                                    },
                                    "community": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 100
                                    },
                                    "contact_ids": {
                                        "type": [
                                            "array",
                                            "null"
                                        ],
                                        "items": {
                                            "type": "integer"
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/JournalEntry"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "delete": {
                "operationId": "journal.destroy",
                "tags": [
                    "Journal"
                ],
                "parameters": [
                    {
                        "name": "journal",
                        "in": "path",
                        "required": true,
                        "description": "The journal ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/journal\/{entry}\/images": {
            "post": {
                "operationId": "journal.images.store",
                "tags": [
                    "Journal"
                ],
                "parameters": [
                    {
                        "name": "entry",
                        "in": "path",
                        "required": true,
                        "description": "The entry ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart\/form-data": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "image": {
                                        "type": "string",
                                        "format": "binary",
                                        "contentMediaType": "application\/octet-stream",
                                        "maxLength": 10240
                                    },
                                    "caption": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 255
                                    }
                                },
                                "required": [
                                    "image"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/JournalImage"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/journal\/{entry}\/images\/{image}": {
            "delete": {
                "operationId": "journal.images.destroy",
                "tags": [
                    "Journal"
                ],
                "parameters": [
                    {
                        "name": "entry",
                        "in": "path",
                        "required": true,
                        "description": "The entry ID",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "image",
                        "in": "path",
                        "required": true,
                        "description": "The image ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/library-articles": {
            "get": {
                "operationId": "library-articles.index",
                "tags": [
                    "LibraryArticle"
                ],
                "parameters": [
                    {
                        "name": "category",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "search",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            }
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "current_page": {
                                                    "type": "integer"
                                                },
                                                "last_page": {
                                                    "type": "integer"
                                                },
                                                "total": {
                                                    "type": "integer"
                                                }
                                            },
                                            "required": [
                                                "current_page",
                                                "last_page",
                                                "total"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "library-articles.store",
                "tags": [
                    "LibraryArticle"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "title": {
                                        "type": "string",
                                        "maxLength": 255
                                    },
                                    "summary": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 255
                                    },
                                    "category": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 100
                                    },
                                    "body": {
                                        "type": "string"
                                    }
                                },
                                "required": [
                                    "title",
                                    "body"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "string"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/library-articles\/{libraryArticle}": {
            "get": {
                "operationId": "library-articles.show",
                "tags": [
                    "LibraryArticle"
                ],
                "parameters": [
                    {
                        "name": "libraryArticle",
                        "in": "path",
                        "required": true,
                        "description": "The library article ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/LibraryArticle"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "put": {
                "operationId": "library-articles.update",
                "tags": [
                    "LibraryArticle"
                ],
                "parameters": [
                    {
                        "name": "libraryArticle",
                        "in": "path",
                        "required": true,
                        "description": "The library article ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "title": {
                                        "type": "string",
                                        "maxLength": 255
                                    },
                                    "summary": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 255
                                    },
                                    "category": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 100
                                    },
                                    "body": {
                                        "type": "string"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/LibraryArticle"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "delete": {
                "operationId": "library-articles.destroy",
                "tags": [
                    "LibraryArticle"
                ],
                "parameters": [
                    {
                        "name": "libraryArticle",
                        "in": "path",
                        "required": true,
                        "description": "The library article ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/merch-requests": {
            "get": {
                "operationId": "merch-requests.index",
                "tags": [
                    "MerchRequest"
                ],
                "parameters": [
                    {
                        "name": "status",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "item_type",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "size",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "contact_id",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "default": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            }
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "total": {
                                                    "type": "integer"
                                                }
                                            },
                                            "required": [
                                                "total"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "merch-requests.store",
                "tags": [
                    "MerchRequest"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StoreMerchRequestRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/MerchRequest"
                                            }
                                        },
                                        "contact_id": {
                                            "type": "string"
                                        },
                                        "created": {
                                            "type": "boolean"
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "contact_id",
                                        "created"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/merch-requests\/{merchRequest}": {
            "get": {
                "operationId": "merch-requests.show",
                "tags": [
                    "MerchRequest"
                ],
                "parameters": [
                    {
                        "name": "merchRequest",
                        "in": "path",
                        "required": true,
                        "description": "The merch request ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/MerchRequest"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "put": {
                "operationId": "merch-requests.update",
                "tags": [
                    "MerchRequest"
                ],
                "parameters": [
                    {
                        "name": "merchRequest",
                        "in": "path",
                        "required": true,
                        "description": "The merch request ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/UpdateMerchRequestRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/MerchRequest"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            },
            "delete": {
                "operationId": "merch-requests.destroy",
                "tags": [
                    "MerchRequest"
                ],
                "parameters": [
                    {
                        "name": "merchRequest",
                        "in": "path",
                        "required": true,
                        "description": "The merch request ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/parade-signups": {
            "post": {
                "operationId": "parade-signups.store",
                "summary": "Record a parade signup (match\/create contact + write the RSVP roster).\nSilent \u2014 no confirmation email or notification is sent",
                "tags": [
                    "ParadeSignup"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/ManualParadeSignupRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "contact_id": {
                                            "type": "string"
                                        },
                                        "rsvp_id": {
                                            "type": "string"
                                        },
                                        "parade": {
                                            "type": [
                                                "string",
                                                "null"
                                            ]
                                        },
                                        "created": {
                                            "type": "boolean"
                                        },
                                        "party_size": {
                                            "type": "string"
                                        },
                                        "url": {
                                            "type": "string"
                                        }
                                    },
                                    "required": [
                                        "contact_id",
                                        "rsvp_id",
                                        "parade",
                                        "created",
                                        "party_size",
                                        "url"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/stakeholders": {
            "get": {
                "operationId": "stakeholders.index",
                "tags": [
                    "Stakeholder"
                ],
                "parameters": [
                    {
                        "name": "tag",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            }
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "total": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "total"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "stakeholders.store",
                "tags": [
                    "Stakeholder"
                ],
                "responses": {
                    "201": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "string"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/stakeholders\/{stakeholder}": {
            "get": {
                "operationId": "stakeholders.show",
                "tags": [
                    "Stakeholder"
                ],
                "parameters": [
                    {
                        "name": "stakeholder",
                        "in": "path",
                        "required": true,
                        "description": "The stakeholder ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/Stakeholder"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "put": {
                "operationId": "stakeholders.update",
                "tags": [
                    "Stakeholder"
                ],
                "parameters": [
                    {
                        "name": "stakeholder",
                        "in": "path",
                        "required": true,
                        "description": "The stakeholder ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/Stakeholder"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "delete": {
                "operationId": "stakeholders.destroy",
                "tags": [
                    "Stakeholder"
                ],
                "parameters": [
                    {
                        "name": "stakeholder",
                        "in": "path",
                        "required": true,
                        "description": "The stakeholder ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/stakeholders\/{stakeholder}\/contacts": {
            "post": {
                "operationId": "stakeholders.contacts.link",
                "tags": [
                    "Stakeholder"
                ],
                "parameters": [
                    {
                        "name": "stakeholder",
                        "in": "path",
                        "required": true,
                        "description": "The stakeholder ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "contact_id": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ]
                                    },
                                    "role": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 255
                                    },
                                    "first_name": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 255
                                    },
                                    "last_name": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 255
                                    },
                                    "email": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "format": "email"
                                    },
                                    "phone": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 50
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/Contact"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/stakeholders\/{stakeholder}\/contacts\/{contact}": {
            "delete": {
                "operationId": "stakeholders.contacts.unlink",
                "tags": [
                    "Stakeholder"
                ],
                "parameters": [
                    {
                        "name": "stakeholder",
                        "in": "path",
                        "required": true,
                        "description": "The stakeholder ID",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/surveys": {
            "get": {
                "operationId": "surveys.index",
                "tags": [
                    "Survey"
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "string"
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "total": {
                                                    "type": "string"
                                                },
                                                "generated_at": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "total",
                                                "generated_at"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/surveys\/{survey}\/results": {
            "get": {
                "operationId": "surveys.results",
                "tags": [
                    "Survey"
                ],
                "parameters": [
                    {
                        "name": "survey",
                        "in": "path",
                        "required": true,
                        "description": "The survey ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "properties": {
                                                "survey": {
                                                    "type": "object",
                                                    "properties": {
                                                        "id": {
                                                            "type": "integer"
                                                        },
                                                        "title": {
                                                            "type": "string"
                                                        },
                                                        "slug": {
                                                            "type": "string"
                                                        },
                                                        "is_active": {
                                                            "type": "boolean"
                                                        }
                                                    },
                                                    "required": [
                                                        "id",
                                                        "title",
                                                        "slug",
                                                        "is_active"
                                                    ]
                                                },
                                                "completed_count": {
                                                    "type": "integer"
                                                },
                                                "questions": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "survey",
                                                "completed_count",
                                                "questions"
                                            ]
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "generated_at": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "generated_at"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/surveys\/{survey}\/responses": {
            "get": {
                "operationId": "surveys.responses",
                "tags": [
                    "Survey"
                ],
                "parameters": [
                    {
                        "name": "survey",
                        "in": "path",
                        "required": true,
                        "description": "The survey ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            }
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "total": {
                                                    "type": "integer"
                                                }
                                            },
                                            "required": [
                                                "total"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/surveys\/{survey}\/export": {
            "get": {
                "operationId": "surveys.export",
                "tags": [
                    "Survey"
                ],
                "parameters": [
                    {
                        "name": "survey",
                        "in": "path",
                        "required": true,
                        "description": "The survey ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "JSON only over the API (CSV download lives on the web admin route).",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "survey": {
                                            "type": "object",
                                            "properties": {
                                                "id": {
                                                    "type": "integer"
                                                },
                                                "title": {
                                                    "type": "string"
                                                },
                                                "slug": {
                                                    "type": "string"
                                                },
                                                "is_active": {
                                                    "type": "boolean"
                                                }
                                            },
                                            "required": [
                                                "id",
                                                "title",
                                                "slug",
                                                "is_active"
                                            ]
                                        },
                                        "questions": {
                                            "type": "string"
                                        },
                                        "responses": {
                                            "type": "object",
                                            "additionalProperties": {
                                                "type": "string"
                                            }
                                        },
                                        "generated_at": {
                                            "type": "string"
                                        }
                                    },
                                    "required": [
                                        "survey",
                                        "questions",
                                        "responses",
                                        "generated_at"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/contacts\/{contact}\/volunteer": {
            "put": {
                "operationId": "contacts.volunteer.update",
                "tags": [
                    "Volunteer"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application\/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "stage": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "enum": [
                                            "supporter",
                                            "trained_lead",
                                            "field_lead",
                                            "host_captain"
                                        ]
                                    },
                                    "activities": {
                                        "type": [
                                            "array",
                                            "null"
                                        ],
                                        "items": {
                                            "type": "string",
                                            "enum": [
                                                "relational_organizing",
                                                "door_knocking",
                                                "phone_banking",
                                                "text_banking",
                                                "postcards",
                                                "gotv_rides",
                                                "event_support",
                                                "host_house_party",
                                                "yard_sign",
                                                "data_entry",
                                                "social_media",
                                                "fundraising_help",
                                                "offers_skill",
                                                "interested_leading"
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "contact_id": {
                                            "type": "integer"
                                        },
                                        "volunteer_stage": {
                                            "type": [
                                                "string",
                                                "null"
                                            ]
                                        },
                                        "volunteer_activities": {
                                            "type": "object",
                                            "additionalProperties": {}
                                        }
                                    },
                                    "required": [
                                        "contact_id",
                                        "volunteer_stage",
                                        "volunteer_activities"
                                    ]
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        },
        "\/contacts\/{contact}\/yard-signs": {
            "get": {
                "operationId": "yard-signs.index",
                "tags": [
                    "YardSign"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#\/components\/schemas\/YardSign"
                                            }
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "total": {
                                                    "type": "integer"
                                                }
                                            },
                                            "required": [
                                                "total"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "data",
                                        "meta"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "post": {
                "operationId": "yard-signs.store",
                "tags": [
                    "YardSign"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/StoreYardSignRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/YardSign"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            }
        },
        "\/contacts\/{contact}\/yard-signs\/{yardSign}": {
            "get": {
                "operationId": "yard-signs.show",
                "tags": [
                    "YardSign"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "yardSign",
                        "in": "path",
                        "required": true,
                        "description": "The yard sign ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/YardSign"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            },
            "put": {
                "operationId": "yard-signs.update",
                "tags": [
                    "YardSign"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "yardSign",
                        "in": "path",
                        "required": true,
                        "description": "The yard sign ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application\/json": {
                            "schema": {
                                "$ref": "#\/components\/schemas\/UpdateYardSignRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application\/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#\/components\/schemas\/YardSign"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    },
                    "422": {
                        "$ref": "#\/components\/responses\/ValidationException"
                    }
                }
            },
            "delete": {
                "operationId": "yard-signs.destroy",
                "tags": [
                    "YardSign"
                ],
                "parameters": [
                    {
                        "name": "contact",
                        "in": "path",
                        "required": true,
                        "description": "The contact ID",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "yardSign",
                        "in": "path",
                        "required": true,
                        "description": "The yard sign ID",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No content"
                    },
                    "404": {
                        "$ref": "#\/components\/responses\/ModelNotFoundException"
                    },
                    "401": {
                        "$ref": "#\/components\/responses\/AuthenticationException"
                    }
                }
            }
        }
    },
    "components": {
        "securitySchemes": {
            "http": {
                "type": "http",
                "scheme": "bearer"
            }
        },
        "schemas": {
            "ActivityLog": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "loggable_type": {
                        "type": "string"
                    },
                    "loggable_id": {
                        "type": "integer"
                    },
                    "title": {
                        "type": "string"
                    },
                    "description": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "properties": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {}
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "loggable_type",
                    "loggable_id",
                    "title",
                    "description",
                    "properties",
                    "created_at"
                ],
                "title": "ActivityLog"
            },
            "Contact": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "first_name": {
                        "type": "string"
                    },
                    "last_name": {
                        "type": "string"
                    },
                    "phone": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "email": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "private_notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "address": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "address2": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "city": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "state": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "zip": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "latitude": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "longitude": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "geo_street": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "geo_locality": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "geo_place": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "geo_district": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "party_affiliation": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "community": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "county": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "influence_level": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "ring": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "volunteer_stage": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "warmth": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "temperature": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "familiarity": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "referred_by_contact_id": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "referral_source_type": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "occupation": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "organization": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "subscribed_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "unsubscribed_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "is_test_recipient": {
                        "type": "boolean"
                    },
                    "is_hotlist": {
                        "type": "boolean"
                    },
                    "do_not_contact": {
                        "type": "boolean"
                    },
                    "do_not_contact_reason": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "fec_research_completed_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "partisan_lean": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "giving_capacity": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "fec_match_confidence": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "suggested_ask_amount": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "enriched_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "deleted_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "subscription_status": {
                        "type": "string"
                    }
                },
                "required": [
                    "id",
                    "first_name",
                    "last_name",
                    "phone",
                    "email",
                    "notes",
                    "private_notes",
                    "address",
                    "address2",
                    "city",
                    "state",
                    "zip",
                    "latitude",
                    "longitude",
                    "geo_street",
                    "geo_locality",
                    "geo_place",
                    "geo_district",
                    "party_affiliation",
                    "community",
                    "county",
                    "influence_level",
                    "ring",
                    "volunteer_stage",
                    "warmth",
                    "temperature",
                    "familiarity",
                    "referred_by_contact_id",
                    "referral_source_type",
                    "occupation",
                    "organization",
                    "subscribed_at",
                    "unsubscribed_at",
                    "is_test_recipient",
                    "is_hotlist",
                    "do_not_contact",
                    "do_not_contact_reason",
                    "fec_research_completed_at",
                    "partisan_lean",
                    "giving_capacity",
                    "fec_match_confidence",
                    "suggested_ask_amount",
                    "created_at",
                    "updated_at",
                    "enriched_at",
                    "deleted_at",
                    "subscription_status"
                ],
                "title": "Contact"
            },
            "ContactFundraisingProfile": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "contact_id": {
                        "type": "integer"
                    },
                    "tier": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "tier_manual_override": {
                        "type": "boolean"
                    },
                    "suggested_ask_amount": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "motivation": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "angle": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "next_action": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "next_action_date": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "ask_cycle_position": {
                        "type": "string"
                    },
                    "last_touch_date": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "relationship_type": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "referral_source": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "is_volunteer_prospect": {
                        "type": "boolean"
                    },
                    "is_endorser_prospect": {
                        "type": "boolean"
                    },
                    "pledge_type": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "pledge_amount": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "pledge_fulfilled": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "donor_grade": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "giving_capacity": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "solicitable": {
                        "type": "boolean"
                    },
                    "do_not_ask_reason": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "research_status": {
                        "type": "string"
                    },
                    "research_confidence": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "last_fundraising_reviewed_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "last_fundraising_researched_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "fec_giving_history": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "ohio_sos_giving_history": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "wealth_signals_summary": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "capacity_basis": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "ask_basis": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "ask_strategy_summary": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "fundraising_notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "import_source": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "contact_id",
                    "tier",
                    "tier_manual_override",
                    "suggested_ask_amount",
                    "motivation",
                    "angle",
                    "next_action",
                    "next_action_date",
                    "ask_cycle_position",
                    "last_touch_date",
                    "relationship_type",
                    "referral_source",
                    "is_volunteer_prospect",
                    "is_endorser_prospect",
                    "pledge_type",
                    "pledge_amount",
                    "pledge_fulfilled",
                    "donor_grade",
                    "giving_capacity",
                    "solicitable",
                    "do_not_ask_reason",
                    "research_status",
                    "research_confidence",
                    "last_fundraising_reviewed_at",
                    "last_fundraising_researched_at",
                    "fec_giving_history",
                    "ohio_sos_giving_history",
                    "wealth_signals_summary",
                    "capacity_basis",
                    "ask_basis",
                    "ask_strategy_summary",
                    "fundraising_notes",
                    "import_source",
                    "created_at",
                    "updated_at"
                ],
                "title": "ContactFundraisingProfile"
            },
            "ContactProfile": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "contact_id": {
                        "type": "integer"
                    },
                    "content": {
                        "type": "string"
                    },
                    "type": {
                        "type": "string"
                    },
                    "source": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "generated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "contact_id",
                    "content",
                    "type",
                    "source",
                    "generated_at",
                    "created_at",
                    "updated_at"
                ],
                "title": "ContactProfile"
            },
            "ContactRole": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "contact_id": {
                        "type": "integer"
                    },
                    "role": {
                        "type": "string"
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "contact_id",
                    "role",
                    "created_at",
                    "updated_at"
                ],
                "title": "ContactRole"
            },
            "ContactSkill": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "contact_id": {
                        "type": "integer"
                    },
                    "skill": {
                        "type": "string"
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "contact_id",
                    "skill",
                    "created_at"
                ],
                "title": "ContactSkill"
            },
            "Donation": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "contact_id": {
                        "type": "integer"
                    },
                    "amount": {
                        "type": "string"
                    },
                    "donation_date": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "method": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "source": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "external_id": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "in_kind_description": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "acknowledged": {
                        "type": "boolean"
                    },
                    "acknowledged_date": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "contact_id",
                    "amount",
                    "donation_date",
                    "method",
                    "source",
                    "external_id",
                    "in_kind_description",
                    "acknowledged",
                    "acknowledged_date",
                    "notes",
                    "created_at",
                    "updated_at"
                ],
                "title": "Donation"
            },
            "DonorAskStatus": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "contact_id": {
                        "type": "integer"
                    },
                    "status": {
                        "type": "string"
                    },
                    "target_amount": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "status_date": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "contact_id",
                    "status",
                    "target_amount",
                    "status_date",
                    "notes",
                    "created_at",
                    "updated_at"
                ],
                "title": "DonorAskStatus"
            },
            "FundraisingProfileRequest": {
                "type": "object",
                "properties": {
                    "tier": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "1",
                            "2",
                            "3",
                            "not_now"
                        ]
                    },
                    "tier_manual_override": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "suggested_ask_amount": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "minimum": 0
                    },
                    "motivation": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "issue",
                            "relationship",
                            "party",
                            "accountability"
                        ]
                    },
                    "angle": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 280
                    },
                    "next_action": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "call",
                            "email",
                            "event_invite",
                            "thank_you",
                            "re_ask",
                            "research",
                            "none"
                        ]
                    },
                    "next_action_date": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "ask_cycle_position": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "planned",
                            "asked_1",
                            "asked_2",
                            "asked_3",
                            "committed",
                            "received",
                            "declined",
                            "recurring"
                        ]
                    },
                    "relationship_type": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "friend",
                            "family",
                            "professional",
                            "religious_group",
                            "campaign_contact",
                            "connected_by_someone",
                            "cold"
                        ]
                    },
                    "referral_source": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255
                    },
                    "is_volunteer_prospect": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "is_endorser_prospect": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "pledge_type": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "hard_specific",
                            "hard_nonspecific",
                            "soft_specific",
                            "soft_nonspecific"
                        ]
                    },
                    "pledge_amount": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "minimum": 0
                    },
                    "pledge_fulfilled": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "donor_grade": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "A",
                            "B",
                            "C",
                            "D",
                            "F"
                        ]
                    },
                    "giving_capacity": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "high",
                            "medium",
                            "low",
                            "unknown"
                        ]
                    },
                    "solicitable": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "do_not_ask_reason": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 1000
                    },
                    "research_status": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "unreviewed",
                            "light_review",
                            "researched",
                            "verified"
                        ]
                    },
                    "research_confidence": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "low",
                            "medium",
                            "high"
                        ]
                    },
                    "fec_giving_history": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "ohio_sos_giving_history": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "wealth_signals_summary": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "capacity_basis": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "ask_basis": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "ask_strategy_summary": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "fundraising_notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "import_source": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255
                    }
                },
                "title": "FundraisingProfileRequest"
            },
            "FundraisingUpsertRequest": {
                "type": "object",
                "properties": {
                    "fundraising_profile": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "contact": {
                        "type": "object",
                        "properties": {
                            "first_name": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 120
                            },
                            "last_name": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 120
                            },
                            "email": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "format": "email",
                                "maxLength": 255
                            },
                            "phone": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 50
                            },
                            "address": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 300
                            },
                            "city": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 120
                            },
                            "state": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 50
                            },
                            "zip": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 20
                            },
                            "occupation": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 200
                            },
                            "organization": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 200
                            }
                        }
                    }
                },
                "required": [
                    "fundraising_profile",
                    "contact"
                ],
                "title": "FundraisingUpsertRequest"
            },
            "ImportContactsRequest": {
                "type": "object",
                "properties": {
                    "file": {
                        "type": "string",
                        "format": "binary",
                        "contentMediaType": "application\/octet-stream",
                        "maxLength": 2048
                    },
                    "auto_enrich": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    }
                },
                "required": [
                    "file"
                ],
                "title": "ImportContactsRequest"
            },
            "Interaction": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "contact_id": {
                        "type": "integer"
                    },
                    "interaction_type": {
                        "type": "string"
                    },
                    "interaction_date": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "summary": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "event_name": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "follow_up_needed": {
                        "type": "boolean"
                    },
                    "follow_up_date": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "follow_up_notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "contact_id",
                    "interaction_type",
                    "interaction_date",
                    "summary",
                    "event_name",
                    "follow_up_needed",
                    "follow_up_date",
                    "follow_up_notes",
                    "created_at",
                    "updated_at"
                ],
                "title": "Interaction"
            },
            "JournalEntry": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "title": {
                        "type": "string"
                    },
                    "body": {
                        "type": "string"
                    },
                    "entry_date": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "project": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "location": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "community": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "title",
                    "body",
                    "entry_date",
                    "project",
                    "location",
                    "community",
                    "created_at",
                    "updated_at"
                ],
                "title": "JournalEntry"
            },
            "JournalImage": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "journal_entry_id": {
                        "type": "integer"
                    },
                    "path": {
                        "type": "string"
                    },
                    "caption": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "sort_order": {
                        "type": "integer"
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "journal_entry_id",
                    "path",
                    "caption",
                    "sort_order",
                    "created_at",
                    "updated_at"
                ],
                "title": "JournalImage"
            },
            "LibraryArticle": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "title": {
                        "type": "string"
                    },
                    "slug": {
                        "type": "string"
                    },
                    "summary": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "category": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "body": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "image_path": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "thumbnail_path": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "link_url": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "author_id": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "title",
                    "slug",
                    "summary",
                    "category",
                    "body",
                    "image_path",
                    "thumbnail_path",
                    "link_url",
                    "author_id",
                    "created_at",
                    "updated_at"
                ],
                "title": "LibraryArticle"
            },
            "ManualParadeSignupRequest": {
                "type": "object",
                "description": "Validates a staff-entered parade signup (admin UI + API + MCP). Route\nmiddleware handles authorization (admin|manager for web, Sanctum for API).",
                "properties": {
                    "first_name": {
                        "type": "string",
                        "maxLength": 100
                    },
                    "last_name": {
                        "type": "string",
                        "maxLength": 100
                    },
                    "email": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "email",
                        "maxLength": 255
                    },
                    "phone": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 30
                    },
                    "parade": {
                        "type": "string",
                        "enum": [
                            "delaware",
                            "sunbury",
                            "orange_township",
                            "westerville"
                        ]
                    },
                    "your_shirt_size": {
                        "type": "string",
                        "enum": [
                            "XS",
                            "S",
                            "M",
                            "L",
                            "XL",
                            "2XL",
                            "3XL",
                            "YS",
                            "YM",
                            "YL"
                        ]
                    },
                    "wants_updates": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "marchers": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "type": "object",
                            "properties": {
                                "name": {
                                    "type": "string",
                                    "maxLength": 100
                                },
                                "shirt_size": {
                                    "type": "string",
                                    "enum": [
                                        "XS",
                                        "S",
                                        "M",
                                        "L",
                                        "XL",
                                        "2XL",
                                        "3XL",
                                        "YS",
                                        "YM",
                                        "YL"
                                    ]
                                }
                            },
                            "required": [
                                "name",
                                "shirt_size"
                            ]
                        },
                        "maxItems": 49
                    }
                },
                "required": [
                    "first_name",
                    "last_name",
                    "parade",
                    "your_shirt_size"
                ],
                "title": "ManualParadeSignupRequest"
            },
            "MerchRequest": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "contact_id": {
                        "type": "integer"
                    },
                    "item_type": {
                        "type": "string"
                    },
                    "size": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "recipient_name": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "quantity": {
                        "type": "integer"
                    },
                    "status": {
                        "type": "string"
                    },
                    "source": {
                        "type": "string"
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "fulfilled_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "contact_id",
                    "item_type",
                    "size",
                    "recipient_name",
                    "quantity",
                    "status",
                    "source",
                    "notes",
                    "fulfilled_at",
                    "created_at",
                    "updated_at"
                ],
                "title": "MerchRequest"
            },
            "MergeContactRequest": {
                "type": "object",
                "properties": {
                    "source_contact_id": {
                        "type": "integer"
                    },
                    "target_contact_id": {
                        "type": "integer"
                    },
                    "dry_run": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "field_overrides": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "type": "string",
                            "enum": [
                                "source",
                                "target"
                            ]
                        }
                    }
                },
                "required": [
                    "source_contact_id",
                    "target_contact_id"
                ],
                "title": "MergeContactRequest"
            },
            "Stakeholder": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "slug": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "category": {
                        "type": "string"
                    },
                    "tier": {
                        "type": "integer"
                    },
                    "lever_type": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "disposition": {
                        "type": "string"
                    },
                    "relationship_status": {
                        "type": "string"
                    },
                    "verification_status": {
                        "type": "string"
                    },
                    "tags": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {}
                    },
                    "area": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "priority_rank": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "primary_contact_name": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "primary_contact_role": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "website_url": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "address": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "phone": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "email": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "sort_order": {
                        "type": "integer"
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "slug",
                    "name",
                    "category",
                    "tier",
                    "lever_type",
                    "disposition",
                    "relationship_status",
                    "verification_status",
                    "tags",
                    "area",
                    "priority_rank",
                    "primary_contact_name",
                    "primary_contact_role",
                    "website_url",
                    "address",
                    "phone",
                    "email",
                    "notes",
                    "sort_order",
                    "created_at",
                    "updated_at"
                ],
                "title": "Stakeholder"
            },
            "StoreActivityLogRequest": {
                "type": "object",
                "properties": {
                    "title": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "description": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "properties": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "type": "string"
                        }
                    }
                },
                "required": [
                    "title"
                ],
                "title": "StoreActivityLogRequest"
            },
            "StoreContactRequest": {
                "type": "object",
                "properties": {
                    "first_name": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "last_name": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "phone": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255
                    },
                    "email": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "email",
                        "maxLength": 255
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "address": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255
                    },
                    "address2": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255
                    },
                    "city": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255
                    },
                    "state": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255
                    },
                    "zip": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 20
                    },
                    "latitude": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "minimum": -90,
                        "maximum": 90
                    },
                    "longitude": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "minimum": -180,
                        "maximum": 180
                    },
                    "party_affiliation": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "republican",
                            "democrat",
                            "independent",
                            "libertarian",
                            "green",
                            "other",
                            "unknown"
                        ]
                    },
                    "community": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 100
                    },
                    "county": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 100
                    },
                    "influence_level": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "low",
                            "medium",
                            "high",
                            "key_leader"
                        ]
                    },
                    "warmth": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "cold",
                            "cool",
                            "neutral",
                            "warm",
                            "hot",
                            "supporter",
                            "champion"
                        ]
                    },
                    "temperature": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "minimum": 0,
                        "maximum": 10
                    },
                    "familiarity": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "know_of",
                            "met",
                            "know"
                        ]
                    },
                    "partisan_lean": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "strong_dem",
                            "lean_dem",
                            "bipartisan",
                            "lean_rep",
                            "strong_rep",
                            "unknown"
                        ]
                    },
                    "ring": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "ring_1",
                            "ring_2",
                            "ring_3"
                        ]
                    },
                    "private_notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "referred_by_contact_id": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "referral_source_type": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "personal",
                            "event",
                            "door_knock",
                            "phone_bank",
                            "social_media",
                            "website",
                            "profile_import",
                            "stakeholder",
                            "actblue",
                            "invitation",
                            "committee_roster",
                            "other"
                        ]
                    },
                    "occupation": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 150
                    },
                    "organization": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 200
                    },
                    "subscription_status": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "not_subscribed",
                            "subscribed",
                            "unsubscribed"
                        ]
                    },
                    "is_test_recipient": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "is_hotlist": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "do_not_contact": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "do_not_contact_reason": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 500
                    },
                    "roles": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "type": "string",
                            "enum": [
                                "volunteer",
                                "donor",
                                "door_knocker",
                                "phone_banker",
                                "event_host",
                                "sign_location",
                                "endorser",
                                "advisor",
                                "committee_member",
                                "precinct_captain",
                                "officeholder",
                                "opposition"
                            ]
                        }
                    },
                    "emails": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "type": "object",
                            "properties": {
                                "value": {
                                    "type": "string",
                                    "format": "email",
                                    "maxLength": 255
                                },
                                "type": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "enum": [
                                        "personal",
                                        "business",
                                        "other"
                                    ]
                                },
                                "confidence": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "enum": [
                                        "high",
                                        "medium",
                                        "low"
                                    ]
                                },
                                "source": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "maxLength": 255
                                },
                                "is_primary": {
                                    "type": [
                                        "boolean",
                                        "null"
                                    ]
                                }
                            }
                        }
                    },
                    "phones": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "type": "object",
                            "properties": {
                                "value": {
                                    "type": "string",
                                    "maxLength": 50
                                },
                                "type": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "enum": [
                                        "mobile",
                                        "home",
                                        "work",
                                        "other"
                                    ]
                                },
                                "confidence": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "enum": [
                                        "high",
                                        "medium",
                                        "low"
                                    ]
                                },
                                "source": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "maxLength": 255
                                },
                                "is_primary": {
                                    "type": [
                                        "boolean",
                                        "null"
                                    ]
                                }
                            }
                        }
                    },
                    "social_profiles": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "type": "object",
                            "properties": {
                                "platform": {
                                    "type": "string",
                                    "enum": [
                                        "facebook",
                                        "linkedin",
                                        "x_twitter",
                                        "instagram",
                                        "tiktok",
                                        "other"
                                    ]
                                },
                                "url": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "pattern": "^https?:\\\/\\\/",
                                    "maxLength": 500
                                },
                                "handle": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "maxLength": 255
                                },
                                "label": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "maxLength": 255
                                },
                                "confidence": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "enum": [
                                        "high",
                                        "medium",
                                        "low"
                                    ]
                                },
                                "source": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "maxLength": 255
                                },
                                "is_primary": {
                                    "type": [
                                        "boolean",
                                        "null"
                                    ]
                                }
                            }
                        }
                    }
                },
                "required": [
                    "first_name",
                    "last_name"
                ],
                "title": "StoreContactRequest"
            },
            "StoreContactRoleRequest": {
                "type": "object",
                "properties": {
                    "role": {
                        "type": "string",
                        "enum": [
                            "volunteer",
                            "donor",
                            "door_knocker",
                            "phone_banker",
                            "event_host",
                            "sign_location",
                            "endorser",
                            "advisor",
                            "committee_member",
                            "precinct_captain",
                            "officeholder",
                            "opposition"
                        ]
                    }
                },
                "required": [
                    "role"
                ],
                "title": "StoreContactRoleRequest"
            },
            "StoreContactSkillRequest": {
                "type": "object",
                "properties": {
                    "skill": {
                        "type": "string",
                        "enum": [
                            "social_media",
                            "graphic_design",
                            "web_development",
                            "writing",
                            "public_speaking",
                            "fundraising",
                            "event_planning",
                            "data_entry",
                            "canvassing",
                            "legal",
                            "accounting",
                            "photography",
                            "videography",
                            "translation"
                        ]
                    }
                },
                "required": [
                    "skill"
                ],
                "title": "StoreContactSkillRequest"
            },
            "StoreDonationRequest": {
                "type": "object",
                "properties": {
                    "amount": {
                        "type": "number",
                        "minimum": 0
                    },
                    "donation_date": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "method": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "cash",
                            "check",
                            "credit_card",
                            "online",
                            "in_kind",
                            "other"
                        ]
                    },
                    "in_kind_description": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 500
                    },
                    "acknowledged": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "acknowledged_date": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "amount",
                    "donation_date"
                ],
                "title": "StoreDonationRequest"
            },
            "StoreDonorAskStatusRequest": {
                "type": "object",
                "properties": {
                    "status": {
                        "type": "string",
                        "enum": [
                            "not_asked",
                            "planned",
                            "asked",
                            "pledged",
                            "donated",
                            "declined"
                        ]
                    },
                    "target_amount": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "minimum": 0
                    },
                    "status_date": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "status"
                ],
                "title": "StoreDonorAskStatusRequest"
            },
            "StoreInteractionRequest": {
                "type": "object",
                "properties": {
                    "interaction_type": {
                        "type": "string",
                        "enum": [
                            "door_knock",
                            "phone_call",
                            "text_message",
                            "email",
                            "event",
                            "meeting",
                            "social_media",
                            "mail",
                            "other"
                        ]
                    },
                    "interaction_date": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "summary": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "event_name": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 200
                    },
                    "follow_up_needed": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "follow_up_date": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "follow_up_notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "interaction_type",
                    "interaction_date"
                ],
                "title": "StoreInteractionRequest"
            },
            "StoreMerchRequestRequest": {
                "type": "object",
                "description": "API store: accepts either an existing `contact_id` OR raw contact fields\n(first_name\/last_name\/email\/phone), plus a `lines[]` roster of shirt sizes.",
                "properties": {
                    "contact_id": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "first_name": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 100
                    },
                    "last_name": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 100
                    },
                    "email": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "email",
                        "maxLength": 255
                    },
                    "phone": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 30
                    },
                    "item_type": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "t_shirt"
                        ]
                    },
                    "wants_updates": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "lines": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "size": {
                                    "type": "string",
                                    "enum": [
                                        "XS",
                                        "S",
                                        "M",
                                        "L",
                                        "XL",
                                        "2XL",
                                        "3XL",
                                        "YS",
                                        "YM",
                                        "YL"
                                    ]
                                },
                                "recipient_name": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "maxLength": 255
                                },
                                "quantity": {
                                    "type": [
                                        "integer",
                                        "null"
                                    ],
                                    "minimum": 1,
                                    "maximum": 99
                                }
                            },
                            "required": [
                                "size"
                            ]
                        },
                        "minItems": 1,
                        "maxItems": 25
                    }
                },
                "required": [
                    "lines"
                ],
                "title": "StoreMerchRequestRequest"
            },
            "StoreYardSignRequest": {
                "type": "object",
                "properties": {
                    "status": {
                        "type": "string",
                        "enum": [
                            "requested",
                            "placed",
                            "removed",
                            "damaged",
                            "stolen",
                            "returned"
                        ]
                    },
                    "address": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 300
                    },
                    "latitude": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "minimum": -90,
                        "maximum": 90
                    },
                    "longitude": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "minimum": -180,
                        "maximum": 180
                    },
                    "placed_date": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "removed_date": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "status"
                ],
                "title": "StoreYardSignRequest"
            },
            "UpdateContactRequest": {
                "type": "object",
                "properties": {
                    "first_name": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "last_name": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "phone": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255
                    },
                    "email": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "email",
                        "maxLength": 255
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "address": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255
                    },
                    "address2": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255
                    },
                    "city": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255
                    },
                    "state": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255
                    },
                    "zip": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 20
                    },
                    "latitude": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "minimum": -90,
                        "maximum": 90
                    },
                    "longitude": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "minimum": -180,
                        "maximum": 180
                    },
                    "party_affiliation": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "republican",
                            "democrat",
                            "independent",
                            "libertarian",
                            "green",
                            "other",
                            "unknown"
                        ]
                    },
                    "community": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 100
                    },
                    "county": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 100
                    },
                    "influence_level": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "low",
                            "medium",
                            "high",
                            "key_leader"
                        ]
                    },
                    "warmth": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "cold",
                            "cool",
                            "neutral",
                            "warm",
                            "hot",
                            "supporter",
                            "champion"
                        ]
                    },
                    "temperature": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "minimum": 0,
                        "maximum": 10
                    },
                    "familiarity": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "know_of",
                            "met",
                            "know"
                        ]
                    },
                    "partisan_lean": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "strong_dem",
                            "lean_dem",
                            "bipartisan",
                            "lean_rep",
                            "strong_rep",
                            "unknown"
                        ]
                    },
                    "ring": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "ring_1",
                            "ring_2",
                            "ring_3"
                        ]
                    },
                    "private_notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "referred_by_contact_id": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "referral_source_type": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "personal",
                            "event",
                            "door_knock",
                            "phone_bank",
                            "social_media",
                            "website",
                            "profile_import",
                            "stakeholder",
                            "actblue",
                            "invitation",
                            "committee_roster",
                            "other"
                        ]
                    },
                    "occupation": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 150
                    },
                    "organization": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 200
                    },
                    "subscription_status": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "not_subscribed",
                            "subscribed",
                            "unsubscribed"
                        ]
                    },
                    "is_test_recipient": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "is_hotlist": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "do_not_contact": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "do_not_contact_reason": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 500
                    },
                    "roles": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "type": "string",
                            "enum": [
                                "volunteer",
                                "donor",
                                "door_knocker",
                                "phone_banker",
                                "event_host",
                                "sign_location",
                                "endorser",
                                "advisor",
                                "committee_member",
                                "precinct_captain",
                                "officeholder",
                                "opposition"
                            ]
                        }
                    },
                    "emails": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "type": "object",
                            "properties": {
                                "value": {
                                    "type": "string",
                                    "format": "email",
                                    "maxLength": 255
                                },
                                "type": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "enum": [
                                        "personal",
                                        "business",
                                        "other"
                                    ]
                                },
                                "confidence": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "enum": [
                                        "high",
                                        "medium",
                                        "low"
                                    ]
                                },
                                "source": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "maxLength": 255
                                },
                                "is_primary": {
                                    "type": [
                                        "boolean",
                                        "null"
                                    ]
                                }
                            }
                        }
                    },
                    "phones": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "type": "object",
                            "properties": {
                                "value": {
                                    "type": "string",
                                    "maxLength": 50
                                },
                                "type": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "enum": [
                                        "mobile",
                                        "home",
                                        "work",
                                        "other"
                                    ]
                                },
                                "confidence": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "enum": [
                                        "high",
                                        "medium",
                                        "low"
                                    ]
                                },
                                "source": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "maxLength": 255
                                },
                                "is_primary": {
                                    "type": [
                                        "boolean",
                                        "null"
                                    ]
                                }
                            }
                        }
                    },
                    "social_profiles": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "type": "object",
                            "properties": {
                                "platform": {
                                    "type": "string",
                                    "enum": [
                                        "facebook",
                                        "linkedin",
                                        "x_twitter",
                                        "instagram",
                                        "tiktok",
                                        "other"
                                    ]
                                },
                                "url": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "pattern": "^https?:\\\/\\\/",
                                    "maxLength": 500
                                },
                                "handle": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "maxLength": 255
                                },
                                "label": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "maxLength": 255
                                },
                                "confidence": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "enum": [
                                        "high",
                                        "medium",
                                        "low"
                                    ]
                                },
                                "source": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "maxLength": 255
                                },
                                "is_primary": {
                                    "type": [
                                        "boolean",
                                        "null"
                                    ]
                                }
                            }
                        }
                    }
                },
                "required": [
                    "first_name",
                    "last_name"
                ],
                "title": "UpdateContactRequest"
            },
            "UpdateDonationRequest": {
                "type": "object",
                "properties": {
                    "amount": {
                        "type": "number",
                        "minimum": 0
                    },
                    "donation_date": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "method": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "cash",
                            "check",
                            "credit_card",
                            "online",
                            "in_kind",
                            "other"
                        ]
                    },
                    "in_kind_description": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 500
                    },
                    "acknowledged": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "acknowledged_date": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "amount",
                    "donation_date"
                ],
                "title": "UpdateDonationRequest"
            },
            "UpdateDonorAskStatusRequest": {
                "type": "object",
                "properties": {
                    "status": {
                        "type": "string",
                        "enum": [
                            "not_asked",
                            "planned",
                            "asked",
                            "pledged",
                            "donated",
                            "declined"
                        ]
                    },
                    "target_amount": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "minimum": 0
                    },
                    "status_date": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "status"
                ],
                "title": "UpdateDonorAskStatusRequest"
            },
            "UpdateInteractionRequest": {
                "type": "object",
                "properties": {
                    "interaction_type": {
                        "type": "string",
                        "enum": [
                            "door_knock",
                            "phone_call",
                            "text_message",
                            "email",
                            "event",
                            "meeting",
                            "social_media",
                            "mail",
                            "other"
                        ]
                    },
                    "interaction_date": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "summary": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "event_name": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 200
                    },
                    "follow_up_needed": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "follow_up_date": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "follow_up_notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "interaction_type",
                    "interaction_date"
                ],
                "title": "UpdateInteractionRequest"
            },
            "UpdateMerchRequestRequest": {
                "type": "object",
                "properties": {
                    "status": {
                        "type": "string",
                        "enum": [
                            "requested",
                            "fulfilled",
                            "cancelled"
                        ]
                    },
                    "size": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "XS",
                            "S",
                            "M",
                            "L",
                            "XL",
                            "2XL",
                            "3XL",
                            "YS",
                            "YM",
                            "YL"
                        ]
                    },
                    "recipient_name": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255
                    },
                    "quantity": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 99
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "title": "UpdateMerchRequestRequest"
            },
            "UpdateYardSignRequest": {
                "type": "object",
                "properties": {
                    "status": {
                        "type": "string",
                        "enum": [
                            "requested",
                            "placed",
                            "removed",
                            "damaged",
                            "stolen",
                            "returned"
                        ]
                    },
                    "address": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 300
                    },
                    "latitude": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "minimum": -90,
                        "maximum": 90
                    },
                    "longitude": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "minimum": -180,
                        "maximum": 180
                    },
                    "placed_date": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "removed_date": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "status"
                ],
                "title": "UpdateYardSignRequest"
            },
            "YardSign": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "contact_id": {
                        "type": "integer"
                    },
                    "status": {
                        "type": "string"
                    },
                    "address": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "latitude": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "longitude": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "placed_date": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "removed_date": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "contact_id",
                    "status",
                    "address",
                    "latitude",
                    "longitude",
                    "placed_date",
                    "removed_date",
                    "notes",
                    "created_at",
                    "updated_at"
                ],
                "title": "YardSign"
            }
        },
        "responses": {
            "AuthenticationException": {
                "description": "Unauthenticated",
                "content": {
                    "application\/json": {
                        "schema": {
                            "type": "object",
                            "properties": {
                                "message": {
                                    "type": "string",
                                    "description": "Error overview."
                                }
                            },
                            "required": [
                                "message"
                            ]
                        }
                    }
                }
            },
            "ValidationException": {
                "description": "Validation error",
                "content": {
                    "application\/json": {
                        "schema": {
                            "type": "object",
                            "properties": {
                                "message": {
                                    "type": "string",
                                    "description": "Errors overview."
                                },
                                "errors": {
                                    "type": "object",
                                    "description": "A detailed description of each field that failed validation.",
                                    "additionalProperties": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        }
                                    }
                                }
                            },
                            "required": [
                                "message",
                                "errors"
                            ]
                        }
                    }
                }
            },
            "AuthorizationException": {
                "description": "Authorization error",
                "content": {
                    "application\/json": {
                        "schema": {
                            "type": "object",
                            "properties": {
                                "message": {
                                    "type": "string",
                                    "description": "Error overview."
                                }
                            },
                            "required": [
                                "message"
                            ]
                        }
                    }
                }
            },
            "ModelNotFoundException": {
                "description": "Not found",
                "content": {
                    "application\/json": {
                        "schema": {
                            "type": "object",
                            "properties": {
                                "message": {
                                    "type": "string",
                                    "description": "Error overview."
                                }
                            },
                            "required": [
                                "message"
                            ]
                        }
                    }
                }
            }
        }
    }
}