Skip to main content

highlevel_api/
client.rs

1use crate::{
2    apis::{
3        associations::AssociationsApi, blogs::BlogsApi, businesses::BusinessesApi,
4        calendars::CalendarsApi, campaigns::CampaignsApi, companies::CompaniesApi,
5        contacts::ContactsApi, conversations::ConversationsApi, courses::CoursesApi,
6        custom_fields::CustomFieldsApi, custom_menus::CustomMenusApi, forms::FormsApi,
7        funnels::FunnelsApi, invoices::InvoicesApi, links::LinksApi, locations::LocationsApi,
8        medias::MediasApi, objects::ObjectsApi, opportunities::OpportunitiesApi,
9        payments::PaymentsApi, pipelines::PipelinesApi, products::ProductsApi,
10        snapshots::SnapshotsApi, social_planner::SocialPlannerApi, surveys::SurveysApi,
11        tags::TagsApi, users::UsersApi, webhooks::WebhooksApi, workflows::WorkflowsApi,
12    },
13    auth::OAuthClient,
14    config::HighLevelConfig,
15    http::HttpClient,
16};
17use std::sync::Arc;
18
19/// The main entry point for the HighLevel API SDK.
20///
21/// # Quick start
22///
23/// ```no_run
24/// use highlevel_api::{HighLevel, HighLevelConfig};
25///
26/// #[tokio::main]
27/// async fn main() {
28///     let client = HighLevel::new(HighLevelConfig::new("client_id", "client_secret"));
29///     client.set_access_token("your_access_token").await;
30/// }
31/// ```
32pub struct HighLevel {
33    pub(crate) http: Arc<HttpClient>,
34    pub(crate) config: Arc<HighLevelConfig>,
35}
36
37impl HighLevel {
38    pub fn new(config: HighLevelConfig) -> Self {
39        let http = Arc::new(HttpClient::new(&config));
40        Self {
41            http,
42            config: Arc::new(config),
43        }
44    }
45
46    /// Set the Bearer token used for all API calls.
47    pub async fn set_access_token(&self, token: impl Into<String>) {
48        self.http.set_token(token.into()).await;
49    }
50
51    /// Returns the current access token, if one has been set.
52    pub async fn access_token(&self) -> Option<String> {
53        self.http.get_token().await
54    }
55
56    pub fn oauth(&self) -> OAuthClient {
57        OAuthClient::new(self.config.clone(), reqwest::Client::new())
58    }
59
60    // ── API accessors ────────────────────────────────────────────────────────
61
62    pub fn associations(&self) -> AssociationsApi {
63        AssociationsApi::new(self.http.clone())
64    }
65    pub fn blogs(&self) -> BlogsApi {
66        BlogsApi::new(self.http.clone())
67    }
68    pub fn businesses(&self) -> BusinessesApi {
69        BusinessesApi::new(self.http.clone())
70    }
71    pub fn calendars(&self) -> CalendarsApi {
72        CalendarsApi::new(self.http.clone())
73    }
74    pub fn campaigns(&self) -> CampaignsApi {
75        CampaignsApi::new(self.http.clone())
76    }
77    pub fn companies(&self) -> CompaniesApi {
78        CompaniesApi::new(self.http.clone())
79    }
80    pub fn contacts(&self) -> ContactsApi {
81        ContactsApi::new(self.http.clone())
82    }
83    pub fn conversations(&self) -> ConversationsApi {
84        ConversationsApi::new(self.http.clone())
85    }
86    pub fn courses(&self) -> CoursesApi {
87        CoursesApi::new(self.http.clone())
88    }
89    pub fn custom_fields(&self) -> CustomFieldsApi {
90        CustomFieldsApi::new(self.http.clone())
91    }
92    pub fn custom_menus(&self) -> CustomMenusApi {
93        CustomMenusApi::new(self.http.clone())
94    }
95    pub fn forms(&self) -> FormsApi {
96        FormsApi::new(self.http.clone())
97    }
98    pub fn funnels(&self) -> FunnelsApi {
99        FunnelsApi::new(self.http.clone())
100    }
101    pub fn invoices(&self) -> InvoicesApi {
102        InvoicesApi::new(self.http.clone())
103    }
104    pub fn links(&self) -> LinksApi {
105        LinksApi::new(self.http.clone())
106    }
107    pub fn locations(&self) -> LocationsApi {
108        LocationsApi::new(self.http.clone())
109    }
110    pub fn medias(&self) -> MediasApi {
111        MediasApi::new(self.http.clone())
112    }
113    pub fn objects(&self) -> ObjectsApi {
114        ObjectsApi::new(self.http.clone())
115    }
116    pub fn opportunities(&self) -> OpportunitiesApi {
117        OpportunitiesApi::new(self.http.clone())
118    }
119    pub fn payments(&self) -> PaymentsApi {
120        PaymentsApi::new(self.http.clone())
121    }
122    pub fn pipelines(&self) -> PipelinesApi {
123        PipelinesApi::new(self.http.clone())
124    }
125    pub fn products(&self) -> ProductsApi {
126        ProductsApi::new(self.http.clone())
127    }
128    pub fn snapshots(&self) -> SnapshotsApi {
129        SnapshotsApi::new(self.http.clone())
130    }
131    pub fn social_planner(&self) -> SocialPlannerApi {
132        SocialPlannerApi::new(self.http.clone())
133    }
134    pub fn surveys(&self) -> SurveysApi {
135        SurveysApi::new(self.http.clone())
136    }
137    pub fn tags(&self) -> TagsApi {
138        TagsApi::new(self.http.clone())
139    }
140    pub fn users(&self) -> UsersApi {
141        UsersApi::new(self.http.clone())
142    }
143    pub fn webhooks(&self) -> WebhooksApi {
144        WebhooksApi::new(self.http.clone())
145    }
146    pub fn workflows(&self) -> WorkflowsApi {
147        WorkflowsApi::new(self.http.clone())
148    }
149}