Complete status (toot) management including posting, editing, and interactions.
type Status struct {
ID ID
URI string
URL string
Account Account
InReplyToID interface{}
InReplyToAccountID interface{}
Reblog *Status
Content string
CreatedAt time.Time
EditedAt *time.Time
Emojis []Emoji
RepliesCount int64
ReblogsCount int64
FavouritesCount int64
Reblogged bool
Favourited bool
Bookmarked bool
Muted bool
Sensitive bool
SpoilerText string
Visibility string
MediaAttachments []Attachment
Mentions []Mention
Tags []Tag
Card *Card
Poll *Poll
Application *Application
Language *string
Pinned bool
ScheduledParams *ScheduledParams
Filtered []FilterResult
}Status represents a toot/post on Mastodon.
Fields:
ID - Unique status identifierURI - ActivityPub URIURL - Web URL for the statusAccount - Author's accountInReplyToID - ID of status this replies to (if any)InReplyToAccountID - ID of account this replies toReblog - Reblogged status (if this is a reblog)Content - HTML content of statusCreatedAt - Creation timestampEditedAt - Last edit timestamp (nil if not edited)Emojis - Custom emojis used in contentRepliesCount - Number of repliesReblogsCount - Number of reblogs/boostsFavouritesCount - Number of favourites/likesReblogged - Whether current user rebloggedFavourited - Whether current user favouritedBookmarked - Whether current user bookmarkedMuted - Whether current user muted conversationSensitive - Whether media is marked sensitiveSpoilerText - Content warning textVisibility - Visibility level ("public", "unlisted", "private", "direct")MediaAttachments - Attached media filesMentions - Mentioned accountsTags - Hashtags usedCard - Preview card for linksPoll - Attached pollApplication - Application used to postLanguage - Language codePinned - Whether status is pinned to profileScheduledParams - Scheduling parameters (if scheduled)Filtered - Filter results applied to this statustype Toot struct {
Status string
InReplyToID ID
MediaIDs []ID
Sensitive bool
SpoilerText string
Visibility string
Language string
ScheduledAt *time.Time
Poll *TootPoll
}Toot is a struct for posting or updating a status.
Fields:
Status - Text content of the statusInReplyToID - ID of status to reply toMediaIDs - IDs of media attachmentsSensitive - Mark media as sensitiveSpoilerText - Content warning textVisibility - Visibility level (use constants)Language - Language code (e.g., "en", "ja")ScheduledAt - Schedule status for future postingPoll - Poll to attachtype TootPoll struct {
Options []string
ExpiresInSeconds int
Multiple bool
HideTotals bool
}TootPoll holds information for creating a poll in a toot.
Fields:
Options - Poll option strings (2-4 options)ExpiresInSeconds - Poll duration in secondsMultiple - Allow multiple choice selectionHideTotals - Hide vote counts until poll expirestype StatusHistory struct {
Content string
SpoilerText string
Account Account
Sensitive bool
CreatedAt time.Time
Emojis []Emoji
MediaAttachments []Attachment
}StatusHistory represents a single edit in a status's edit history.
Fields:
Content - HTML content at this versionSpoilerText - Content warning at this versionAccount - Account information (unchanged)Sensitive - Sensitive flag at this versionCreatedAt - Timestamp of this editEmojis - Custom emojis usedMediaAttachments - Media attachments at this versiontype Context struct {
Ancestors []*Status
Descendants []*Status
}Context holds the conversation thread for a status.
Fields:
Ancestors - Statuses before this one in thread (oldest first)Descendants - Statuses after this one in thread (newest first)type Card struct {
URL string
Title string
Description string
Image string
Type string
AuthorName string
AuthorURL string
ProviderName string
ProviderURL string
HTML string
Width int64
Height int64
}Card represents a preview card for links in statuses.
Fields:
URL - URL being previewedTitle - Page titleDescription - Page descriptionImage - Preview image URLType - Card type ("link", "photo", "video", "rich")AuthorName - Content author nameAuthorURL - Content author URLProviderName - Provider name (e.g., "YouTube")ProviderURL - Provider URLHTML - HTML for embedded contentWidth - Embedded content widthHeight - Embedded content heighttype Source struct {
ID ID
Text string
SpoilerText string
}Source holds source data for editing a status.
Fields:
ID - Status IDText - Plain text content (for editing)SpoilerText - Plain text content warningtype ScheduledParams struct {
ApplicationID ID
Idempotency string
InReplyToID interface{}
MediaIDs []ID
Poll *Poll
ScheduledAt *time.Time
Sensitive bool
SpoilerText string
Text string
Visibility string
}ScheduledParams holds parameters for scheduled statuses.
Fields:
ApplicationID - Application that created thisIdempotency - Idempotency keyInReplyToID - Reply target IDMediaIDs - Media attachment IDsPoll - Poll dataScheduledAt - Scheduled posting timeSensitive - Sensitive media flagSpoilerText - Content warningText - Status textVisibility - Visibility settingconst (
VisibilityPublic = "public"
VisibilityUnlisted = "unlisted"
VisibilityFollowersOnly = "private"
VisibilityDirectMessage = "direct"
)Convenience constants for Toot.Visibility field.
VisibilityPublic - Visible to all, appears in public timelinesVisibilityUnlisted - Visible to all, does not appear in public timelinesVisibilityFollowersOnly - Visible only to followersVisibilityDirectMessage - Visible only to mentioned usersfunc (c *Client) PostStatus(ctx context.Context, toot *Toot) (*Status, error)Posts a new status.
Parameters:
ctx - Context for cancellation/timeouttoot - Toot configuration with content and optionsReturns: Created Status or error
Example:
toot := &mastodon.Toot{
Status: "Hello, Mastodon!",
Visibility: mastodon.VisibilityPublic,
}
status, err := client.PostStatus(ctx, toot)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Posted: %s\n", status.URL)func (c *Client) UpdateStatus(ctx context.Context, toot *Toot, id ID) (*Status, error)Updates an existing status (edits it).
Parameters:
ctx - Context for cancellation/timeouttoot - New status contentid - ID of status to updateReturns: Updated Status or error
Example:
toot := &mastodon.Toot{
Status: "Updated content",
}
status, err := client.UpdateStatus(ctx, toot, "123456")
if err != nil {
log.Fatal(err)
}func (c *Client) DeleteStatus(ctx context.Context, id ID) errorDeletes a status.
Parameters:
ctx - Context for cancellation/timeoutid - Status ID to deleteReturns: Error if operation fails
func (c *Client) GetStatus(ctx context.Context, id ID) (*Status, error)Returns status by ID.
Parameters:
ctx - Context for cancellation/timeoutid - Status ID to retrieveReturns: Status or error
func (c *Client) GetStatusContext(ctx context.Context, id ID) (*Context, error)Returns the conversation context (thread) for a status.
Parameters:
ctx - Context for cancellation/timeoutid - Status IDReturns: Context with ancestors and descendants or error
Example:
context, err := client.GetStatusContext(ctx, "123456")
if err != nil {
log.Fatal(err)
}
fmt.Printf("Thread has %d ancestors and %d descendants\n",
len(context.Ancestors), len(context.Descendants))func (c *Client) GetStatusCard(ctx context.Context, id ID) (*Card, error)Returns the preview card for a status.
Parameters:
ctx - Context for cancellation/timeoutid - Status IDReturns: Card or error
func (c *Client) GetStatusSource(ctx context.Context, id ID) (*Source, error)Returns the source data for editing a status (plain text version).
Parameters:
ctx - Context for cancellation/timeoutid - Status IDReturns: Source with plain text or error
func (c *Client) GetStatusHistory(ctx context.Context, id ID) ([]*StatusHistory, error)Returns the edit history of a status.
Parameters:
ctx - Context for cancellation/timeoutid - Status IDReturns: Slice of StatusHistory entries (newest first) or error
func (c *Client) Reblog(ctx context.Context, id ID) (*Status, error)Reblogs (boosts) a status.
Parameters:
ctx - Context for cancellation/timeoutid - Status ID to reblogReturns: Reblog Status or error
func (c *Client) Unreblog(ctx context.Context, id ID) (*Status, error)Unreblogs a status.
Parameters:
ctx - Context for cancellation/timeoutid - Status ID to unreblogReturns: Original Status or error
func (c *Client) Favourite(ctx context.Context, id ID) (*Status, error)Favourites (likes) a status.
Parameters:
ctx - Context for cancellation/timeoutid - Status ID to favouriteReturns: Updated Status or error
func (c *Client) Unfavourite(ctx context.Context, id ID) (*Status, error)Unfavourites a status.
Parameters:
ctx - Context for cancellation/timeoutid - Status ID to unfavouriteReturns: Updated Status or error
func (c *Client) Bookmark(ctx context.Context, id ID) (*Status, error)Bookmarks a status (private save).
Parameters:
ctx - Context for cancellation/timeoutid - Status ID to bookmarkReturns: Updated Status or error
func (c *Client) Unbookmark(ctx context.Context, id ID) (*Status, error)Unbookmarks a status.
Parameters:
ctx - Context for cancellation/timeoutid - Status ID to unbookmarkReturns: Updated Status or error
func (c *Client) GetRebloggedBy(ctx context.Context, id ID, pg *Pagination) ([]*Account, error)Returns accounts that reblogged a status.
Parameters:
ctx - Context for cancellation/timeoutid - Status IDpg - Pagination parameters (optional)Returns: Slice of Account objects or error
func (c *Client) GetFavouritedBy(ctx context.Context, id ID, pg *Pagination) ([]*Account, error)Returns accounts that favourited a status.
Parameters:
ctx - Context for cancellation/timeoutid - Status IDpg - Pagination parameters (optional)Returns: Slice of Account objects or error
func (c *Client) GetFavourites(ctx context.Context, pg *Pagination) ([]*Status, error)Returns the current user's favourited statuses.
Parameters:
ctx - Context for cancellation/timeoutpg - Pagination parameters (optional)Returns: Slice of favourited Status objects or error
func (c *Client) GetBookmarks(ctx context.Context, pg *Pagination) ([]*Status, error)Returns the current user's bookmarked statuses.
Parameters:
ctx - Context for cancellation/timeoutpg - Pagination parameters (optional)Returns: Slice of bookmarked Status objects or error
poll := &mastodon.TootPoll{
Options: []string{"Option A", "Option B", "Option C"},
ExpiresInSeconds: 86400, // 24 hours
Multiple: false,
}
toot := &mastodon.Toot{
Status: "What's your favorite?",
Visibility: mastodon.VisibilityPublic,
Poll: poll,
}
status, err := client.PostStatus(ctx, toot)
if err != nil {
log.Fatal(err)
}toot := &mastodon.Toot{
Status: "@username Great point!",
InReplyToID: "123456", // ID of status to reply to
Visibility: mastodon.VisibilityPublic,
}
reply, err := client.PostStatus(ctx, toot)
if err != nil {
log.Fatal(err)
}schedTime := time.Now().Add(24 * time.Hour)
toot := &mastodon.Toot{
Status: "This will post tomorrow!",
Visibility: mastodon.VisibilityPublic,
ScheduledAt: &schedTime,
}
status, err := client.PostStatus(ctx, toot)See also: