highlevel-api 0.2.1

Unofficial Rust SDK for the GoHighLevel (HighLevel) API
Documentation
use crate::{
    apis::{
        associations::AssociationsApi, blogs::BlogsApi, businesses::BusinessesApi,
        calendars::CalendarsApi, campaigns::CampaignsApi, companies::CompaniesApi,
        contacts::ContactsApi, conversations::ConversationsApi, courses::CoursesApi,
        custom_fields::CustomFieldsApi, custom_menus::CustomMenusApi, forms::FormsApi,
        funnels::FunnelsApi, invoices::InvoicesApi, links::LinksApi, locations::LocationsApi,
        medias::MediasApi, objects::ObjectsApi, opportunities::OpportunitiesApi,
        payments::PaymentsApi, pipelines::PipelinesApi, products::ProductsApi,
        snapshots::SnapshotsApi, social_planner::SocialPlannerApi, surveys::SurveysApi,
        tags::TagsApi, users::UsersApi, webhooks::WebhooksApi, workflows::WorkflowsApi,
    },
    auth::OAuthClient,
    config::HighLevelConfig,
    http::HttpClient,
};
use std::sync::Arc;

/// The main entry point for the HighLevel API SDK.
///
/// # Quick start
///
/// ```no_run
/// use highlevel_api::{HighLevel, HighLevelConfig};
///
/// #[tokio::main]
/// async fn main() {
///     let client = HighLevel::new(HighLevelConfig::new("client_id", "client_secret"));
///     client.set_access_token("your_access_token").await;
/// }
/// ```
pub struct HighLevel {
    pub(crate) http: Arc<HttpClient>,
    pub(crate) config: Arc<HighLevelConfig>,
}

impl HighLevel {
    pub fn new(config: HighLevelConfig) -> Self {
        let http = Arc::new(HttpClient::new(&config));
        Self {
            http,
            config: Arc::new(config),
        }
    }

    /// Set the Bearer token used for all API calls.
    pub async fn set_access_token(&self, token: impl Into<String>) {
        self.http.set_token(token.into()).await;
    }

    /// Returns the current access token, if one has been set.
    pub async fn access_token(&self) -> Option<String> {
        self.http.get_token().await
    }

    pub fn oauth(&self) -> OAuthClient {
        OAuthClient::new(self.config.clone(), reqwest::Client::new())
    }

    // ── API accessors ────────────────────────────────────────────────────────

    pub fn associations(&self) -> AssociationsApi {
        AssociationsApi::new(self.http.clone())
    }
    pub fn blogs(&self) -> BlogsApi {
        BlogsApi::new(self.http.clone())
    }
    pub fn businesses(&self) -> BusinessesApi {
        BusinessesApi::new(self.http.clone())
    }
    pub fn calendars(&self) -> CalendarsApi {
        CalendarsApi::new(self.http.clone())
    }
    pub fn campaigns(&self) -> CampaignsApi {
        CampaignsApi::new(self.http.clone())
    }
    pub fn companies(&self) -> CompaniesApi {
        CompaniesApi::new(self.http.clone())
    }
    pub fn contacts(&self) -> ContactsApi {
        ContactsApi::new(self.http.clone())
    }
    pub fn conversations(&self) -> ConversationsApi {
        ConversationsApi::new(self.http.clone())
    }
    pub fn courses(&self) -> CoursesApi {
        CoursesApi::new(self.http.clone())
    }
    pub fn custom_fields(&self) -> CustomFieldsApi {
        CustomFieldsApi::new(self.http.clone())
    }
    pub fn custom_menus(&self) -> CustomMenusApi {
        CustomMenusApi::new(self.http.clone())
    }
    pub fn forms(&self) -> FormsApi {
        FormsApi::new(self.http.clone())
    }
    pub fn funnels(&self) -> FunnelsApi {
        FunnelsApi::new(self.http.clone())
    }
    pub fn invoices(&self) -> InvoicesApi {
        InvoicesApi::new(self.http.clone())
    }
    pub fn links(&self) -> LinksApi {
        LinksApi::new(self.http.clone())
    }
    pub fn locations(&self) -> LocationsApi {
        LocationsApi::new(self.http.clone())
    }
    pub fn medias(&self) -> MediasApi {
        MediasApi::new(self.http.clone())
    }
    pub fn objects(&self) -> ObjectsApi {
        ObjectsApi::new(self.http.clone())
    }
    pub fn opportunities(&self) -> OpportunitiesApi {
        OpportunitiesApi::new(self.http.clone())
    }
    pub fn payments(&self) -> PaymentsApi {
        PaymentsApi::new(self.http.clone())
    }
    pub fn pipelines(&self) -> PipelinesApi {
        PipelinesApi::new(self.http.clone())
    }
    pub fn products(&self) -> ProductsApi {
        ProductsApi::new(self.http.clone())
    }
    pub fn snapshots(&self) -> SnapshotsApi {
        SnapshotsApi::new(self.http.clone())
    }
    pub fn social_planner(&self) -> SocialPlannerApi {
        SocialPlannerApi::new(self.http.clone())
    }
    pub fn surveys(&self) -> SurveysApi {
        SurveysApi::new(self.http.clone())
    }
    pub fn tags(&self) -> TagsApi {
        TagsApi::new(self.http.clone())
    }
    pub fn users(&self) -> UsersApi {
        UsersApi::new(self.http.clone())
    }
    pub fn webhooks(&self) -> WebhooksApi {
        WebhooksApi::new(self.http.clone())
    }
    pub fn workflows(&self) -> WorkflowsApi {
        WorkflowsApi::new(self.http.clone())
    }
}