hubspot

package module
v0.0.0-...-bcf3713 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 22, 2021 License: Apache-2.0 Imports: 11 Imported by: 0

README

go-hubspot

godoc License

HubSpot Go Library that works with HubSpot API v3.
HubSpot officially supports client library of Node.js, PHP, Ruby, and Python but not Go.

Note: go-hubspot currently doesn't cover all the APIs but mainly implemented CRM APIs. Implemented APIs are used in production.

Install

$ go get github.com/FrankieHealth/go-hubspot

Usage

Authentication

API key

You should take api key in advance. Follow steps in here.

// Initialize hubspot client with apikey
client, _ := hubspot.NewClient(hubspot.SetAPIKey("YOUR_API_KEY"))
OAuth

You should take refresh token in advance. Follow steps in here.

// Initialize hubspot client with OAuth refresh token.
client, _ := hubspot.NewClient(hubspot.SetOAuth(&hubspot.OAuthConfig{
    GrantType:    hubspot.GrantTypeRefreshToken,
    ClientID:     "YOUR_CLIENT_ID",
    ClientSecret: "YOUR_CLIENT_SECRET",
    RefreshToken: "YOUR_REFRESH_TOKEN",
}))

API call

Get contact
// Initialize hubspot client with auth method.
client, _ := hubspot.NewClient(hubspot.SetAPIKey("YOUR_API_KEY"))

// Get a Contact object whose id is `yourContactID`.
// Contact instance needs to be provided to bind response value.
res, _ := client.CRM.Contact.Get("yourContactID", &hubspot.Contact{}, nil)

// Type assertion to convert `interface` to `hubspot.Contact`.
contact, ok := res.Properties.(*hubspot.Contact)
if !ok {
    return errors.New("unable to assert type")
}

// Use contact fields.
fmt.Println(contact.FirstName, contact.LastName)

Create contact
// Initialize hubspot client with auth method.
client, _ := hubspot.NewClient(hubspot.SetAPIKey("YOUR_API_KEY"))

// Create request payload.
req := &hubspot.Contact{
    Email:       hubspot.NewString("yourEmail"),
    FirstName:   hubspot.NewString("yourFirstName"),
    LastName:    hubspot.NewString("yourLastName"),
    MobilePhone: hubspot.NewString("yourMobilePhone"),
    Website:     hubspot.NewString("yourWebsite"),
    Zip:         nil,
}

// Call create contact api.
res, _ := client.CRM.Contact.Create(req)

// Type assertion to convert `interface` to `hubspot.Contact`.
contact, ok := res.Properties.(*hubspot.Contact)
if !ok {
    return errors.New("unable to assert type")
}

// Use contact fields.
fmt.Println(contact.FirstName, contact.LastName)

Associate objects
// Initialize hubspot client with auth method.
client, _ := hubspot.NewClient(hubspot.SetAPIKey("YOUR_API_KEY"))

// Call associate api.
client.CRM.Contact.AssociateAnotherObj("yourContactID", &hubspot.AssociationConfig{
    ToObject:   hubspot.ObjectTypeDeal,
    ToObjectID: "yourDealID",
    Type:       hubspot.AssociationTypeContactToDeal,
})

API call using custom fields

Custom fields are added out of existing object such as Deal or Contact.
Therefore a new struct needs to be created which contain default fields and additional custom field, and set to Properties field of a request. Before using custom field through API, the field needs to be set up in HubSpot web site.

Get deal with custom fields.
type CustomDeal struct {
	hubspot.Deal // embed default fields.
	CustomA string `json:"custom_a,omitempty"`
	CustomB string `json:"custom_b,omitempty"`
}

// Initialize hubspot client with auth method.
client, _ := hubspot.NewClient(hubspot.SetAPIKey("YOUR_API_KEY"))

// Get a Deal object whose id is `yourDealID`.
// CustomDeal instance needs to be provided as to bind response value contained custom fields.
res, _ := client.CRM.Deal.Get("yourDealID", &CustomDeal{}, &hubspot.RequestQueryOption{
    CustomProperties: []string{
        "custom_a",
        "custom_b",
    },
})

// Type assertion to convert `interface` to `CustomDeal`.
customDeal, ok := res.Properties.(*CustomDeal)
if !ok {
    return errors.New("unable to assert type")
}

// Use custom deal fields.
fmt.Println(customDeal.CustomA, customDeal.CustomB)

Create deal with custom properties.
type CustomDeal struct {
	hubspot.Deal // embed default fields.
	CustomA string `json:"custom_a,omitempty"`
	CustomB string `json:"custom_b,omitempty"`
}

// Initialize hubspot client with auth method.
client, _ := hubspot.NewClient(hubspot.SetAPIKey("YOUR_API_KEY"))

req := &CustomDeal{
    Deal: hubspot.Deal{
        Amount:      hubspot.NewString("yourAmount"),
        DealName:    hubspot.NewString("yourDealName"),
        DealStage:   hubspot.NewString("yourDealStage"),
        DealOwnerID: hubspot.NewString("yourDealOwnerID"),
        PipeLine:    hubspot.NewString("yourPipeLine"),
    },
    CustomA: "yourCustomFieldA",
    CustomB: "yourCustomFieldB",
}

// Call create deal api with custom struct.
res, _ := client.CRM.Deal.Create(req)

// Type assertion to convert `interface` to `CustomDeal`.
customDeal, ok := res.Properties.(*CustomDeal)
if !ok {
    return errors.New("unable to type assertion")
}

// Use custom deal fields.
fmt.Println(customDeal.CustomA, customDeal.CustomB)

API availability

Category API Availability
CRM Deal Available
CRM Contact Available
CMS All Not Implemented
Conversations All Not Implemented
Events All Not Implemented
Marketing All Not Implemented
Files All Not Implemented
Settings All Not Implemented
Webhooks All Not Implemented

Authentication availability

Type Availability
API key Available
OAuth Available
Private apps Not Implemented

Contributing

Contributions are generally welcome.
Please refer to CONTRIBUTING.md when making your contribution.

Documentation

Index

Examples

Constants

View Source
const (
	// ValidationError is the APIError.Category.
	// This is returned by HubSpot when the HTTP Status is 400.
	// In this case, the verification details error will be included in Details
	ValidationError = "VALIDATION_ERROR"

	// InvalidEmailError is the value of ErrDetail.Error when an error occurs in the Email validation.
	InvalidEmailError = "INVALID_EMAIL"
	// UnknownDetailError is the value set by go-hubspot when extraction the error details failed.
	UnknownDetailError = "UNKNOWN_DETAIL"
)
View Source
const (
	GrantTypeRefreshToken = "refresh_token"
)

Variables

View Source
var BlankStr = NewString("")

BlankStr should be used to include empty string in HubSpot fields. This is because fields set to `nil` will be ignored by omitempty.

Functions

func CheckResponseError

func CheckResponseError(r *http.Response) error

CheckResponseError checks the response, and in case of error, maps it to the error structure.

func SetAuthentication

func SetAuthentication(r *http.Request) error

Types

type APIError

type APIError struct {
	HTTPStatusCode int         `json:"-"`
	Status         string      `json:"status,omitempty"`
	Message        string      `json:"message,omitempty"`
	CorrelationID  string      `json:"correlationId,omitempty"`
	Context        ErrContext  `json:"context,omitempty"`
	Category       string      `json:"category,omitempty"`
	SubCategory    string      `json:"subCategory,omitempty"`
	Links          ErrLinks    `json:"links,omitempty"`
	Details        []ErrDetail `json:"details,omitempty"`
}

func (APIError) Error

func (e APIError) Error() string

type APIKey

type APIKey struct {
	// contains filtered or unexported fields
}

func (*APIKey) SetAuthentication

func (a *APIKey) SetAuthentication(r *http.Request) error

type AssociationConfig

type AssociationConfig struct {
	ToObject   ObjectType
	ToObjectID string
	Type       AssociationType
}

type AssociationResult

type AssociationResult struct {
	ID   string `json:"id"`
	Type string `json:"type"`
}

type AssociationType

type AssociationType string

AssociationType is the name of the key used to associate the objects together.

const (
	AssociationTypeContactToCompany    AssociationType = "contact_to_company"
	AssociationTypeContactToDeal       AssociationType = "contact_to_deal"
	AssociationTypeContactToEngagement AssociationType = "contact_to_engagement"
	AssociationTypeContactToTicket     AssociationType = "contact_to_ticket"

	AssociationTypeDealToContact    AssociationType = "deal_to_contact"
	AssociationTypeDealToCompany    AssociationType = "deal_to_company"
	AssociationTypeDealToEngagement AssociationType = "deal_to_engagement"
	AssociationTypeDealToLineItem   AssociationType = "deal_to_line_item"
	AssociationTypeDealToTicket     AssociationType = "deal_to_ticket"

	AssociationTypeCompanyToContact AssociationType = "company_to_contact"
)

Default association types Reference: https://legacydocs.hubspot.com/docs/methods/crm-associations/crm-associations-overview

type Associations

type Associations struct {
	Contacts struct {
		Results []AssociationResult `json:"results"`
	} `json:"contacts"`
	Deals struct {
		Results []AssociationResult `json:"results"`
	} `json:"deals"`
	Companies struct {
		Results []AssociationResult `json:"results"`
	} `json:"companies"`
}

type AuthMethod

type AuthMethod func(c *Client)

func SetAPIKey

func SetAPIKey(key string) AuthMethod

func SetOAuth

func SetOAuth(config *OAuthConfig) AuthMethod

type Authenticator

type Authenticator interface {
	SetAuthentication(r *http.Request) error
}

type CRM

type CRM struct {
	Contact ContactService
	Company CompanyService
	Deal    DealService
}

type Client

type Client struct {
	HTTPClient *http.Client

	CRM *CRM
	// contains filtered or unexported fields
}

Client manages communication with the HubSpot API.

func NewClient

func NewClient(opts ...Option) (*Client, error)

NewClient returns a new HubSpot API client with APIKey or OAuthConfig. HubSpot officially recommends authentication with OAuth. e.g. hubspot.NewClient(hubspot.SetAPIKey("key"))

func (*Client) CreateAndDo

func (c *Client) CreateAndDo(method, relPath string, data, option, resource interface{}) error

CreateAndDo performs a web request to HubSpot. The `data`, `options` and `resource` arguments are optional and only relevant in certain situations. If the data argument is non-nil, it will be used as the body of the request for POST and PUT requests. The options argument is used for specifying request options such as search parameters. The resource argument is marshalled data returned from HubSpot. If the resource contains a pointer to data, the data will be overwritten with the content of the response.

func (*Client) Delete

func (c *Client) Delete(path string) error

Delete performs a DELETE request for the given path.

func (*Client) Get

func (c *Client) Get(path string, resource interface{}, option *RequestQueryOption) error

Get performs a GET request for the given path and saves the result in the given resource.

func (*Client) NewRequest

func (c *Client) NewRequest(method, path string, body, option interface{}) (*http.Request, error)

NewRequest creates an API request. After creating a request, add the authentication information according to the method specified in NewClient().

func (*Client) Patch

func (c *Client) Patch(path string, data, resource interface{}) error

Patch performs a PATCH request for the given path and saves the result in the given resource.

func (*Client) Post

func (c *Client) Post(path string, data, resource interface{}) error

Post performs a POST request for the given path and saves the result in the given resource.

func (*Client) Put

func (c *Client) Put(path string, data, resource interface{}) error

Put performs a PUT request for the given path and saves the result in the given resource.

type Company

