Search all guides

Reference · Tools

HubSpot integration

Manage contacts, companies, deals, tickets, engagements, and contact lists in the HubSpot CRM platform.

Action Sales v1

The HubSpot node covers the CRM's main objects — contacts, companies, deals, tickets, engagements and contact lists — with full create, read, update, delete and search. A typical build is enriching a new lead, creating the contact and company, and opening a deal against them in one run.

Works as
Action
Tool name
hubspot
Parameters
53
Outputs
Output, Error
Credentials
HubSpot API
Official docs
HubSpot docs developers.hubspot.com

What you can build with HubSpot

  • Create or update a contact by email.
  • Search for contacts by property filters.
  • Create a deal in a specific pipeline stage.
  • Get all companies with pagination.
  • Create a support ticket and associate it with a company.
  • Log a meeting engagement with associated contacts.
  • Add a contact to a list by email.

Overview

The HubSpot tool provides full CRM operations for managing contacts, companies, deals, tickets, engagements (emails, tasks, meetings, calls), and contact lists. It supports create, read, update, delete, search, and bulk list operations across all HubSpot CRM object types. Uses OAuth2 / API key / App Token authentication against the HubSpot API (api.hubapi.com). Supports pagination for large result sets with returnAll/limit parameters. Contact search uses CRM v3 filter groups with property-based filtering.

Node Type

Action — processes input items and produces output

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires HubSpot API credentials. See the Credentials Guide for setup instructions.

Resources

ResourceValue
Companycompany
Contactcontact
Contact ListcontactList
Dealdeal
Engagementengagement
Ticketticket

Operations

Which operations are available depends on the selected resource — see the parameter subsections below.

OperationValueDescription
Create or UpdateupsertCreate a contact, or update the existing contact with the same email address.
DeletedeleteDelete a record by its ID.
GetgetRetrieve a single record by its ID.
Get ManygetAllList records, one output item per record.
Get Recently Created/UpdatedgetRecentlyCreatedUpdatedList records that were created or modified recently.
CreatecreateCreate a new record.
Search by DomainsearchByDomainFind companies by their website domain.
UpdateupdateUpdate an existing record by its ID.
AddaddAdd a contact to a contact list.
RemoveremoveRemove a contact from a contact list.

Parameters

Company: Create

ParameterTypeRequiredDefaultDescription
NamestringYes—The name of the company.
Company Properties (additionalFields)collectionNo{}—
— About UsstringNo——
— Annual RevenuenumberNo0—
— CitystringNo——
— Company Domain NamestringNo——
— Company Owner IDstringNo—Owner ID.
— Country/RegionstringNo——
— Custom Properties (customPropertiesUi)fixedCollectionNo{}—
— — Property NamestringNo——
— — ValuestringNo——
— DescriptionstringNo——
— IndustrystringNo—Industry value.
— Is PublicbooleanNofalse—
— Lead StatusstringNo——
— Lifecycle StatusstringNo——
— Number of EmployeesnumberNo0—
— Phone NumberstringNo——
— Postal CodestringNo——
— State/RegionstringNo——
— Street AddressstringNo——
— Street Address 2stringNo——
— TypestringNo——
— Website URLstringNo——
— Year FoundedstringNo——

Company: Delete

ParameterTypeRequiredDefaultDescription
Company IDstringYes—The HubSpot company ID.

Company: Get

ParameterTypeRequiredDefaultDescription
Company IDstringYes—The HubSpot company ID.
Additional FieldscollectionNo{}—
— Include Merge AuditsbooleanNofalse—

Company: Get Many

ParameterTypeRequiredDefaultDescription
OptionscollectionNo{}—
— PropertiesstringNo—Comma-separated list of property names to return.
— Property ModeoptionsNovalue_only—
Options: value_only, value_and_history
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)

Company: Get Recently Created/Updated

ParameterTypeRequiredDefaultDescription
Additional FieldscollectionNo{}—
— SincedateTimeNo—Only return results modified after this date.
— PropertiesstringNo——
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)

