Versions in this module Expand all Collapse all v0 v0.4.0 Jun 8, 2026 v0.3.0 Jun 8, 2026 v0.2.0 Jun 8, 2026 v0.1.0 Jun 7, 2026 Changes in this version + const SDKName + const SDKVersion + var ErrMissingAPIKey = errors.New("aha: api key is required") + var ErrMissingSubdomain = errors.New("aha: subdomain is required") + func IsForbidden(err error) bool + func IsNotFound(err error) bool + func IsRateLimited(err error) bool + func IsServerError(err error) bool + func IsUnauthorized(err error) bool + type APIError struct + Message string + RequestID string + StatusCode int + func (e *APIError) Error() string + type Attachment struct + ContentType string + DownloadURL string + FileName string + FileSize int64 + ID string + type Category struct + CreatedAt time.Time + ID string + Name string + ParentID string + ProjectID string + type Client struct + func NewClient(opts ...Option) (*Client, error) + func (c *Client) API() *api.Client + func (c *Client) APIKey() string + func (c *Client) BaseURL() string + func (c *Client) CreateEpic(ctx context.Context, releaseID string, opts ...CreateEpicOption) (*Epic, error) + func (c *Client) CreateFeature(ctx context.Context, releaseID string, opts ...CreateFeatureOption) (*Feature, error) + func (c *Client) CreateFeatureComment(ctx context.Context, featureID string, opts ...CreateCommentOption) (*Comment, error) + func (c *Client) CreateGoal(ctx context.Context, productID string, opts ...CreateGoalOption) (*Goal, error) + func (c *Client) CreateIdeaComment(ctx context.Context, ideaID string, opts ...CreateCommentOption) (*Comment, error) + func (c *Client) CreateInitiative(ctx context.Context, productID string, opts ...CreateInitiativeOption) (*Initiative, error) + func (c *Client) CreateRequirement(ctx context.Context, featureID string, opts ...CreateRequirementOption) (*Requirement, error) + func (c *Client) CreateStrategicModel(ctx context.Context, productID string, kind string, ...) (*StrategicModel, error) + func (c *Client) DeleteComment(ctx context.Context, id string) error + func (c *Client) DeleteRequirement(ctx context.Context, id string) error + func (c *Client) DoRaw(ctx context.Context, method, path string, body []byte) (*http.Response, error) + func (c *Client) GetComment(ctx context.Context, id string) (*Comment, error) + func (c *Client) GetCurrentUser(ctx context.Context) (*User, error) + func (c *Client) GetEpic(ctx context.Context, id string) (*Epic, error) + func (c *Client) GetFeature(ctx context.Context, id string) (*Feature, error) + func (c *Client) GetGoal(ctx context.Context, id string) (*Goal, error) + func (c *Client) GetIdea(ctx context.Context, id string) (*Idea, error) + func (c *Client) GetInitiative(ctx context.Context, id string) (*Initiative, error) + func (c *Client) GetProduct(ctx context.Context, id string) (*Product, error) + func (c *Client) GetRelease(ctx context.Context, id string) (*Release, error) + func (c *Client) GetRequirement(ctx context.Context, id string) (*Requirement, error) + func (c *Client) GetStrategicModel(ctx context.Context, id string) (*StrategicModel, error) + func (c *Client) GetUser(ctx context.Context, id string) (*User, error) + func (c *Client) HTTPClient() *http.Client + func (c *Client) ListEpicComments(ctx context.Context, epicID string, opts ...ListOption) (*CommentList, error) + func (c *Client) ListEpics(ctx context.Context, opts ...ListEpicsOption) (*EpicList, error) + func (c *Client) ListFeatureComments(ctx context.Context, featureID string, opts ...ListOption) (*CommentList, error) + func (c *Client) ListFeatureRequirements(ctx context.Context, featureID string, opts ...ListOption) (*RequirementList, error) + func (c *Client) ListFeatures(ctx context.Context, opts ...ListFeaturesOption) (*FeatureList, error) + func (c *Client) ListGoalComments(ctx context.Context, goalID string, opts ...ListOption) (*CommentList, error) + func (c *Client) ListGoals(ctx context.Context, opts ...ListGoalsOption) (*GoalList, error) + func (c *Client) ListIdeaComments(ctx context.Context, ideaID string, opts ...ListOption) (*CommentList, error) + func (c *Client) ListIdeas(ctx context.Context, opts ...ListIdeasOption) (*IdeaList, error) + func (c *Client) ListInitiativeComments(ctx context.Context, initiativeID string, opts ...ListOption) (*CommentList, error) + func (c *Client) ListInitiatives(ctx context.Context, opts ...ListInitiativesOption) (*InitiativeList, error) + func (c *Client) ListProductComments(ctx context.Context, productID string, opts ...ListOption) (*CommentList, error) + func (c *Client) ListProductEpics(ctx context.Context, productID string, opts ...ListOption) (*EpicList, error) + func (c *Client) ListProductGoals(ctx context.Context, productID string, opts ...ListOption) (*GoalList, error) + func (c *Client) ListProductInitiatives(ctx context.Context, productID string, opts ...ListOption) (*InitiativeList, error) + func (c *Client) ListProductReleases(ctx context.Context, productID string, opts ...ListOption) (*ReleaseList, error) + func (c *Client) ListProductStrategicModels(ctx context.Context, productID string, opts ...ListStrategicModelsOption) (*StrategicModelList, error) + func (c *Client) ListProductWorkflows(ctx context.Context, productID string) (*WorkflowList, error) + func (c *Client) ListProducts(ctx context.Context, opts ...ListOption) (*ProductList, error) + func (c *Client) ListReleaseComments(ctx context.Context, releaseID string, opts ...ListOption) (*CommentList, error) + func (c *Client) ListReleaseFeatures(ctx context.Context, releaseID string, opts ...ListOption) (*FeatureList, error) + func (c *Client) ListStrategicModels(ctx context.Context, opts ...ListStrategicModelsOption) (*StrategicModelList, error) + func (c *Client) ListUsers(ctx context.Context, opts ...ListOption) (*UserList, error) + func (c *Client) Subdomain() string + func (c *Client) UpdateComment(ctx context.Context, id string, opts ...UpdateCommentOption) (*Comment, error) + func (c *Client) UpdateEpic(ctx context.Context, id string, opts ...UpdateEpicOption) (*Epic, error) + func (c *Client) UpdateFeature(ctx context.Context, id string, opts ...UpdateFeatureOption) (*Feature, error) + func (c *Client) UpdateGoal(ctx context.Context, id string, opts ...UpdateGoalOption) (*Goal, error) + func (c *Client) UpdateInitiative(ctx context.Context, id string, opts ...UpdateInitiativeOption) (*Initiative, error) + func (c *Client) UpdateRelease(ctx context.Context, id string, opts ...UpdateReleaseOption) (*Release, error) + func (c *Client) UpdateRequirement(ctx context.Context, id string, opts ...UpdateRequirementOption) (*Requirement, error) + func (c *Client) UpdateStrategicModel(ctx context.Context, id string, opts ...UpdateStrategicModelOption) (*StrategicModel, error) + func (c *Client) UpdateStrategicModelComponent(ctx context.Context, modelID, componentID, description string) (*StrategicModelComponent, error) + type Comment struct + Attachments []Attachment + Body string + Commentable *Commentable + CreatedAt time.Time + ID string + Resource string + URL string + UpdatedAt time.Time + User *User + type CommentList struct + Comments []CommentMeta + Pagination Pagination + type CommentMeta struct + Body string + CreatedAt time.Time + ID string + Resource string + URL string + User *User + type Commentable struct + ID string + ProductID string + Resource string + Type string + URL string + type Config struct + APIKey string + BaseURL string + HTTPClient *http.Client + Subdomain string + Timeout time.Duration + type CreateCommentOption func(*CreateCommentOptions) + func WithCommentBody(body string) CreateCommentOption + type CreateCommentOptions struct + Body string + type CreateEpicOption func(*CreateEpicOptions) + func WithEpicColor(color string) CreateEpicOption + func WithEpicDescription(desc string) CreateEpicOption + func WithEpicDueDate(t time.Time) CreateEpicOption + func WithEpicInitiative(initiative string) CreateEpicOption + func WithEpicName(name string) CreateEpicOption + func WithEpicStartDate(t time.Time) CreateEpicOption + func WithEpicStatus(status string) CreateEpicOption + type CreateEpicOptions struct + Color string + Description string + DueDate *time.Time + Initiative string + Name string + StartDate *time.Time + WorkflowStatus string + type CreateFeatureOption func(*CreateFeatureOptions) + func WithFeatureAssignedTo(email string) CreateFeatureOption + func WithFeatureDescription(desc string) CreateFeatureOption + func WithFeatureDueDate(t time.Time) CreateFeatureOption + func WithFeatureEstimate(estimate string) CreateFeatureOption + func WithFeatureInitiative(initiative string) CreateFeatureOption + func WithFeatureName(name string) CreateFeatureOption + func WithFeatureStartDate(t time.Time) CreateFeatureOption + func WithFeatureStatus(status string) CreateFeatureOption + func WithFeatureTags(tags string) CreateFeatureOption + type CreateFeatureOptions struct + AssignedToUser string + Description string + DueDate *time.Time + Initiative string + Name string + OriginalEstimate string + StartDate *time.Time + Tags string + WorkflowStatus string + type CreateGoalOption func(*CreateGoalOptions) + func WithGoalDescription(desc string) CreateGoalOption + func WithGoalEndDate(t time.Time) CreateGoalOption + func WithGoalName(name string) CreateGoalOption + func WithGoalStartDate(t time.Time) CreateGoalOption + func WithGoalStatus(status string) CreateGoalOption + type CreateGoalOptions struct + Description string + EndDate *time.Time + Name string + StartDate *time.Time + WorkflowStatus string + type CreateInitiativeOption func(*CreateInitiativeOptions) + func WithInitiativeColor(color string) CreateInitiativeOption + func WithInitiativeDescription(desc string) CreateInitiativeOption + func WithInitiativeEffort(effort float64) CreateInitiativeOption + func WithInitiativeEndDate(t time.Time) CreateInitiativeOption + func WithInitiativeName(name string) CreateInitiativeOption + func WithInitiativeStartDate(t time.Time) CreateInitiativeOption + func WithInitiativeStatus(status string) CreateInitiativeOption + func WithInitiativeValue(value float64) CreateInitiativeOption + type CreateInitiativeOptions struct + Color string + Description string + Effort *float64 + EndDate *time.Time + Name string + Presented *bool + StartDate *time.Time + Value *float64 + WorkflowStatus string + type CreateRequirementOption func(*CreateRequirementOptions) + func WithRequirementAssignedTo(user string) CreateRequirementOption + func WithRequirementDescription(desc string) CreateRequirementOption + func WithRequirementEstimate(estimate float64) CreateRequirementOption + func WithRequirementName(name string) CreateRequirementOption + func WithRequirementStatus(status string) CreateRequirementOption + type CreateRequirementOptions struct + AssignedToUser string + Description string + Name string + OriginalEstimate *float64 + WorkflowStatus string + type CreateStrategicModelOption func(*CreateStrategicModelOptions) + func WithStrategicModelDescription(desc string) CreateStrategicModelOption + func WithStrategicModelName(name string) CreateStrategicModelOption + type CreateStrategicModelOptions struct + Description string + Kind string + Name string + type CustomField struct + Key string + Name string + Type string + Value any + type Epic struct + Color string + CommentsCount int64 + CreatedAt time.Time + Description string + DueDate *time.Time + ID string + Initiative *InitiativeMeta + Name string + Position int64 + Progress float64 + ProgressSource string + ReferenceNum string + Release *Release + Resource string + StartDate *time.Time + Tags []string + URL string + UpdatedAt *time.Time + WorkflowStatus *WorkflowStatus + type EpicList struct + Epics []EpicMeta + Pagination Pagination + type EpicMeta struct + CreatedAt time.Time + ID string + Name string + ReferenceNum string + Resource string + URL string + type Feature struct + AssignedTo *User + CommentsCount int64 + CreatedAt time.Time + CustomFields []CustomField + Description string + DueDate *time.Time + ID string + Name string + ProductID string + ProgressSource string + ReferenceNum string + Release *Release + Resource string + StartDate *time.Time + Tags []string + URL string + UpdatedAt *time.Time + WorkUnits int64 + WorkflowStatus *WorkflowStatus + type FeatureList struct + Features []FeatureMeta + Pagination Pagination + type FeatureMeta struct + CreatedAt time.Time + ID string + Name string + ReferenceNum string + Resource string + URL string + type Goal struct + CreatedAt time.Time + CustomFields []CustomField + Description string + EndDate *time.Time + ID string + Name string + Progress float64 + ProgressSource string + ReferenceNum string + Resource string + StartDate *time.Time + Status string + TimeFrame *TimeFrame + URL string + UpdatedAt *time.Time + WorkflowStatus *WorkflowStatus + type GoalList struct + Goals []GoalMeta + Pagination Pagination + type GoalMeta struct + CreatedAt time.Time + ID string + Name string + ReferenceNum string + Resource string + URL string + type Idea struct + Categories []Category + CreatedAt time.Time + Description string + Feature *IdeaFeature + ID string + Name string + ReferenceNum string + StatusChangedAt *time.Time + UpdatedAt time.Time + Votes int + WorkflowStatus *WorkflowStatus + type IdeaFeature struct + CreatedAt time.Time + ID string + Name string + ProductID string + ReferenceNum string + Resource string + URL string + type IdeaList struct + Ideas []Idea + Pagination Pagination + type Initiative struct + Color string + CreatedAt time.Time + Description string + Effort float64 + EndDate *time.Time + Epic *EpicMeta + Features []FeatureMeta + ID string + Name string + Position int64 + Presented bool + Progress float64 + ProgressSource string + ReferenceNum string + Resource string + StartDate *time.Time + URL string + UpdatedAt *time.Time + Value float64 + WorkflowStatus *WorkflowStatus + type InitiativeList struct + Initiatives []InitiativeMeta + Pagination Pagination + type InitiativeMeta struct + CreatedAt time.Time + ID string + Name string + ReferenceNum string + Resource string + URL string + type ListEpicsOption func(*ListEpicsOptions) + func WithEpicPage(page int) ListEpicsOption + func WithEpicPerPage(perPage int) ListEpicsOption + func WithEpicQuery(query string) ListEpicsOption + func WithEpicUpdatedSince(t time.Time) ListEpicsOption + type ListEpicsOptions struct + Page int + PerPage int + Query string + UpdatedSince *time.Time + type ListFeaturesOption func(*ListFeaturesOptions) + func WithFeatureAssignee(email string) ListFeaturesOption + func WithFeaturePage(page int) ListFeaturesOption + func WithFeaturePerPage(perPage int) ListFeaturesOption + func WithFeatureQuery(query string) ListFeaturesOption + func WithFeatureTag(tag string) ListFeaturesOption + func WithFeatureUpdatedSince(t time.Time) ListFeaturesOption + type ListFeaturesOptions struct + AssignedToUser string + Page int + PerPage int + Query string + Tag string + UpdatedSince *time.Time + type ListGoalsOption func(*ListGoalsOptions) + func WithGoalPage(page int) ListGoalsOption + func WithGoalPerPage(perPage int) ListGoalsOption + func WithGoalQuery(query string) ListGoalsOption + func WithGoalUpdatedSince(t time.Time) ListGoalsOption + type ListGoalsOptions struct + Page int + PerPage int + Query string + UpdatedSince *time.Time + type ListIdeasOption func(*ListIdeasOptions) + func WithIdeaCreatedBefore(t time.Time) ListIdeasOption + func WithIdeaCreatedSince(t time.Time) ListIdeasOption + func WithIdeaIdeaUserID(ideaUserID string) ListIdeasOption + func WithIdeaPage(page int) ListIdeasOption + func WithIdeaPerPage(perPage int) ListIdeasOption + func WithIdeaQuery(query string) ListIdeasOption + func WithIdeaSort(sort string) ListIdeasOption + func WithIdeaSpam(spam bool) ListIdeasOption + func WithIdeaStatus(status string) ListIdeasOption + func WithIdeaTag(tag string) ListIdeasOption + func WithIdeaUpdatedSince(t time.Time) ListIdeasOption + func WithIdeaUserID(userID string) ListIdeasOption + type ListIdeasOptions struct + CreatedBefore *time.Time + CreatedSince *time.Time + IdeaUserID string + Page int + PerPage int + Query string + Sort string + Spam *bool + Tag string + UpdatedSince *time.Time + UserID string + WorkflowStatus string + type ListInitiativesOption func(*ListInitiativesOptions) + func WithInitiativePage(page int) ListInitiativesOption + func WithInitiativePerPage(perPage int) ListInitiativesOption + func WithInitiativeQuery(query string) ListInitiativesOption + func WithInitiativeUpdatedSince(t time.Time) ListInitiativesOption + type ListInitiativesOptions struct + Page int + PerPage int + Query string + UpdatedSince *time.Time + type ListOption func(*ListOptions) + func WithPage(page int) ListOption + func WithPerPage(perPage int) ListOption + type ListOptions struct + Page int + PerPage int + type ListStrategicModelsOption func(*ListStrategicModelsOptions) + func WithStrategicModelKind(kind string) ListStrategicModelsOption + type ListStrategicModelsOptions struct + Kind string + Page int + PerPage int + type Option func(*Config) + func WithAPIKey(apiKey string) Option + func WithBaseURL(baseURL string) Option + func WithHTTPClient(client *http.Client) Option + func WithSubdomain(subdomain string) Option + func WithTimeout(timeout time.Duration) Option + type Pagination struct + CurrentPage int64 + TotalPages int64 + TotalRecords int64 + type Product struct + CreatedAt time.Time + HasIdeas bool + HasMasterFeatures bool + ID string + Name string + ProductLine bool + ReferencePrefix string + Resource string + URL string + UpdatedAt *time.Time + type ProductList struct + Pagination Pagination + Products []ProductMeta + type ProductMeta struct + CreatedAt time.Time + ID string + Name string + ProductLine bool + ReferencePrefix string + type Release struct + ExternalReleaseDate *time.Time + ID string + Name string + ParkingLot bool + ReferenceNum string + ReleaseDate *time.Time + Released bool + Resource string + StartDate *time.Time + URL string + type ReleaseList struct + Pagination Pagination + Releases []Release + type Requirement struct + AssignedToUser *User + CreatedAt time.Time + Description string + Feature *FeatureMeta + ID string + Name string + OriginalEstimate float64 + Position int64 + ReferenceNum string + RemainingEstimate float64 + Resource string + URL string + UpdatedAt *time.Time + WorkDone float64 + WorkflowStatus *WorkflowStatus + type RequirementList struct + Pagination Pagination + Requirements []RequirementMeta + type RequirementMeta struct + CreatedAt time.Time + ID string + Name string + ReferenceNum string + Resource string + URL string + type StrategicModel struct + Components []StrategicModelComponent + CreatedAt time.Time + Description string + ID string + Kind string + Name string + Project *ProductMeta + ReferenceNum string + Resource string + URL string + UpdatedAt *time.Time + type StrategicModelComponent struct + Description string + ID string + Name string + Position int64 + type StrategicModelList struct + Pagination Pagination + StrategicModels []StrategicModelMeta + type StrategicModelMeta struct + CreatedAt time.Time + ID string + Kind string + Name string + ReferenceNum string + Resource string + URL string + type TimeFrame struct + ID string + Name string + type UpdateCommentOption func(*UpdateCommentOptions) + func WithUpdateCommentBody(body string) UpdateCommentOption + type UpdateCommentOptions struct + Body string + type UpdateEpicOption func(*UpdateEpicOptions) + func WithUpdateEpicDescription(desc string) UpdateEpicOption + func WithUpdateEpicName(name string) UpdateEpicOption + func WithUpdateEpicProgress(progress float64) UpdateEpicOption + func WithUpdateEpicStatus(status string) UpdateEpicOption + type UpdateEpicOptions struct + Color string + Description string + DueDate *time.Time + Initiative string + Name string + Progress *float64 + StartDate *time.Time + WorkflowStatus string + type UpdateFeatureOption func(*UpdateFeatureOptions) + func WithUpdateFeatureAssignedToUser(email string) UpdateFeatureOption + func WithUpdateFeatureDescription(desc string) UpdateFeatureOption + func WithUpdateFeatureDueDate(t time.Time) UpdateFeatureOption + func WithUpdateFeatureInitiative(initiative string) UpdateFeatureOption + func WithUpdateFeatureName(name string) UpdateFeatureOption + func WithUpdateFeatureRelease(release string) UpdateFeatureOption + func WithUpdateFeatureStartDate(t time.Time) UpdateFeatureOption + func WithUpdateFeatureStatus(status string) UpdateFeatureOption + func WithUpdateFeatureTags(tags string) UpdateFeatureOption + type UpdateFeatureOptions struct + AssignedToUser string + Description string + DueDate *time.Time + Initiative string + Name string + OriginalEstimate string + Release string + ReleasePhase string + RemainingEstimate string + StartDate *time.Time + Tags string + WorkflowStatus string + type UpdateGoalOption func(*UpdateGoalOptions) + func WithUpdateGoalDescription(desc string) UpdateGoalOption + func WithUpdateGoalName(name string) UpdateGoalOption + func WithUpdateGoalProgress(progress float64) UpdateGoalOption + func WithUpdateGoalStatus(status string) UpdateGoalOption + type UpdateGoalOptions struct + Description string + EndDate *time.Time + Name string + Progress *float64 + StartDate *time.Time + WorkflowStatus string + type UpdateInitiativeOption func(*UpdateInitiativeOptions) + type UpdateInitiativeOptions struct + Color string + Description string + Effort *float64 + EndDate *time.Time + Name string + Presented *bool + StartDate *time.Time + Value *float64 + WorkflowStatus string + type UpdateReleaseOption func(*UpdateReleaseOptions) + func WithReleaseDate(t time.Time) UpdateReleaseOption + func WithReleaseName(name string) UpdateReleaseOption + func WithReleaseParkingLot(parkingLot bool) UpdateReleaseOption + func WithReleaseStartDate(t time.Time) UpdateReleaseOption + type UpdateReleaseOptions struct + DevelopmentStartedOn *time.Time + ExternalReleaseDate *time.Time + Name string + ParkingLot *bool + ReleaseDate *time.Time + StartDate *time.Time + type UpdateRequirementOption func(*UpdateRequirementOptions) + func WithUpdateRequirementDescription(desc string) UpdateRequirementOption + func WithUpdateRequirementName(name string) UpdateRequirementOption + func WithUpdateRequirementStatus(status string) UpdateRequirementOption + func WithUpdateRequirementWorkDone(done float64) UpdateRequirementOption + type UpdateRequirementOptions struct + AssignedToUser string + Description string + Name string + OriginalEstimate *float64 + RemainingEstimate *float64 + WorkDone *float64 + WorkflowStatus string + type UpdateStrategicModelOption func(*UpdateStrategicModelOptions) + type UpdateStrategicModelOptions struct + Description string + Name string + type User struct + CreatedAt *time.Time + Email string + FirstName string + ID string + LastName string + Role string + func (u *User) Name() string + type UserList struct + Pagination Pagination + Users []User + type Workflow struct + ID string + Name string + Statuses []WorkflowStatus + type WorkflowList struct + Workflows []Workflow + type WorkflowStatus struct + Color string + Complete bool + ID string + Name string + Position int64