type Company struct {
	AboutUs                   *HsStr  `json:"about_us,omitempty"`
	AnnualRevenue             *HsStr  `json:"annualrevenue,omitempty"`
	City                      *HsStr  `json:"city,omitempty"`
	CloseDate                 *HsTime `json:"closedate,omitempty"`
	CompanySize               *HsStr  `json:"company_size,omitempty"`
	Country                   *HsStr  `json:"country,omitempty"`
	CreateDate                *HsTime `json:"createdate,omitempty"`
	DaysToClose               *HsStr  `json:"days_to_close,omitempty"`
	HsCreateDate              *HsTime `json:"hs_createdate,omitempty"`
	HsSequencesIsEnrolled     HsBool  `json:"hs_sequences_is_enrolled,omitempty"`
	HubspotOwnerAssignedDate  *HsTime `json:"hubspot_owner_assigneddate,omitempty"`
	HubspotOwnerID            *HsStr  `json:"hubspot_owner_id,omitempty"`
	HubspotTeamID             *HsStr  `json:"hubspot_team_id,omitempty"`
	HubspotScore              *HsStr  `json:"hubspotscore,omitempty"`
	HsObjectID                *HsStr  `json:"hs_object_id,omitempty"`
	Industry                  *HsStr  `json:"industry,omitempty"`
	LastModifiedDate          *HsTime `json:"lastmodifieddate,omitempty"`
	LifeCycleStage            *HsStr  `json:"lifecyclestage,omitempty"`
	Message                   *HsStr  `json:"message,omitempty"`
	Name                      *HsStr  `json:"name,omitempty"`
	NumAssociatedDeals        *HsStr  `json:"num_associated_deals,omitempty"`
	NumNotes                  *HsStr  `json:"num_notes,omitempty"`
	NumUniqueConversionEvents *HsStr  `json:"num_unique_conversion_events,omitempty"`
	NumEmployees              *HsStr  `json:"numemployees,omitempty"`
	RecentConversionDate      *HsTime `json:"recent_conversion_date,omitempty"`
	RecentConversionEventName *HsStr  `json:"recent_conversion_event_name,omitempty"`
	RecentDealAmount          *HsStr  `json:"recent_deal_amount,omitempty"`
	RecentDealCloseDate       *HsTime `json:"recent_deal_close_date,omitempty"`
	State                     *HsStr  `json:"state,omitempty"`
	TotalRevenue              *HsStr  `json:"total_revenue,omitempty"`
	Website                   *HsStr  `json:"website,omitempty"`
	Zip                       *HsStr  `json:"zip,omitempty"`
}

type CompanyService

type CompanyService interface {
	Get(companyID string, company interface{}, option *RequestQueryOption) (*ResponseResource, error)
	Create(company interface{}) (*ResponseResource, error)
	Update(companyID string, company interface{}) (*ResponseResource, error)
	AssociateAnotherObj(companyID string, conf *AssociationConfig) (*ResponseResource, error)
}

CompanyService is an interface of company endpoints of the HubSpot API. HubSpot companies store information about individuals. It can also be associated with other CRM objects such as deal and company. Reference: https://developers.hubspot.com/docs/api/crm/companies

type CompanyServiceOp

type CompanyServiceOp struct {
	// contains filtered or unexported fields
}

CompanyServiceOp handles communication with the product related methods of the HubSpot API.

func (*CompanyServiceOp) AssociateAnotherObj

func (s *CompanyServiceOp) AssociateAnotherObj(companyID string, conf *AssociationConfig) (*ResponseResource, error)

AssociateAnotherObj associates company with another HubSpot objects. If you want to associate a custom object, please use a defined value in HubSpot.

func (*CompanyServiceOp) Create

func (s *CompanyServiceOp) Create(company interface{}) (*ResponseResource, error)

Create creates a new company. In order to bind the created content, a structure must be specified as an argument. When using custom fields, please embed hubspot.Company in your own structure.

func (*CompanyServiceOp) Get

func (s *CompanyServiceOp) Get(companyID string, company interface{}, option *RequestQueryOption) (*ResponseResource, error)

Get gets a company. In order to bind the get content, a structure must be specified as an argument. Also, if you want to gets a custom field, you need to specify the field name. If you specify a non-existent field, it will be ignored. e.g. &hubspot.RequestQueryOption{ Properties: []string{"custom_a", "custom_b"}}

func (*CompanyServiceOp) Update

func (s *CompanyServiceOp) Update(companyID string, company interface{}) (*ResponseResource, error)

Update updates a company. In order to bind the updated content, a structure must be specified as an argument. When using custom fields, please embed hubspot.Company in your own structure.

type Contact