Company: Search by Domain

ParameterTypeRequiredDefaultDescription
DomainstringYes—Website domain to search (without protocol, e.g., “example.com”).
OptionscollectionNo{}—
— PropertiesstringNo—Comma-separated list of property names to include.
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)

Company: Update

ParameterTypeRequiredDefaultDescription
Company IDstringYes—The HubSpot company ID.
Update FieldscollectionNo{}—
— NamestringNo——
— About UsstringNo——
— Annual RevenuenumberNo0—
— CitystringNo——
— Company Domain NamestringNo——
— Company Owner IDstringNo——
— Country/RegionstringNo——
— Custom Properties (customPropertiesUi)fixedCollectionNo{}—
— — Property NamestringNo——
— — ValuestringNo——
— DescriptionstringNo——
— IndustrystringNo——
— Lead StatusstringNo——
— Lifecycle StatusstringNo——
— Number of EmployeesnumberNo0—
— Phone NumberstringNo——
— Postal CodestringNo——
— State/RegionstringNo——
— Street AddressstringNo——
— TypestringNo——
— Website URLstringNo——
— Year FoundedstringNo——

Contact: Create or Update

ParameterTypeRequiredDefaultDescription
EmailstringYes—Contact email address (used as unique identifier for upsert).
Contact Properties (additionalFields)collectionNo{}—
— Annual RevenuenumberNo0—
— Associated Company IDstringNo—Company ID to associate after creation.
— CitystringNo——
— Company NamestringNo——
— Contact Owner IDstringNo—Owner ID. Find via HubSpot Settings > Users & Teams.
— Country/RegionstringNo——
— Custom Properties (customPropertiesUi)fixedCollectionNo{}—
— — Property NamestringNo——
— — ValuestringNo——
— DescriptionstringNo——
— First NamestringNo——
— GenderstringNo——
— IndustrystringNo——
— Job TitlestringNo——
— Last NamestringNo——
— Lead StatusstringNo—Lead status value. Fetch valid values from GET /properties/v2/contacts/properties (hs_lead_status).
— Life Cycle StagestringNo—Lifecycle stage value (e.g., subscriber, lead, opportunity, customer).
— Mobile Phone NumberstringNo——
— Number of EmployeesstringNo——
— Original SourcestringNo——
— Phone NumberstringNo——
— Postal CodestringNo——
— State/RegionstringNo——
— Street AddressstringNo——
— Website URLstringNo——
OptionscollectionNo{}—
— Resolve DatabooleanNotrueWhether to fetch the full contact profile after upsert.

Contact: Delete

ParameterTypeRequiredDefaultDescription
Contact ID (contactId)stringYes—The VID of the contact.

Contact: Get

ParameterTypeRequiredDefaultDescription
Contact ID (contactId)stringYes—The VID of the contact.
Additional FieldscollectionNo{}—
— Form Submission ModeoptionsNoall—
Options: all, none, newest, oldest
— List MembershipsbooleanNofalse—
— PropertiesstringNo—Comma-separated list of property names to return.
— Property ModeoptionsNovalue_only—
Options: value_only, value_and_history

Contact: Get Many

ParameterTypeRequiredDefaultDescription
Additional FieldscollectionNo{}—
— Form Submission ModeoptionsNoall—
Options: all, none, newest, oldest
— List MembershipsbooleanNofalse—
— PropertiesstringNo—Comma-separated list of property names to return.
— Property ModeoptionsNovalue_only—
Options: value_only, value_and_history
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)

Contact: Get Recently Created/Updated

