{
  "openapi" : "3.1.0",
  "info" : {
    "title" : "Base Public API",
    "description" : "# Base Public API v1\n\nThe Base Public API lets you integrate your CRM, advocacy programs and content\nworkflows with the Base platform. All endpoints in this document are part of the\nstable **v1** contract.\n\n## Authentication\n\nAll requests require a bearer token in the `Authorization` header:\n\n```\nAuthorization: Bearer <your_jwt_token>\n```\n\nTokens are issued from your company's admin console under **Settings → API tokens**.\nAsk your account administrator if you do not have one. Tokens carry the set of\nauthorities (`api.user.list`, `api.points.add`, etc.) granted to the issuing user —\nif a request returns `403`, the token is missing the authority the endpoint requires.\n\n## Conventions\n\n* **Base URL** depends on environment: `https://stage.customershome.com/acauth`\n  for staging, `https://prod.customershome.com/acauth` for production.\n* **Date/time** values are ISO-8601 in UTC (`2026-05-12T08:30:00Z`).\n* **UUIDs** are 36-character canonical (`550e8400-e29b-41d4-a716-446655440000`).\n* **Pagination** uses Spring-style query parameters: `page` (0-indexed), `size`,\n  and `sort`. Maximum `size` is 500 unless the endpoint says otherwise.\n* **Bulk endpoints** process each item independently and report per-item results;\n  a single failed item does not roll back successful ones.\n* **Versioning** is URL-prefix-based. `/api/v1` is the current stable contract.\n  Breaking changes ship as `/api/v2` rather than mutating `/api/v1` in place; v1\n  endpoints are supported for at least 12 months after a v2 successor lands.\n\n## Rate limits\n\nv1 endpoints are not currently rate-limited at the API edge, but please call\nconsiderately:\n\n* Prefer **bulk endpoints** (`*/bulk`, `/users-by-dates`, `*/batch`) over loops on\n  the single-item variant.\n* Use **`sinceLastModified`** for incremental sync rather than re-fetching the full\n  dataset on every poll.\n* Backoff exponentially on `5xx` responses and respect `Retry-After` if present\n  on a future `429` response.\n\nSustained traffic above ~10 requests/second per token may be subject to throttling\nin a future release. Subscribe to release notes for the announcement.\n\n## Idempotency\n\n* `GET` / `DELETE` / `PUT` operations are idempotent by definition — replaying the\n  same request never produces a different result.\n* `POST` create endpoints do **not** currently support an `Idempotency-Key` header.\n  Retries after a network failure may create duplicate records; design retries\n  around your own deduplication key (e.g. external CRM contact id).\n* Bulk endpoints commit each item independently, so a retry of the same bulk\n  payload will surface each duplicate item as a per-row error rather than failing\n  the entire batch.\n\n## Errors\n\nThe API uses standard HTTP status codes. Non-2xx responses carry a JSON body with\nthe shape:\n\n```json\n{ \"title\": \"Bad Request\", \"status\": 400, \"detail\": \"Page size must be less than 500\" }\n```\n\nCommon codes:\n\n| Status | Meaning |\n| --- | --- |\n| `200` | Success with a JSON body |\n| `201` | Created — typically returned by POST endpoints with the new resource's UUID |\n| `204` | Success with no body — typically returned by DELETE and idempotent operations |\n| `400` | The request body or parameters failed validation |\n| `401` | Missing or invalid bearer token |\n| `403` | The token does not carry the required authority for this endpoint |\n| `404` | The target resource does not exist |\n| `409` | Conflict (most often a duplicate name on create/update) |\n| `500` | Internal error — safe to retry with exponential backoff |\n\n## Common workflows\n\n**CRM → Base sync.** Use `Import contacts by email` (or `by-contact-id`) to push\nadvocates in bulk, then `Modify advocate custom attributes` (bulk variant) to push\ncustom-field values. For accounts and opportunities, the `Update account data` and\n`Upsert opportunity attributes` endpoints perform create-or-update in one call.\n\n**Activity tracking.** Call `Trigger activity` whenever an advocate completes a\ntracked event (closed a deal, posted a review, attended a webinar). The activity\ntype configuration in admin determines points awarded and ASK progression.\n\n**Leaderboard widget.** Call `Get leaderboard` for the global ranking; call\n`Get leaderboard entry by email` to render the current advocate's row inline.\nBoth are cheap to call on page load.\n\n**Discovery before write.** List endpoints (`List custom attributes`,\n`List custom object mappings`, `List activity types`) tell you the valid keys\nand types for the corresponding write endpoints. Cache the result client-side —\nschemas change rarely.\n\n## Terminology\n\nFor historical reasons, some resource names in the API differ from their UI labels.\nSee the per-endpoint descriptions for context; the most important mappings are:\n\n* `challenge` in the API = **ASK** in the UI\n* `evidence` in the API = **content** in the UI\n* `contact` (in `entity` parameters) = **advocate** record\n",
    "contact" : {
      "name" : "Base Support",
      "url" : "https://www.customershome.com/"
    },
    "version" : "1.0"
  },
  "servers" : [ {
    "url" : "/",
    "description" : "Relative Direct"
  }, {
    "url" : "https://stage.customershome.com/acauth",
    "description" : "Staging"
  }, {
    "url" : "https://prod.customershome.com/acauth",
    "description" : "Production"
  } ],
  "security" : [ {
    "bearer-jwt" : [ ]
  } ],
  "tags" : [ {
    "name" : "Advocate Custom Object Records",
    "description" : "Bulk create, update, and delete custom object records on advocates."
  }, {
    "name" : "Account Custom Object Records",
    "description" : "Read, create, update and delete custom object records on accounts."
  }, {
    "name" : "Custom Attributes",
    "description" : "Define and manage custom data attributes on platform entities. Allowed `entity` values: `contact` (advocate record), `account`, `opportunity`, `nomination`."
  }, {
    "name" : "Nomination",
    "description" : "Retrieve reports about advocate nominations."
  }, {
    "name" : "Content Categories",
    "description" : "Manage categories that group content tags."
  }, {
    "name" : "Content Tags",
    "description" : "Manage tags used to categorize content within the platform."
  }, {
    "name" : "Company API",
    "description" : "Core customer-facing V1 endpoints: users, advocates, accounts, opportunities, activities, leaderboard, points, imports, and registration confirmation."
  }, {
    "name" : "Custom Object Mappings",
    "description" : "Define and manage custom object types (mappings) and the attributes on those objects."
  }, {
    "name" : "Reference Requests",
    "description" : "Submit, list, and retrieve reference requests, and find reference advocates."
  } ],
  "paths" : {
    "/api/v1/users/{id}" : {
      "get" : {
        "tags" : [ "Company API" ],
        "summary" : "Get user data",
        "description" : "Get full data for a single user by external auth id (the identifier issued by the SSO provider —\nnot the email and not the advocate UUID). Returns 404 if the user does not exist in the caller's\ncompany.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/users/auth0|abcd1234' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "getUser",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "External auth id of the user",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "User",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/UserModelDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/UserModelDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/UserModelDTO"
                }
              }
            }
          },
          "404" : {
            "description" : "User not found",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/UserModelDTO"
                }
              }
            }
          }
        }
      },
      "put" : {
        "tags" : [ "Company API" ],
        "summary" : "Update user data",
        "description" : "Update custom attribute values for an existing user identified by external SSO auth id. The\npayload mirrors `Modify custom attributes for a single advocate` — three optional maps for\n`addCustomAttributes`, `updateCustomAttributes`, and `removeCustomAttributes`. The endpoint does\nnot change profile fields (name, email, jobTitle, company) directly; profile fields are managed\nvia the registration / SSO flow.\n\n**Example:**\n```bash\ncurl -X PUT 'https://prod.customershome.com/acauth/api/v1/users/auth0|abcd1234' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"updateCustomAttributes\": { \"favorite_color\": [\"green\"] },\n    \"removeCustomAttributes\": [\"deprecated_flag\"]\n  }'\n```\n",
        "operationId" : "getUserUpdate",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "External auth id of the user",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/UpdateUserDTO"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated user",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/UserModelDTO"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request body",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/UserModelDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/UserModelDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/UserModelDTO"
                }
              }
            }
          },
          "404" : {
            "description" : "User not found",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/UserModelDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/points/grant-points" : {
      "put" : {
        "tags" : [ "Company API" ],
        "summary" : "Grant points",
        "description" : "Grant points (and optionally badges) to an advocate identified by email. Use a sensible `reason`\nstring — it shows up in the advocate's points history and in admin audit logs.\n\nCommon use cases: bonus award, custom one-off recognition, retroactive correction after a missed\nactivity. For automatic point-per-activity recognition, prefer wiring an activity type with a\npoints reward and calling `Trigger activity` instead.\n\n**Example:**\n```bash\ncurl -X PUT 'https://prod.customershome.com/acauth/api/v1/points/grant-points' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"email\": \"ada@example.com\",\n    \"points\": 250,\n    \"reason\": \"Spoke on the customer panel at SaaSCon 2026\"\n  }'\n```\n",
        "operationId" : "grantPoints",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/AdvocatePointsGrantApiDTO"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Points granted"
          },
          "400" : {
            "description" : "Invalid request body"
          },
          "401" : {
            "description" : "Unauthorized"
          },
          "403" : {
            "description" : "Forbidden"
          },
          "404" : {
            "description" : "Advocate not found"
          }
        }
      }
    },
    "/api/v1/custom-object-mapping/{apiName}" : {
      "put" : {
        "tags" : [ "Custom Object Mappings" ],
        "summary" : "Update custom object mapping",
        "description" : "Update the human-readable label/description of an existing custom object mapping. The `apiName`,\nowning `entity`, and the attributes defined on the object are immutable via this endpoint — use\nthe Custom Attributes endpoints to add or remove fields.\n\n**Example:**\n```bash\ncurl -X PUT 'https://prod.customershome.com/acauth/api/v1/custom-object-mapping/primary_contact' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"label\": \"Primary contact\",\n    \"description\": \"Updated description\"\n  }'\n```\n",
        "operationId" : "updateCustomObjectsMappings",
        "parameters" : [ {
          "name" : "apiName",
          "in" : "path",
          "description" : "API name of the mapping to update",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/UpdateCustomObjectMapping"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated mapping",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomObjectMapping"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data or validation errors",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomObjectMapping"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomObjectMapping"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomObjectMapping"
                }
              }
            }
          },
          "404" : {
            "description" : "Mapping not found",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomObjectMapping"
                }
              }
            }
          }
        }
      },
      "delete" : {
        "tags" : [ "Custom Object Mappings" ],
        "summary" : "Delete custom object mapping",
        "description" : "Delete a custom object mapping by `apiName`. All records of this custom object type across every\nadvocate/account/opportunity in the company are deleted along with their attribute values.\n\nIrreversible — use with care.\n\n**Example:**\n```bash\ncurl -X DELETE 'https://prod.customershome.com/acauth/api/v1/custom-object-mapping/primary_contact' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "deleteCustomObjectsMappings",
        "parameters" : [ {
          "name" : "apiName",
          "in" : "path",
          "description" : "API name of the mapping to delete",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "204" : {
            "description" : "Mapping deleted"
          },
          "401" : {
            "description" : "Unauthorized"
          },
          "403" : {
            "description" : "Forbidden"
          },
          "404" : {
            "description" : "Mapping not found"
          }
        }
      }
    },
    "/api/v1/custom-attributes/{uuid}" : {
      "put" : {
        "tags" : [ "Custom Attributes" ],
        "summary" : "Update custom attribute (full)",
        "description" : "Update a custom attribute. Both PUT and PATCH on this endpoint accept the same\n`PatchCustomDataAttributeApiDTO` body, and in both cases fields omitted (or sent as `null`) are\nleft unchanged (booleans are boxed, so `null` does NOT mean `false`).\n\nThe two verbs differ only in the authority they require: PUT needs `api.custom_attribute.add`\n(the same scope used for Create), PATCH needs `api.custom_attribute.update`. New integrations\nshould prefer PATCH so the token scope is narrow.\n\nThe attribute `name`, `type`, and owning `entity` cannot be changed once created — recreate the\nattribute under a new name if a different type is required.\n\n**Example:**\n```bash\ncurl -X PUT 'https://prod.customershome.com/acauth/api/v1/custom-attributes/550e8400-e29b-41d4-a716-446655440000' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"label\": \"Favorite color\",\n    \"description\": \"Updated description\",\n    \"values\": [\"red\", \"green\", \"blue\", \"yellow\"],\n    \"editableByAdvocate\": true,\n    \"mandatory\": false\n  }'\n```\n",
        "operationId" : "updateAttribute",
        "parameters" : [ {
          "name" : "uuid",
          "in" : "path",
          "description" : "UUID of the attribute to update",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/PatchCustomAttribute"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated attribute",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomAttribute"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data or validation errors",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomAttribute"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomAttribute"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomAttribute"
                }
              }
            }
          },
          "404" : {
            "description" : "Attribute not found",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomAttribute"
                }
              }
            }
          }
        }
      },
      "delete" : {
        "tags" : [ "Custom Attributes" ],
        "summary" : "Delete custom attribute",
        "description" : "Delete a custom attribute by UUID. The attribute is removed from every record that had a value\nfor it; existing record values for this attribute are also deleted and cannot be recovered.\n\nReturns 204 No Content on success. Use with care — there is no soft-delete.\n\n**Example:**\n```bash\ncurl -X DELETE 'https://prod.customershome.com/acauth/api/v1/custom-attributes/550e8400-e29b-41d4-a716-446655440000' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "deleteAttribute",
        "parameters" : [ {
          "name" : "uuid",
          "in" : "path",
          "description" : "UUID of the attribute to delete",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "204" : {
            "description" : "Attribute deleted"
          },
          "401" : {
            "description" : "Unauthorized"
          },
          "403" : {
            "description" : "Forbidden"
          },
          "404" : {
            "description" : "Attribute not found"
          }
        }
      },
      "patch" : {
        "tags" : [ "Custom Attributes" ],
        "summary" : "Patch custom attribute",
        "description" : "Partially update a custom attribute. Only fields present in the request are changed; omitted\nfields keep their current value (boolean toggles use `Boolean` so `null` means \"leave unchanged\",\nnot \"set to false\").\n\nUse this endpoint for everyday tweaks (label change, adding allowed picklist values, toggling\nvisibility flags). The attribute `name`, `type`, and owning `entity` remain immutable.\n\n**Example:**\n```bash\ncurl -X PATCH 'https://prod.customershome.com/acauth/api/v1/custom-attributes/550e8400-e29b-41d4-a716-446655440000' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{ \"label\": \"Favourite colour\" }'\n```\n",
        "operationId" : "patchAttribute",
        "parameters" : [ {
          "name" : "uuid",
          "in" : "path",
          "description" : "UUID of the attribute to patch",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/PatchCustomAttribute"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated attribute",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomAttribute"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data or validation errors",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomAttribute"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomAttribute"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomAttribute"
                }
              }
            }
          },
          "404" : {
            "description" : "Attribute not found",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomAttribute"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/content-tags/{uuid}" : {
      "put" : {
        "tags" : [ "Content Tags" ],
        "summary" : "Update content tag",
        "description" : "Update the description and/or category of an existing content tag. The tag `name` is immutable\nvia this endpoint; create a new tag and delete the old one if you need to rename.\n\nPass `tagCategoryUuid: null` to move the tag back to top-level.\n\n**Example:**\n```bash\ncurl -X PUT 'https://prod.customershome.com/acauth/api/v1/content-tags/550e8400-e29b-41d4-a716-446655440000' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"description\": \"Updated description\",\n    \"tagCategoryUuid\": \"660e8400-e29b-41d4-a716-446655440222\"\n  }'\n```\n",
        "operationId" : "updateContentTag",
        "parameters" : [ {
          "name" : "uuid",
          "in" : "path",
          "description" : "UUID of the tag to update",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/UpdateContentTag"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated tag",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContentTag"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data or validation errors",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContentTag"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContentTag"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContentTag"
                }
              }
            }
          },
          "404" : {
            "description" : "Tag not found",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContentTag"
                }
              }
            }
          },
          "409" : {
            "description" : "Conflict (duplicate name)",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContentTag"
                }
              }
            }
          }
        }
      },
      "delete" : {
        "tags" : [ "Content Tags" ],
        "summary" : "Delete content tag",
        "description" : "Delete an existing content tag. The tag is removed from every content item that referenced it;\nthe content items themselves are not deleted. Deleting a tag that does not exist returns 404 —\nhandle the not-found case explicitly if your sync runs may already have removed the tag.\n\n**Example:**\n```bash\ncurl -X DELETE 'https://prod.customershome.com/acauth/api/v1/content-tags/550e8400-e29b-41d4-a716-446655440000' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "deleteContentTag",
        "parameters" : [ {
          "name" : "uuid",
          "in" : "path",
          "description" : "UUID of the tag to delete",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Tag deleted"
          },
          "401" : {
            "description" : "Unauthorized"
          },
          "403" : {
            "description" : "Forbidden"
          },
          "404" : {
            "description" : "Tag not found"
          }
        }
      }
    },
    "/api/v1/content-tags/bulk" : {
      "put" : {
        "tags" : [ "Content Tags" ],
        "summary" : "Bulk update content tags",
        "description" : "Update multiple content tags in a single request. The body is a map keyed by tag UUID, so the same\n`description` / `tagCategoryUuid` semantics as the single-update endpoint apply per entry. Up to 100\nentries per request.\n\nEach entry is processed independently — inspect `successful` and `failed` in the response to find\nout which entries committed. Useful for re-categorizing tags in bulk, e.g. moving all tags from a\ndeprecated category to a new one.\n\n**Example:**\n```bash\ncurl -X PUT 'https://prod.customershome.com/acauth/api/v1/content-tags/bulk' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"550e8400-e29b-41d4-a716-446655440000\": {\n      \"tagCategoryUuid\": \"660e8400-e29b-41d4-a716-446655440222\"\n    },\n    \"550e8400-e29b-41d4-a716-446655440001\": {\n      \"description\": \"Updated description\"\n    }\n  }'\n```\n",
        "operationId" : "bulkUpdateContentTags",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "type" : "object",
                "additionalProperties" : {
                  "$ref" : "#/components/schemas/UpdateContentTag"
                }
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Per-item update result",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BulkOperationResult"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data, validation errors, or map size violation",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BulkOperationResult"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BulkOperationResult"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BulkOperationResult"
                }
              }
            }
          }
        }
      },
      "post" : {
        "tags" : [ "Content Tags" ],
        "summary" : "Bulk create content tags",
        "description" : "Create multiple content tags in a single request. Accepts 1 to 100 items; each item is processed\nindependently. The response contains a `successful` array of newly created UUIDs and a `failed`\narray with per-item error context (most commonly a `DUPLICATE_NAME` error when the tag already exists).\n\nA partial failure (some items in `failed`) is still a 200 response — inspect the body to find out\nwhich items were created. Use this endpoint when seeding a new company or importing tags from a\nCRM rather than calling the single-create endpoint in a loop.\n\n**Example:**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/content-tags/bulk' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '[\n    { \"name\": \"Product Launch\", \"tagCategoryUuid\": \"660e8400-e29b-41d4-a716-446655440111\" },\n    { \"name\": \"Customer Success\" }\n  ]'\n```\n",
        "operationId" : "bulkCreateContentTags",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "type" : "array",
                "items" : {
                  "$ref" : "#/components/schemas/CreateContentTag"
                }
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Per-item create result",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BulkOperationResult"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data, validation errors, or array size violation",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BulkOperationResult"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BulkOperationResult"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BulkOperationResult"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/content-categories/{uuid}" : {
      "put" : {
        "tags" : [ "Content Categories" ],
        "summary" : "Update content category",
        "description" : "Update an existing content category. Only present fields are changed — omit a field to leave it untouched.\n\nSetting `tagUuids` **replaces** the full set of tags in this category (it is not an add-list).\nTags removed from the set lose their category but are not deleted.\n\n**Example:**\n```bash\ncurl -X PUT 'https://prod.customershome.com/acauth/api/v1/content-categories/660e8400-e29b-41d4-a716-446655440111' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"description\": \"Updated description for technology\",\n    \"tagUuids\": [\"550e8400-e29b-41d4-a716-446655440000\"]\n  }'\n```\n",
        "operationId" : "updateContentCategory",
        "parameters" : [ {
          "name" : "uuid",
          "in" : "path",
          "description" : "UUID of the category to update",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/UpdateContentTagCategory"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated category",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContentTagCategory"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data or validation errors",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContentTagCategory"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContentTagCategory"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContentTagCategory"
                }
              }
            }
          },
          "404" : {
            "description" : "Category not found",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContentTagCategory"
                }
              }
            }
          },
          "409" : {
            "description" : "Conflict (duplicate name)",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContentTagCategory"
                }
              }
            }
          }
        }
      },
      "delete" : {
        "tags" : [ "Content Categories" ],
        "summary" : "Delete content category",
        "description" : "Delete an existing content category. Tags previously in this category are not deleted; they become\nuncategorized (you can re-assign them to another category via Update Content Tag).\n\n**Example:**\n```bash\ncurl -X DELETE 'https://prod.customershome.com/acauth/api/v1/content-categories/660e8400-e29b-41d4-a716-446655440111' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "deleteContentCategory",
        "parameters" : [ {
          "name" : "uuid",
          "in" : "path",
          "description" : "UUID of the category to delete",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Category deleted"
          },
          "401" : {
            "description" : "Unauthorized"
          },
          "403" : {
            "description" : "Forbidden"
          },
          "404" : {
            "description" : "Category not found"
          }
        }
      }
    },
    "/api/v1/content-categories/bulk" : {
      "put" : {
        "tags" : [ "Content Categories" ],
        "summary" : "Bulk update content categories",
        "description" : "Update multiple content categories in a single request. The body is a map keyed by category UUID,\nso each entry follows the same semantics as the single-update endpoint (notably: `tagUuids` is a\nfull replace, not a merge). Up to 100 entries per request.\n\nEach entry is processed independently — inspect `successful` and `failed` in the response.\n\n**Example:**\n```bash\ncurl -X PUT 'https://prod.customershome.com/acauth/api/v1/content-categories/bulk' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"660e8400-e29b-41d4-a716-446655440111\": {\n      \"description\": \"Updated tech description\"\n    },\n    \"660e8400-e29b-41d4-a716-446655440222\": {\n      \"tagUuids\": [\"tag-uuid-5\", \"tag-uuid-6\"]\n    }\n  }'\n```\n",
        "operationId" : "bulkUpdateContentCategories",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "type" : "object",
                "additionalProperties" : {
                  "$ref" : "#/components/schemas/UpdateContentTagCategory"
                }
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Per-item update result",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BulkOperationResult"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data, validation errors, or map size violation",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BulkOperationResult"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BulkOperationResult"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BulkOperationResult"
                }
              }
            }
          }
        }
      },
      "post" : {
        "tags" : [ "Content Categories" ],
        "summary" : "Bulk create content categories",
        "description" : "Create multiple content categories in a single request. Accepts 1 to 100 items; each item is\nprocessed independently. The response separates `successful` and `failed` items so a partial\nsuccess is still a 201 — inspect the body.\n\nUseful when migrating a content taxonomy from another system in one shot rather than looping on\nthe single-create endpoint.\n\n**Example:**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/content-categories/bulk' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '[\n    { \"name\": \"Technology\", \"description\": \"Tech content\", \"tagUuids\": [\"tag-uuid-1\"] },\n    { \"name\": \"Marketing\", \"description\": \"Marketing content\", \"tagUuids\": [\"tag-uuid-2\"] }\n  ]'\n```\n",
        "operationId" : "bulkCreateContentCategories",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "type" : "array",
                "items" : {
                  "$ref" : "#/components/schemas/CreateContentTagCategory"
                }
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "201" : {
            "description" : "Per-item create result",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BulkOperationResult"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data, validation errors, or array size violation",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BulkOperationResult"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BulkOperationResult"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BulkOperationResult"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advocate/custom-object-record/batch" : {
      "put" : {
        "tags" : [ "Advocate Custom Object Records" ],
        "summary" : "Modify advocate custom object attributes",
        "description" : "Update existing custom object records on advocates. Each batch item identifies the record by its\ninstance ID (returned from a prior create) and supplies the attribute values to change. Items are\nprocessed independently — inspect per-record results in the response.\n\nUse this for incremental sync of fields that change over time (e.g. subscription tier, renewal date).\n\n**Example:**\n```bash\ncurl -X PUT 'https://prod.customershome.com/acauth/api/v1/advocate/custom-object-record/batch' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"users\": [\n      {\n        \"advocateEmail\": \"ada@example.com\",\n        \"objects\": [\n          {\n            \"objectName\": \"subscription\",\n            \"recordId\": \"sub-2026-001\",\n            \"attributes\": [\n              { \"attributeName\": \"plan\", \"values\": [\"Enterprise Plus\"] }\n            ]\n          }\n        ]\n      }\n    ]\n  }'\n```\n",
        "operationId" : "updateAdvocatesCustomObjectRecordsAndAttributes",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/BatchUpdateCustomObjectRecordsDTO"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Per-record update result",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data or validation errors",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "404" : {
            "description" : "Record not found",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchCustomObjectRecordsReturnDTO"
                }
              }
            }
          }
        }
      },
      "post" : {
        "tags" : [ "Advocate Custom Object Records" ],
        "summary" : "Set advocate custom object attributes",
        "description" : "Create one or more custom object records (and their attribute values) on advocates. Each item in\nthe batch identifies a target advocate (by UUID or email) and a custom object `apiName`, then\nprovides the attribute values to set.\n\nItems are processed independently; per-record results — success UUID or error context — are\nreturned in the response body. Use this for bulk-loading multi-row data like subscription history\nor meeting notes from your CRM.\n\n**Example:**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/advocate/custom-object-record/batch' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"users\": [\n      {\n        \"advocateEmail\": \"ada@example.com\",\n        \"objects\": [\n          {\n            \"objectName\": \"subscription\",\n            \"recordId\": \"sub-2026-001\",\n            \"attributes\": [\n              { \"attributeName\": \"plan\", \"values\": [\"Enterprise\"] },\n              { \"attributeName\": \"started_at\", \"values\": [\"2026-01-01\"] }\n            ]\n          }\n        ]\n      }\n    ]\n  }'\n```\n",
        "operationId" : "createAdvocatesCustomObjectRecordsAndAttributes",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/BatchCreateCustomObjectRecordsDTO"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Per-record create result",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data or validation errors",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchCustomObjectRecordsReturnDTO"
                }
              }
            }
          }
        }
      },
      "delete" : {
        "tags" : [ "Advocate Custom Object Records" ],
        "summary" : "Delete advocate custom object attributes",
        "description" : "Delete custom object records on advocates. Each batch item identifies the target advocate\n(`advocateUuid` or `advocateEmail`), the custom object (`objectName`), and a list of record ids\n(`recordIds`) to delete. Passing an empty `recordIds` array deletes every record of that object\ntype on the advocate. Items are processed independently — per-record outcomes are returned.\n\nIrreversible — the deleted records cannot be recovered.\n\n**Example:**\n```bash\ncurl -X DELETE 'https://prod.customershome.com/acauth/api/v1/advocate/custom-object-record/batch' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"users\": [\n      {\n        \"advocateEmail\": \"ada@example.com\",\n        \"objectName\":    \"subscription\",\n        \"recordIds\":     [\"sub-2026-001\"]\n      }\n    ]\n  }'\n```\n",
        "operationId" : "deleteCustomObjectAttributes",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/BatchDeleteCustomObjectRecordsDTO"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Per-record delete result",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data or validation errors",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchCustomObjectRecordsReturnDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advocate/custom-attributes" : {
      "get" : {
        "tags" : [ "Company API" ],
        "summary" : "Get advocate custom attribute values",
        "description" : "Get custom attribute values for one or more advocates. Pass a comma-separated list of advocate\nUUIDs as `uuids`; omit to return values for all advocates in the company (use with care on large\ntenants).\n\nThe response is a map keyed by advocate UUID; each value is an array of attribute readings.\nCombine with `List custom attributes` (entity=contact) to interpret what each attribute means.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/advocate/custom-attributes?uuids=550e8400-e29b-41d4-a716-446655440000,550e8400-e29b-41d4-a716-446655440001' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "getAdvocatesCustomAttributes",
        "parameters" : [ {
          "name" : "uuids",
          "in" : "query",
          "description" : "Optional comma-separated list of advocate UUIDs to filter by",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Map of advocate UUID to attribute values",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object",
                  "additionalProperties" : {
                    "type" : "array",
                    "items" : {
                      "$ref" : "#/components/schemas/CustomDataAttributeForAdvocateDTO"
                    }
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object",
                  "additionalProperties" : {
                    "type" : "array",
                    "items" : {
                      "$ref" : "#/components/schemas/CustomDataAttributeForAdvocateDTO"
                    }
                  }
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object",
                  "additionalProperties" : {
                    "type" : "array",
                    "items" : {
                      "$ref" : "#/components/schemas/CustomDataAttributeForAdvocateDTO"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "put" : {
        "tags" : [ "Company API" ],
        "summary" : "Modify advocate custom attributes",
        "description" : "Update one or more custom attribute values on a single advocate identified by email. The request\ncarries an array of `{attributeName, values}` rows — each row sets the values of one custom\nattribute (values is always an array; for single-value attributes pass a one-element array).\n\nThe response is an array of per-update result rows. Either `attributeName` or `attributeUuid`\nmay be used to identify the attribute. Use the per-advocate-id variant (`PUT\n/advocate/custom-attributes/{id}`) when you already have the SSO auth id rather than the email.\n\n**Example:**\n```bash\ncurl -X PUT 'https://prod.customershome.com/acauth/api/v1/advocate/custom-attributes' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"email\": \"ada@example.com\",\n    \"attributes\": [\n      { \"attributeName\": \"favorite_color\", \"values\": [\"blue\"] },\n      { \"attributeName\": \"role\", \"values\": [\"VP Engineering\"] }\n    ]\n  }'\n```\n",
        "operationId" : "updateAdvocateCustomAttributes",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/AdvocateAttributesUpdateDTO"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Per-update result",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/AttributeUpdateResultDTO"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request body",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/AttributeUpdateResultDTO"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/AttributeUpdateResultDTO"
                  }
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/AttributeUpdateResultDTO"
                  }
                }
              }
            }
          },
          "404" : {
            "description" : "Advocate not found",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/AttributeUpdateResultDTO"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advocate/custom-attributes/{id}" : {
      "put" : {
        "tags" : [ "Company API" ],
        "summary" : "Modify custom attributes for a single advocate",
        "description" : "Update custom attribute values for a single advocate identified by **external auth id**. The\npayload is partitioned into three maps so a single call can add, update, and remove attributes\natomically:\n\n* `addCustomAttributes` — `{ \"<attributeName>\": [\"value1\", \"value2\"] }` — add the given values\n  (no-op if the attribute already holds them).\n* `updateCustomAttributes` — `{ \"<attributeName>\": [\"value1\", \"value2\"] }` — replace the\n  attribute's full value set with the supplied array.\n* `removeCustomAttributes` — `[\"<attributeName>\", ...]` — remove the attribute entirely.\n\nThe response returns the resulting list of attribute values on the advocate. The companion\n`PUT /advocate/custom-attributes` endpoint targets the advocate by email + a flat\n`[{attributeName, values}]` array — use whichever identifier you already have on hand.\n\n**Example:**\n```bash\ncurl -X PUT 'https://prod.customershome.com/acauth/api/v1/advocate/custom-attributes/auth0|abcd1234' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"updateCustomAttributes\": { \"favorite_color\": [\"green\"] }\n  }'\n```\n",
        "operationId" : "updateAdvocatesCustomAttributes",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "External auth id of the advocate",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/UpdateUserDTO"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated custom attribute values",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/CustomDataAttributeForAdvocateDTO"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request body",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/CustomDataAttributeForAdvocateDTO"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/CustomDataAttributeForAdvocateDTO"
                  }
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/CustomDataAttributeForAdvocateDTO"
                  }
                }
              }
            }
          },
          "404" : {
            "description" : "Advocate not found",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/CustomDataAttributeForAdvocateDTO"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/account/custom-object-record/batch" : {
      "put" : {
        "tags" : [ "Account Custom Object Records" ],
        "summary" : "Modify account custom object attributes",
        "description" : "Update existing custom object records on accounts. Each batch item identifies the record by its\ninstance ID (returned from a prior create) and supplies the attribute values to change. Items are\nprocessed independently — inspect per-record results in the response.\n\n**Example:**\n```bash\ncurl -X PUT 'https://prod.customershome.com/acauth/api/v1/account/custom-object-record/batch' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"accounts\": [\n      {\n        \"accountName\": \"Analytical Engines Inc.\",\n        \"objects\": [\n          {\n            \"objectName\": \"primary_contact\",\n            \"recordId\": \"ext-pc-001\",\n            \"attributes\": [\n              { \"attributeName\": \"email\", \"values\": [\"ada.lovelace@example.com\"] }\n            ]\n          }\n        ]\n      }\n    ]\n  }'\n```\n",
        "operationId" : "updateAccountCustomObjectRecordsAndAttributes",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/BatchAccountUpdateCustomObjectRecordsDTO"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Per-record update result",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchAccountCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data or validation errors",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchAccountCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchAccountCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchAccountCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "404" : {
            "description" : "Record not found",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchAccountCustomObjectRecordsReturnDTO"
                }
              }
            }
          }
        }
      },
      "post" : {
        "tags" : [ "Account Custom Object Records" ],
        "summary" : "Set account custom object attributes",
        "description" : "Create one or more custom object records (and their attribute values) on accounts. Each batch\nitem identifies a target account (by UUID or name) and a custom object `apiName`, then provides\nthe attribute values to set.\n\nItems are processed independently — inspect per-record results in the response body.\n\n**Example:**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/account/custom-object-record/batch' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"accounts\": [\n      {\n        \"accountName\": \"Analytical Engines Inc.\",\n        \"objects\": [\n          {\n            \"objectName\": \"primary_contact\",\n            \"recordId\": \"ext-pc-001\",\n            \"attributes\": [\n              { \"attributeName\": \"full_name\", \"values\": [\"Ada Lovelace\"] },\n              { \"attributeName\": \"email\", \"values\": [\"ada@example.com\"] }\n            ]\n          }\n        ]\n      }\n    ]\n  }'\n```\n",
        "operationId" : "createAccountCustomObjectRecordsAndAttributes",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/BatchAccountCreateCustomObjectRecordsDTO"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Per-record create result",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchAccountCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data or validation errors",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchAccountCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchAccountCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchAccountCustomObjectRecordsReturnDTO"
                }
              }
            }
          }
        }
      },
      "delete" : {
        "tags" : [ "Account Custom Object Records" ],
        "summary" : "Delete account custom object attributes",
        "description" : "Delete custom object records on accounts. Each batch item identifies the target account\n(`accountUuid` or `accountName`), the custom object (`objectName`), and a list of record ids\n(`recordIds`) to delete. Passing an empty `recordIds` array deletes every record of that object\ntype on the account. Items are processed independently — per-record outcomes are returned.\n\nIrreversible — the deleted records cannot be recovered.\n\n**Example:**\n```bash\ncurl -X DELETE 'https://prod.customershome.com/acauth/api/v1/account/custom-object-record/batch' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"accounts\": [\n      {\n        \"accountName\": \"Analytical Engines Inc.\",\n        \"objectName\":  \"primary_contact\",\n        \"recordIds\":   [\"ext-pc-001\"]\n      }\n    ]\n  }'\n```\n",
        "operationId" : "deleteAccountCustomObjectAttributes",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/BatchAccountDeleteCustomObjectRecordsDTO"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Per-record delete result",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchAccountCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data or validation errors",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchAccountCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchAccountCustomObjectRecordsReturnDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BatchAccountCustomObjectRecordsReturnDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/users" : {
      "get" : {
        "tags" : [ "Company API" ],
        "summary" : "List users",
        "description" : "List users (advocates) in the caller's company. Pass `emails` (comma-separated set) to look up\nspecific advocates by email. Returns a basic projection — for full advocate data including custom\nattributes and consent, use `List advocates` instead.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/users?emails=ada@example.com,alan@example.com&page=0&size=20' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "listUsers",
        "parameters" : [ {
          "name" : "emails",
          "in" : "query",
          "description" : "Optional set of emails to filter by",
          "required" : false,
          "schema" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "uniqueItems" : true
          }
        }, {
          "name" : "pageable",
          "in" : "query",
          "required" : true,
          "schema" : {
            "$ref" : "#/components/schemas/Pageable"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Paginated list of users",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageUserModelDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageUserModelDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageUserModelDTO"
                }
              }
            }
          }
        }
      },
      "post" : {
        "tags" : [ "Company API" ],
        "summary" : "Create user",
        "description" : "Create a new advocate user in the caller's company. Email is unique per company — if the email\nalready exists in this company the response is 400 with body `EMAIL_CONFLICT`.\n\nThe new user is created in an unactivated state; standard onboarding flows (invitation email,\nactivation link) fire automatically. Use `Import contacts by email` for bulk onboarding instead\nof looping on this endpoint.\n\n**Example:**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/users' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"email\": \"ada@example.com\",\n    \"firstName\": \"Ada\",\n    \"lastName\": \"Lovelace\",\n    \"jobTitle\": \"Chief Computing Officer\"\n  }'\n```\n",
        "operationId" : "addUserRequestExternal",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/InvitedAdvocateDTO"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "User created",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object"
                }
              }
            }
          },
          "400" : {
            "description" : "Email conflict or invalid request",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/trigger-activity" : {
      "post" : {
        "tags" : [ "Company API" ],
        "summary" : "Trigger activity",
        "description" : "Trigger a tracked activity for an advocate identified by email. The activity is recorded against\nthe advocate and may award points, progress an open ASK, fire downstream automation, or all\nthree depending on how the activity type is configured in admin.\n\nCommon patterns: a CRM sync calling this when an opportunity closes, a content platform calling\nit when an advocate posts a review, a webhook bridge translating third-party events into Base\nactivities. Use `List activity types` to discover valid activity types beforehand.\n\n**Example:**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/trigger-activity' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"email\": \"ada@example.com\",\n    \"apiIdentifier\": \"case_study_published\"\n  }'\n```\n",
        "operationId" : "triggerActivity",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TriggerActivityDTO"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "204" : {
            "description" : "Activity triggered"
          },
          "400" : {
            "description" : "Invalid request body"
          },
          "401" : {
            "description" : "Unauthorized"
          },
          "403" : {
            "description" : "Forbidden"
          },
          "404" : {
            "description" : "Advocate not found"
          }
        }
      }
    },
    "/api/v1/registration-confirmation" : {
      "post" : {
        "tags" : [ "Company API" ],
        "summary" : "Registration confirmation",
        "description" : "Confirm that an advocate directed from the Base system completed registration. Call this from your\nregistration landing page after the advocate's account is provisioned so Base can attribute the\nregistration to the originating UTM campaign and capture profile fields submitted on the form.\n\n`utmCampaign` is required and is the campaign id Base appended to the registration URL as\n`?utm_campaign=<id>`. Other fields (firstName, lastName, jobTitle, tags, etc.) are optional and\nfall back to whatever was supplied earlier in the flow.\n\n**Example:**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/registration-confirmation' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"utmCampaign\": \"spring-2026-launch\",\n    \"step\": 2,\n    \"utmSource\": \"linkedin\",\n    \"tags\": [\"enterprise\", \"early-adopter\"],\n    \"firstName\": \"Ada\",\n    \"lastName\": \"Lovelace\",\n    \"company\": \"Analytical Engines Inc.\",\n    \"jobTitle\": \"Chief Computing Officer\",\n    \"email\": \"ada@example.com\"\n  }'\n```\n",
        "operationId" : "registrationConfirmation",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/RegistrationConfirmationDTO"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Confirmation recorded",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request body",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/reference-requests" : {
      "get" : {
        "tags" : [ "Reference Requests" ],
        "summary" : "List reference requests",
        "description" : "Retrieve a paginated list of reference requests matching the provided filter (deadline range,\nstatuses, requester, etc.). Use this for reporting dashboards or to find the UUID of a specific\nrequest to read in detail.\n\nMaximum page size is 100. Sort using the standard Spring `sort` query parameter\n(e.g. `sort=createdAt,desc`).\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/reference-requests?page=0&size=50&sort=createdAt,desc' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "getReferenceRequests",
        "parameters" : [ {
          "name" : "filterDTO",
          "in" : "query",
          "description" : "Filter criteria for narrowing the result set: date range, statuses, requester, etc. See `ReferenceRequestFilterDTO` for the field list.",
          "required" : true,
          "schema" : {
            "$ref" : "#/components/schemas/ReferenceRequestFilterDTO"
          }
        }, {
          "name" : "size",
          "in" : "query",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "maximum" : 100,
            "minimum" : 1
          }
        }, {
          "name" : "page",
          "in" : "query",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "minimum" : 0
          }
        }, {
          "name" : "pageable",
          "in" : "query",
          "required" : true,
          "schema" : {
            "$ref" : "#/components/schemas/Pageable"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Paginated list of reference requests",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageReferenceRequestReportDTO"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid filter or pagination parameters",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageReferenceRequestReportDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageReferenceRequestReportDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageReferenceRequestReportDTO"
                }
              }
            }
          }
        }
      },
      "post" : {
        "tags" : [ "Reference Requests" ],
        "summary" : "Submit reference request",
        "description" : "Submit a new reference request. The body must specify an opportunity, opportunity contact,\nrequester, reference manager, and 1–10 reference entries. All entries must be the same type —\neither all source-contact (sourced from your CRM) or all P2P (an existing advocate acting as\nreference). Mixed types are rejected.\n\nReturns 204 No Content on success; downstream notifications and workflows pick up the request\nasynchronously.\n\n**Example:**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/reference-requests' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"deadline\": \"2026-06-01T00:00:00Z\",\n    \"subject\": \"Reference for Acme renewal\",\n    \"referenceTypeUuid\": \"550e8400-e29b-41d4-a716-446655440000\",\n    \"notes\": \"Looking for a 30-minute peer reference call.\",\n    \"opportunity\": {\n      \"opportunityId\":          \"006Aa00001ABcDE\",\n      \"opportunityName\":        \"Acme renewal — FY26\",\n      \"opportunityAccountId\":   \"001Aa00001A2B3C\",\n      \"opportunityAccountName\": \"Acme Corp\"\n    },\n    \"opportunityContact\": {\n      \"externalId\": \"003Aa00001ABcDE\",\n      \"firstName\":  \"Bob\",\n      \"lastName\":   \"Buyer\",\n      \"email\":      \"buyer@acme.example\"\n    },\n    \"requester\": {\n      \"externalId\": \"005Aa00001ZyXwV\",\n      \"firstName\":  \"Sara\",\n      \"lastName\":   \"Sales\",\n      \"email\":      \"rep@yourcompany.example\"\n    },\n    \"referenceManager\": { \"uuid\": \"660e8400-e29b-41d4-a716-446655440111\" },\n    \"entries\": [\n      {\n        \"externalId\":      \"rr-2026-q2-001\",\n        \"crmRequestNumber\": \"REQ-12345\",\n        \"advocate\":        { \"uuid\": \"770e8400-e29b-41d4-a716-446655440222\" }\n      }\n    ]\n  }'\n```\n",
        "operationId" : "submitReferenceRequest",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/CreateReferenceRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "204" : {
            "description" : "Reference request created"
          },
          "400" : {
            "description" : "Invalid request data or validation errors"
          },
          "401" : {
            "description" : "Unauthorized"
          },
          "403" : {
            "description" : "Forbidden"
          }
        }
      }
    },
    "/api/v1/reference-requests/form" : {
      "post" : {
        "tags" : [ "Reference Requests" ],
        "summary" : "Read reference request form settings",
        "description" : "Retrieve the configuration of the reference request form: which fields are enabled, their labels,\navailable reference types, allowed reference managers, custom attributes to display, and contact /\nweighting options. The configuration is computed from the supplied `context` — pass the CRM\naccount, opportunity, and intended reference type so the response reflects the rules that apply\nto that specific combination.\n\nCall this first to render the form UI or to know which fields are valid before submitting a\nreference request.\n\n**Example:**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/reference-requests/form' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"context\": {\n      \"account\":     { \"id\": \"001Aa00001A2B3C\", \"name\": \"Acme Corp\",                \"industry\": \"Software\" },\n      \"opportunity\": { \"id\": \"006Aa00001ABcDE\", \"name\": \"Acme renewal — FY26\",     \"accountId\": \"001Aa00001A2B3C\", \"stage\": \"Negotiation\" },\n      \"referenceTypeUuid\": \"550e8400-e29b-41d4-a716-446655440000\"\n    }\n  }'\n```\n",
        "operationId" : "getReferenceRequestForm",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ReadReferenceRequestForm"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Reference request form model",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ReferenceRequestForm"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request body",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ReferenceRequestForm"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ReferenceRequestForm"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ReferenceRequestForm"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/reference-advocates/report" : {
      "post" : {
        "tags" : [ "Reference Requests" ],
        "summary" : "Read reference advocates report",
        "description" : "Retrieve a paginated list of advocates eligible to be referenced, ranked by the weighted criteria\nsupplied in the request body. Use this to pre-populate a \"best matches\" list when building a\nreference request UI, or to feed an internal sales-tooling dashboard.\n\nMaximum page size is 100. The weighting model considers industry / role overlap, recent activity,\nconsent, and any custom attribute filters you pass.\n\n**Example:**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/reference-advocates/report?page=0&size=20' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"industryTypes\":   { \"value\": [12, 47],          \"weight\": 5 },\n    \"jobTitles\":       { \"value\": [\"VP Engineering\"], \"weight\": 4 },\n    \"accountSizeFrom\": { \"value\": 100,                \"weight\": 2 },\n    \"accountSizeTo\":   { \"value\": 5000,               \"weight\": 2 },\n    \"customAttributes\": [\n      {\n        \"id\":     \"aa11bb22-cc33-dd44-ee55-ff6677889900\",\n        \"name\":   \"favorite_color\",\n        \"entity\": \"contact\",\n        \"values\": [\"blue\"],\n        \"weight\": 1\n      }\n    ],\n    \"referenceTypeUuid\": \"550e8400-e29b-41d4-a716-446655440000\",\n    \"reportSize\": 50\n  }'\n```\n",
        "operationId" : "getReferenceAdvocates",
        "parameters" : [ {
          "name" : "size",
          "in" : "query",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "maximum" : 100,
            "minimum" : 1
          }
        }, {
          "name" : "page",
          "in" : "query",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "minimum" : 0
          }
        }, {
          "name" : "pageable",
          "in" : "query",
          "required" : true,
          "schema" : {
            "$ref" : "#/components/schemas/Pageable"
          }
        } ],
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ReferenceAdvocateReportFiltersWeightedDTO"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Paginated list of reference advocates",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageReferenceAdvocateViewDTO"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid filter or pagination parameters",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageReferenceAdvocateViewDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageReferenceAdvocateViewDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageReferenceAdvocateViewDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/opportunity-attributes" : {
      "post" : {
        "tags" : [ "Company API" ],
        "summary" : "Upsert opportunity attributes",
        "description" : "Create or update one or more opportunities and their custom attribute values in a single call.\nThe request body wraps a list of opportunity items; each item is identified by `opportunityId`\n(the external CRM id, required). If no matching opportunity exists in Base the item creates one;\notherwise it updates the existing one in place.\n\nTypical use: a CRM sync job that pushes the latest opportunity state into Base. `customAttributes`\nfollows the same `[{attributeName, values}]` shape used elsewhere in the V1 API.\n\n**Example:**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/opportunity-attributes' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"opportunities\": [\n      {\n        \"opportunityId\": \"006Aa00001ABcDE\",\n        \"opportunityName\": \"Acme renewal — FY26\",\n        \"opportunityStage\": \"Closed Won\",\n        \"opportunityAmount\": 75000,\n        \"opportunityProbability\": 100,\n        \"opportunityIsWon\": true,\n        \"opportunityCloseDate\": \"2026-05-15\",\n        \"customAttributes\": [\n          { \"attributeName\": \"renewal_reason\", \"values\": [\"Expansion\"] }\n        ]\n      }\n    ]\n  }'\n```\n",
        "operationId" : "updateOpportunity",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/OpportunityUpdateRequestDTO"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Opportunity upsert result",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OpportunityUpdateResponseDTO"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request body",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OpportunityUpdateResponseDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OpportunityUpdateResponseDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OpportunityUpdateResponseDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/nomination" : {
      "post" : {
        "tags" : [ "Nomination" ],
        "summary" : "Get nomination report",
        "description" : "Retrieve nomination records that match the provided filter. Nominations are advocate-marketing\nrequests created by salespeople or marketing — typically asking an advocate to participate in a\ncase study, reference call, review, etc.\n\nThe filter requires a date range (`dateFrom`/`dateTo`) and accepts optional statuses, marketing\nadmin UUIDs, salesperson names, specific nomination UUIDs, activity type names, and a free-text\nsearch. Set `includeRepeatedNominations=true` to surface advocates who were nominated more than\nonce in the window. Use this for reporting / analytics dashboards.\n\n**Example:**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/nomination' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"dateFrom\": \"2026-01-01\",\n    \"dateTo\": \"2026-03-31\",\n    \"statuses\": [\"IN_PROGRESS\", \"APPROVED\"],\n    \"includeRepeatedNominations\": false\n  }'\n```\n",
        "operationId" : "listNominations",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/NominationReportFilter"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "List of matching nomination records",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/NominationRecord"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid filter",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/NominationRecord"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/NominationRecord"
                  }
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/NominationRecord"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/custom-object-mapping" : {
      "get" : {
        "tags" : [ "Custom Object Mappings" ],
        "summary" : "List custom object mappings",
        "description" : "List custom object mappings (and their attributes) for a given entity. A \"mapping\" describes a\ncustom object type (e.g. `primary_contact`, `subscription`) that you can attach to advocates,\naccounts, or opportunities.\n\nUse this to discover what custom object types are available before creating / reading records.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/custom-object-mapping?entity=account' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "listCustomObjectsMappings",
        "parameters" : [ {
          "name" : "entity",
          "in" : "query",
          "description" : "Entity owning the custom objects (advocate, account, opportunity, etc.)",
          "required" : true,
          "schema" : {
            "type" : "string",
            "description" : "Owning entity of a custom attribute or custom object mapping. Determines which records\nthe attribute can be set on.\n\n* `contact` — advocate / contact record\n* `account` — company / account record\n* `opportunity` — sales opportunity record\n* `nomination` — advocate nomination record\n",
            "enum" : [ "contact", "account", "opportunity", "nomination" ]
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of custom object mappings with nested attributes",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/CustomObject"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/CustomObject"
                  }
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/CustomObject"
                  }
                }
              }
            }
          }
        }
      },
      "post" : {
        "tags" : [ "Custom Object Mappings" ],
        "summary" : "Create custom object mapping",
        "description" : "Define a new custom object mapping on an entity. `apiName` is the immutable identifier used in all\nsubsequent record-level calls (URL path parameter, query payloads), so choose carefully — typically\nlowercase singular noun like `subscription` or `meeting`. `label` is the human-readable display\nused in admin UIs.\n\nAfter this returns, define the attributes on the new custom object via Create Custom Attribute\n(with `entity` set to the new mapping's `apiName`).\n\n**Example:**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/custom-object-mapping' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"apiName\": \"primary_contact\",\n    \"label\": \"Primary Contact\",\n    \"description\": \"Primary point of contact at the account\",\n    \"entity\": \"account\"\n  }'\n```\n",
        "operationId" : "createCustomObjectsMappings",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/CreateCustomObjectMapping"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "201" : {
            "description" : "Newly created custom object mapping",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomObjectMapping"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data or validation errors",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomObjectMapping"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomObjectMapping"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomObjectMapping"
                }
              }
            }
          },
          "409" : {
            "description" : "Conflict (duplicate apiName)",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomObjectMapping"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/custom-attributes" : {
      "get" : {
        "tags" : [ "Custom Attributes" ],
        "summary" : "List custom attributes",
        "description" : "List custom attributes defined for a given entity (`contact` = advocate, `account`, `opportunity`, `nomination`).\n\nBy default the response includes attributes inherited from a connected CRM in addition to Base-native\nattributes; pass `includeCRM=false` to see only the attributes you defined in Base. Use this to\ndiscover the schema before reading or writing attribute values on a specific record.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/custom-attributes?entity=contact&includeCRM=true' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "listAttributes",
        "parameters" : [ {
          "name" : "entity",
          "in" : "query",
          "description" : "Entity name whose attributes to list. Accepted values: `contact` (advocate record), `account`, `opportunity`, `nomination`.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "includeCRM",
          "in" : "query",
          "description" : "Include attributes inherited from a connected CRM (default true)",
          "required" : false,
          "schema" : {
            "type" : "boolean",
            "default" : true
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of custom attributes for the entity",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/CustomAttribute"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/CustomAttribute"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/CustomAttribute"
                  }
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/CustomAttribute"
                  }
                }
              }
            }
          }
        }
      },
      "post" : {
        "tags" : [ "Custom Attributes" ],
        "summary" : "Create custom attribute",
        "description" : "Define a new custom attribute on an entity. The `name` becomes the API key used in all subsequent\nreads and writes — it must be unique per entity, all-lowercase, and only contain letters / digits /\nunderscores. `label` is what admins and advocates see in the UI; you can change it later via PATCH.\n\nFor picklist attributes set `type: \"Enumerated\"` and supply the allowed `values` up front. To allow\nselecting multiple values from that list, also set `multipleValues: true`. For booleans use\n`type: \"Boolean\"` and leave `values` empty.\n\n**Example:**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/custom-attributes' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"name\": \"favorite_color\",\n    \"label\": \"Favorite color\",\n    \"description\": \"Advocate favorite color\",\n    \"type\": \"Enumerated\",\n    \"entity\": \"contact\",\n    \"values\": [\"red\", \"green\", \"blue\"],\n    \"editableByAdvocate\": true\n  }'\n```\n",
        "operationId" : "createCustomAttribute",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/CreateCustomAttribute"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "201" : {
            "description" : "Newly created attribute",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomAttribute"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data or validation errors",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomAttribute"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomAttribute"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomAttribute"
                }
              }
            }
          },
          "409" : {
            "description" : "Conflict (duplicate name)",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CustomAttribute"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/content-tags" : {
      "get" : {
        "tags" : [ "Content Tags" ],
        "summary" : "List content tags",
        "description" : "Retrieve a paginated list of content tags with optional filtering by name (substring match) and category UUID.\n\nTypical flow: list categories first to obtain `contentCategoryUuid`, then list tags scoped to that category.\nMaximum page size is 500; requests above that limit return 400.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/content-tags?contentCategoryUuid=660e8400-e29b-41d4-a716-446655440111&page=0&size=50' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "listContentTags",
        "parameters" : [ {
          "name" : "name",
          "in" : "query",
          "description" : "Filter tags by name (substring match)",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "contentCategoryUuid",
          "in" : "query",
          "description" : "Filter tags by content category UUID",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "pageable",
          "in" : "query",
          "required" : true,
          "schema" : {
            "$ref" : "#/components/schemas/Pageable"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Paginated list of content tags",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageContentTag"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request (for example page size greater than 500)",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageContentTag"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageContentTag"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageContentTag"
                }
              }
            }
          }
        }
      },
      "post" : {
        "tags" : [ "Content Tags" ],
        "summary" : "Create content tag",
        "description" : "Create a new content tag.\n\n`name` is required and must be unique within the company (case-insensitive). Pass a `tagCategoryUuid`\nto put the new tag under an existing category, or leave it null to create a top-level tag. The response\nbody returns the new UUID; use it as the identifier for subsequent update or delete calls.\n\n**Example:**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/content-tags' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"name\": \"Product Launch\",\n    \"description\": \"Used to mark content related to product launch campaigns\",\n    \"tagCategoryUuid\": \"660e8400-e29b-41d4-a716-446655440111\"\n  }'\n```\n",
        "operationId" : "createContentTag",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/CreateContentTag"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "201" : {
            "description" : "Tag created; response contains the new UUID",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CreatedResourceDTO"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data or validation errors",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CreatedResourceDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CreatedResourceDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CreatedResourceDTO"
                }
              }
            }
          },
          "409" : {
            "description" : "Conflict (duplicate name)",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CreatedResourceDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/content-categories" : {
      "get" : {
        "tags" : [ "Content Categories" ],
        "summary" : "List content categories",
        "description" : "Retrieve a paginated list of content categories with optional substring name filtering. Use the\nreturned `uuid` of each category to scope a subsequent List Content Tags call to that category.\n\nMaximum page size is 500; requests above that limit return 400.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/content-categories?name=tech&page=0&size=20' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "listContentCategories",
        "parameters" : [ {
          "name" : "name",
          "in" : "query",
          "description" : "Filter categories by name (substring match)",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "pageable",
          "in" : "query",
          "required" : true,
          "schema" : {
            "$ref" : "#/components/schemas/Pageable"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Paginated list of content categories",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageContentTagCategory"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request (for example page size greater than 500)",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageContentTagCategory"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageContentTagCategory"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageContentTagCategory"
                }
              }
            }
          }
        }
      },
      "post" : {
        "tags" : [ "Content Categories" ],
        "summary" : "Create content category",
        "description" : "Create a new content category and assign one or more existing tags to it. `name` must be unique\nwithin the company; `tagUuids` is required and must contain at least one tag.\n\nIf you need to create the tags first, call Create Content Tag (or its bulk variant) before this endpoint.\n\n**Example:**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/content-categories' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"name\": \"Technology\",\n    \"description\": \"All technology-related content\",\n    \"tagUuids\": [\"550e8400-e29b-41d4-a716-446655440000\", \"550e8400-e29b-41d4-a716-446655440001\"]\n  }'\n```\n",
        "operationId" : "createContentCategory",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/CreateContentTagCategory"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "201" : {
            "description" : "Category created; response contains the new UUID",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CreatedResourceDTO"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data or validation errors",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CreatedResourceDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CreatedResourceDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CreatedResourceDTO"
                }
              }
            }
          },
          "409" : {
            "description" : "Conflict (duplicate name)",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CreatedResourceDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advocate/reference/import-by-contact-id" : {
      "post" : {
        "tags" : [ "Company API" ],
        "summary" : "Import reference contacts by contact ID",
        "description" : "Import reference advocates — advocates designated to act as references for sales conversations —\nby external CRM contact id. Returns per-row results.\n\nDistinct from regular `Import contacts by contact ID`: the imported records are flagged as\navailable for the reference-request flow even if they are not active advocates in the usual\npoints-and-asks sense.\n\n**Example:**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/advocate/reference/import-by-contact-id' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '[\n    { \"contactId\": \"003Aa00001ABcDE\", \"frequency\": \"ANYTIME\" },\n    { \"contactId\": \"003Aa00001ABcDF\" }\n  ]'\n```\n",
        "operationId" : "importReferenceAdvocateByContactId",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "type" : "array",
                "items" : {
                  "$ref" : "#/components/schemas/ExternalImportReferenceAdvocateByContactIdDTO"
                }
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Per-row import result",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ExternalImportReferenceAdvocateByContactIdResultDTO"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ExternalImportReferenceAdvocateByContactIdResultDTO"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ExternalImportReferenceAdvocateByContactIdResultDTO"
                  }
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ExternalImportReferenceAdvocateByContactIdResultDTO"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advocate/import-by-email" : {
      "post" : {
        "tags" : [ "Company API" ],
        "summary" : "Import contacts by email",
        "description" : "Import advocates by email. Each item is processed independently; the response is an array of\nper-row outcomes.\n\nEmail is matched case-insensitively against existing advocates — duplicate rows are surfaced as\nper-row errors rather than dropped silently. Use for bulk onboarding when email is the only\ndurable identifier you have for the source records.\n\n**Example:**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/advocate/import-by-email' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '[\n    {\n      \"email\": \"ada@example.com\",\n      \"firstName\": \"Ada\",\n      \"lastName\": \"Lovelace\",\n      \"accountName\": \"Analytical Engines Inc.\",\n      \"register\": true,\n      \"sendInvite\": false\n    }\n  ]'\n```\n",
        "operationId" : "importAdvocateByEmail",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "type" : "array",
                "items" : {
                  "$ref" : "#/components/schemas/ExternalImportAdvocateByEmailDTO"
                }
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Per-row import result",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ExternalImportAdvocateByEmailResultDTO"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ExternalImportAdvocateByEmailResultDTO"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ExternalImportAdvocateByEmailResultDTO"
                  }
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ExternalImportAdvocateByEmailResultDTO"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advocate/import-by-contact-id" : {
      "post" : {
        "tags" : [ "Company API" ],
        "summary" : "Import contacts by contact ID",
        "description" : "Import advocates by external CRM contact id. Each item in the request body is processed\nindependently — failures on one row do not abort the rest. The response is an array of per-row\noutcomes (success with new advocate UUID, or per-row error).\n\nUse for bulk onboarding from a CRM where the contact id is the durable identifier. Pair with\n`Import contacts by email` when some rows lack a CRM id but have a verified email.\n\n**Example:**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/advocate/import-by-contact-id' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '[\n    { \"contactId\": \"003Aa00001ABcDE\", \"register\": true, \"sendInvite\": false },\n    { \"contactId\": \"003Aa00001ABcDF\" }\n  ]'\n```\n",
        "operationId" : "importAdvocateByContactId",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "type" : "array",
                "items" : {
                  "$ref" : "#/components/schemas/ExternalImportAdvocateByContactIdDTO"
                }
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Per-row import result",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ExternalImportAdvocateByContactIdResultDTO"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ExternalImportAdvocateByContactIdResultDTO"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ExternalImportAdvocateByContactIdResultDTO"
                  }
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ExternalImportAdvocateByContactIdResultDTO"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/account" : {
      "get" : {
        "tags" : [ "Company API" ],
        "summary" : "Get account data",
        "description" : "Retrieve a paginated list of accounts (with their core fields and custom attribute values).\nOptionally narrow the result to specific accounts via `uuids` (up to 500 per request). Repeat\nthe parameter (`uuids=A&uuids=B`) or pass a comma-separated value (`uuids=A,B`) — both are\naccepted by the Spring binding.\n\nMaximum page size is 500. Use for CRM-sync workflows that need to mirror Base account state\nback to another system.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/account?uuids=550e8400-e29b-41d4-a716-446655440000&uuids=550e8400-e29b-41d4-a716-446655440001&page=0&size=50' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "getAccounts",
        "parameters" : [ {
          "name" : "uuids",
          "in" : "query",
          "description" : "Optional list of up to 500 account UUIDs to filter by",
          "required" : false,
          "schema" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "maxItems" : 500,
            "minItems" : 0
          }
        }, {
          "name" : "pageable",
          "in" : "query",
          "required" : true,
          "schema" : {
            "$ref" : "#/components/schemas/Pageable"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Paginated list of accounts",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageAccountDataDTO"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request (for example page size greater than 500)",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageAccountDataDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageAccountDataDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageAccountDataDTO"
                }
              }
            }
          }
        }
      },
      "post" : {
        "tags" : [ "Company API" ],
        "summary" : "Update account data",
        "description" : "Create or update an account (\"upsert\"). At least one of `uuid` or `name` must be supplied — when\nonly `name` is supplied a new account is created if no match exists, otherwise the existing\nmatching account is updated.\n\nOther fields are optional: `domain` (lowercase hostname like `example.com`), `sizeFrom` / `sizeTo`\n(numeric employee-count range), `industryType` (free-form), and `customAttributeValues` as a list\nof `{name, values}` rows for any custom attributes defined on the `account` entity.\n\n**Example (create new account):**\n```bash\ncurl -X POST 'https://prod.customershome.com/acauth/api/v1/account' \\\n  -H 'Authorization: Bearer <jwt_token>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"name\": \"Analytical Engines Inc.\",\n    \"domain\": \"analyticalengines.com\",\n    \"sizeFrom\": 100,\n    \"sizeTo\": 500,\n    \"industryType\": \"Software\",\n    \"customAttributeValues\": [\n      { \"name\": \"tier\", \"values\": [\"Enterprise\"] }\n    ]\n  }'\n```\n",
        "operationId" : "upsertAccount",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/UpsertAccountDTO"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Upserted account",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AccountDataDTO"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data (UUID or name missing)",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AccountDataDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AccountDataDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AccountDataDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/users-by-dates" : {
      "get" : {
        "tags" : [ "Company API" ],
        "summary" : "List users modified since",
        "description" : "List users (advocates) filtered by source external system and an optional modified-since cutoff.\nDesigned for incremental sync: poll with `sinceLastModified` set to the previous successful sync\ntimestamp to fetch only the diff.\n\n`externalSystem` is required and identifies which integration sourced the users (CRM, marketing\nautomation, etc.).\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/users-by-dates?externalSystem=SalesForce&sinceLastModified=2026-05-01T00:00:00&page=0&size=100' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "getUsersByDates",
        "parameters" : [ {
          "name" : "externalSystem",
          "in" : "query",
          "description" : "External system identifying the source of users to filter",
          "required" : true,
          "schema" : {
            "type" : "string",
            "description" : "Source external system that originated a record. Used in sync endpoints to scope reads\nto a particular integration.\n\n* `SalesForce` — Salesforce CRM\n* `HubSpot` — HubSpot CRM\n* `Oracle` — Oracle CRM\n* `External` — any other integration not covered by a dedicated value\n* `Test` — synthetic records used by automated tests; never present in production\n",
            "enum" : [ "SalesForce", "HubSpot", "Oracle", "External", "Test" ]
          }
        }, {
          "name" : "sinceLastModified",
          "in" : "query",
          "description" : "Optional ISO 8601 cutoff; only users modified at or after this time are returned",
          "required" : false,
          "schema" : {
            "type" : "string",
            "format" : "date-time"
          }
        }, {
          "name" : "pageable",
          "in" : "query",
          "required" : true,
          "schema" : {
            "$ref" : "#/components/schemas/Pageable"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Paginated list of users",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/status" : {
      "get" : {
        "tags" : [ "Company API" ],
        "summary" : "Get API status",
        "description" : "Returns basic status information including the caller's company name. Use this as a cheap\nconnectivity / auth check from your integration before issuing real requests — a 200 response\nconfirms the bearer token is valid and bound to a company.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/status' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "status",
        "responses" : {
          "200" : {
            "description" : "Status payload",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/StatusDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/StatusDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/StatusDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/opportunity" : {
      "get" : {
        "tags" : [ "Company API" ],
        "summary" : "Get opportunity data",
        "description" : "Retrieve a paginated list of opportunities (with their core fields and custom attribute values).\nOptionally narrow to specific opportunities via `uuids` (up to 500 per request). Repeat the\nparameter (`uuids=A&uuids=B`) or pass a comma-separated value (`uuids=A,B`).\n\nMaximum page size is 500. Use for CRM-sync workflows that need to read Base's opportunity state.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/opportunity?uuids=550e8400-e29b-41d4-a716-446655440000&page=0&size=50' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "getOpportunities",
        "parameters" : [ {
          "name" : "uuids",
          "in" : "query",
          "description" : "Optional list of up to 500 opportunity UUIDs to filter by",
          "required" : false,
          "schema" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "maxItems" : 500,
            "minItems" : 0
          }
        }, {
          "name" : "pageable",
          "in" : "query",
          "required" : true,
          "schema" : {
            "$ref" : "#/components/schemas/Pageable"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Paginated list of opportunities",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageOpportunityDataDTO"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request (for example page size greater than 500)",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageOpportunityDataDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageOpportunityDataDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageOpportunityDataDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/opportunity-attributes/{id}" : {
      "get" : {
        "tags" : [ "Company API" ],
        "summary" : "Get opportunity attributes",
        "description" : "Read an opportunity and its custom attribute values by **external CRM opportunity id** (not the\nBase internal UUID). Useful when your CRM is the source of truth and you want to verify what Base\ncurrently has stored.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/opportunity-attributes/006Aa00001ABcDE' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "getOpportunity",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "External (CRM) opportunity id",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Opportunity attributes",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OpportunityAttributesDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OpportunityAttributesDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OpportunityAttributesDTO"
                }
              }
            }
          },
          "404" : {
            "description" : "Opportunity not found",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OpportunityAttributesDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/leaderboard" : {
      "get" : {
        "tags" : [ "Company API" ],
        "summary" : "Get leaderboard",
        "description" : "Retrieve a paginated leaderboard of advocates ranked by points (highest first). Set\n`email=true` to include each advocate's email in the response — by default it is omitted so the\npayload is safe to embed in a public-facing UI.\n\nUse Spring pagination (`page`, `size`) to walk the leaderboard; the underlying ordering is stable\nacross pages.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/leaderboard?page=0&size=20' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "findAllUsers",
        "parameters" : [ {
          "name" : "email",
          "in" : "query",
          "description" : "Whether to include email addresses for each advocate (default false)",
          "required" : false,
          "schema" : {
            "type" : "boolean"
          }
        }, {
          "name" : "pageable",
          "in" : "query",
          "required" : true,
          "schema" : {
            "$ref" : "#/components/schemas/Pageable"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Paginated leaderboard",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object"
                }
              }
            }
          },
          "404" : {
            "description" : "Company not found",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/leaderboard-by-email" : {
      "get" : {
        "tags" : [ "Company API" ],
        "summary" : "Get leaderboard entry by email",
        "description" : "Return the leaderboard entry for a single advocate identified by email. Useful when embedding an\nadvocate's own rank/points in an in-product widget without walking the full leaderboard.\n\nReturns 404 if the advocate or company cannot be resolved.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/leaderboard-by-email?email=ada@example.com' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "findAllUsers_1",
        "parameters" : [ {
          "name" : "email",
          "in" : "query",
          "description" : "Email of the advocate to look up",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Leaderboard entry for the advocate",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/UserDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/UserDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/UserDTO"
                }
              }
            }
          },
          "404" : {
            "description" : "Advocate or company not found",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/UserDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/custom-object-attributes" : {
      "get" : {
        "tags" : [ "Custom Object Mappings" ],
        "summary" : "List custom object attributes",
        "description" : "List attributes that exist on a custom object related to a given entity. `entityRelation` is the\nrelation key declared when the custom object was mapped (e.g. `primary_contact` for a Contact\nobject related to an Account).\n\nReturned by `Get Account Custom Object Attribute Values` / advocate equivalent before you read or\nwrite per-record values.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/custom-object-attributes?entityRelation=primary_contact' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "listCustomObjectAttributes",
        "parameters" : [ {
          "name" : "entityRelation",
          "in" : "query",
          "description" : "Relation name identifying the custom object on the entity",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of attributes on the related custom object",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/CustomObjectAttribute"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/CustomObjectAttribute"
                  }
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/CustomObjectAttribute"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/challenge" : {
      "get" : {
        "tags" : [ "Company API" ],
        "summary" : "List ASKs",
        "description" : "Retrieve a paginated list of ASKs defined in the company. (ASK is the customer-facing label for\nwhat the API calls `challenge` — see the intro for the terminology mapping.)\n\nMaximum page size is 500. Returns active and inactive ASKs alike; filter by status / type\non the client side if needed.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/challenge?page=0&size=50' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "findAllChallenges",
        "parameters" : [ {
          "name" : "pageable",
          "in" : "query",
          "required" : true,
          "schema" : {
            "$ref" : "#/components/schemas/Pageable"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Paginated list of ASKs",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageChallengeDTO"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request (for example page size greater than 500)",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageChallengeDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageChallengeDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageChallengeDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advocate" : {
      "get" : {
        "tags" : [ "Company API" ],
        "summary" : "List advocates",
        "description" : "Retrieve a paginated list of advocates with their account and consent information. Optionally\nfilter by a single advocate UUID or email.\n\nMaximum page size is 500; requests above that limit return 400. Use this rather than `List users`\nwhen you need account linkage, custom attribute values, or consent flags. Combine with `since`-style\nfiltering on related endpoints for incremental sync into your CRM.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/advocate?email=ada@example.com&page=0&size=50' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "listUsers_1",
        "parameters" : [ {
          "name" : "uuid",
          "in" : "query",
          "description" : "Optional advocate UUID to filter to a single record",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "email",
          "in" : "query",
          "description" : "Optional advocate email to filter to a single record",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "pageable",
          "in" : "query",
          "required" : true,
          "schema" : {
            "$ref" : "#/components/schemas/Pageable"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Paginated list of advocates",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageAdvocateDataDTO"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request (for example page size greater than 500)",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageAdvocateDataDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageAdvocateDataDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageAdvocateDataDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advocate/custom-object-record/{objectName}" : {
      "get" : {
        "tags" : [ "Company API" ],
        "summary" : "Get advocate custom object attribute values",
        "description" : "Read custom object records and their attribute values for one advocate. Identify the advocate by\nUUID or email (one of the two is required); identify the custom object type by `objectName` (its\n`apiName` from the mapping).\n\nWithout `instanceId`, returns every record of that object type attached to the advocate.\nWith `instanceId`, narrows the response to a single record. Use the listing form first to discover\ninstance IDs, then drill in for the data you need.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/advocate/custom-object-record/subscription?advocateEmail=ada@example.com' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "readAdvocateCustomObjectRecords",
        "parameters" : [ {
          "name" : "objectName",
          "in" : "path",
          "description" : "API name of the custom object",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "advocateUuid",
          "in" : "query",
          "description" : "UUID of the target advocate (either advocateUuid or advocateEmail is required)",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "advocateEmail",
          "in" : "query",
          "description" : "Email of the target advocate (either advocateUuid or advocateEmail is required)",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "instanceId",
          "in" : "query",
          "description" : "Optional instance ID to narrow to a specific custom object record",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of matching custom object records",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/EntityCustomObjectRecordDTO"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "advocateUuid or advocateEmail must be provided",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/EntityCustomObjectRecordDTO"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/EntityCustomObjectRecordDTO"
                  }
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/EntityCustomObjectRecordDTO"
                  }
                }
              }
            }
          },
          "404" : {
            "description" : "Advocate or object not found",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/EntityCustomObjectRecordDTO"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/advocate/custom-attributes/field-value" : {
      "get" : {
        "tags" : [ "Company API" ],
        "summary" : "List advocate custom attribute field values",
        "description" : "List external-entity field values for selected custom attribute fields across advocates. Use\n`fieldNames` to scope the query to specific attributes and `sinceLastModified` (ISO-8601 UTC) to\nfetch only the values that changed at or after that time.\n\nDesigned for incremental sync: poll with `sinceLastModified` = \"last successful sync timestamp\"\nto pull only the diff rather than the full universe of values.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/advocate/custom-attributes/field-value?fieldNames=favorite_color,role&sinceLastModified=2026-05-01T00:00:00Z&page=0&size=100' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "getAdvocatesCustomAttributes_1",
        "parameters" : [ {
          "name" : "fieldNames",
          "in" : "query",
          "description" : "Optional list of custom attribute field names to return",
          "required" : false,
          "schema" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }, {
          "name" : "sinceLastModified",
          "in" : "query",
          "description" : "Optional ISO 8601 cutoff; only field values modified at or after this time are returned",
          "required" : false,
          "schema" : {
            "type" : "string",
            "format" : "date-time"
          }
        }, {
          "name" : "pageable",
          "in" : "query",
          "required" : true,
          "schema" : {
            "$ref" : "#/components/schemas/Pageable"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Paginated list of field values",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageExternalEntityFieldValueDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageExternalEntityFieldValueDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageExternalEntityFieldValueDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/activity" : {
      "get" : {
        "tags" : [ "Company API" ],
        "summary" : "List activities",
        "description" : "Retrieve a paginated list of activity records (advocate actions tracked by Base). Each activity\nreferences an advocate, an activity type, and a timestamp. Use for analytics export or to\npopulate an activity feed in your own UI.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/activity?page=0&size=50' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "getActivities",
        "parameters" : [ {
          "name" : "pageable",
          "in" : "query",
          "required" : true,
          "schema" : {
            "$ref" : "#/components/schemas/Pageable"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Paginated list of activities",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageActivityDTO"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageActivityDTO"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageActivityDTO"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/activity-types" : {
      "get" : {
        "tags" : [ "Company API" ],
        "summary" : "List activity types",
        "description" : "Return all activity types defined in the caller's company. Each activity type has a stable name\nthat you pass to `Trigger activity`.\n\nCache the result on your side — activity types change rarely (admin configuration), and calling\nthis on every Trigger activity request is wasteful.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/activity-types' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "getActivityTypes",
        "responses" : {
          "200" : {
            "description" : "List of activity types",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ActivityTypePublicDTO"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ActivityTypePublicDTO"
                  }
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ActivityTypePublicDTO"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/account/custom-object-record/{objectName}" : {
      "get" : {
        "tags" : [ "Account Custom Object Records" ],
        "summary" : "Get account custom object attribute values",
        "description" : "Read custom object records and their attribute values for one account. Identify the account by\nUUID or name (one of the two is required); identify the custom object by `objectName` (its\n`apiName` from the mapping).\n\nWithout `instanceId`, returns every record of that object type attached to the account.\nWith `instanceId`, narrows the response to a single record. A common flow is: call the listing\nendpoint to discover instance IDs, then call this endpoint with one to read a specific record's\nattributes.\n\n**Example:**\n```bash\ncurl -X GET 'https://prod.customershome.com/acauth/api/v1/account/custom-object-record/primary_contact?accountName=Analytical%20Engines%20Inc.' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "readAccountCustomObjectRecords",
        "parameters" : [ {
          "name" : "objectName",
          "in" : "path",
          "description" : "API name of the custom object",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "accountUuid",
          "in" : "query",
          "description" : "UUID of the target account (either accountUuid or accountName is required)",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "accountName",
          "in" : "query",
          "description" : "Name of the target account (either accountUuid or accountName is required)",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "instanceId",
          "in" : "query",
          "description" : "Optional instance ID to narrow to a specific custom object record",
          "required" : false,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of matching custom object records",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/EntityCustomObjectRecordDTO"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "accountUuid or accountName must be provided",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/EntityCustomObjectRecordDTO"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/EntityCustomObjectRecordDTO"
                  }
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/EntityCustomObjectRecordDTO"
                  }
                }
              }
            }
          },
          "404" : {
            "description" : "Account or object not found",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/EntityCustomObjectRecordDTO"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/users-by-id" : {
      "delete" : {
        "tags" : [ "Company API" ],
        "summary" : "Delete user by ID",
        "description" : "Delete an advocate by external auth id (the SSO-issued identifier). Same security/no-enumeration\nsemantics as `Delete user by email`: returns 204 for both \"deleted\" and \"not found\". A 500\nindicates the delete itself failed downstream. The deletion is permanent.\n\n**Example:**\n```bash\ncurl -X DELETE 'https://prod.customershome.com/acauth/api/v1/users-by-id?id=auth0|abcd1234' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "deleteAdvocateById",
        "parameters" : [ {
          "name" : "id",
          "in" : "query",
          "description" : "External auth id of the user to delete",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "204" : {
            "description" : "User deleted (or not found)",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object"
                }
              }
            }
          },
          "500" : {
            "description" : "Failed to delete user",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/users-by-email" : {
      "delete" : {
        "tags" : [ "Company API" ],
        "summary" : "Delete user by email",
        "description" : "Delete an advocate by email. For security reasons the endpoint **does not disclose whether the\nuser existed** — it returns 204 No Content for both \"deleted\" and \"not found\" to prevent email\nenumeration. A 500 indicates the delete itself failed downstream.\n\nThe deletion cascades to consent records, custom attribute values, points history, and ASK\nprogress; the advocate cannot be recovered.\n\n**Example:**\n```bash\ncurl -X DELETE 'https://prod.customershome.com/acauth/api/v1/users-by-email?email=ada@example.com' \\\n  -H 'Authorization: Bearer <jwt_token>'\n```\n",
        "operationId" : "deleteAdvocateByEmail",
        "parameters" : [ {
          "name" : "email",
          "in" : "query",
          "description" : "Email of the user to delete",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "204" : {
            "description" : "User deleted (or not found)",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object"
                }
              }
            }
          },
          "500" : {
            "description" : "Failed to delete user",
            "content" : {
              "*/*" : {
                "schema" : {
                  "type" : "object"
                }
              }
            }
          }
        }
      }
    }
  },
  "components" : {
    "schemas" : {
      "UpdateUserDTO" : {
        "type" : "object",
        "properties" : {
          "addCustomAttributes" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "array",
              "items" : {
                "type" : "string"
              }
            }
          },
          "updateCustomAttributes" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "array",
              "items" : {
                "type" : "string"
              }
            }
          },
          "removeCustomAttributes" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }
      },
      "CustomDataAttributeForAdvocateDTO" : {
        "type" : "object",
        "properties" : {
          "advocateUuid" : {
            "type" : "string"
          },
          "companyAdvocateUuid" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "label" : {
            "type" : "string"
          },
          "type" : {
            "type" : "string"
          },
          "valuesList" : {
            "type" : "string"
          },
          "uuid" : {
            "type" : "string"
          },
          "entity" : {
            "type" : "string"
          },
          "values" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }
      },
      "UserModelDTO" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "email" : {
            "type" : "string"
          },
          "createdAt" : {
            "type" : "string",
            "format" : "date-time"
          },
          "firstName" : {
            "type" : "string"
          },
          "lastName" : {
            "type" : "string"
          },
          "activated" : {
            "type" : "boolean"
          },
          "registrationStatus" : {
            "type" : "string",
            "enum" : [ "ACTIVE", "INACTIVE", "PENDING", "REQUEST", "IMPORTED", "ANONYMOUS" ]
          },
          "profileImageUrl" : {
            "type" : "string"
          },
          "customAttributes" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomDataAttributeForAdvocateDTO"
            }
          }
        },
        "required" : [ "createdAt", "email", "firstName", "id", "registrationStatus" ]
      },
      "AdvocatePointsGrantApiDTO" : {
        "type" : "object",
        "properties" : {
          "email" : {
            "type" : "string",
            "format" : "email",
            "minLength" : 1
          },
          "points" : {
            "type" : "integer",
            "format" : "int32"
          },
          "credit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "reason" : {
            "type" : "string",
            "minLength" : 1
          }
        },
        "required" : [ "email", "points", "reason" ]
      },
      "UpdateCustomObjectMapping" : {
        "type" : "object",
        "description" : "Mutable fields shared across custom object mapping payloads.",
        "properties" : {
          "label" : {
            "type" : "string",
            "description" : "Human-readable label for the custom object",
            "example" : "Primary Contact",
            "maxLength" : 128,
            "minLength" : 1
          },
          "description" : {
            "type" : "string",
            "description" : "Optional description (max 100 characters)",
            "example" : "Primary point of contact at the account",
            "maxLength" : 100,
            "minLength" : 0
          }
        },
        "required" : [ "label" ]
      },
      "CustomObjectMapping" : {
        "type" : "object",
        "description" : "A custom object mapping returned by the API, including its UUID.",
        "properties" : {
          "label" : {
            "type" : "string",
            "description" : "Human-readable label for the custom object",
            "example" : "Primary Contact",
            "maxLength" : 128,
            "minLength" : 1
          },
          "description" : {
            "type" : "string",
            "description" : "Optional description (max 100 characters)",
            "example" : "Primary point of contact at the account",
            "maxLength" : 100,
            "minLength" : 0
          },
          "apiName" : {
            "type" : "string",
            "description" : "Internal API name. 1 to 64 characters, lowercase letters/digits/underscores only.",
            "example" : "primary_contact",
            "maxLength" : 64,
            "minLength" : 1,
            "pattern" : "^(?!.*\\s)[a-z0-9_]+$"
          },
          "entity" : {
            "type" : "string",
            "description" : "Entity that owns this custom object",
            "enum" : [ "contact", "account", "opportunity", "nomination" ]
          },
          "uuid" : {
            "type" : "string",
            "description" : "Unique identifier of the mapping",
            "example" : "550e8400-e29b-41d4-a716-446655440000"
          }
        },
        "required" : [ "apiName", "entity", "label" ]
      },
      "PatchCustomAttribute" : {
        "type" : "object",
        "description" : "Partial update payload for a custom attribute. Only present fields are changed.",
        "properties" : {
          "label" : {
            "type" : "string",
            "description" : "New human-readable label",
            "example" : "Favorite color"
          },
          "description" : {
            "type" : "string",
            "description" : "New description",
            "example" : "Updated description"
          },
          "values" : {
            "type" : "array",
            "description" : "New list of allowed values for picklist-style attributes",
            "example" : [ "red", "green", "blue", "yellow" ],
            "items" : {
              "type" : "string"
            },
            "uniqueItems" : true
          },
          "editableByAdvocate" : {
            "type" : "boolean",
            "description" : "Whether the advocate can edit this attribute themselves"
          },
          "mandatory" : {
            "type" : "boolean",
            "description" : "Whether a value for this attribute is required"
          },
          "onActivation" : {
            "type" : "boolean",
            "description" : "Show in activation flow"
          },
          "showInSourcing" : {
            "type" : "boolean",
            "description" : "Show in sourcing flows"
          },
          "showInReport" : {
            "type" : "boolean",
            "description" : "Show in admin reports"
          },
          "multipleValues" : {
            "type" : "boolean",
            "description" : "Whether the attribute can hold multiple values"
          },
          "showInJoinReferencePoolChallenge" : {
            "type" : "boolean",
            "description" : "Show in the Join Reference Pool ASK form"
          },
          "showInReferenceRequestDialog" : {
            "type" : "boolean",
            "description" : "Show in the reference request dialog"
          },
          "showInMarketingRequestDialog" : {
            "type" : "boolean",
            "description" : "Show in the marketing request dialog"
          },
          "requiredInNominationDialog" : {
            "type" : "boolean",
            "description" : "Required when nominating an advocate"
          }
        }
      },
      "CustomAttribute" : {
        "type" : "object",
        "description" : "A custom data attribute defined on a platform entity.",
        "properties" : {
          "id" : {
            "type" : "string",
            "description" : "Unique identifier of the attribute",
            "example" : "550e8400-e29b-41d4-a716-446655440000"
          },
          "name" : {
            "type" : "string",
            "description" : "Internal name used in the API (lowercase letters, digits, underscores)",
            "example" : "favorite_color"
          },
          "description" : {
            "type" : "string",
            "description" : "Optional description shown to admins/customers",
            "example" : "Advocate's favorite color"
          },
          "label" : {
            "type" : "string",
            "description" : "Human-readable label shown in UI",
            "example" : "Favorite color"
          },
          "type" : {
            "type" : "string",
            "description" : "Attribute type",
            "enum" : [ "String", "Integer", "Float", "Boolean", "Date", "Enumerated" ]
          },
          "values" : {
            "type" : "array",
            "description" : "Allowed values for picklist-style attribute types",
            "example" : [ "red", "green", "blue" ],
            "items" : {
              "type" : "string"
            }
          },
          "editableByAdvocate" : {
            "type" : "boolean",
            "description" : "Whether the advocate can edit this attribute themselves",
            "example" : false
          },
          "multipleValues" : {
            "type" : "boolean",
            "description" : "Whether the attribute can hold multiple values",
            "example" : false
          },
          "createdAt" : {
            "type" : "string",
            "format" : "date-time",
            "description" : "When the attribute was created",
            "example" : "2026-01-15T08:30:00Z"
          },
          "updatedAt" : {
            "type" : "string",
            "format" : "date-time",
            "description" : "When the attribute was last updated",
            "example" : "2026-03-22T11:42:10Z"
          }
        }
      },
      "UpdateContentTag" : {
        "type" : "object",
        "description" : "Payload for updating an existing content tag. Only present fields are changed.",
        "properties" : {
          "description" : {
            "type" : "string",
            "description" : "Optional new description of the tag",
            "example" : "Updated description"
          },
          "tagCategoryUuid" : {
            "type" : "string",
            "description" : "Optional new parent content category UUID",
            "example" : "660e8400-e29b-41d4-a716-446655440111"
          }
        }
      },
      "ContentTag" : {
        "type" : "object",
        "description" : "A content tag returned by the API.",
        "properties" : {
          "uuid" : {
            "type" : "string",
            "description" : "Unique identifier of the tag",
            "example" : "550e8400-e29b-41d4-a716-446655440000"
          },
          "name" : {
            "type" : "string",
            "description" : "Tag display name",
            "example" : "Product Launch"
          },
          "description" : {
            "type" : "string",
            "description" : "Optional human-readable description of the tag",
            "example" : "Used to mark content related to product launch campaigns"
          },
          "entitiesCount" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Number of entities (content items) currently using this tag",
            "example" : 42
          },
          "tagCategoryUuid" : {
            "type" : "string",
            "description" : "UUID of the parent content category, if the tag belongs to one",
            "example" : "660e8400-e29b-41d4-a716-446655440111"
          }
        }
      },
      "BulkOperationError" : {
        "type" : "object",
        "description" : "Per-item failure detail for a bulk operation.",
        "properties" : {
          "identifier" : {
            "type" : "string",
            "description" : "Identifier of the failing input item (for example its UUID or array index)",
            "example" : "550e8400-e29b-41d4-a716-446655440000"
          },
          "errorCode" : {
            "type" : "string",
            "description" : "Machine-readable error code",
            "example" : "DUPLICATE_NAME"
          },
          "errorMessage" : {
            "type" : "string",
            "description" : "Human-readable error message",
            "example" : "A content tag with this name already exists"
          }
        }
      },
      "BulkOperationResult" : {
        "type" : "object",
        "description" : "Result of a bulk operation. Each input item is processed independently; the response reports successful and failed items separately along with totals.",
        "properties" : {
          "successful" : {
            "type" : "array",
            "description" : "Items that were processed successfully",
            "items" : {
              "$ref" : "#/components/schemas/CreatedResourceDTO"
            }
          },
          "failed" : {
            "type" : "array",
            "description" : "Items that failed, with per-item error context",
            "items" : {
              "$ref" : "#/components/schemas/BulkOperationError"
            }
          },
          "totalProcessed" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Total number of items submitted in the request",
            "example" : 10
          },
          "successCount" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Number of items that succeeded",
            "example" : 8
          },
          "failureCount" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Number of items that failed",
            "example" : 2
          }
        }
      },
      "CreatedResourceDTO" : {
        "type" : "object",
        "properties" : {
          "uuid" : {
            "type" : "string"
          }
        }
      },
      "UpdateContentTagCategory" : {
        "type" : "object",
        "description" : "Payload for updating an existing content category. Only present fields are changed.",
        "properties" : {
          "uuid" : {
            "type" : "string",
            "description" : "UUID of the category to update",
            "example" : "660e8400-e29b-41d4-a716-446655440111"
          },
          "name" : {
            "type" : "string",
            "description" : "Optional new category name (1 to 255 characters)",
            "example" : "Updated Technology",
            "maxLength" : 255,
            "minLength" : 1
          },
          "description" : {
            "type" : "string",
            "description" : "Optional new description",
            "example" : "Updated description for technology"
          },
          "tagUuids" : {
            "type" : "array",
            "description" : "Optional new list of tag UUIDs to include in this category",
            "example" : [ "tag-uuid-1", "tag-uuid-4" ],
            "items" : {
              "type" : "string",
              "minLength" : 1
            }
          }
        }
      },
      "ContentTagCategory" : {
        "type" : "object",
        "description" : "A content tag category returned by the API.",
        "properties" : {
          "uuid" : {
            "type" : "string",
            "description" : "Unique identifier of the category",
            "example" : "660e8400-e29b-41d4-a716-446655440111"
          },
          "name" : {
            "type" : "string",
            "description" : "Category display name",
            "example" : "Technology"
          },
          "description" : {
            "type" : "string",
            "description" : "Optional human-readable description of the category",
            "example" : "All technology-related content"
          },
          "tagsCount" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Number of tags currently belonging to this category",
            "example" : 12
          }
        }
      },
      "AdvocateAttributesAndRecordsDTO" : {
        "type" : "object",
        "properties" : {
          "advocateUuid" : {
            "type" : "string"
          },
          "advocateEmail" : {
            "type" : "string"
          },
          "attributes" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/EntityAttributeDTO"
            }
          },
          "objects" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/EntityCustomObjectRecordDTO"
            }
          }
        }
      },
      "BatchUpdateCustomObjectRecordsDTO" : {
        "type" : "object",
        "properties" : {
          "users" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AdvocateAttributesAndRecordsDTO"
            },
            "minItems" : 1
          }
        },
        "required" : [ "users" ]
      },
      "EntityAttributeDTO" : {
        "type" : "object",
        "properties" : {
          "attributeName" : {
            "type" : "string",
            "minLength" : 1
          },
          "values" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        },
        "required" : [ "attributeName", "values" ]
      },
      "EntityCustomObjectRecordDTO" : {
        "type" : "object",
        "properties" : {
          "objectName" : {
            "type" : "string",
            "minLength" : 1
          },
          "recordId" : {
            "type" : "string",
            "minLength" : 1
          },
          "attributes" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/EntityAttributeDTO"
            }
          }
        },
        "required" : [ "attributes", "objectName", "recordId" ]
      },
      "AttributeFailedDTO" : {
        "type" : "object",
        "properties" : {
          "attributeName" : {
            "type" : "string"
          },
          "message" : {
            "type" : "string"
          }
        }
      },
      "BatchAttributesAndRecordsReturnDTO" : {
        "type" : "object",
        "properties" : {
          "advocateUuid" : {
            "type" : "string"
          },
          "advocateEmail" : {
            "type" : "string"
          },
          "success" : {
            "$ref" : "#/components/schemas/BatchSuccessDTO"
          },
          "failed" : {
            "$ref" : "#/components/schemas/BatchFailedDTO"
          }
        }
      },
      "BatchCustomObjectRecordSuccessDTO" : {
        "type" : "object",
        "properties" : {
          "objectName" : {
            "type" : "string"
          },
          "recordIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }
      },
      "BatchCustomObjectRecordsReturnDTO" : {
        "type" : "object",
        "properties" : {
          "users" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/BatchAttributesAndRecordsReturnDTO"
            }
          }
        }
      },
      "BatchFailedDTO" : {
        "type" : "object",
        "properties" : {
          "message" : {
            "type" : "string"
          },
          "attributes" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AttributeFailedDTO"
            }
          },
          "objects" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomObjectRecordFailedDTO"
            }
          }
        }
      },
      "BatchSuccessDTO" : {
        "type" : "object",
        "properties" : {
          "attributes" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "objects" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/BatchCustomObjectRecordSuccessDTO"
            }
          }
        }
      },
      "CustomObjectRecordFailedDTO" : {
        "type" : "object",
        "properties" : {
          "objectName" : {
            "type" : "string"
          },
          "recordId" : {
            "type" : "string"
          },
          "message" : {
            "type" : "string"
          },
          "errors" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AttributeFailedDTO"
            }
          }
        }
      },
      "AdvocateAttributesUpdateDTO" : {
        "type" : "object",
        "properties" : {
          "attributes" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AttributeUpdateDTO"
            }
          },
          "email" : {
            "type" : "string",
            "format" : "email",
            "minLength" : 1
          }
        },
        "required" : [ "email" ]
      },
      "AttributeUpdateDTO" : {
        "type" : "object",
        "properties" : {
          "attributeUuid" : {
            "type" : "string"
          },
          "values" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "attributeName" : {
            "type" : "string"
          }
        }
      },
      "AttributeUpdateResultDTO" : {
        "type" : "object",
        "properties" : {
          "attributeName" : {
            "type" : "string"
          },
          "values" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "status" : {
            "type" : "string",
            "enum" : [ "CREATED", "UPDATED", "DELETED", "NOT_FOUND" ]
          }
        }
      },
      "AccountAttributesAndRecordsDTO" : {
        "type" : "object",
        "properties" : {
          "accountUuid" : {
            "type" : "string"
          },
          "accountName" : {
            "type" : "string"
          },
          "attributes" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/EntityAttributeDTO"
            }
          },
          "objects" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/EntityCustomObjectRecordDTO"
            }
          }
        }
      },
      "BatchAccountUpdateCustomObjectRecordsDTO" : {
        "type" : "object",
        "properties" : {
          "accounts" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AccountAttributesAndRecordsDTO"
            },
            "minItems" : 1
          }
        },
        "required" : [ "accounts" ]
      },
      "BatchAccountAttributesAndRecordsReturnDTO" : {
        "type" : "object",
        "properties" : {
          "accountUuid" : {
            "type" : "string"
          },
          "accountName" : {
            "type" : "string"
          },
          "success" : {
            "$ref" : "#/components/schemas/BatchSuccessDTO"
          },
          "failed" : {
            "$ref" : "#/components/schemas/BatchFailedDTO"
          }
        }
      },
      "BatchAccountCustomObjectRecordsReturnDTO" : {
        "type" : "object",
        "properties" : {
          "accounts" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/BatchAccountAttributesAndRecordsReturnDTO"
            }
          }
        }
      },
      "InvitedAdvocateDTO" : {
        "type" : "object",
        "properties" : {
          "accountName" : {
            "type" : "string"
          },
          "firstName" : {
            "type" : "string",
            "minLength" : 1
          },
          "lastName" : {
            "type" : "string"
          },
          "captcha" : {
            "type" : "string"
          },
          "email" : {
            "type" : "string",
            "format" : "email",
            "minLength" : 1
          },
          "login" : {
            "type" : "string"
          },
          "customEmailMessage" : {
            "type" : "string"
          },
          "fromRegisterLead" : {
            "type" : "boolean"
          },
          "register" : {
            "type" : "boolean"
          },
          "muteRegisterEmail" : {
            "type" : "boolean"
          },
          "bonusPoints" : {
            "type" : "integer",
            "format" : "int32"
          },
          "authId" : {
            "type" : "string"
          },
          "companyUuid" : {
            "type" : "string"
          },
          "targetCrowdId" : {
            "type" : "string"
          },
          "traceUuid" : {
            "type" : "string"
          },
          "utmId" : {
            "type" : "string"
          },
          "utmSource" : {
            "type" : "string"
          },
          "anonymousAdvocateUuid" : {
            "type" : "string"
          },
          "advocateTimezoneOffset" : {
            "type" : "integer",
            "format" : "int32"
          },
          "joinMethod" : {
            "type" : "string",
            "enum" : [ "INVITE", "REQUEST", "AUTO_SIGNUP", "REFERRAL", "IMPORT", "SSO", "NOMINATE", "API", "INTEGRATION", "DATA_SYNC" ]
          },
          "nominationDetails" : {
            "$ref" : "#/components/schemas/NominationDetails"
          }
        },
        "required" : [ "email", "firstName" ]
      },
      "NominationDetails" : {
        "type" : "object",
        "properties" : {
          "nominationRequestMode" : {
            "type" : "string",
            "enum" : [ "MANAGED", "STANDALONE_REQUEST", "ADVOCACY_PORTAL", "TRUE", "FALSE" ]
          },
          "requestByName" : {
            "type" : "string"
          }
        }
      },
      "TriggerActivityDTO" : {
        "type" : "object",
        "properties" : {
          "email" : {
            "type" : "string",
            "format" : "email",
            "minLength" : 1
          },
          "apiIdentifier" : {
            "type" : "string",
            "pattern" : "^[a-z0-9_]{1,50}$"
          }
        },
        "required" : [ "email" ]
      },
      "RegistrationConfirmationDTO" : {
        "type" : "object",
        "properties" : {
          "utmCampaign" : {
            "type" : "string"
          },
          "step" : {
            "type" : "integer",
            "format" : "int32",
            "maximum" : 3,
            "minimum" : 2
          },
          "advocateUuid" : {
            "type" : "string"
          },
          "utmSource" : {
            "type" : "string"
          },
          "tags" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "firstName" : {
            "type" : "string"
          },
          "lastName" : {
            "type" : "string"
          },
          "company" : {
            "type" : "string"
          },
          "jobTitle" : {
            "type" : "string"
          },
          "email" : {
            "type" : "string"
          }
        },
        "required" : [ "step", "utmCampaign" ]
      },
      "BaseActorDTO" : {
        "type" : "object",
        "properties" : {
          "uuid" : {
            "type" : "string",
            "minLength" : 1
          }
        },
        "required" : [ "uuid" ]
      },
      "CreateReferenceRequest" : {
        "type" : "object",
        "description" : "Payload for submitting a new reference request. Entries must all be source-contact or all be P2P (advocate-driven); they cannot be mixed.",
        "properties" : {
          "deadline" : {
            "type" : "string",
            "format" : "date-time",
            "description" : "Deadline by which the reference should be completed",
            "example" : "2026-06-01T00:00:00Z"
          },
          "subject" : {
            "type" : "string",
            "description" : "Short subject line describing the reference request",
            "example" : "Reference for Acme renewal"
          },
          "referenceTypeUuid" : {
            "type" : "string",
            "description" : "UUID of the reference type (e.g. case study, peer call) from the form configuration"
          },
          "notes" : {
            "type" : "string",
            "description" : "Internal-only notes shown to the reference manager / sales team"
          },
          "notesForReference" : {
            "type" : "string",
            "description" : "Notes shown to the reference advocate when invited"
          },
          "opportunity" : {
            "$ref" : "#/components/schemas/OpportunityDTO",
            "description" : "Opportunity the reference is requested for"
          },
          "opportunityContact" : {
            "$ref" : "#/components/schemas/ExternalActorDTO",
            "description" : "Contact person on the opportunity (typically the buyer)"
          },
          "requester" : {
            "$ref" : "#/components/schemas/ExternalActorDTO",
            "description" : "Person who requested the reference (salesperson in CRM)"
          },
          "referenceManager" : {
            "$ref" : "#/components/schemas/BaseActorDTO",
            "description" : "Reference manager assigned to coordinate the request"
          },
          "entries" : {
            "type" : "array",
            "description" : "1–10 reference entries; all must be source-contact OR all P2P (cannot be mixed)",
            "items" : {
              "$ref" : "#/components/schemas/RequestEntryDTO"
            },
            "maxItems" : 10,
            "minItems" : 1
          },
          "matchCriteria" : {
            "type" : "array",
            "description" : "Optional custom-attribute filters captured at request time (used by the custom-element reference form)",
            "items" : {
              "$ref" : "#/components/schemas/ReportCustomAttributesFiltersDTO"
            }
          }
        },
        "required" : [ "deadline", "entries", "opportunity", "opportunityContact", "referenceManager", "referenceTypeUuid", "requester", "subject" ]
      },
      "ExternalActorDTO" : {
        "type" : "object",
        "properties" : {
          "externalId" : {
            "type" : "string",
            "minLength" : 1
          },
          "firstName" : {
            "type" : "string",
            "minLength" : 1
          },
          "lastName" : {
            "type" : "string"
          },
          "email" : {
            "type" : "string",
            "format" : "email",
            "minLength" : 1
          },
          "name" : {
            "type" : "string"
          }
        },
        "required" : [ "email", "externalId", "firstName" ]
      },
      "OpportunityDTO" : {
        "type" : "object",
        "properties" : {
          "opportunityId" : {
            "type" : "string",
            "minLength" : 1
          },
          "opportunityName" : {
            "type" : "string",
            "minLength" : 1
          },
          "opportunityStage" : {
            "type" : "string"
          },
          "opportunityAmount" : {
            "type" : "number",
            "format" : "double"
          },
          "opportunityProbability" : {
            "type" : "integer",
            "format" : "int32"
          },
          "opportunityIsWon" : {
            "type" : "boolean"
          },
          "opportunityCloseDate" : {
            "type" : "string",
            "format" : "date"
          },
          "opportunityAccountId" : {
            "type" : "string"
          },
          "opportunityAccountName" : {
            "type" : "string"
          }
        },
        "required" : [ "opportunityId", "opportunityName" ]
      },
      "ReportCustomAttributesFiltersDTO" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string",
            "minLength" : 1
          },
          "name" : {
            "type" : "string"
          },
          "entity" : {
            "type" : "string"
          },
          "minValue" : { },
          "maxValue" : { },
          "values" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "addedBySystem" : {
            "type" : "boolean"
          },
          "weight" : {
            "type" : "integer",
            "format" : "int32"
          },
          "filterValuesPresent" : {
            "type" : "boolean"
          }
        },
        "required" : [ "id" ]
      },
      "RequestEntryDTO" : {
        "type" : "object",
        "properties" : {
          "externalId" : {
            "type" : "string",
            "minLength" : 1
          },
          "crmRequestNumber" : {
            "type" : "string"
          },
          "advocate" : {
            "$ref" : "#/components/schemas/BaseActorDTO"
          }
        },
        "required" : [ "externalId" ]
      },
      "CRMAccountDTO" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "domain" : {
            "type" : "string"
          },
          "type" : {
            "type" : "string"
          },
          "industry" : {
            "type" : "string"
          },
          "location" : {
            "type" : "string"
          },
          "numberOfEmployees" : {
            "type" : "integer",
            "format" : "int32"
          },
          "customDataAttributes" : {
            "type" : "object",
            "additionalProperties" : { }
          }
        }
      },
      "CRMOpportunityDTO" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string",
            "minLength" : 1
          },
          "name" : {
            "type" : "string",
            "minLength" : 1
          },
          "accountId" : {
            "type" : "string",
            "minLength" : 1
          },
          "amount" : {
            "type" : "number",
            "format" : "double"
          },
          "stage" : {
            "type" : "string"
          },
          "probability" : {
            "type" : "number",
            "format" : "double"
          },
          "isWon" : {
            "type" : "boolean"
          },
          "closeDate" : {
            "type" : "string"
          },
          "customDataAttributes" : {
            "type" : "object",
            "additionalProperties" : { }
          }
        },
        "required" : [ "accountId", "id", "name" ]
      },
      "ReadReferenceRequestForm" : {
        "type" : "object",
        "description" : "Request payload for reading the reference request form configuration.",
        "properties" : {
          "context" : {
            "$ref" : "#/components/schemas/ReferenceRequestContext",
            "description" : "Context in which the form is being requested (controls which fields/options are returned)"
          }
        }
      },
      "ReferenceRequestContext" : {
        "type" : "object",
        "properties" : {
          "account" : {
            "$ref" : "#/components/schemas/CRMAccountDTO"
          },
          "opportunity" : {
            "$ref" : "#/components/schemas/CRMOpportunityDTO"
          },
          "referenceTypeUuid" : {
            "type" : "string"
          }
        }
      },
      "ContactDTO" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "firstName" : {
            "type" : "string"
          },
          "lastName" : {
            "type" : "string"
          },
          "accountId" : {
            "type" : "string"
          },
          "accountName" : {
            "type" : "string"
          },
          "email" : {
            "type" : "string"
          },
          "jobTitle" : {
            "type" : "string"
          },
          "phone" : {
            "type" : "string"
          },
          "ownerId" : {
            "type" : "string"
          },
          "customDataAttributes" : {
            "type" : "object",
            "additionalProperties" : { }
          }
        }
      },
      "CustomDataAttributeDTO" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "crmFieldName" : {
            "type" : "string"
          },
          "label" : {
            "type" : "string"
          },
          "type" : {
            "type" : "string",
            "description" : "Data type of a custom attribute. Determines what values are accepted on writes and what\nshape comes back on reads.\n\n* `String` — free-text value, no constraint beyond max length\n* `Integer` — whole number\n* `Float` — decimal number\n* `Boolean` — true / false toggle\n* `Date` — ISO-8601 date (no time component)\n* `Enumerated` — picklist value; the allowed values are declared on the attribute itself\n",
            "enum" : [ "String", "Integer", "Float", "Boolean", "Date", "Enumerated" ]
          },
          "entity" : {
            "type" : "string"
          },
          "values" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomDataAttributeEnumValueDTO"
            }
          },
          "editableByAdvocate" : {
            "type" : "boolean"
          },
          "mandatory" : {
            "type" : "boolean"
          },
          "onActivation" : {
            "type" : "boolean"
          },
          "showInSourcing" : {
            "type" : "boolean"
          },
          "showInReport" : {
            "type" : "boolean"
          },
          "multipleValues" : {
            "type" : "boolean"
          },
          "showInJoinReferencePoolChallenge" : {
            "type" : "boolean"
          },
          "showInReferenceRequestDialog" : {
            "type" : "boolean"
          },
          "requiredInReferenceRequestDialog" : {
            "type" : "boolean"
          },
          "referenceRequestSystemMapping" : {
            "type" : "boolean"
          },
          "referenceRequestFormOrder" : {
            "type" : "integer",
            "format" : "int32"
          },
          "referenceRequestDialogLabel" : {
            "type" : "string"
          },
          "showInMarketingRequestDialog" : {
            "type" : "boolean"
          },
          "requiredInMarketingRequestDialog" : {
            "type" : "boolean"
          },
          "marketingRequestFormOrder" : {
            "type" : "integer",
            "format" : "int32"
          },
          "marketingRequestDialogLabel" : {
            "type" : "string"
          },
          "showInNominationDialog" : {
            "type" : "boolean"
          },
          "requiredInNominationDialog" : {
            "type" : "boolean"
          },
          "nominationDialogLabel" : {
            "type" : "string"
          },
          "displayOrder" : {
            "type" : "integer",
            "format" : "int32"
          },
          "crmReferenceRequestField" : {
            "type" : "string"
          },
          "crmReferenceRequestFieldFrom" : {
            "type" : "string"
          },
          "crmReferenceRequestFieldTo" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "crmCustomObjectName" : {
            "type" : "string"
          },
          "syncDirection" : {
            "type" : "string",
            "enum" : [ "FROM_CRM", "TO_CRM" ]
          },
          "entityRelation" : {
            "type" : "string"
          },
          "referenceRequestDialogWeight" : {
            "type" : "integer",
            "format" : "int32"
          },
          "marketingRequestDialogWeight" : {
            "type" : "integer",
            "format" : "int32"
          },
          "createdAt" : {
            "type" : "string",
            "format" : "date-time"
          },
          "updatedAt" : {
            "type" : "string",
            "format" : "date-time"
          }
        },
        "required" : [ "entity", "label", "name", "type" ]
      },
      "CustomDataAttributeEnumValueDTO" : {
        "type" : "object",
        "properties" : {
          "uuid" : {
            "type" : "string"
          },
          "value" : {
            "type" : "string",
            "minLength" : 1
          },
          "order" : {
            "type" : "integer",
            "format" : "int32"
          }
        },
        "required" : [ "value" ]
      },
      "DisplayAttributeDTO" : {
        "type" : "object",
        "properties" : {
          "key" : {
            "type" : "string"
          },
          "label" : {
            "type" : "string"
          },
          "entity" : {
            "type" : "string"
          }
        }
      },
      "ReferenceManagerDTO" : {
        "type" : "object",
        "properties" : {
          "uuid" : {
            "type" : "string"
          },
          "email" : {
            "type" : "string"
          },
          "firstName" : {
            "type" : "string"
          },
          "lastName" : {
            "type" : "string"
          }
        }
      },
      "ReferenceRequestForm" : {
        "type" : "object",
        "description" : "Reference request form configuration: enabled fields, labels, allowed contacts, reference types and custom attributes.",
        "properties" : {
          "companyUuid" : {
            "type" : "string",
            "description" : "UUID of the company that owns this form configuration"
          },
          "internalDescription" : {
            "type" : "string",
            "description" : "Optional internal-only description shown to admins, not to advocates"
          },
          "showNotes" : {
            "type" : "boolean",
            "description" : "Whether the notes field is shown on the form",
            "example" : true
          },
          "subject" : {
            "type" : "string",
            "description" : "Default value for the reference request subject",
            "example" : "Reference for renewal"
          },
          "subjectEditEnabled" : {
            "type" : "boolean",
            "description" : "Whether the user can edit the default subject",
            "example" : true
          },
          "p2pEnabled" : {
            "type" : "boolean",
            "description" : "Whether peer-to-peer (advocate-as-reference) requests are enabled",
            "example" : true
          },
          "p2pAdvocatesLimit" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Maximum number of advocates per P2P request (null = no cap)",
            "example" : 10
          },
          "requiredReferenceManagerP2P" : {
            "type" : "boolean",
            "description" : "Whether a reference manager must be assigned on P2P requests",
            "example" : true
          },
          "multipleContactsEnabled" : {
            "type" : "boolean",
            "description" : "Whether more than one opportunity contact may be selected",
            "example" : false
          },
          "showNames" : {
            "type" : "boolean",
            "description" : "Whether contact/advocate names are shown to the requester",
            "example" : true
          },
          "editableWeights" : {
            "type" : "boolean",
            "description" : "Whether the requester can edit per-criteria weighting",
            "example" : false
          },
          "maxContacts" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Maximum number of opportunity contacts selectable",
            "example" : 2
          },
          "multipleContactsTitle" : {
            "type" : "string",
            "description" : "Custom title for the multiple-contacts section, when enabled"
          },
          "notesTitle" : {
            "type" : "string",
            "description" : "Custom title for the notes field shown to the requester"
          },
          "notesDescription" : {
            "type" : "string",
            "description" : "Helper text under the notes field shown to the requester"
          },
          "showNotesForReference" : {
            "type" : "boolean",
            "description" : "Whether a separate notes field for the reference (advocate) is shown",
            "example" : false
          },
          "notesForReferenceTitle" : {
            "type" : "string",
            "description" : "Custom title for the notes-for-reference field"
          },
          "notesForReferenceDescription" : {
            "type" : "string",
            "description" : "Helper text under the notes-for-reference field"
          },
          "contacts" : {
            "type" : "array",
            "description" : "Opportunity contacts the requester may pick from",
            "items" : {
              "$ref" : "#/components/schemas/ContactDTO"
            }
          },
          "referenceManagers" : {
            "type" : "array",
            "description" : "Reference managers eligible to be assigned to the request",
            "items" : {
              "$ref" : "#/components/schemas/ReferenceManagerDTO"
            }
          },
          "customDataAttributes" : {
            "type" : "array",
            "description" : "Custom data attributes to display on the form (for advocate matching)",
            "items" : {
              "$ref" : "#/components/schemas/CustomDataAttributeDTO"
            }
          },
          "displayAttributes" : {
            "type" : "array",
            "description" : "Read-only display attributes shown alongside each candidate advocate",
            "items" : {
              "$ref" : "#/components/schemas/DisplayAttributeDTO"
            }
          },
          "referenceTypes" : {
            "type" : "array",
            "description" : "Reference types (the kinds of reference the customer offers)",
            "items" : {
              "$ref" : "#/components/schemas/ReferenceTypeDTO"
            }
          }
        }
      },
      "ReferenceTypeDTO" : {
        "type" : "object",
        "properties" : {
          "uuid" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "points" : {
            "type" : "integer",
            "format" : "int32"
          },
          "status" : {
            "type" : "string"
          },
          "createdAt" : {
            "type" : "string",
            "format" : "date-time"
          },
          "createdBy" : {
            "type" : "string"
          },
          "numberOfRecords" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "ReferenceAdvocateReportFiltersWeightedDTO" : {
        "type" : "object",
        "properties" : {
          "seniorityLevels" : {
            "$ref" : "#/components/schemas/WeightedFilterParameterDTOListLong"
          },
          "geographicalLocations" : {
            "$ref" : "#/components/schemas/WeightedFilterParameterDTOListLong"
          },
          "industryTypes" : {
            "$ref" : "#/components/schemas/WeightedFilterParameterDTOListLong"
          },
          "jobTitles" : {
            "$ref" : "#/components/schemas/WeightedFilterParameterDTOListString"
          },
          "accountSizeFrom" : {
            "$ref" : "#/components/schemas/WeightedFilterParameterDTOLong"
          },
          "accountSizeTo" : {
            "$ref" : "#/components/schemas/WeightedFilterParameterDTOLong"
          },
          "productsAndServices" : {
            "$ref" : "#/components/schemas/WeightedFilterParameterDTOListString"
          },
          "useCases" : {
            "$ref" : "#/components/schemas/WeightedFilterParameterDTOListString"
          },
          "includeGroupedAttributes" : {
            "type" : "boolean"
          },
          "customAttributes" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ReportCustomAttributesFiltersDTO"
            }
          },
          "customObjectAttributes" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/ReportCustomAttributesFiltersDTO"
              }
            }
          },
          "challengeUuid" : {
            "type" : "string"
          },
          "advocateUuid" : {
            "type" : "string"
          },
          "opportunityId" : {
            "type" : "string"
          },
          "referenceAdvocateScores" : {
            "$ref" : "#/components/schemas/WeightedFilterParameterDTOListString"
          },
          "hasExternalId" : {
            "type" : "boolean"
          },
          "referenceTypeUuid" : {
            "type" : "string"
          },
          "searchCriteria" : {
            "type" : "string"
          },
          "reportSize" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "WeightedFilterParameterDTOListLong" : {
        "type" : "object",
        "properties" : {
          "weight" : {
            "type" : "integer",
            "format" : "int32"
          },
          "value" : {
            "type" : "array",
            "items" : {
              "type" : "integer",
              "format" : "int64"
            }
          }
        }
      },
      "WeightedFilterParameterDTOListString" : {
        "type" : "object",
        "properties" : {
          "weight" : {
            "type" : "integer",
            "format" : "int32"
          },
          "value" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }
      },
      "WeightedFilterParameterDTOLong" : {
        "type" : "object",
        "properties" : {
          "weight" : {
            "type" : "integer",
            "format" : "int32"
          },
          "value" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "Pageable" : {
        "type" : "object",
        "properties" : {
          "page" : {
            "type" : "integer",
            "format" : "int32",
            "minimum" : 0
          },
          "size" : {
            "type" : "integer",
            "format" : "int32",
            "minimum" : 1
          },
          "sort" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }
      },
      "CustomAttributeBaseDTO" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "type" : {
            "type" : "string",
            "description" : "Data type of a custom attribute. Determines what values are accepted on writes and what\nshape comes back on reads.\n\n* `String` — free-text value, no constraint beyond max length\n* `Integer` — whole number\n* `Float` — decimal number\n* `Boolean` — true / false toggle\n* `Date` — ISO-8601 date (no time component)\n* `Enumerated` — picklist value; the allowed values are declared on the attribute itself\n",
            "enum" : [ "String", "Integer", "Float", "Boolean", "Date", "Enumerated" ]
          },
          "label" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "displayOrder" : {
            "type" : "integer",
            "format" : "int32"
          },
          "values" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "multipleValues" : {
            "type" : "boolean"
          }
        }
      },
      "CustomAttributeValueDTO" : {
        "type" : "object",
        "properties" : {
          "entityId" : {
            "type" : "integer",
            "format" : "int64"
          },
          "attributeUuid" : {
            "type" : "string"
          },
          "value" : {
            "type" : "string"
          },
          "type" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "label" : {
            "type" : "string"
          },
          "entity" : {
            "type" : "string"
          }
        }
      },
      "CustomObjectDataAttributeValueDTO" : {
        "type" : "object",
        "properties" : {
          "values" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "attribute" : {
            "$ref" : "#/components/schemas/CustomAttributeBaseDTO"
          }
        }
      },
      "CustomObjectValueDTO" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "label" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "entityRelation" : {
            "type" : "string"
          },
          "entityRelationField" : {
            "type" : "string"
          },
          "displayOrder" : {
            "type" : "integer",
            "format" : "int32"
          },
          "createdAt" : {
            "type" : "string",
            "format" : "date-time"
          },
          "values" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomObjectValueInstanceDTO"
            }
          }
        }
      },
      "CustomObjectValueInstanceDTO" : {
        "type" : "object",
        "properties" : {
          "objectInstanceId" : {
            "type" : "string"
          },
          "attributeValues" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomObjectDataAttributeValueDTO"
            }
          }
        }
      },
      "PageReferenceAdvocateViewDTO" : {
        "type" : "object",
        "properties" : {
          "totalElements" : {
            "type" : "integer",
            "format" : "int64"
          },
          "totalPages" : {
            "type" : "integer",
            "format" : "int32"
          },
          "size" : {
            "type" : "integer",
            "format" : "int32"
          },
          "content" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ReferenceAdvocateViewDTO"
            }
          },
          "number" : {
            "type" : "integer",
            "format" : "int32"
          },
          "first" : {
            "type" : "boolean"
          },
          "last" : {
            "type" : "boolean"
          },
          "pageable" : {
            "$ref" : "#/components/schemas/PageableObject"
          },
          "numberOfElements" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sort" : {
            "$ref" : "#/components/schemas/SortObject"
          },
          "empty" : {
            "type" : "boolean"
          }
        }
      },
      "PageableObject" : {
        "type" : "object",
        "properties" : {
          "offset" : {
            "type" : "integer",
            "format" : "int64"
          },
          "paged" : {
            "type" : "boolean"
          },
          "pageNumber" : {
            "type" : "integer",
            "format" : "int32"
          },
          "pageSize" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sort" : {
            "$ref" : "#/components/schemas/SortObject"
          },
          "unpaged" : {
            "type" : "boolean"
          }
        }
      },
      "ReferenceAdvocateViewDTO" : {
        "type" : "object",
        "properties" : {
          "advocateUuid" : {
            "type" : "string"
          },
          "companyAdvocateUuid" : {
            "type" : "string"
          },
          "firstName" : {
            "type" : "string"
          },
          "lastName" : {
            "type" : "string"
          },
          "email" : {
            "type" : "string"
          },
          "companyUuid" : {
            "type" : "string"
          },
          "accountName" : {
            "type" : "string"
          },
          "accountId" : {
            "type" : "integer",
            "format" : "int64"
          },
          "index" : {
            "type" : "integer",
            "format" : "int32"
          },
          "accountUuid" : {
            "type" : "string"
          },
          "accountExternalId" : {
            "type" : "string"
          },
          "accountSizeFrom" : {
            "type" : "integer",
            "format" : "int32"
          },
          "accountSizeTo" : {
            "type" : "integer",
            "format" : "int32"
          },
          "jobTitle" : {
            "type" : "string"
          },
          "totalCalls" : {
            "type" : "integer",
            "format" : "int32"
          },
          "match" : {
            "type" : "integer",
            "format" : "int32"
          },
          "joinedDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "imageUrl" : {
            "type" : "string"
          },
          "seniorityLevel" : {
            "type" : "string"
          },
          "geographicalLocations" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "uniqueItems" : true
          },
          "industryTypes" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "uniqueItems" : true
          },
          "referenceScore" : {
            "type" : "string",
            "enum" : [ "BAD", "GOOD", "GREAT" ]
          },
          "referenceStatus" : {
            "type" : "string",
            "enum" : [ "ANYTIME", "ONCE_A_MONTH", "ONCE_A_QUARTER", "ONCE_A_YEAR", "NEVER", "PAUSED", "REMOVED_FROM_POOL" ]
          },
          "referenceAdvocateExternalId" : {
            "type" : "string"
          },
          "opportunityIdToReferenceTypeUuids" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "array",
              "items" : {
                "type" : "string"
              },
              "uniqueItems" : true
            }
          },
          "referenceCreatedAt" : {
            "type" : "string",
            "format" : "date-time"
          },
          "lastRecordCreatedAt" : {
            "type" : "string",
            "format" : "date-time"
          },
          "lastContactDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "availableForCall" : {
            "type" : "boolean"
          },
          "callAcceptanceRate" : {
            "type" : "number",
            "format" : "float"
          },
          "lastCallRequested" : {
            "type" : "string",
            "format" : "date-time"
          },
          "productsAndServices" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "uniqueItems" : true
          },
          "useCases" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "uniqueItems" : true
          },
          "customAttributes" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomAttributeValueDTO"
            }
          },
          "customObjectAttributes" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomObjectValueDTO"
            }
          }
        }
      },
      "SortObject" : {
        "type" : "object",
        "properties" : {
          "empty" : {
            "type" : "boolean"
          },
          "sorted" : {
            "type" : "boolean"
          },
          "unsorted" : {
            "type" : "boolean"
          }
        }
      },
      "OpportunityUpdateRequestBodyDTO" : {
        "type" : "object",
        "properties" : {
          "opportunityId" : {
            "type" : "string",
            "minLength" : 1
          },
          "opportunityName" : {
            "type" : "string"
          },
          "opportunityStage" : {
            "type" : "string"
          },
          "opportunityAmount" : {
            "type" : "number",
            "format" : "float"
          },
          "opportunityProbability" : {
            "type" : "integer",
            "format" : "int32",
            "maximum" : 100,
            "minimum" : 0
          },
          "opportunityIsWon" : {
            "type" : "boolean"
          },
          "opportunityCloseDate" : {
            "type" : "string",
            "format" : "date"
          },
          "customAttributes" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AttributeUpdateDTO"
            }
          }
        },
        "required" : [ "opportunityId" ]
      },
      "OpportunityUpdateRequestDTO" : {
        "type" : "object",
        "properties" : {
          "opportunities" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/OpportunityUpdateRequestBodyDTO"
            }
          }
        }
      },
      "OpportunityUpdateResponseBodyDTO" : {
        "type" : "object",
        "properties" : {
          "created" : {
            "type" : "boolean"
          },
          "success" : {
            "type" : "boolean"
          },
          "extraInfo" : {
            "type" : "string"
          },
          "customAttributes" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AttributeUpdateDTO"
            }
          }
        }
      },
      "OpportunityUpdateResponseDTO" : {
        "type" : "object",
        "properties" : {
          "opportunityUpdateResponse" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/OpportunityUpdateResponseBodyDTO"
            }
          }
        }
      },
      "NominationReportFilter" : {
        "type" : "object",
        "description" : "Filter criteria for retrieving nomination records.",
        "properties" : {
          "dateFrom" : {
            "type" : "string",
            "format" : "date",
            "description" : "Earliest creation date to include (ISO 8601 date)",
            "example" : "2026-01-01"
          },
          "dateTo" : {
            "type" : "string",
            "format" : "date",
            "description" : "Latest creation date to include (ISO 8601 date)",
            "example" : "2026-03-31"
          },
          "statuses" : {
            "type" : "array",
            "description" : "Optional list of nomination statuses to filter by",
            "items" : {
              "type" : "string",
              "description" : "Lifecycle status of a nomination request.\n\n* `INITIAL` — nomination has been registered but no work has started\n* `IN_PROGRESS` — marketing team is processing the nomination\n* `APPROVED` — advocate accepted and the nomination is active\n* `REJECTED` — nomination was declined (by advocate or admin)\n* `COMPLETED` — the underlying activity (case study, review, etc.) has been delivered\n",
              "enum" : [ "INITIAL", "IN_PROGRESS", "REJECTED", "APPROVED", "COMPLETED" ]
            }
          },
          "marketingAdminUuids" : {
            "type" : "array",
            "description" : "Optional list of marketing admin UUIDs to filter by",
            "items" : {
              "type" : "string"
            }
          },
          "nominationUuids" : {
            "type" : "array",
            "description" : "Optional list of specific nomination UUIDs to return",
            "items" : {
              "type" : "string"
            }
          },
          "salespersonNames" : {
            "type" : "array",
            "description" : "Optional list of salesperson names to filter by",
            "items" : {
              "type" : "string"
            }
          },
          "activityTypeNames" : {
            "type" : "array",
            "description" : "Optional list of activity type names to filter by",
            "items" : {
              "type" : "string"
            }
          },
          "searchQuery" : {
            "type" : "string",
            "description" : "Optional free-text search query across nomination fields",
            "example" : "renewal"
          },
          "includeRepeatedNominations" : {
            "type" : "boolean",
            "description" : "Include nominations that have been requested for the same advocate multiple times",
            "example" : false
          }
        },
        "required" : [ "dateFrom", "dateTo" ]
      },
      "NominationRecord" : {
        "type" : "object",
        "description" : "A single nomination record returned by the nomination report.",
        "properties" : {
          "uuid" : {
            "type" : "string",
            "description" : "Unique identifier of the nomination",
            "example" : "550e8400-e29b-41d4-a716-446655440000"
          },
          "subject" : {
            "type" : "string",
            "description" : "Short subject line summarising the nomination",
            "example" : "Q1 case study participant"
          },
          "notes" : {
            "type" : "string",
            "description" : "Free-text notes captured by the requester"
          },
          "status" : {
            "type" : "string",
            "description" : "Current lifecycle status (see NominationRequestStatus)",
            "example" : "IN_PROGRESS"
          },
          "type" : {
            "type" : "string",
            "description" : "Nomination type. Accepted values: `NOMINATE_CONTACT`, `START_CAMPAIGN`.",
            "example" : "NOMINATE_CONTACT"
          },
          "createdAt" : {
            "type" : "string",
            "format" : "date-time",
            "description" : "When the nomination was created",
            "example" : "2026-01-15T08:30:00Z"
          },
          "statusModifiedAt" : {
            "type" : "string",
            "format" : "date-time",
            "description" : "When the status was last changed",
            "example" : "2026-02-03T11:42:10Z"
          },
          "requestComments" : {
            "type" : "array",
            "description" : "Comments left on the nomination by admins or salespeople",
            "items" : {
              "$ref" : "#/components/schemas/NominationRequestCommentDTO"
            }
          },
          "customAttributesFilter" : {
            "type" : "array",
            "description" : "Custom-attribute filter rules captured at nomination time (used by reporting)",
            "items" : {
              "$ref" : "#/components/schemas/ReportCustomAttributesFiltersDTO"
            }
          },
          "customAttributes" : {
            "type" : "array",
            "description" : "Custom attribute values on the nomination itself (only nomination-scope attributes are included)",
            "items" : {
              "$ref" : "#/components/schemas/CustomAttributeValueDTO"
            }
          },
          "activityTypeName" : {
            "type" : "string",
            "description" : "Internal name of the activity type the nomination targets",
            "example" : "case_study_published"
          },
          "activityTypeNameOverride" : {
            "type" : "string",
            "description" : "Optional per-nomination override of the activity type display name"
          },
          "salespersonName" : {
            "type" : "string",
            "description" : "Display name of the salesperson who created the nomination"
          },
          "salespersonEmail" : {
            "type" : "string",
            "description" : "Email of the salesperson who created the nomination"
          },
          "marketingManagerName" : {
            "type" : "string",
            "description" : "Display name of the marketing manager handling the nomination"
          },
          "marketingManagerEmail" : {
            "type" : "string",
            "description" : "Email of the marketing manager handling the nomination"
          },
          "marketingManagerUuid" : {
            "type" : "string",
            "description" : "UUID of the marketing manager handling the nomination"
          },
          "advocateUuid" : {
            "type" : "string",
            "description" : "UUID of the nominated advocate"
          },
          "companyAdvocateUuid" : {
            "type" : "string",
            "description" : "UUID of the company-scoped advocate record (advocate × company)"
          },
          "advocateName" : {
            "type" : "string",
            "description" : "Display name of the nominated advocate"
          },
          "accountName" : {
            "type" : "string",
            "description" : "Name of the account the advocate belongs to"
          },
          "accountUuid" : {
            "type" : "string",
            "description" : "UUID of the account the advocate belongs to"
          },
          "handleMode" : {
            "type" : "string",
            "description" : "How the nomination is processed. Accepted values: `MANAGED`, `STANDALONE_REQUEST`, `ADVOCACY_PORTAL` (plus legacy `TRUE`/`FALSE` for backwards compatibility).",
            "example" : "MANAGED"
          },
          "challengeName" : {
            "type" : "string",
            "description" : "Display name of any ASK (challenge) associated with this nomination"
          },
          "challengeRecordUuid" : {
            "type" : "string",
            "description" : "UUID of the specific ASK record (challenge record / instance)"
          },
          "challengeUuid" : {
            "type" : "string",
            "description" : "UUID of the ASK definition (challenge)"
          },
          "source" : {
            "type" : "string",
            "description" : "Origin of the nomination (UI form, API, scheduled job, etc.)",
            "example" : "API"
          }
        }
      },
      "NominationRequestCommentDTO" : {
        "type" : "object",
        "properties" : {
          "uuid" : {
            "type" : "string"
          },
          "nominationRequestUuid" : {
            "type" : "string"
          },
          "companyAdvocateUuid" : {
            "type" : "string"
          },
          "marketingUserUuid" : {
            "type" : "string"
          },
          "marketingUserFirstName" : {
            "type" : "string"
          },
          "marketingUserLastName" : {
            "type" : "string"
          },
          "marketingUserProfileUrl" : {
            "type" : "string"
          },
          "createdAt" : {
            "type" : "string",
            "format" : "date-time"
          },
          "updatedAt" : {
            "type" : "string",
            "format" : "date-time"
          },
          "comment" : {
            "type" : "string"
          },
          "type" : {
            "type" : "string",
            "enum" : [ "NOMINATION_REJECTED", "NOMINATION_APPROVED", "NOMINATION", "NOMINATE" ]
          },
          "showOnAdvocateView" : {
            "type" : "boolean"
          }
        }
      },
      "CreateCustomObjectMapping" : {
        "type" : "object",
        "description" : "Payload for creating a new custom object mapping on an entity.",
        "properties" : {
          "label" : {
            "type" : "string",
            "description" : "Human-readable label for the custom object",
            "example" : "Primary Contact",
            "maxLength" : 128,
            "minLength" : 1
          },
          "description" : {
            "type" : "string",
            "description" : "Optional description (max 100 characters)",
            "example" : "Primary point of contact at the account",
            "maxLength" : 100,
            "minLength" : 0
          },
          "apiName" : {
            "type" : "string",
            "description" : "Internal API name. 1 to 64 characters, lowercase letters/digits/underscores only.",
            "example" : "primary_contact",
            "maxLength" : 64,
            "minLength" : 1,
            "pattern" : "^(?!.*\\s)[a-z0-9_]+$"
          },
          "entity" : {
            "type" : "string",
            "description" : "Entity that owns this custom object",
            "enum" : [ "contact", "account", "opportunity", "nomination" ]
          }
        },
        "required" : [ "apiName", "entity", "label" ]
      },
      "CreateCustomAttribute" : {
        "type" : "object",
        "description" : "Payload for defining a new custom attribute on an entity.",
        "properties" : {
          "name" : {
            "type" : "string",
            "description" : "Internal API name. 1 to 64 characters, lowercase letters/digits/underscores only.",
            "example" : "favorite_color",
            "maxLength" : 64,
            "minLength" : 1,
            "pattern" : "^(?!.*\\s)[a-z0-9_]+$"
          },
          "label" : {
            "type" : "string",
            "description" : "Human-readable label shown in UI",
            "example" : "Favorite color"
          },
          "description" : {
            "type" : "string",
            "description" : "Optional description",
            "example" : "Advocate's favorite color"
          },
          "type" : {
            "type" : "string",
            "description" : "Attribute type",
            "enum" : [ "String", "Integer", "Float", "Boolean", "Date", "Enumerated" ]
          },
          "entity" : {
            "type" : "string",
            "description" : "Entity to attach this attribute to. Accepted values: `contact` (advocate record), `account`, `opportunity`, `nomination`.",
            "example" : "contact"
          },
          "values" : {
            "type" : "array",
            "description" : "Allowed values for picklist-style attribute types",
            "example" : [ "red", "green", "blue" ],
            "items" : {
              "type" : "string"
            },
            "uniqueItems" : true
          },
          "editableByAdvocate" : {
            "type" : "boolean",
            "description" : "Whether the advocate can edit this attribute themselves",
            "example" : false
          },
          "mandatory" : {
            "type" : "boolean",
            "description" : "Whether a value for this attribute is required",
            "example" : false
          },
          "onActivation" : {
            "type" : "boolean",
            "description" : "Show in activation flow",
            "example" : false
          },
          "showInSourcing" : {
            "type" : "boolean",
            "description" : "Show in sourcing flows",
            "example" : false
          },
          "showInReport" : {
            "type" : "boolean",
            "description" : "Show in admin reports",
            "example" : false
          },
          "multipleValues" : {
            "type" : "boolean",
            "description" : "Whether the attribute can hold multiple values",
            "example" : false
          },
          "showInJoinReferencePoolChallenge" : {
            "type" : "boolean",
            "description" : "Show in the Join Reference Pool ASK form",
            "example" : false
          },
          "showInReferenceRequestDialog" : {
            "type" : "boolean",
            "description" : "Show in the reference request dialog",
            "example" : false
          },
          "showInMarketingRequestDialog" : {
            "type" : "boolean",
            "description" : "Show in the marketing request dialog",
            "example" : false
          },
          "requiredInNominationDialog" : {
            "type" : "boolean",
            "description" : "Required when nominating an advocate",
            "example" : false
          }
        },
        "required" : [ "entity", "label", "name", "type" ]
      },
      "CreateContentTag" : {
        "type" : "object",
        "description" : "Payload for creating a new content tag.",
        "properties" : {
          "name" : {
            "type" : "string",
            "description" : "Tag display name. Required; 1 to 255 characters.",
            "example" : "Product Launch",
            "maxLength" : 255,
            "minLength" : 1
          },
          "description" : {
            "type" : "string",
            "description" : "Optional human-readable description of the tag",
            "example" : "Used to mark content related to product launch campaigns"
          },
          "tagCategoryUuid" : {
            "type" : "string",
            "description" : "Optional UUID of the parent content category",
            "example" : "660e8400-e29b-41d4-a716-446655440111"
          }
        },
        "required" : [ "name" ]
      },
      "CreateContentTagCategory" : {
        "type" : "object",
        "description" : "Payload for creating a new content category.",
        "properties" : {
          "name" : {
            "type" : "string",
            "description" : "Category display name. Required; 1 to 255 characters.",
            "example" : "Technology",
            "maxLength" : 255,
            "minLength" : 1
          },
          "description" : {
            "type" : "string",
            "description" : "Optional human-readable description of the category",
            "example" : "All technology-related content"
          },
          "tagUuids" : {
            "type" : "array",
            "description" : "Tag UUIDs to include in this category. At least one is required.",
            "example" : [ "tag-uuid-1", "tag-uuid-2" ],
            "items" : {
              "type" : "string"
            }
          }
        },
        "required" : [ "name", "tagUuids" ]
      },
      "ExternalConsentDTO" : {
        "type" : "object",
        "properties" : {
          "activityTypeId" : {
            "type" : "string"
          },
          "consent" : {
            "type" : "boolean"
          },
          "frequency" : {
            "type" : "string"
          },
          "classification" : {
            "type" : "string"
          }
        }
      },
      "ExternalImportReferenceAdvocateByContactIdDTO" : {
        "type" : "object",
        "properties" : {
          "contactId" : {
            "type" : "string",
            "minLength" : 1
          },
          "register" : {
            "type" : "boolean"
          },
          "sendInvite" : {
            "type" : "boolean"
          },
          "consents" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ExternalConsentDTO"
            }
          },
          "referencePool" : {
            "type" : "string"
          },
          "frequency" : {
            "type" : "string"
          }
        },
        "required" : [ "contactId" ]
      },
      "ExternalConsentRejectedDTO" : {
        "type" : "object",
        "properties" : {
          "activityTypeId" : {
            "type" : "string"
          },
          "reason" : {
            "type" : "string"
          }
        }
      },
      "ExternalImportReferenceAdvocateByContactIdResultDTO" : {
        "type" : "object",
        "properties" : {
          "contactId" : {
            "type" : "string",
            "minLength" : 1
          },
          "id" : {
            "type" : "string",
            "minLength" : 1
          },
          "message" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string",
            "enum" : [ "SUCCESS", "SKIPPED", "ERROR" ],
            "minLength" : 1
          },
          "consentsApplied" : {
            "type" : "integer",
            "format" : "int32"
          },
          "consentsRejected" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ExternalConsentRejectedDTO"
            }
          },
          "referencePool" : {
            "type" : "string"
          },
          "invitation" : {
            "type" : "string"
          },
          "frequency" : {
            "type" : "string"
          }
        },
        "required" : [ "contactId", "id", "status" ]
      },
      "ExternalImportAdvocateByEmailDTO" : {
        "type" : "object",
        "properties" : {
          "email" : {
            "type" : "string",
            "format" : "email",
            "maxLength" : 127,
            "minLength" : 0
          },
          "firstName" : {
            "type" : "string",
            "maxLength" : 50,
            "minLength" : 0
          },
          "lastName" : {
            "type" : "string",
            "maxLength" : 50,
            "minLength" : 0
          },
          "accountName" : {
            "type" : "string",
            "maxLength" : 255,
            "minLength" : 0
          },
          "register" : {
            "type" : "boolean"
          },
          "sendInvite" : {
            "type" : "boolean"
          },
          "consents" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ExternalConsentDTO"
            }
          },
          "referencePool" : {
            "type" : "string"
          }
        },
        "required" : [ "accountName", "email", "firstName", "lastName" ]
      },
      "ExternalImportAdvocateByEmailResultDTO" : {
        "type" : "object",
        "properties" : {
          "email" : {
            "type" : "string",
            "minLength" : 1
          },
          "id" : {
            "type" : "string",
            "minLength" : 1
          },
          "message" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string",
            "enum" : [ "SUCCESS", "SKIPPED", "ERROR" ],
            "minLength" : 1
          },
          "consentsApplied" : {
            "type" : "integer",
            "format" : "int32"
          },
          "consentsRejected" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ExternalConsentRejectedDTO"
            }
          },
          "referencePool" : {
            "type" : "string"
          },
          "invitation" : {
            "type" : "string"
          }
        },
        "required" : [ "email", "id", "status" ]
      },
      "ExternalImportAdvocateByContactIdDTO" : {
        "type" : "object",
        "properties" : {
          "contactId" : {
            "type" : "string",
            "minLength" : 1
          },
          "register" : {
            "type" : "boolean"
          },
          "sendInvite" : {
            "type" : "boolean"
          },
          "consents" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ExternalConsentDTO"
            }
          },
          "referencePool" : {
            "type" : "string"
          }
        },
        "required" : [ "contactId" ]
      },
      "ExternalImportAdvocateByContactIdResultDTO" : {
        "type" : "object",
        "properties" : {
          "contactId" : {
            "type" : "string",
            "minLength" : 1
          },
          "id" : {
            "type" : "string",
            "minLength" : 1
          },
          "message" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string",
            "enum" : [ "SUCCESS", "SKIPPED", "ERROR" ],
            "minLength" : 1
          },
          "consentsApplied" : {
            "type" : "integer",
            "format" : "int32"
          },
          "consentsRejected" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ExternalConsentRejectedDTO"
            }
          },
          "referencePool" : {
            "type" : "string"
          },
          "invitation" : {
            "type" : "string"
          }
        },
        "required" : [ "contactId", "id", "status" ]
      },
      "BatchCreateCustomObjectRecordsDTO" : {
        "type" : "object",
        "properties" : {
          "users" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AdvocateAttributesAndRecordsDTO"
            },
            "minItems" : 1
          }
        },
        "required" : [ "users" ]
      },
      "CustomDataAttributeValueDTO" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "values" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }
      },
      "UpsertAccountDTO" : {
        "type" : "object",
        "properties" : {
          "uuid" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "domain" : {
            "type" : "string",
            "pattern" : "^([a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,6}$"
          },
          "sizeFrom" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sizeTo" : {
            "type" : "integer",
            "format" : "int32"
          },
          "industryType" : {
            "type" : "string"
          },
          "customAttributeValues" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomDataAttributeValueDTO"
            }
          }
        }
      },
      "AccountDataDTO" : {
        "type" : "object",
        "properties" : {
          "uuid" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "domain" : {
            "type" : "string"
          },
          "sizeFrom" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sizeTo" : {
            "type" : "integer",
            "format" : "int32"
          },
          "industryType" : {
            "type" : "string"
          },
          "crmAccountId" : {
            "type" : "string"
          },
          "referenceStatus" : {
            "type" : "string",
            "enum" : [ "Active", "Paused", "Inactive", "Recruitment" ]
          },
          "createdAt" : {
            "type" : "string",
            "format" : "date-time"
          },
          "updatedAt" : {
            "type" : "string",
            "format" : "date-time"
          },
          "customAttributeValues" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomDataAttributeValueDTO"
            }
          },
          "customObjectAttributeValues" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomObjectDataAttributeValueDTO"
            }
          }
        }
      },
      "BatchAccountCreateCustomObjectRecordsDTO" : {
        "type" : "object",
        "properties" : {
          "accounts" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AccountAttributesAndRecordsDTO"
            },
            "minItems" : 1
          }
        },
        "required" : [ "accounts" ]
      },
      "PageUserModelDTO" : {
        "type" : "object",
        "properties" : {
          "totalElements" : {
            "type" : "integer",
            "format" : "int64"
          },
          "totalPages" : {
            "type" : "integer",
            "format" : "int32"
          },
          "size" : {
            "type" : "integer",
            "format" : "int32"
          },
          "content" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/UserModelDTO"
            }
          },
          "number" : {
            "type" : "integer",
            "format" : "int32"
          },
          "first" : {
            "type" : "boolean"
          },
          "last" : {
            "type" : "boolean"
          },
          "pageable" : {
            "$ref" : "#/components/schemas/PageableObject"
          },
          "numberOfElements" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sort" : {
            "$ref" : "#/components/schemas/SortObject"
          },
          "empty" : {
            "type" : "boolean"
          }
        }
      },
      "StatusDTO" : {
        "type" : "object",
        "properties" : {
          "companyName" : {
            "type" : "string"
          }
        }
      },
      "ReferenceRequestFilterDTO" : {
        "type" : "object",
        "properties" : {
          "opportunityUuid" : {
            "type" : "array",
            "items" : {
              "type" : "string",
              "minLength" : 1
            }
          },
          "opportunityExternalId" : {
            "type" : "array",
            "items" : {
              "type" : "string",
              "minLength" : 1
            }
          },
          "referenceManagerUuid" : {
            "type" : "array",
            "items" : {
              "type" : "string",
              "minLength" : 1
            }
          },
          "referenceTypeUuid" : {
            "type" : "array",
            "items" : {
              "type" : "string",
              "minLength" : 1
            }
          },
          "accountUuids" : {
            "type" : "array",
            "items" : {
              "type" : "string",
              "minLength" : 1
            }
          },
          "status" : {
            "type" : "array",
            "items" : {
              "type" : "string",
              "enum" : [ "INITIAL", "SOURCING_A_REFERENCE", "REJECTED", "CANCELED", "REFERENCE_SOURCED", "OWNER_REJECTED", "OWNER_APPROVED", "PENDING_APPROVAL", "REFERENCE_REJECTED", "REFERENCE_PROVIDED", "REFERENCE_INTRODUCED", "REFERENCE_CONTACTED" ]
            }
          },
          "referenceRecordStatus" : {
            "type" : "array",
            "items" : {
              "type" : "string",
              "enum" : [ "ACTIVE", "DONE", "CANCELED" ]
            }
          },
          "includeEmptyReferenceRecordStatus" : {
            "type" : "boolean"
          },
          "searchQuery" : {
            "type" : "string"
          },
          "minIdleTimeInHours" : {
            "type" : "integer",
            "format" : "int32"
          },
          "maxIdleTimeInHours" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "LinksDTO" : {
        "type" : "object",
        "properties" : {
          "link" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            }
          }
        }
      },
      "PageReferenceRequestReportDTO" : {
        "type" : "object",
        "properties" : {
          "totalElements" : {
            "type" : "integer",
            "format" : "int64"
          },
          "totalPages" : {
            "type" : "integer",
            "format" : "int32"
          },
          "size" : {
            "type" : "integer",
            "format" : "int32"
          },
          "content" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ReferenceRequestReportDTO"
            }
          },
          "number" : {
            "type" : "integer",
            "format" : "int32"
          },
          "first" : {
            "type" : "boolean"
          },
          "last" : {
            "type" : "boolean"
          },
          "pageable" : {
            "$ref" : "#/components/schemas/PageableObject"
          },
          "numberOfElements" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sort" : {
            "$ref" : "#/components/schemas/SortObject"
          },
          "empty" : {
            "type" : "boolean"
          }
        }
      },
      "ReferenceRequestAdvocateDTO" : {
        "type" : "object",
        "properties" : {
          "status" : {
            "type" : "string"
          },
          "advocateUuid" : {
            "type" : "string"
          },
          "companyAdvocateUuid" : {
            "type" : "string"
          },
          "advocateName" : {
            "type" : "string"
          },
          "advocateEmail" : {
            "type" : "string"
          },
          "accountName" : {
            "type" : "string"
          },
          "rejectReason" : {
            "type" : "string"
          },
          "createdAt" : {
            "type" : "string",
            "format" : "date-time"
          },
          "statusModifiedAt" : {
            "type" : "string",
            "format" : "date-time"
          }
        }
      },
      "ReferenceRequestReportDTO" : {
        "type" : "object",
        "properties" : {
          "uuid" : {
            "type" : "string"
          },
          "crmRequestNumber" : {
            "type" : "string"
          },
          "subject" : {
            "type" : "string"
          },
          "notes" : {
            "type" : "string"
          },
          "notesForReference" : {
            "type" : "string"
          },
          "referenceManagerNotes" : {
            "type" : "string"
          },
          "referenceChangeNotes" : {
            "type" : "string"
          },
          "deadline" : {
            "type" : "string",
            "format" : "date-time"
          },
          "referenceType" : {
            "type" : "string"
          },
          "referenceTypeUuid" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "rejectReason" : {
            "type" : "string"
          },
          "createdAt" : {
            "type" : "string",
            "format" : "date-time"
          },
          "statusModifiedAt" : {
            "type" : "string",
            "format" : "date-time"
          },
          "introFollowups" : {
            "type" : "integer",
            "format" : "int32"
          },
          "salespersonName" : {
            "type" : "string"
          },
          "salespersonEmail" : {
            "type" : "string"
          },
          "referenceManagerName" : {
            "type" : "string"
          },
          "referenceManagerEmail" : {
            "type" : "string"
          },
          "referenceManagerUuid" : {
            "type" : "string"
          },
          "companyUuid" : {
            "type" : "string"
          },
          "p2p" : {
            "type" : "boolean"
          },
          "customAttributeFilters" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ReportCustomAttributesFiltersDTO"
            }
          },
          "opportunityName" : {
            "type" : "string"
          },
          "opportunityUuid" : {
            "type" : "string"
          },
          "opportunityStage" : {
            "type" : "string"
          },
          "opportunityIsWon" : {
            "type" : "boolean"
          },
          "opportunityAmount" : {
            "type" : "number",
            "format" : "float"
          },
          "opportunityProbability" : {
            "type" : "integer",
            "format" : "int32"
          },
          "opportunityContactEmail" : {
            "type" : "string"
          },
          "opportunityContactName" : {
            "type" : "string"
          },
          "referenceAdvocateStatus" : {
            "type" : "string"
          },
          "referenceAdvocateScore" : {
            "type" : "string"
          },
          "advocateUuid" : {
            "type" : "string"
          },
          "companyAdvocateUuid" : {
            "type" : "string"
          },
          "advocateName" : {
            "type" : "string"
          },
          "advocateAccountName" : {
            "type" : "string"
          },
          "advocateAccountUuid" : {
            "type" : "string"
          },
          "referenceAdvocateHistory" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ReferenceRequestAdvocateDTO"
            }
          },
          "referenceRecordUuid" : {
            "type" : "string"
          },
          "referenceRecordStatus" : {
            "type" : "string",
            "enum" : [ "ACTIVE", "DONE", "CANCELED" ]
          },
          "referenceRecordCreatedAt" : {
            "type" : "string",
            "format" : "date-time"
          },
          "contactDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "contactFeedback" : {
            "type" : "string"
          },
          "leadBecameCustomer" : {
            "type" : "boolean"
          },
          "sourcingAllowed" : {
            "type" : "boolean"
          },
          "geographicalLocations" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "uniqueItems" : true
          },
          "industryTypes" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "uniqueItems" : true
          },
          "companySizes" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "uniqueItems" : true
          },
          "productsAndServices" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "uniqueItems" : true
          },
          "useCases" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            },
            "uniqueItems" : true
          },
          "customAttributes" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomAttributeValueDTO"
            }
          },
          "customObjectAttributes" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomObjectValueDTO"
            }
          },
          "links" : {
            "$ref" : "#/components/schemas/LinksDTO"
          },
          "accountUuid" : {
            "type" : "string"
          }
        }
      },
      "OpportunityDataDTO" : {
        "type" : "object",
        "properties" : {
          "uuid" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "stage" : {
            "type" : "string"
          },
          "isWon" : {
            "type" : "boolean"
          },
          "amount" : {
            "type" : "number",
            "format" : "double"
          },
          "probability" : {
            "type" : "integer",
            "format" : "int32"
          },
          "closeDate" : {
            "type" : "string",
            "format" : "date"
          },
          "accountName" : {
            "type" : "string"
          },
          "createdAt" : {
            "type" : "string",
            "format" : "date-time"
          },
          "updatedAt" : {
            "type" : "string",
            "format" : "date-time"
          },
          "customAttributeValues" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomDataAttributeValueDTO"
            }
          },
          "customObjectAttributeValues" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomObjectDataAttributeValueDTO"
            }
          }
        }
      },
      "PageOpportunityDataDTO" : {
        "type" : "object",
        "properties" : {
          "totalElements" : {
            "type" : "integer",
            "format" : "int64"
          },
          "totalPages" : {
            "type" : "integer",
            "format" : "int32"
          },
          "size" : {
            "type" : "integer",
            "format" : "int32"
          },
          "content" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/OpportunityDataDTO"
            }
          },
          "number" : {
            "type" : "integer",
            "format" : "int32"
          },
          "first" : {
            "type" : "boolean"
          },
          "last" : {
            "type" : "boolean"
          },
          "pageable" : {
            "$ref" : "#/components/schemas/PageableObject"
          },
          "numberOfElements" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sort" : {
            "$ref" : "#/components/schemas/SortObject"
          },
          "empty" : {
            "type" : "boolean"
          }
        }
      },
      "OpportunityAttributesDTO" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "stage" : {
            "type" : "string"
          },
          "amount" : {
            "type" : "number",
            "format" : "double"
          },
          "probability" : {
            "type" : "integer",
            "format" : "int32"
          },
          "isWon" : {
            "type" : "boolean"
          },
          "closeDate" : {
            "type" : "string",
            "format" : "date"
          },
          "accountName" : {
            "type" : "string"
          },
          "customAttributes" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            }
          }
        }
      },
      "UserDTO" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string",
            "minLength" : 1
          },
          "name" : {
            "type" : "string",
            "minLength" : 1
          },
          "email" : {
            "type" : "string"
          },
          "profileUrl" : {
            "type" : "string"
          },
          "points" : {
            "type" : "integer",
            "format" : "int32"
          },
          "credits" : {
            "type" : "integer",
            "format" : "int32"
          },
          "rankPosition" : {
            "type" : "integer",
            "format" : "int32"
          }
        },
        "required" : [ "id", "name" ]
      },
      "CustomObject" : {
        "type" : "object",
        "description" : "A custom object mapping with its nested custom data attributes.",
        "properties" : {
          "label" : {
            "type" : "string",
            "description" : "Human-readable label for the custom object",
            "example" : "Primary Contact",
            "maxLength" : 128,
            "minLength" : 1
          },
          "description" : {
            "type" : "string",
            "description" : "Optional description (max 100 characters)",
            "example" : "Primary point of contact at the account",
            "maxLength" : 100,
            "minLength" : 0
          },
          "apiName" : {
            "type" : "string",
            "description" : "Internal API name. 1 to 64 characters, lowercase letters/digits/underscores only.",
            "example" : "primary_contact",
            "maxLength" : 64,
            "minLength" : 1,
            "pattern" : "^(?!.*\\s)[a-z0-9_]+$"
          },
          "entity" : {
            "type" : "string",
            "description" : "Entity that owns this custom object",
            "enum" : [ "contact", "account", "opportunity", "nomination" ]
          },
          "uuid" : {
            "type" : "string",
            "description" : "Unique identifier of the mapping",
            "example" : "550e8400-e29b-41d4-a716-446655440000"
          },
          "customDataAttributes" : {
            "type" : "array",
            "description" : "Custom data attributes belonging to this object",
            "items" : {
              "$ref" : "#/components/schemas/CustomAttribute"
            }
          }
        },
        "required" : [ "apiName", "entity", "label" ]
      },
      "CustomObjectAttribute" : {
        "type" : "object",
        "description" : "An attribute on a custom object related to a platform entity.",
        "properties" : {
          "entity" : {
            "type" : "string",
            "description" : "Owning entity name",
            "example" : "account"
          },
          "entityLabel" : {
            "type" : "string",
            "description" : "Owning entity human-readable label",
            "example" : "Account"
          },
          "entityRelation" : {
            "type" : "string",
            "description" : "Relation identifier between the entity and this custom object",
            "example" : "primary_contact"
          },
          "description" : {
            "type" : "string",
            "description" : "Optional human-readable description of the attribute"
          }
        }
      },
      "PageContentTag" : {
        "type" : "object",
        "properties" : {
          "totalElements" : {
            "type" : "integer",
            "format" : "int64"
          },
          "totalPages" : {
            "type" : "integer",
            "format" : "int32"
          },
          "size" : {
            "type" : "integer",
            "format" : "int32"
          },
          "content" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ContentTag"
            }
          },
          "number" : {
            "type" : "integer",
            "format" : "int32"
          },
          "first" : {
            "type" : "boolean"
          },
          "last" : {
            "type" : "boolean"
          },
          "pageable" : {
            "$ref" : "#/components/schemas/PageableObject"
          },
          "numberOfElements" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sort" : {
            "$ref" : "#/components/schemas/SortObject"
          },
          "empty" : {
            "type" : "boolean"
          }
        }
      },
      "PageContentTagCategory" : {
        "type" : "object",
        "properties" : {
          "totalElements" : {
            "type" : "integer",
            "format" : "int64"
          },
          "totalPages" : {
            "type" : "integer",
            "format" : "int32"
          },
          "size" : {
            "type" : "integer",
            "format" : "int32"
          },
          "content" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ContentTagCategory"
            }
          },
          "number" : {
            "type" : "integer",
            "format" : "int32"
          },
          "first" : {
            "type" : "boolean"
          },
          "last" : {
            "type" : "boolean"
          },
          "pageable" : {
            "$ref" : "#/components/schemas/PageableObject"
          },
          "numberOfElements" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sort" : {
            "$ref" : "#/components/schemas/SortObject"
          },
          "empty" : {
            "type" : "boolean"
          }
        }
      },
      "ChallengeDTO" : {
        "type" : "object",
        "properties" : {
          "uuid" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "title" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "imageUrl" : {
            "type" : "string"
          },
          "videoUrl" : {
            "type" : "string"
          },
          "startDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "endDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "lastReminderDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "creationDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "modificationDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "pin" : {
            "type" : "boolean"
          },
          "notify" : {
            "type" : "boolean"
          },
          "popupOnly" : {
            "type" : "boolean"
          },
          "active" : {
            "type" : "boolean"
          },
          "challengeType" : {
            "type" : "string"
          },
          "duration" : {
            "type" : "integer",
            "format" : "int32"
          },
          "delay" : {
            "type" : "integer",
            "format" : "int32"
          },
          "triggerType" : {
            "type" : "string"
          },
          "repeat" : {
            "type" : "integer",
            "format" : "int32"
          },
          "upstreamChallengeUuid" : {
            "type" : "string"
          },
          "downstreamChallengesUuids" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "triggerEvent" : {
            "type" : "string"
          },
          "triggerEventParam" : {
            "type" : "string"
          },
          "tags" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }
      },
      "PageChallengeDTO" : {
        "type" : "object",
        "properties" : {
          "totalElements" : {
            "type" : "integer",
            "format" : "int64"
          },
          "totalPages" : {
            "type" : "integer",
            "format" : "int32"
          },
          "size" : {
            "type" : "integer",
            "format" : "int32"
          },
          "content" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ChallengeDTO"
            }
          },
          "number" : {
            "type" : "integer",
            "format" : "int32"
          },
          "first" : {
            "type" : "boolean"
          },
          "last" : {
            "type" : "boolean"
          },
          "pageable" : {
            "$ref" : "#/components/schemas/PageableObject"
          },
          "numberOfElements" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sort" : {
            "$ref" : "#/components/schemas/SortObject"
          },
          "empty" : {
            "type" : "boolean"
          }
        }
      },
      "AdvocateActivityDTO" : {
        "type" : "object",
        "properties" : {
          "type" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "points" : {
            "type" : "integer",
            "format" : "int32"
          },
          "step" : {
            "type" : "integer",
            "format" : "int32"
          },
          "totalSteps" : {
            "type" : "integer",
            "format" : "int32"
          },
          "badges" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "date" : {
            "type" : "string",
            "format" : "date-time"
          }
        }
      },
      "AdvocateConsent" : {
        "type" : "object",
        "properties" : {
          "type" : {
            "type" : "string"
          },
          "frequency" : {
            "type" : "string"
          },
          "classification" : {
            "type" : "string"
          }
        }
      },
      "AdvocateDataDTO" : {
        "type" : "object",
        "properties" : {
          "uuid" : {
            "type" : "string"
          },
          "email" : {
            "type" : "string"
          },
          "firstName" : {
            "type" : "string"
          },
          "lastName" : {
            "type" : "string"
          },
          "profileImageUrl" : {
            "type" : "string"
          },
          "crmContactId" : {
            "type" : "string"
          },
          "accountName" : {
            "type" : "string"
          },
          "accountUuid" : {
            "type" : "string"
          },
          "points" : {
            "type" : "integer",
            "format" : "int64"
          },
          "credits" : {
            "type" : "integer",
            "format" : "int64"
          },
          "rankPosition" : {
            "type" : "integer",
            "format" : "int32"
          },
          "registrationStatus" : {
            "type" : "string",
            "enum" : [ "ACTIVE", "INACTIVE", "PENDING", "REQUEST", "IMPORTED", "ANONYMOUS" ]
          },
          "createdAt" : {
            "type" : "string",
            "format" : "date-time"
          },
          "lastActivityDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "engagementScore" : {
            "$ref" : "#/components/schemas/EngagementScoreDTO"
          },
          "consents" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AdvocateConsent"
            }
          },
          "activities" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AdvocateActivityDTO"
            }
          },
          "customAttributes" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomDataAttributeValueDTO"
            }
          },
          "customObjectAttributes" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CustomObjectDataAttributeValueDTO"
            }
          },
          "level" : {
            "$ref" : "#/components/schemas/AdvocateLevelDTO"
          }
        }
      },
      "AdvocateLevelDTO" : {
        "type" : "object",
        "properties" : {
          "number" : {
            "type" : "integer",
            "format" : "int32"
          },
          "name" : {
            "type" : "string"
          },
          "program" : {
            "$ref" : "#/components/schemas/AdvocateLevelProgramDTO"
          }
        }
      },
      "AdvocateLevelProgramDTO" : {
        "type" : "object",
        "properties" : {
          "uuid" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          }
        }
      },
      "EngagementScoreDTO" : {
        "type" : "object",
        "properties" : {
          "portal" : {
            "type" : "integer",
            "format" : "int32"
          },
          "community" : {
            "type" : "integer",
            "format" : "int32"
          },
          "total" : {
            "type" : "integer",
            "format" : "int32"
          },
          "trend" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "PageAdvocateDataDTO" : {
        "type" : "object",
        "properties" : {
          "totalElements" : {
            "type" : "integer",
            "format" : "int64"
          },
          "totalPages" : {
            "type" : "integer",
            "format" : "int32"
          },
          "size" : {
            "type" : "integer",
            "format" : "int32"
          },
          "content" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AdvocateDataDTO"
            }
          },
          "number" : {
            "type" : "integer",
            "format" : "int32"
          },
          "first" : {
            "type" : "boolean"
          },
          "last" : {
            "type" : "boolean"
          },
          "pageable" : {
            "$ref" : "#/components/schemas/PageableObject"
          },
          "numberOfElements" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sort" : {
            "$ref" : "#/components/schemas/SortObject"
          },
          "empty" : {
            "type" : "boolean"
          }
        }
      },
      "ExternalEntityFieldValueDTO" : {
        "type" : "object",
        "properties" : {
          "externalId" : {
            "type" : "string"
          },
          "uuid" : {
            "type" : "string"
          },
          "fieldName" : {
            "type" : "string"
          },
          "fieldValue" : {
            "type" : "string"
          }
        }
      },
      "PageExternalEntityFieldValueDTO" : {
        "type" : "object",
        "properties" : {
          "totalElements" : {
            "type" : "integer",
            "format" : "int64"
          },
          "totalPages" : {
            "type" : "integer",
            "format" : "int32"
          },
          "size" : {
            "type" : "integer",
            "format" : "int32"
          },
          "content" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ExternalEntityFieldValueDTO"
            }
          },
          "number" : {
            "type" : "integer",
            "format" : "int32"
          },
          "first" : {
            "type" : "boolean"
          },
          "last" : {
            "type" : "boolean"
          },
          "pageable" : {
            "$ref" : "#/components/schemas/PageableObject"
          },
          "numberOfElements" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sort" : {
            "$ref" : "#/components/schemas/SortObject"
          },
          "empty" : {
            "type" : "boolean"
          }
        }
      },
      "ActivityDTO" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "points" : {
            "type" : "integer",
            "format" : "int32"
          },
          "apiIdentifier" : {
            "type" : "string"
          },
          "assignBadges" : {
            "type" : "boolean"
          },
          "category" : {
            "type" : "string",
            "enum" : [ "THOUGHT_LEADERSHIP", "CONTENT", "CUSTOM_MANUAL", "CUSTOM_AUTOMATED" ]
          }
        }
      },
      "PageActivityDTO" : {
        "type" : "object",
        "properties" : {
          "totalElements" : {
            "type" : "integer",
            "format" : "int64"
          },
          "totalPages" : {
            "type" : "integer",
            "format" : "int32"
          },
          "size" : {
            "type" : "integer",
            "format" : "int32"
          },
          "content" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ActivityDTO"
            }
          },
          "number" : {
            "type" : "integer",
            "format" : "int32"
          },
          "first" : {
            "type" : "boolean"
          },
          "last" : {
            "type" : "boolean"
          },
          "pageable" : {
            "$ref" : "#/components/schemas/PageableObject"
          },
          "numberOfElements" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sort" : {
            "$ref" : "#/components/schemas/SortObject"
          },
          "empty" : {
            "type" : "boolean"
          }
        }
      },
      "ActivityTypePublicDTO" : {
        "type" : "object",
        "properties" : {
          "uuid" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "requiresConsent" : {
            "type" : "boolean"
          },
          "frequencyEnabled" : {
            "type" : "boolean"
          },
          "classificationEnabled" : {
            "type" : "boolean"
          },
          "allowedFrequencies" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "allowedClassifications" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }
      },
      "PageAccountDataDTO" : {
        "type" : "object",
        "properties" : {
          "totalElements" : {
            "type" : "integer",
            "format" : "int64"
          },
          "totalPages" : {
            "type" : "integer",
            "format" : "int32"
          },
          "size" : {
            "type" : "integer",
            "format" : "int32"
          },
          "content" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AccountDataDTO"
            }
          },
          "number" : {
            "type" : "integer",
            "format" : "int32"
          },
          "first" : {
            "type" : "boolean"
          },
          "last" : {
            "type" : "boolean"
          },
          "pageable" : {
            "$ref" : "#/components/schemas/PageableObject"
          },
          "numberOfElements" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sort" : {
            "$ref" : "#/components/schemas/SortObject"
          },
          "empty" : {
            "type" : "boolean"
          }
        }
      },
      "BatchDeleteCustomObjectRecordsDTO" : {
        "type" : "object",
        "properties" : {
          "users" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/DeleteAdvocateRecordsDTO"
            },
            "minItems" : 1
          }
        },
        "required" : [ "users" ]
      },
      "DeleteAdvocateRecordsDTO" : {
        "type" : "object",
        "properties" : {
          "advocateUuid" : {
            "type" : "string"
          },
          "advocateEmail" : {
            "type" : "string"
          },
          "objectName" : {
            "type" : "string",
            "minLength" : 1
          },
          "recordIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        },
        "required" : [ "objectName" ]
      },
      "BatchAccountDeleteCustomObjectRecordsDTO" : {
        "type" : "object",
        "properties" : {
          "accounts" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/DeleteAccountRecordsDTO"
            },
            "minItems" : 1
          }
        },
        "required" : [ "accounts" ]
      },
      "DeleteAccountRecordsDTO" : {
        "type" : "object",
        "properties" : {
          "accountUuid" : {
            "type" : "string"
          },
          "accountName" : {
            "type" : "string"
          },
          "objectName" : {
            "type" : "string",
            "minLength" : 1
          },
          "recordIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        },
        "required" : [ "objectName" ]
      }
    },
    "securitySchemes" : {
      "bearer-jwt" : {
        "type" : "http",
        "scheme" : "bearer",
        "bearerFormat" : "JWT"
      }
    }
  }
}