type Contact struct {
	Address                                     *HsStr  `json:"address,omitempty"`
	AnnualRevenue                               *HsStr  `json:"annualrevenue,omitempty"`
	City                                        *HsStr  `json:"city,omitempty"`
	CloseDate                                   *HsTime `json:"closedate,omitempty"`
	Company                                     *HsStr  `json:"company,omitempty"`
	CompanySize                                 *HsStr  `json:"company_size,omitempty"`
	Country                                     *HsStr  `json:"country,omitempty"`
	CreateDate                                  *HsTime `json:"createdate,omitempty"`
	CurrentlyInWorkflow                         *HsStr  `json:"currentlyinworkflow,omitempty"`
	DateOfBirth                                 *HsStr  `json:"date_of_birth,omitempty"`
	DaysToClose                                 *HsStr  `json:"days_to_close,omitempty"`
	Degree                                      *HsStr  `json:"degree,omitempty"`
	Email                                       *HsStr  `json:"email,omitempty"`
	EngagementsLastMeetingBooked                *HsTime `json:"engagements_last_meeting_booked,omitempty"`
	EngagementsLastMeetingBookedCampaign        *HsStr  `json:"engagements_last_meeting_booked_campaign,omitempty"`
	EngagementsLastMeetingBookedMedium          *HsStr  `json:"engagements_last_meeting_booked_medium,omitempty"`
	EngagementsLastMeetingBookedSource          *HsStr  `json:"engagements_last_meeting_booked_source,omitempty"`
	Fax                                         *HsStr  `json:"fax,omitempty"`
	FieldOfStudy                                *HsStr  `json:"field_of_study,omitempty"`
	FirstConversionDate                         *HsTime `json:"first_conversion_date,omitempty"`
	FirstConversionEventName                    *HsStr  `json:"first_conversion_event_name,omitempty"`
	FirstDealCreatedDate                        *HsTime `json:"first_deal_created_date,omitempty"`
	FirstName                                   *HsStr  `json:"firstname,omitempty"`
	Gender                                      *HsStr  `json:"gender,omitempty"`
	GraduationDate                              *HsStr  `json:"graduation_date,omitempty"`
	HsAnalyticsAveragePageViews                 *HsStr  `json:"hs_analytics_average_page_views,omitempty"`
	HsAnalyticsFirstReferrer                    *HsStr  `json:"hs_analytics_first_referrer,omitempty"`
	HsAnalyticsFirstTimestamp                   *HsTime `json:"hs_analytics_first_timestamp,omitempty"`
	HsAnalyticsFirstTouchConvertingCampaign     *HsStr  `json:"hs_analytics_first_touch_converting_campaign,omitempty"`
	HsAnalyticsFirstURL                         *HsStr  `json:"hs_analytics_first_url,omitempty"`
	HsAnalyticsFirstVisitTimestamp              *HsTime `json:"hs_analytics_first_visit_timestamp,omitempty"`
	HsAnalyticsLastReferrer                     *HsStr  `json:"hs_analytics_last_referrer,omitempty"`
	HsAnalyticsLastTimestamp                    *HsTime `json:"hs_analytics_last_timestamp,omitempty"`
	HsAnalyticsLastTouchConvertingCampaign      *HsStr  `json:"hs_analytics_last_touch_converting_campaign,omitempty"`
	HsAnalyticsLastURL                          *HsStr  `json:"hs_analytics_last_url,omitempty"`
	HsAnalyticsLastVisitTimestamp               *HsTime `json:"hs_analytics_last_visit_timestamp,omitempty"`
	HsAnalyticsNumEventCompletions              *HsStr  `json:"hs_analytics_num_event_completions,omitempty"`
	HsAnalyticsNumPageViews                     *HsStr  `json:"hs_analytics_num_page_views,omitempty"`
	HsAnalyticsNumVisits                        *HsStr  `json:"hs_analytics_num_visits,omitempty"`
	HsAnalyticsRevenue                          *HsStr  `json:"hs_analytics_revenue,omitempty"`
	HsAnalyticsSource                           *HsStr  `json:"hs_analytics_source,omitempty"`
	HsAnalyticsSourceData1                      *HsStr  `json:"hs_analytics_source_data_1,omitempty"`
	HsAnalyticsSourceData2                      *HsStr  `json:"hs_analytics_source_data_2,omitempty"`
	HsBuyingRole                                *HsStr  `json:"hs_buying_role,omitempty"`
	HsContentMembershipEmailConfirmed           HsBool  `json:"hs_content_membership_email_confirmed,omitempty"`
	HsContentMembershipNotes                    *HsStr  `json:"hs_content_membership_notes,omitempty"`
	HsContentMembershipRegisteredAt             *HsTime `json:"hs_content_membership_registered_at,omitempty"`
	HsContentMembershipRegistrationDomainSentTo *HsStr  `json:"hs_content_membership_registration_domain_sent_to,omitempty"`
	HsContentMembershipRegistrationEmailSentAt  *HsTime `json:"hs_content_membership_registration_email_sent_at,omitempty"`
	HsContentMembershipStatus                   *HsStr  `json:"hs_content_membership_status,omitempty"`
	HsCreateDate                                *HsTime `json:"hs_createdate,omitempty"`
	HsEmailBadAddress                           HsBool  `json:"hs_email_bad_address,omitempty"`
	HsEmailBounce                               *HsStr  `json:"hs_email_bounce,omitempty"`
	HsEmailClick                                *HsStr  `json:"hs_email_click,omitempty"`
	HsEmailClickDate                            *HsTime `json:"hs_email_first_click_date,omitempty"`
	HsEmailDelivered                            *HsStr  `json:"hs_email_delivered,omitempty"`
	HsEmailDomain                               *HsStr  `json:"hs_email_domain,omitempty"`
	HsEmailFirstOpenDate                        *HsTime `json:"hs_email_first_open_date,omitempty"`
	HsEmailFirstSendDate                        *HsTime `json:"hs_email_first_send_date,omitempty"`
	HsEmailHardBounceReasonEnum                 *HsStr  `json:"hs_email_hard_bounce_reason_enum,omitempty"`
	HsEmailLastClickDate                        *HsTime `json:"hs_email_last_click_date,omitempty"`
	HsEmailLastEmailName                        *HsStr  `json:"hs_email_last_email_name,omitempty"`
	HsEmailLastOpenDate                         *HsTime `json:"hs_email_last_open_date,omitempty"`
	HsEmailLastSendDate                         *HsTime `json:"hs_email_last_send_date,omitempty"`
	HsEmailOpen                                 *HsStr  `json:"hs_email_open,omitempty"`
	HsEmailOpenDate                             *HsTime `json:"hs_email_open_date,omitempty"`
	HsEmailOptOut                               HsBool  `json:"hs_email_optout,omitempty"`
	HsEmailOptOut6766004                        *HsStr  `json:"hs_email_optout_6766004,omitempty"`
	HsEmailOptOut6766098                        *HsStr  `json:"hs_email_optout_6766098,omitempty"`
	HsEmailOptOut6766099                        *HsStr  `json:"hs_email_optout_6766099,omitempty"`
	HsEmailOptOut6766130                        *HsStr  `json:"hs_email_optout_6766130,omitempty"`
	HsEmailQuarantined                          HsBool  `json:"hs_email_quarantined,omitempty"`
	HsEmailSendsSinceLastEngagement             *HsStr  `json:"hs_email_sends_since_last_engagement,omitempty"`
	HsEmailConfirmationStatus                   *HsStr  `json:"hs_emailconfirmationstatus,omitempty"`
	HsFeedbackLastNpsFollowUp                   *HsStr  `json:"hs_feedback_last_nps_follow_up,omitempty"`
	HsFeedbackLastNpsRating                     *HsStr  `json:"hs_feedback_last_nps_rating,omitempty"`
	HsFeedbackLastSurveyDate                    *HsTime `json:"hs_feedback_last_survey_date,omitempty"`
	HsIPTimezone                                *HsStr  `json:"hs_ip_timezone,omitempty"`
	HsIsUnworked                                *HsStr  `json:"hs_is_unworked,omitempty"`
	HsLanguage                                  *HsStr  `json:"hs_language,omitempty"`
	HsLastSalesActivityTimestamp                *HsTime `json:"hs_last_sales_activity_timestamp,omitempty"`
	HsLeadStatus                                *HsStr  `json:"hs_lead_status,omitempty"`
	HsLifeCycleStageCustomerDate                *HsTime `json:"hs_lifecyclestage_customer_date,omitempty"`
	HsLifeCycleStageEvangelistDate              *HsTime `json:"hs_lifecyclestage_evangelist_date,omitempty"`
	HsLifeCycleStageLeadDate                    *HsTime `json:"hs_lifecyclestage_lead_date,omitempty"`
	HsLifeCycleStageMarketingQualifiedLeadDate  *HsTime `json:"hs_lifecyclestage_marketingqualifiedlead_date,omitempty"`
	HsLifeCycleStageOpportunityDate             *HsTime `json:"hs_lifecyclestage_opportunity_date,omitempty"`
	HsLifeCycleStageOtherDate                   *HsTime `json:"hs_lifecyclestage_other_date,omitempty"`
	HsLifeCycleStageSalesQualifiedLeadDate      *HsTime `json:"hs_lifecyclestage_salesqualifiedlead_date,omitempty"`
	HsLifeCycleStageSubscriberDate              *HsTime `json:"hs_lifecyclestage_subscriber_date,omitempty"`
	HsMarketableReasonID                        *HsStr  `json:"hs_marketable_reason_id,omitempty"`
	HsMarketableReasonType                      *HsStr  `json:"hs_marketable_reason_type,omitempty"`
	HsMarketableStatus                          *HsStr  `json:"hs_marketable_status,omitempty"`
	HsMarketableUntilRenewal                    *HsStr  `json:"hs_marketable_until_renewal,omitempty"`
	HsObjectID                                  *HsStr  `json:"hs_object_id,omitempty"`
	HsPersona                                   *HsStr  `json:"hs_persona,omitempty"`
	HsPredictiveContactScoreV2                  *HsStr  `json:"hs_predictivecontactscore_v2,omitempty"`
	HsPredictiveScoringTier                     *HsStr  `json:"hs_predictivescoringtier,omitempty"`
	HsSalesEmailLastClicked                     *HsTime `json:"hs_sales_email_last_clicked,omitempty"`
	HsSalesEmailLastOpened                      *HsTime `json:"hs_sales_email_last_opened,omitempty"`
	HsSalesEmailLastReplied                     *HsTime `json:"hs_sales_email_last_replied,omitempty"`
	HsSequencesIsEnrolled                       HsBool  `json:"hs_sequences_is_enrolled,omitempty"`
	HubspotOwnerAssignedDate                    *HsTime `json:"hubspot_owner_assigneddate,omitempty"`
	HubspotOwnerID                              *HsStr  `json:"hubspot_owner_id,omitempty"`
	HubspotTeamID                               *HsStr  `json:"hubspot_team_id,omitempty"`
	HubspotScore                                *HsStr  `json:"hubspotscore,omitempty"`
	Industry                                    *HsStr  `json:"industry,omitempty"`
	IPCity                                      *HsStr  `json:"ip_city,omitempty"`
	IPCountry                                   *HsStr  `json:"ip_country,omitempty"`
	IPCountryCode                               *HsStr  `json:"ip_country_code,omitempty"`
	IPState                                     *HsStr  `json:"ip_state,omitempty"`
	IPStateCode                                 *HsStr  `json:"ip_state_code,omitempty"`
	JobFunction                                 *HsStr  `json:"job_function,omitempty"`
	JobTitle                                    *HsStr  `json:"jobtitle,omitempty"`
	LastModifiedDate                            *HsTime `json:"lastmodifieddate,omitempty"`
	LastName                                    *HsStr  `json:"lastname,omitempty"`
	LifeCycleStage                              *HsStr  `json:"lifecyclestage,omitempty"`
	MaritalStatus                               *HsStr  `json:"marital_status,omitempty"`
	Message                                     *HsStr  `json:"message,omitempty"`
	MilitaryStatus                              *HsStr  `json:"military_status,omitempty"`
	MobilePhone                                 *HsStr  `json:"mobilephone,omitempty"`
	NotesLastContacted                          *HsTime `json:"notes_last_contacted,omitempty"`
	NotesLastUpdated                            *HsTime `json:"notes_last_updated,omitempty"`
	NotesNextActivityDate                       *HsTime `json:"notes_next_activity_date,omitempty"`
	NumAssociatedDeals                          *HsStr  `json:"num_associated_deals,omitempty"`
	NumContactedNotes                           *HsStr  `json:"num_contacted_notes,omitempty"`
	NumNotes                                    *HsStr  `json:"num_notes,omitempty"`
	NumUniqueConversionEvents                   *HsStr  `json:"num_unique_conversion_events,omitempty"`
	NumEmployees                                *HsStr  `json:"numemployees,omitempty"`
	RecentConversionDate                        *HsTime `json:"recent_conversion_date,omitempty"`
	RecentConversionEventName                   *HsStr  `json:"recent_conversion_event_name,omitempty"`
	RecentDealAmount                            *HsStr  `json:"recent_deal_amount,omitempty"`
	RecentDealCloseDate                         *HsTime `json:"recent_deal_close_date,omitempty"`
	RelationshipStatus                          *HsStr  `json:"relationship_status,omitempty"`
	Salutation                                  *HsStr  `json:"salutation,omitempty"`
	School                                      *HsStr  `json:"school,omitempty"`
	Seniority                                   *HsStr  `json:"seniority,omitempty"`
	StartDate                                   *HsStr  `json:"start_date,omitempty"`
	State                                       *HsStr  `json:"state,omitempty"`
	TotalRevenue                                *HsStr  `json:"total_revenue,omitempty"`
	Website                                     *HsStr  `json:"website,omitempty"`
	WorkEmail                                   *HsStr  `json:"work_email,omitempty"`
	Zip                                         *HsStr  `json:"zip,omitempty"`
}