ParameterTypeRequiredDefaultDescription
Additional FieldscollectionNo{}—
— Form Submission ModeoptionsNoall—
Options: all, none, newest, oldest
— List MembershipsbooleanNofalse—
— PropertiesstringNo—Comma-separated list of property names to return.
— Property ModeoptionsNovalue_only—
Options: value_only, value_and_history
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)
ParameterTypeRequiredDefaultDescription
Filter Groups (filterGroupsUi)fixedCollectionNo{}Filter groups for search (max 3 groups, AND within group, OR across groups).
— FiltersfixedCollectionNo{}—
— — Property NamestringNo—Contact property internal name.
— — OperatoroptionsNoEQ—
Options: EQ (equal), NEQ (not equal), LT (less than), LTE (less than or equal), GT (greater than), GTE (greater than or equal), HAS_PROPERTY, NOT_HAS_PROPERTY, CONTAINS_TOKEN, NOT_CONTAINS_TOKEN
— — ValuestringNo——
Additional FieldscollectionNo{}—
— Sort BystringNocreatedate—
— DirectionoptionsNoDESCENDING—
Options: ASCENDING, DESCENDING
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)

Contact List: Add

ParameterTypeRequiredDefaultDescription
List IDstringYes—The ID of the contact list.
ByoptionsYesemailWhether to identify the contact by ID or email.
Options: id (Contact ID), email (Email)
EmailstringYes—(shown when By is email)
Contact ID (id)stringYes—(shown when By is id)

Contact List: Remove

ParameterTypeRequiredDefaultDescription
List IDstringYes—The ID of the contact list.
Contact ID (id)stringYes——

Deal: Create

ParameterTypeRequiredDefaultDescription
Deal Stage (stage)stringYes—Deal stage ID. Find via HubSpot Settings > Deals > Pipelines, or GET /crm-pipelines/v1/pipelines/deals.
Deal Properties (additionalFields)collectionNo{}—
— AmountstringNo——
— Associated Company IDs (associatedCompany)stringNo—Comma-separated company IDs.
— Associated Contact VIDs (associatedVids)stringNo—Comma-separated contact VIDs.
— Close DatedateTimeNo——
— Custom Properties (customPropertiesUi)fixedCollectionNo{}—
— — Property NamestringNo——
— — ValuestringNo——
— Deal NamestringNo——
— Deal Owner IDstringNo—Owner ID.
— Deal TypestringNo—Deal type value. Find via GET /properties/v1/deals/properties/named/dealtype.
— DescriptionstringNo——
— PipelinestringNo—Pipeline ID. Find via GET /crm/v3/pipelines/deals.

Deal: Delete

ParameterTypeRequiredDefaultDescription
Deal IDstringYes—The HubSpot deal ID.

Deal: Get

ParameterTypeRequiredDefaultDescription
Deal IDstringYes—The HubSpot deal ID.
FilterscollectionNo{}—
— Include Property VersionsbooleanNofalse—
— PropertiesstringNo—Comma-separated list of property names to return.

Deal: Get Many

ParameterTypeRequiredDefaultDescription
FilterscollectionNo{}—
— Include AssociationsbooleanNofalse—
— PropertiesstringNo—Comma-separated list of property names to return.
— Properties with HistorystringNo——
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)

Deal: Get Recently Created/Updated

ParameterTypeRequiredDefaultDescription
FilterscollectionNo{}—
— SincedateTimeNo——
— Include Property VersionsbooleanNofalse—
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)
ParameterTypeRequiredDefaultDescription
Filter Groups (filterGroupsUi)fixedCollectionNo{}—
— FiltersfixedCollectionNo{}—
— — Property NamestringNo——
— — OperatoroptionsNoEQ—
Options: EQ (equal), NEQ (not equal), LT (less than), LTE (less than or equal), GT (greater than), GTE (greater than or equal), HAS_PROPERTY, NOT_HAS_PROPERTY, CONTAINS_TOKEN, NOT_CONTAINS_TOKEN
— — ValuestringNo——
Additional FieldscollectionNo{}—
— Sort BystringNocreatedate—
— DirectionoptionsNoDESCENDING—
Options: ASCENDING, DESCENDING
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)

Deal: Update

