{"files":{"SKILL.md":"---\nname: properties\ndescription: \"Properties API skill. Use when working with Properties for crm. Covers 13 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# Properties\nAPI version: v3\n\n## Auth\nOAuth2 | ApiKey private-app-legacy in header | ApiKey private-app in header\n\n## Base URL\nhttps://api.hubapi.com\n\n## Setup\n1. Set your API key in the appropriate header\n2. GET /crm/v3/properties/{objectType} -- read all properties\n3. POST /crm/v3/properties/{objectType} -- create first property\n\n## Endpoints\n13 endpoints across 1 group. See references/api-spec.lap for full details.\n\n### Crm\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /crm/v3/properties/{objectType} | Read all properties |\n| POST | /crm/v3/properties/{objectType} | Create a property |\n| POST | /crm/v3/properties/{objectType}/batch/archive | Archive a batch of properties |\n| POST | /crm/v3/properties/{objectType}/batch/create | Create a batch of properties |\n| POST | /crm/v3/properties/{objectType}/batch/read | Read a batch of properties |\n| GET | /crm/v3/properties/{objectType}/groups | Read all property groups |\n| POST | /crm/v3/properties/{objectType}/groups | Create a property group |\n| GET | /crm/v3/properties/{objectType}/groups/{groupName} | Read a property group |\n| DELETE | /crm/v3/properties/{objectType}/groups/{groupName} | Archive a property group |\n| PATCH | /crm/v3/properties/{objectType}/groups/{groupName} | Update a property group |\n| GET | /crm/v3/properties/{objectType}/{propertyName} | Read a property |\n| DELETE | /crm/v3/properties/{objectType}/{propertyName} | Archive a property |\n| PATCH | /crm/v3/properties/{objectType}/{propertyName} | Update a property |\n\n## Common Questions\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"Get property details?\" -> GET /crm/v3/properties/{objectType}\n- \"Create a archive?\" -> POST /crm/v3/properties/{objectType}/batch/archive\n- \"Create a create?\" -> POST /crm/v3/properties/{objectType}/batch/create\n- \"Create a read?\" -> POST /crm/v3/properties/{objectType}/batch/read\n- \"List all groups?\" -> GET /crm/v3/properties/{objectType}/groups\n- \"Create a group?\" -> POST /crm/v3/properties/{objectType}/groups\n- \"Get group details?\" -> GET /crm/v3/properties/{objectType}/groups/{groupName}\n- \"Delete a group?\" -> DELETE /crm/v3/properties/{objectType}/groups/{groupName}\n- \"Partially update a group?\" -> PATCH /crm/v3/properties/{objectType}/groups/{groupName}\n- \"Delete a property?\" -> DELETE /crm/v3/properties/{objectType}/{propertyName}\n- \"Partially update a property?\" -> PATCH /crm/v3/properties/{objectType}/{propertyName}\n- \"How to authenticate?\" -> See Auth section above\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Create/update endpoints return the modified resource on success\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api Properties\n@base https://api.hubapi.com\n@version v3\n@auth OAuth2 | ApiKey private-app-legacy in header | ApiKey private-app in header\n@common_fields {objectType: str}\n@endpoints 13\n@toc crm(13)\n\n@endpoint GET /crm/v3/properties/{objectType}\n@desc Read all properties\n@optional {archived: bool=false # Whether to return only results that have been archived., dataSensitivity: str(highly_sensitive/non_sensitive/sensitive)=non_sensitive, locale: str, properties: str}\n@returns(200) {results: [map]} # successful operation\n\n@endpoint POST /crm/v3/properties/{objectType}\n@desc Create a property\n@required {fieldType: str(booleancheckbox/calculation_equation/checkbox/date/file/html/number/phonenumber/radio/select/text/textarea) # Controls how the property appears in HubSpot., groupName: str # The name of the property group the property belongs to., label: str # A human-readable property label that will be shown in HubSpot., name: str # The internal property name, which must be used when referencing the property via the API., type: str(bool/date/datetime/enumeration/number/phone_number/string) # The data type of the property.}\n@optional {calculationFormula: str # Represents a formula that is used to compute a calculated property., dataSensitivity: str(highly_sensitive/non_sensitive/sensitive) # Indicates the sensitivity level of the property, with options: highly_sensitive, non_sensitive, or sensitive., description: str # A description of the property that will be shown as help text in HubSpot., displayOrder: int(int32) # Properties are displayed in order starting with the lowest positive integer value. Values of -1 will cause the property to be displayed after any positive values., externalOptions: bool # Applicable only for 'enumeration' type properties.  Should be set to true in conjunction with a 'referencedObjectType' of 'OWNER'.  Otherwise false., formField: bool # Whether or not the property can be used in a HubSpot form., hasUniqueValue: bool # Whether or not the property's value must be unique. Once set, this can't be changed., hidden: bool # If true, the property won't be visible and can't be used in HubSpot., options: [map{description: str, displayOrder: int(int32), hidden!: bool, label!: str, value!: str}] # A list of valid options for the property. This field is required for enumerated properties., referencedObjectType: str # Should be set to 'OWNER' when 'externalOptions' is true, which causes the property to dynamically pull option values from the current HubSpot users.}\n@returns(201) {archived: bool, archivedAt: str(date-time), calculated: bool, calculationFormula: str, createdAt: str(date-time), createdUserId: str, dataSensitivity: str, dateDisplayHint: str, description: str, displayOrder: int(int32), externalOptions: bool, fieldType: str, formField: bool, groupName: str, hasUniqueValue: bool, hidden: bool, hubspotDefined: bool, label: str, modificationMetadata: map{archivable: bool, readOnlyDefinition: bool, readOnlyOptions: bool, readOnlyValue: bool}, name: str, options: [map], referencedObjectType: str, sensitiveDataCategories: [str], showCurrencySymbol: bool, type: str, updatedAt: str(date-time), updatedUserId: str} # successful operation\n\n@endpoint POST /crm/v3/properties/{objectType}/batch/archive\n@desc Archive a batch of properties\n@required {inputs: [map{name!: str}]}\n@returns(204) No content\n\n@endpoint POST /crm/v3/properties/{objectType}/batch/create\n@desc Create a batch of properties\n@required {inputs: [map{calculationFormula: str, dataSensitivity: str, description: str, displayOrder: int(int32), externalOptions: bool, fieldType!: str, formField: bool, groupName!: str, hasUniqueValue: bool, hidden: bool, label!: str, name!: str, options: [map], referencedObjectType: str, type!: str}]}\n@returns(200) {completedAt: str(date-time), errors: [map], links: map, numErrors: int(int32), requestedAt: str(date-time), results: [map], startedAt: str(date-time), status: str} # successful operation\n\n@endpoint POST /crm/v3/properties/{objectType}/batch/read\n@desc Read a batch of properties\n@required {archived: bool # Specifies whether the property is archived., dataSensitivity: str(highly_sensitive/non_sensitive/sensitive) # Indicates the sensitivity level of the data, such as 'non_sensitive', 'sensitive', or 'highly_sensitive'., inputs: [map{name!: str}]}\n@optional {locale: str}\n@returns(200) {completedAt: str(date-time), errors: [map], links: map, numErrors: int(int32), requestedAt: str(date-time), results: [map], startedAt: str(date-time), status: str} # successful operation\n\n@endpoint GET /crm/v3/properties/{objectType}/groups\n@desc Read all property groups\n@optional {locale: str}\n@returns(200) {results: [map]} # successful operation\n\n@endpoint POST /crm/v3/properties/{objectType}/groups\n@desc Create a property group\n@required {label: str # A human-readable label that will be shown in HubSpot., name: str # The internal property group name, which must be used when referencing the property group via the API.}\n@optional {displayOrder: int(int32) # Property groups are displayed in order starting with the lowest positive integer value. Values of -1 will cause the property group to be displayed after any positive values.}\n@returns(201) {archived: bool, displayOrder: int(int32), label: str, name: str} # successful operation\n\n@endpoint GET /crm/v3/properties/{objectType}/groups/{groupName}\n@desc Read a property group\n@required {groupName: str}\n@optional {locale: str}\n@returns(200) {archived: bool, displayOrder: int(int32), label: str, name: str} # successful operation\n\n@endpoint DELETE /crm/v3/properties/{objectType}/groups/{groupName}\n@desc Archive a property group\n@required {groupName: str}\n@returns(204) No content\n\n@endpoint PATCH /crm/v3/properties/{objectType}/groups/{groupName}\n@desc Update a property group\n@required {groupName: str}\n@optional {displayOrder: int(int32) # Property groups are displayed in order starting with the lowest positive integer value. Values of -1 will cause the property group to be displayed after any positive values., label: str # A human-readable label that will be shown in HubSpot.}\n@returns(200) {archived: bool, displayOrder: int(int32), label: str, name: str} # successful operation\n\n@endpoint GET /crm/v3/properties/{objectType}/{propertyName}\n@desc Read a property\n@required {propertyName: str}\n@optional {archived: bool=false # Whether to return only results that have been archived., dataSensitivity: str(highly_sensitive/non_sensitive/sensitive)=non_sensitive, locale: str, properties: str}\n@returns(200) {archived: bool, archivedAt: str(date-time), calculated: bool, calculationFormula: str, createdAt: str(date-time), createdUserId: str, dataSensitivity: str, dateDisplayHint: str, description: str, displayOrder: int(int32), externalOptions: bool, fieldType: str, formField: bool, groupName: str, hasUniqueValue: bool, hidden: bool, hubspotDefined: bool, label: str, modificationMetadata: map{archivable: bool, readOnlyDefinition: bool, readOnlyOptions: bool, readOnlyValue: bool}, name: str, options: [map], referencedObjectType: str, sensitiveDataCategories: [str], showCurrencySymbol: bool, type: str, updatedAt: str(date-time), updatedUserId: str} # successful operation\n\n@endpoint DELETE /crm/v3/properties/{objectType}/{propertyName}\n@desc Archive a property\n@required {propertyName: str}\n@returns(204) No content\n\n@endpoint PATCH /crm/v3/properties/{objectType}/{propertyName}\n@desc Update a property\n@required {propertyName: str}\n@optional {calculationFormula: str # Represents a formula that is used to compute a calculated property., description: str # A description of the property that will be shown as help text in HubSpot., displayOrder: int(int32) # Properties are displayed in order starting with the lowest positive integer value. Values of -1 will cause the Property to be displayed after any positive values., fieldType: str(booleancheckbox/calculation_equation/checkbox/date/file/html/number/phonenumber/radio/select/text/textarea) # Controls how the property appears in HubSpot., formField: bool # Whether or not the property can be used in a HubSpot form., groupName: str # The name of the property group the property belongs to., hidden: bool # If true, the property won't be visible and can't be used in HubSpot., label: str # A human-readable property label that will be shown in HubSpot., options: [map{description: str, displayOrder: int(int32), hidden!: bool, label!: str, value!: str}] # A list of valid options for the property., type: str(bool/date/datetime/enumeration/number/phone_number/string) # The data type of the property.}\n@returns(200) {archived: bool, archivedAt: str(date-time), calculated: bool, calculationFormula: str, createdAt: str(date-time), createdUserId: str, dataSensitivity: str, dateDisplayHint: str, description: str, displayOrder: int(int32), externalOptions: bool, fieldType: str, formField: bool, groupName: str, hasUniqueValue: bool, hidden: bool, hubspotDefined: bool, label: str, modificationMetadata: map{archivable: bool, readOnlyDefinition: bool, readOnlyOptions: bool, readOnlyValue: bool}, name: str, options: [map], referencedObjectType: str, sensitiveDataCategories: [str], showCurrencySymbol: bool, type: str, updatedAt: str(date-time), updatedUserId: str} # successful operation\n\n@end\n"}}