type ContactService

type ContactService interface {
	Get(contactID string, contact interface{}, option *RequestQueryOption) (*ResponseResource, error)
	GetByEmail(email string, contact interface{}, option *RequestQueryOption) (*ResponseResource, error)
	Create(contact interface{}) (*ResponseResource, error)
	Update(contactID string, contact interface{}) (*ResponseResource, error)
	AssociateAnotherObj(contactID string, conf *AssociationConfig) (*ResponseResource, error)
}

ContactService is an interface of contact endpoints of the HubSpot API. HubSpot contacts store information about individuals. It can also be associated with other CRM objects such as deal and company. Reference: https://developers.hubspot.com/docs/api/crm/contacts

type ContactServiceOp

type ContactServiceOp struct {
	// contains filtered or unexported fields
}

ContactServiceOp handles communication with the product related methods of the HubSpot API.

func (*ContactServiceOp) AssociateAnotherObj

func (s *ContactServiceOp) AssociateAnotherObj(contactID string, conf *AssociationConfig) (*ResponseResource, error)

AssociateAnotherObj associates Contact with another HubSpot objects. If you want to associate a custom object, please use a defined value in HubSpot.

Example
cli, _ := hubspot.NewClient(hubspot.SetAPIKey("apikey"))

res, err := cli.CRM.Contact.AssociateAnotherObj("contact001", &hubspot.AssociationConfig{
	ToObject:   hubspot.ObjectTypeDeal,
	ToObjectID: "deal001",
	Type:       hubspot.AssociationTypeContactToDeal,
})
if err != nil {
	log.Fatal(err)
}

r, ok := res.Properties.(*hubspot.Contact)
if !ok {
	log.Fatal("unable to type assertion")
}

// use properties
_ = r

fmt.Println(res)
Output:

func (*ContactServiceOp) Create