ParameterTypeRequiredDefaultDescription
Deal IDstringYes—The HubSpot deal ID.
Update FieldscollectionNo{}—
— AmountstringNo——
— Close DatedateTimeNo——
— Custom Properties (customPropertiesUi)fixedCollectionNo{}—
— — Property NamestringNo——
— — ValuestringNo——
— Deal NamestringNo——
— Deal Owner IDstringNo——
— Deal TypestringNo——
— DescriptionstringNo——
— PipelinestringNo——
— StagestringNo——

Engagement: Create

ParameterTypeRequiredDefaultDescription
TypeoptionsYesemailThe type of engagement to create.
Options: call, email, meeting, task
MetadatacollectionNo{}—
— Body / NotesstringNo——
— SubjectstringNo——
— From EmailstringNo—(shown when Type is email)
— First NamestringNo—(shown when Type is email)
— Last NamestringNo—(shown when Type is email)
— CCstringNo—Comma-separated email addresses. (shown when Type is email)
— BCCstringNo—(shown when Type is email)
— HTMLstringNo—(shown when Type is email)
— TextstringNo—(shown when Type is email)
— StatusoptionsNoNOT_STARTED(shown when Type is task)
Options: NOT_STARTED, IN_PROGRESS, WAITING, COMPLETED, DEFERRED
— For Object TypeoptionsNoCONTACT(shown when Type is task)
Options: CONTACT, COMPANY, DEAL, TICKET
— Start TimedateTimeNo—(shown when Type is meeting)
— End TimedateTimeNo—(shown when Type is meeting)
— TitlestringNo—(shown when Type is meeting)
— Internal Meeting NotesstringNo—(shown when Type is meeting)
— To NumberstringNo—(shown when Type is call)
— From NumberstringNo—(shown when Type is call)
— Duration (ms)numberNo0(shown when Type is call)
— Recording URLstringNo—(shown when Type is call)
Additional FieldscollectionNo{}—
— AssociationscollectionNo{}—
— — Owner IDnumberNo0—
— — Company IDsstringNo—Comma-separated company IDs.
— — Contact IDsstringNo—Comma-separated contact VIDs.
— — Deal IDsstringNo—Comma-separated deal IDs.
— — Ticket IDsstringNo—Comma-separated ticket IDs.

Engagement: Delete

ParameterTypeRequiredDefaultDescription
Engagement IDstringYes—The HubSpot engagement ID.

Engagement: Get

ParameterTypeRequiredDefaultDescription
Engagement IDstringYes—The HubSpot engagement ID.

Engagement: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)

Ticket: Create

ParameterTypeRequiredDefaultDescription
Pipeline IDstringYes—Pipeline ID. Find via GET /crm-pipelines/v1/pipelines/tickets.
Stage IDstringYes—Stage ID within the pipeline.
Ticket NamestringYes——
Additional FieldscollectionNo{}—
— Associated Company IDsstringNo—Comma-separated company IDs to associate.
— Associated Contact IDsstringNo—Comma-separated contact IDs to associate.
— CategorystringNo—Ticket category value.
— Close DatedateTimeNo——
— Create DatedateTimeNo——
— DescriptionstringNo——
— PrioritystringNo—Ticket priority value.
— ResolutionstringNo——
— SourcestringNo——
— Ticket Owner IDstringNo——

Ticket: Delete

ParameterTypeRequiredDefaultDescription
Ticket IDstringYes——

Ticket: Get

ParameterTypeRequiredDefaultDescription
Ticket IDstringYes——
Additional FieldscollectionNo{}—
— Include DeletedbooleanNofalse—
— PropertiesstringNo—Comma-separated property names.
— Properties with HistorystringNo——

Ticket: Get Many

ParameterTypeRequiredDefaultDescription
Additional FieldscollectionNo{}—
— PropertiesstringNo——
— Properties with HistorystringNo——
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)

Ticket: Update

ParameterTypeRequiredDefaultDescription
Ticket IDstringYes——
Update FieldscollectionNo{}—
— Associated Company IDsstringNo——
— Associated Contact IDsstringNo——
— CategorystringNo——
— Close DatedateTimeNo——
— Create DatedateTimeNo——
— DescriptionstringNo——
— Pipeline IDstringNo——
— PrioritystringNo——
— ResolutionstringNo——
— SourcestringNo——
— Stage IDstringNo——
— Ticket NamestringNo——
— Ticket Owner IDstringNo——

