Note Models

Global note models for the ACPortal API.

Source-of-truth schemas in swagger:

  • Notes — response shape for GET /note.

  • NoteModel — request body for both POST /note and PUT /note/{id}. The API does not split create-vs-update into two shapes; the SDK exposes a single NoteRequest to match.

  • SuggestedContactEntity — response item for GET /note/suggestUsers.

The legacy GlobalNoteCreateRequest / GlobalNoteUpdateRequest names remain as aliases for NoteRequest so existing imports keep working.

class ab.api.models.notes.NotesListParams(*, category=None, jobId=None, contactId=None, companyId=None)[source]

Bases: RequestModel

Query parameters for GET /note.

Parameters:
  • category (List[str] | None)

  • jobId (str | None)

  • contactId (int | None)

  • companyId (str | None)

category: List[str] | None
job_id: str | None
contact_id: int | None
company_id: str | None
model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class ab.api.models.notes.NotesSuggestUsersParams(*, SearchKey=None, JobFranchiseeId=None, CompanyId=None)[source]

Bases: RequestModel

Query parameters for GET /note/suggestUsers.

Swagger marks SearchKey as required. The endpoint method signature enforces this with a keyword-only required parameter so users can’t accidentally omit it.

Parameters:
  • SearchKey (str | None)

  • JobFranchiseeId (str | None)

  • CompanyId (str | None)

search_key: str | None
job_franchisee_id: str | None
company_id: str | None
model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class ab.api.models.notes.SuggestedUser(*, id=None, fullName=None, **extra_data)[source]

Bases: ResponseModel

User suggestion for mentions — element of GET /note/suggestUsers.

Shape matches swagger SuggestedContactEntity (id, fullName). The id is the forward reference consumed by NoteRequest.assigned_users when posting a new note.

Parameters:
  • id (int | None)

  • fullName (str | None)

  • extra_data (Any)

id: int | None
full_name: str | None
cli_format()[source]

One-line pretty row used by the CLI and examples (vs. JSON).

Return type:

str

model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class ab.api.models.notes.GlobalNote(*, noteID=None, isImportant=None, comments=None, category=None, dueDate=None, jobId=None, crmContactId=None, contactId=None, companyId=None, userID=None, importance=None, author=None, dueDates=None, categoryName=None, createdDate=None, createdBy=None, modifiedBy=None, modifiyDate=None, franchiseID=None, isCompleted=None, isGlobal=None, isShared=None, assignedContactNames=None, assignedUsers=None, isJobLevel=None, **extra_data)[source]

Bases: ResponseModel

Note record — element of GET /note response.

Shape matches swagger Notes. The server-side field is spelled modifiyDate (sic — typo in the API); the SDK preserves it via alias so the Python attribute can use the corrected spelling.

Parameters:
  • noteID (int | None)

  • isImportant (bool | None)

  • comments (str | None)

  • category (str | None)

  • dueDate (datetime | None)

  • jobId (str | None)

  • crmContactId (int | None)

  • contactId (str | None)

  • companyId (str | None)

  • userID (str | None)

  • importance (str | None)

  • author (str | None)

  • dueDates (str | None)

  • categoryName (str | None)

  • createdDate (datetime | None)

  • createdBy (str | None)

  • modifiedBy (str | None)

  • modifiyDate (datetime | None)

  • franchiseID (str | None)

  • isCompleted (bool | None)

  • isGlobal (bool | None)

  • isShared (bool | None)

  • assignedContactNames (List[str] | None)

  • assignedUsers (List[SuggestedUser] | None)

  • isJobLevel (bool | None)

  • extra_data (Any)

note_id: int | None
is_important: bool | None
comments: str | None
category: str | None
due_date: datetime | None
job_id: str | None
crm_contact_id: int | None
contact_id: str | None
company_id: str | None
user_id: str | None
importance: str | None
author: str | None
due_dates: str | None
category_name: str | None
created_date: datetime | None
created_by: str | None
modified_by: str | None
modified_date: datetime | None
franchise_id: str | None
is_completed: bool | None
is_global: bool | None
is_shared: bool | None
assigned_contact_names: List[str] | None
assigned_users: List[SuggestedUser] | None
is_job_level: bool | None
cli_format()[source]

One-line pretty row used by the CLI and examples (vs. JSON).

Return type:

str

model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class ab.api.models.notes.NoteRequest(*, comments, category, dueDate=None, isImportant=None, isCompleted=None, jobId=None, sendNotification=None, assignedUsers=None, crmContactId=None, companyId=None, isGlobal=None, isShared=None)[source]

Bases: RequestModel

Body for POST /note and PUT /note/{id}.

Matches swagger NoteModel. The API uses the same schema for create and update; the legacy GlobalNoteCreateRequest / GlobalNoteUpdateRequest names are aliases of this class.

Required fields: comments (1-8000 chars) and category (UUID). Sourcing category: call api.lookup.get_refer_category() or api.lookup.get_refer_category_hierarchy() and use a returned LookupValue.value (or id).

Parameters:
  • comments (Annotated[str, MinLen(min_length=1), MaxLen(max_length=8000)])

  • category (str)

  • dueDate (date | None)

  • isImportant (bool | None)

  • isCompleted (bool | None)

  • jobId (str | None)

  • sendNotification (bool | None)

  • assignedUsers (List[SuggestedUser] | None)

  • crmContactId (int | None)

  • companyId (str | None)

  • isGlobal (bool | None)

  • isShared (bool | None)

comments: str
category: str
due_date: date | None
is_important: bool | None
is_completed: bool | None
job_id: str | None
send_notification: bool | None
assigned_users: List[SuggestedUser] | None
crm_contact_id: int | None
company_id: str | None
is_global: bool | None
is_shared: bool | None
model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

ab.api.models.notes.GlobalNoteCreateRequest

alias of NoteRequest

ab.api.models.notes.GlobalNoteUpdateRequest

alias of NoteRequest