func (s *ContactServiceOp) Create(contact interface{}) (*ResponseResource, error)

Create creates a new contact. In order to bind the created content, a structure must be specified as an argument. When using custom fields, please embed hubspot.Contact in your own structure.

Example
cli, _ := hubspot.NewClient(hubspot.SetAPIKey("apikey"))

example := &ExampleContact{
	email:     "hubspot@example.com",
	firstName: "Bryan",
	lastName:  "Cooper",
	phone:     "(877) 929-0687",
}

contact := &hubspot.Contact{
	Email:       hubspot.NewString(example.email),
	FirstName:   hubspot.NewString(example.firstName),
	LastName:    hubspot.NewString(example.lastName),
	MobilePhone: hubspot.NewString(example.phone),
	Website:     hubspot.NewString("example.com"),
	Zip:         nil,
}

res, err := cli.CRM.Contact.Create(contact)
if err != nil {
	log.Fatal(err)
}

r, ok := res.Properties.(*hubspot.Contact)
if !ok {
	log.Fatal("unable to type assertion")
}

// use properties
_ = r

fmt.Println(res)
Output:

func (*ContactServiceOp) Get

func (s *ContactServiceOp) Get(contactID string, contact interface{}, option *RequestQueryOption) (*ResponseResource, error)

Get gets a contact. In order to bind the get content, a structure must be specified as an argument. Also, if you want to gets a custom field, you need to specify the field name. If you specify a non-existent field, it will be ignored. e.g. &hubspot.RequestQueryOption{ Properties: []string{"custom_a", "custom_b"}}

Example
cli, _ := hubspot.NewClient(hubspot.SetAPIKey("apikey"))

res, err := cli.CRM.Contact.Get("contact001", &hubspot.Contact{}, nil)
if err != nil {
	log.Fatal(err)
}

r, ok := res.Properties.(*hubspot.Contact)
if !ok {
	log.Fatal("unable to type assertion")
}

// use properties
_ = r

fmt.Println(res)
Output:

func (*ContactServiceOp) GetByEmail

func (s *ContactServiceOp) GetByEmail(email string, contact interface{}, option *RequestQueryOption) (*ResponseResource, error)

Get gets a contact by email. In order to bind the get content, a structure must be specified as an argument. Also, if you want to gets a custom field, you need to specify the field name. If you specify a non-existent field, it will be ignored. e.g. &hubspot.RequestQueryOption{ Properties: []string{"custom_a", "custom_b"}}

func (*ContactServiceOp) Update

func (s *ContactServiceOp) Update(contactID string, contact interface{}) (*ResponseResource, error)

Update updates a contact. In order to bind the updated content, a structure must be specified as an argument. When using custom fields, please embed hubspot.Contact in your own structure.

Example
cli, _ := hubspot.NewClient(hubspot.SetAPIKey("apikey"))

example := &ExampleContact{
	email:     "hubspot@example.com",
	firstName: "Bryan",
	lastName:  "Cooper",
	phone:     "(877) 929-0687",
	zip:       "1000001",
}

contact := &hubspot.Contact{
	Email:       hubspot.NewString(example.email),
	FirstName:   hubspot.NewString(example.firstName),
	LastName:    hubspot.NewString(example.lastName),
	MobilePhone: hubspot.NewString(example.phone),
	Website:     hubspot.NewString("example.com"),
	Zip:         hubspot.NewString(example.zip),
}

res, err := cli.CRM.Contact.Update("contact001", contact)
if err != nil {
	log.Fatal(err)
}

r, ok := res.Properties.(*hubspot.Contact)
if !ok {
	log.Fatal("unable to type assertion")
}

// use properties
_ = r

fmt.Println(res)
Output:

type Deal

type Deal struct {
	Amount                  *HsStr `json:"amount,omitempty"`
	AmountInCompanyCurrency *HsStr `json:"amount_in_home_currency,omitempty"`
	AnnualContractValue     *HsStr `json:"hs_acv,omitempty"`
	AnnualRecurringRevenue  *HsStr `json:"hs_arr,omitempty"`
	ClosedLostReason        *HsStr `json:"closed_lost_reason,omitempty"`
	ClosedWonReason         *HsStr `json:"closed_won_reason,omitempty"`
	DealDescription         *HsStr `json:"description,omitempty"`
	DealName                *HsStr `json:"dealname,omitempty"`
	DealOwnerID             *HsStr `json:"hubspot_owner_id,omitempty"`
	DealStage               *HsStr `json:"dealstage,omitempty"`
	DealType                *HsStr `json:"dealtype,omitempty"`
	ForecastAmount          *HsStr `json:"hs_forecast_amount,omitempty"`
	ForecastCategory        *HsStr `json:"hs_forecast_category,omitempty"`
	ForecastProbability     *HsStr `json:"hs_forecast_probability,omitempty"`
	MonthlyRecurringRevenue *HsStr `json:"hs_mrr,omitempty"`
	NextStep                *HsStr `json:"hs_next_step,omitempty"`
	NumberOfContacts        *HsStr `json:"num_associated_contacts,omitempty"`
	NumberOfSalesActivities *HsStr `json:"num_notes,omitempty"`
	NumberOfTimesContacted  *HsStr `json:"num_contacted_notes,omitempty"`
	ObjectID                *HsStr `json:"hs_object_id,omitempty"`
	PipeLine                *HsStr `json:"pipeline,omitempty"`
	TeamID                  *HsStr `json:"hubspot_team_id,omitempty"`
	TotalContractValue      *HsStr `json:"hs_tcv,omitempty"`

	CreateDate        *HsTime `json:"createdate,omitempty"`
	CloseDate         *HsTime `json:"closedate,omitempty"`
	LastActivityDate  *HsTime `json:"notes_last_updated,omitempty"`
	LastContacted     *HsTime `json:"notes_last_contacted,omitempty"`
	LastModifiedDate  *HsTime `json:"hs_lastmodifieddate,omitempty"`
	NextActivityDate  *HsTime `json:"notes_next_activity_date,omitempty"`
	OwnerAssignedDate *HsTime `json:"hubspot_owner_assigneddate,omitempty"`
}

Deal represents a HubSpot deal.

type DealService

type DealService interface {
	Get(dealID string, deal interface{}, option *RequestQueryOption) (*ResponseResource, error)
	Create(deal interface{}) (*ResponseResource, error)
	Update(dealID string, deal interface{}) (*ResponseResource, error)
	AssociateAnotherObj(dealID string, conf *AssociationConfig) (*ResponseResource, error)
}