All Operations

ParameterTypeRequiredDefaultDescription
Max ConcurrencynumberNo10Maximum number of items to process concurrently.

Output Data

The HubSpot response is merged onto the input item JSON — the fields that arrived on the item stay on it, and any field HubSpot returns under the same name overwrites the incoming one. Binary data on the input item is forwarded unchanged.

How many items come out:

  • Single-record operations — create, upsert, get, update, delete, add, remove — produce exactly one output item per input item.
  • List operations — getAll, getRecentlyCreatedUpdated, search, searchByDomain — fan out: one output item per record returned, each carrying a copy of the input item’s fields. A result set with no matches produces no output item at all for that input item, so a downstream node can receive fewer items than this node was sent.

Delete returns no body from HubSpot, so the node emits a confirmation object instead:

{
  "vid": "12345",
  "deleted": true
}

vid is the ID you supplied — Contact ID, Company ID, Deal ID, Engagement ID or Ticket ID.

Everything else is the HubSpot API response spread onto the item exactly as HubSpot returned it; the node does not rename, flatten or filter it, so the available fields are whichever ones your HubSpot portal returns for that object (and whichever ones the Properties option asked for).

OperationWhat lands on the item
upsert (Contact)With Resolve Data on (the default), the full contact profile, carrying isNew from the write. With Resolve Data off, the create/update response.
delete (Contact, Company, Deal, Engagement)The HubSpot response when there is one, otherwise the deleted confirmation shown above.
delete (Ticket)Always the deleted confirmation shown above.
getAll, getRecentlyCreatedUpdated, search, searchByDomainOne item per record, each holding that record as HubSpot returned it.
All other operationsThe HubSpot response object for the single record, spread onto the item.

Reference the result downstream by expression, e.g. {{ $json.vid }}.

Example Configuration

Create or update a contact from the email address on the incoming item, then read the full profile back:

{
  "type": "hubspot",
  "parameters": {
    "resource": "contact",
    "operation": "upsert",
    "email": "{{ $json.email }}",
    "additionalFields": {
      "firstName": "John",
      "lastName": "Doe",
      "jobTitle": "Marketing Manager",
      "companyName": "Acme Corp",
      "phoneNumber": "+1-555-0123",
      "city": "New York",
      "customPropertiesUi": {
        "customPropertiesValues": [
          { "property": "lead_source", "value": "website" }
        ]
      }
    },
    "options": {
      "resolveData": true
    }
  }
}

Search contacts by property, newest first, capped at 50 results:

{
  "type": "hubspot",
  "parameters": {
    "resource": "contact",
    "operation": "search",
    "filterGroupsUi": {
      "filterGroupsValues": [
        {
          "filtersUi": {
            "filterValues": [
              {
                "propertyName": "lifecyclestage",
                "operator": "EQ",
                "value": "marketingqualifiedlead"
              }
            ]
          }
        }
      ]
    },
    "additionalFields": {
      "sortBy": "createdate",
      "direction": "DESCENDING"
    },
    "returnAll": false,
    "limit": 50
  }
}

Create a company, naming it from the incoming item:

{
  "type": "hubspot",
  "parameters": {
    "resource": "company",
    "operation": "create",
    "name": "{{ $json.company }}",
    "additionalFields": {
      "companyDomainName": "acme.com",
      "industry": "Technology",
      "numberOfEmployees": 100,
      "annualRevenue": 5000000,
      "city": "San Francisco",
      "stateRegion": "CA",
      "websiteUrl": "https://acme.com"
    }
  }
}

Create a deal in a pipeline stage and associate it with a company:

{
  "type": "hubspot",
  "parameters": {
    "resource": "deal",
    "operation": "create",
    "stage": "appointmentscheduled",
    "additionalFields": {
      "dealName": "Acme Corp - Q1 Contract",
      "amount": "50000",
      "closeDate": "2024-03-31T23:59:59Z",
      "dealOwner": "12345",
      "associatedCompany": "67890",
      "dealType": "newbusiness"
    }
  }
}

Log a meeting engagement against a contact and a company:

{
  "type": "hubspot",
  "parameters": {
    "resource": "engagement",
    "operation": "create",
    "type": "meeting",
    "metadata": {
      "title": "Product Demo with Acme Corp",
      "body": "Product demonstration and requirements discussion",
      "startTime": "2024-02-15T14:00:00Z",
      "endTime": "2024-02-15T15:00:00Z",
      "internalMeetingNotes": "Client showed strong interest in enterprise features"
    },
    "additionalFields": {
      "associations": {
        "contactIds": "12345,67890",
        "companyIds": "54321"
      }
    }
  }
}

Error Handling

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes failed items to Error output port

Tips

HubSpot manages contacts, companies, deals, tickets, engagements and contact-list membership in a HubSpot CRM account. It is the right tool when a workflow must upsert, search, fetch or delete contacts, create, update or delete companies and search them by domain, create, update, search or delete deals, create, update or delete tickets, log or delete engagements, read recently changed records, or add and remove contacts on a list, rather than another CRM. It returns the affected or matching HubSpot records as JSON items, with getAll paging through lists.

Behavior notes

  • Expressions resolve in the identifier fields only. {{ $json.field }} is evaluated for Email, Contact ID, Name, Company ID, Domain, Deal Stage, Deal ID, Type, Engagement ID, List ID, Pipeline ID, Stage ID, Ticket Name and Ticket ID. Anything you type inside a collection — Contact/Company/Deal Properties, Update Fields, Options, Filters, Filter Groups, Metadata — is sent to HubSpot exactly as written, so put expressions in the identifier fields, not in the collections.
  • Engagement Create needs at least one Metadata field. An empty Metadata collection fails the item before any request is made.
  • Search accepts at most three filter groups. Filters inside one group are combined with AND; separate groups are combined with OR.
  • Ticket Get Many reads the whole ticket list and then applies Limit, so a small Limit makes the result shorter but not the call cheaper.

Common Patterns

  • Bulk operations with pagination — for operations that return large datasets, always set Return All or a Limit deliberately, and narrow the payload with the Properties option.
  • Custom properties — the Custom Properties collection works the same way on contacts, companies and deals: one Property Name / Value pair per custom field.
  • Search with multiple filter groups — use several filter groups when you need OR logic between conditions, and several filters inside one group for AND logic.

Error Prevention Tips

  1. Always specify required parameters for each operation type
  2. Use correct data types - strings for IDs, numbers for numeric values, ISO 8601 for dates
  3. Follow collection structures exactly - flat objects for collections, proper groupKeys for fixedCollections
  4. Check display conditions - ensure parameter combinations are valid for the selected resource and operation
  5. Use proper property names - refer to HubSpot documentation for exact custom property internal names

Frequently asked questions

Why is my expression not being evaluated?

Expressions resolve in the identifier fields only — Email, Contact ID, Name, Company ID, Domain, Deal Stage, Deal ID, Type, Engagement ID, List ID, Pipeline ID, Stage ID, Ticket Name and Ticket ID. Anything typed inside a collection such as Properties, Update Fields, Options, Filters or Metadata is sent to HubSpot exactly as written.

How should I set custom property values then?

Put the expression in an identifier field where it resolves, or compute the value upstream and reference it there. Inside the property collections the literal text is transmitted.

Can I search rather than fetch by ID?

Yes — search is supported alongside CRUD, so you can find records by criteria when you do not hold the HubSpot ID.

How do I react to changes in HubSpot?

Use the HubSpot Trigger for inbound events and this node for the follow-up work. They use different credentials: the trigger needs a HubSpot Developer credential, this node a HubSpot API credential.

Build with HubSpot

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need HubSpot API credentials first.

Open BusyBot

Last reviewed . Spotted something wrong? Tell us.