DealService is an interface of deal endpoints of the HubSpot API. HubSpot deal can be used to manage transactions. It can also be associated with other CRM objects such as contact and company. Reference: https://developers.hubspot.com/docs/api/crm/deals

type DealServiceOp

type DealServiceOp struct {
	// contains filtered or unexported fields
}

DealServiceOp handles communication with the product related methods of the HubSpot API.

func (*DealServiceOp) AssociateAnotherObj

func (s *DealServiceOp) AssociateAnotherObj(dealID string, conf *AssociationConfig) (*ResponseResource, error)

AssociateAnotherObj associates Deal with another HubSpot objects. If you want to associate a custom object, please use a defined value in HubSpot.

Example
cli, _ := hubspot.NewClient(hubspot.SetAPIKey("apikey"))

res, err := cli.CRM.Deal.AssociateAnotherObj("deal001", &hubspot.AssociationConfig{
	ToObject:   hubspot.ObjectTypeContact,
	ToObjectID: "contact001",
	Type:       hubspot.AssociationTypeDealToContact,
})
if err != nil {
	log.Fatal(err)
}

r, ok := res.Properties.(*hubspot.Deal)
if !ok {
	log.Fatal("unable to type assertion")
}

// use properties
_ = r

fmt.Println(res)
Output:

func (*DealServiceOp) Create

func (s *DealServiceOp) Create(deal interface{}) (*ResponseResource, error)

Create creates a new deal. In order to bind the created content, a structure must be specified as an argument. When using custom fields, please embed hubspot.Deal in your own structure.

Example (Apikey)
cli, _ := hubspot.NewClient(hubspot.SetAPIKey("apikey"))

example := &ExampleDeal{
	amount:  "1500.00",
	name:    "Custom data integrations",
	stage:   "presentation scheduled",
	ownerID: "910901",
}

deal := &hubspot.Deal{
	Amount:      hubspot.NewString(example.amount),
	DealName:    hubspot.NewString(example.name),
	DealStage:   hubspot.NewString(example.stage),
	DealOwnerID: hubspot.NewString(example.ownerID),
	PipeLine:    hubspot.NewString("default"),
}

res, err := cli.CRM.Deal.Create(deal)
if err != nil {
	log.Fatal(err)
}

r, ok := res.Properties.(*hubspot.Deal)
if !ok {
	log.Fatal("unable to type assertion")
}

// use properties
_ = r

fmt.Println(res)
Output:

Example (Custom)
cli, _ := hubspot.NewClient(hubspot.SetAPIKey("apikey"))

example := &ExampleDeal{
	amount:  "1500.00",
	name:    "Custom data integrations",
	stage:   "presentation scheduled",
	ownerID: "910901",
}

// Take advantage of structure embedding when using custom fields.
deal := &CustomDeal{
	Deal: hubspot.Deal{
		Amount:      hubspot.NewString(example.amount),
		DealName:    hubspot.NewString(example.name),
		DealStage:   hubspot.NewString(example.stage),
		DealOwnerID: hubspot.NewString(example.ownerID),
		PipeLine:    hubspot.NewString("default"),
	},
	CustomA: "custom field A",
	CustomB: "custom field B",
}

res, err := cli.CRM.Deal.Create(deal)
if err != nil {
	log.Fatal(err)
}

r, ok := res.Properties.(*CustomDeal)
if !ok {
	log.Fatal("unable to type assertion")
}

// use custom struct
_ = r
Output:

Example (Oauth)
cli, _ := hubspot.NewClient(hubspot.SetOAuth(&hubspot.OAuthConfig{
	GrantType:    hubspot.GrantTypeRefreshToken,
	ClientID:     "hubspot-client-id",
	ClientSecret: "hubspot-client-secret",
	RefreshToken: "hubspot-refresh-token",
}))

example := &ExampleDeal{
	amount:  "1500.00",
	name:    "Custom data integrations",
	stage:   "presentation scheduled",
	ownerID: "910901",
}

deal := &hubspot.Deal{
	Amount:      hubspot.NewString(example.amount),
	DealName:    hubspot.NewString(example.name),
	DealStage:   hubspot.NewString(example.stage),
	DealOwnerID: hubspot.NewString(example.ownerID),
	PipeLine:    hubspot.NewString("default"),
}

res, err := cli.CRM.Deal.Create(deal)
if err != nil {
	log.Fatal(err)
}

r, ok := res.Properties.(*hubspot.Deal)
if !ok {
	log.Fatal("unable to type assertion")
}

// use properties
_ = r

fmt.Println(res)
Output:

func (*DealServiceOp) Get

func (s *DealServiceOp) Get(dealID string, deal interface{}, option *RequestQueryOption) (*ResponseResource, error)

Get gets a deal. In order to bind the get content, a structure must be specified as an argument. Also, if you want to gets a custom field, you need to specify the field name. If you specify a non-existent field, it will be ignored. e.g. &hubspot.RequestQueryOption{ Properties: []string{"custom_a", "custom_b"}}

Example
cli, _ := hubspot.NewClient(hubspot.SetAPIKey("apikey"))

res, err := cli.CRM.Deal.Get("deal001", &hubspot.Deal{}, nil)
if err != nil {
	log.Fatal(err)
}

r, ok := res.Properties.(*hubspot.Deal)
if !ok {
	log.Fatal("unable to type assertion")
}

// use properties
_ = r

fmt.Println(res)
Output:

Example (Custom)
cli, _ := hubspot.NewClient(hubspot.SetAPIKey("apikey"))

res, err := cli.CRM.Deal.Get("deal001", &CustomDeal{}, &hubspot.RequestQueryOption{
	CustomProperties: []string{
		"custom_a",
		"custom_b",
	},
})
if err != nil {
	log.Fatal(err)
}

r, ok := res.Properties.(*CustomDeal)
if !ok {
	log.Fatal("unable to type assertion")
}

// use properties
_ = r

fmt.Println(res)
Output:

func (*DealServiceOp) Update

func (s *DealServiceOp) Update(dealID string, deal interface{}) (*ResponseResource, error)

Update updates a deal. In order to bind the updated content, a structure must be specified as an argument. When using custom fields, please embed hubspot.Deal in your own structure.

Example
cli, _ := hubspot.NewClient(hubspot.SetAPIKey("apikey"))

example := &ExampleDeal{
	amount:  "1500.00",
	name:    "Custom data integrations",
	stage:   "presentation scheduled",
	ownerID: "910901",
}

deal := &hubspot.Deal{
	Amount:      hubspot.NewString(example.amount),
	DealName:    hubspot.NewString(example.name),
	DealStage:   hubspot.NewString(example.stage),
	DealOwnerID: hubspot.NewString(example.ownerID),
	PipeLine:    hubspot.NewString("default"),
}

res, err := cli.CRM.Deal.Update("deal001", deal)
if err != nil {
	log.Fatal(err)
}

r, ok := res.Properties.(*hubspot.Deal)
if !ok {
	log.Fatal("unable to type assertion")
}

// use properties
_ = r

fmt.Println(res)
Output:

type ErrContext

type ErrContext struct {
	ID             []string `json:"id,omitempty"`
	Type           []string `json:"type,omitempty"`
	ObjectType     []string `json:"objectType,omitempty"`
	FromObjectType []string `json:"fromObjectType,omitempty"`
	ToObjectType   []string `json:"toObjectType,omitempty"`
}

type ErrDetail

type ErrDetail struct {
	IsValid bool   `json:"isValid,omitempty"`
	Message string `json:"message,omitempty"`
	Error   string `json:"error,omitempty"`
	Name    string `json:"name,omitempty"`
}
type ErrLinks struct {
	APIKey        string `json:"api key,omitempty"`
	KnowledgeBase string `json:"knowledge-base,omitempty"`
}

type HsBool

type HsBool bool

func (*HsBool) UnmarshalJSON

func (hb *HsBool) UnmarshalJSON(b []byte) error

UnmarshalJSON implemented json.Unmarshaler. This is because there are cases where the Time value returned by HubSpot is null or "true" / "false".

type HsStr

type HsStr string

func NewString

func NewString(s string) *HsStr

NewString returns pointer HsStr(string). Use it to convert values that are not held in variables. Make sure to use BlankStr for empty string.

func (HsStr) String

func (hs HsStr) String() string

String implemented Stringer.

type HsTime

type HsTime time.Time

func (*HsTime) String

func (ht *HsTime) String() string

String implemented Stringer. If the value is zero, it will be displayed as `<nil>`.

func (*HsTime) ToTime

func (ht *HsTime) ToTime() *time.Time

ToTime convert HsTime to time.Time. If the value is zero, it will be return nil.

func (*HsTime) UnmarshalJSON

func (ht *HsTime) UnmarshalJSON(b []byte) error

UnmarshalJSON implemented json.Unmarshaler. This is because there are cases where the Time value returned by HubSpot is null or empty string. The time.Time does not support Parse with empty string.

type OAuth

type OAuth struct {
	// contains filtered or unexported fields
}

func (*OAuth) SetAuthentication

func (o *OAuth) SetAuthentication(r *http.Request) error

type OAuthConfig

type OAuthConfig struct {
	GrantType    string `json:"grant_type"`
	ClientID     string `json:"client_id"`
	ClientSecret string `json:"client_secret"`
	RefreshToken string `json:"refresh_token"`
}

type OAuthToken

type OAuthToken struct {
	AccessToken  string    `json:"access_token"`
	RefreshToken string    `json:"refresh_token"`
	ExpiresIn    int       `json:"expires_in"`
	Expiry       time.Time `json:"-"`
}

type OAuthTokenManager

type OAuthTokenManager struct {
	HTTPClient *http.Client
	Config     *OAuthConfig
	Token      *OAuthToken
	// contains filtered or unexported fields
}

func (*OAuthTokenManager) RetrieveToken

func (otm *OAuthTokenManager) RetrieveToken() (*OAuthToken, error)

type OAuthTokenRetriever

type OAuthTokenRetriever interface {
	RetrieveToken() (*OAuthToken, error)
}

type ObjectType

type ObjectType string

ObjectType is the name used in object association.

const (
	ObjectTypeContact ObjectType = "contacts"
	ObjectTypeDeal    ObjectType = "deals"
	ObjectTypeCompany ObjectType = "companies"
)

Default Object types

type Option

type Option func(c *Client)

func WithAPIVersion

func WithAPIVersion(version string) Option

func WithBaseURL

func WithBaseURL(url *url.URL) Option

func WithHTTPClient

func WithHTTPClient(client *http.Client) Option

type RequestFilterGroup

type RequestFilterGroup struct {
	Operator     string `json:"operator,omitempty"`
	PropertyName string `json:"propertyName,omitempty"`
	Value        string `json:"value,omitempty"`
}

RequestSearchPayload is common request structure for HubSpot APIs.

type RequestFilterType

type RequestFilterType struct {
	Filters []RequestFilterGroup `json:"filters,omitempty"`
}

type RequestPayload

type RequestPayload struct {
	Properties interface{} `json:"properties,omitempty"`
}

RequestPayload is common request structure for HubSpot APIs.

type RequestQueryOption

type RequestQueryOption struct {
	Properties           []string `url:"properties,comma,omitempty"`
	CustomProperties     []string `url:"-"`
	Associations         []string `url:"associations,comma,omitempty"`
	PaginateAssociations bool     `url:"paginateAssociations,omitempty"` // HubSpot defaults false
	Archived             bool     `url:"archived,omitempty"`             // HubSpot defaults false
	IDProperty           string   `url:"idProperty,omitempty"`
}

RequestQueryOption is a set of options to be specified in the query when making a Get request. RequestQueryOption.Properties will be overwritten internally, so do not specify it. If you want to get the custom fields as well, specify the field names in RequestQueryOption.CustomProperties. Items with no value set will be ignored.

type ResponseResource

type ResponseResource struct {
	ID           string        `json:"id,omitempty"`
	Archived     bool          `json:"archived,omitempty"`
	Associations *Associations `json:"associations,omitempty"`
	Properties   interface{}   `json:"properties,omitempty"`
	CreatedAt    *HsTime       `json:"createdAt,omitempty"`
	UpdatedAt    *HsTime       `json:"updatedAt,omitempty"`
	ArchivedAt   *HsTime       `json:"archivedAt,omitempty"`
}

ResponseResource is common response structure for HubSpot APIs.

type SearchRequestPayload

type SearchRequestPayload struct {
	After        int                 `json:"after,omitempty"`
	FilterGroups []RequestFilterType `json:"filterGroups,omitempty"`
	Properties   []string            `json:"properties,omitempty"`
	Limit        int                 `json:"limit,omitempty"`
	Sorts        []string            `json:"sorts,omitempty"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL