models

package
v1.1.8 Latest Latest
Warning

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

Go to latest
Published: Feb 13, 2026 License: AGPL-3.0 Imports: 5 Imported by: 0

Documentation

Overview

Package models contains data models used by the API Lambda function.

Index

Constants

View Source
const (
	NotificationTypeFollow    = "follow"
	NotificationTypeMention   = "mention"
	NotificationTypeFavourite = "favourite"
	NotificationTypeReblog    = "reblog"
)

Notification type constants

Variables

This section is empty.

Functions

This section is empty.

Types

type Account

type Account struct {
	ID             string `json:"id"`
	Username       string `json:"username"`
	Acct           string `json:"acct"`
	DisplayName    string `json:"display_name"`
	Locked         bool   `json:"locked"`
	Bot            bool   `json:"bot"`
	Discoverable   bool   `json:"discoverable"`
	Group          bool   `json:"group"`
	CreatedAt      string `json:"created_at"`
	Note           string `json:"note"`
	URL            string `json:"url"`
	Avatar         string `json:"avatar"`
	AvatarStatic   string `json:"avatar_static"`
	Header         string `json:"header"`
	HeaderStatic   string `json:"header_static"`
	FollowersCount int    `json:"followers_count"`
	FollowingCount int    `json:"following_count"`
	StatusesCount  int    `json:"statuses_count"`
	LastStatusAt   string `json:"last_status_at"`
	Emojis         []any  `json:"emojis"`
	Fields         []any  `json:"fields"`
}

Account represents a Mastodon-compatible account

type AccountRegistrationRequest

type AccountRegistrationRequest struct {
	Username                 string `json:"username"`
	Password                 string `json:"password,omitempty"` // Ignored - passwordless auth only
	Agreement                bool   `json:"agreement"`          // ToS agreement
	Locale                   string `json:"locale,omitempty"`
	Reason                   string `json:"reason,omitempty"` // For approval
	DefaultPostingVisibility string `json:"default_posting_visibility,omitempty"`

	// WalletChallengeID is required for passwordless wallet-based registration flows.
	// The challenge must have been verified via POST /auth/wallet/verify before registration.
	WalletChallengeID string `json:"wallet_challenge_id,omitempty"`
}

AccountRegistrationRequest represents a user registration request

type AccountRegistrationResponse

type AccountRegistrationResponse struct {
	ID       string `json:"id"`
	Username string `json:"username"`
	Created  bool   `json:"created"`
}

AccountRegistrationResponse represents the response after successful registration

type AccountSource

type AccountSource struct {
	Privacy        string  `json:"privacy"`
	Sensitive      bool    `json:"sensitive"`
	Language       string  `json:"language"`
	Note           string  `json:"note"`
	Fields         []Field `json:"fields"`
	FollowRequests int     `json:"follow_requests_count"`
}

AccountSource represents the source information for the authenticated user's account

type AddAccountsRequest

type AddAccountsRequest struct {
	AccountIDs []string `json:"account_ids"`
}

AddAccountsRequest represents a request to add accounts to a list

type AddFilterKeywordRequest

type AddFilterKeywordRequest struct {
	Keyword   string `json:"keyword"`
	WholeWord bool   `json:"whole_word"`
}

AddFilterKeywordRequest represents POST /api/v2/filters/{filter_id}/keywords.

type AddFilterStatusRequest

type AddFilterStatusRequest struct {
	StatusID string `json:"status_id"`
}

AddFilterStatusRequest represents POST /api/v2/filters/{filter_id}/statuses.

type AdminAccount

type AdminAccount struct {
	ID                     string    `json:"id"`
	Username               string    `json:"username"`
	Domain                 *string   `json:"domain"`
	CreatedAt              time.Time `json:"created_at"`
	IP                     *string   `json:"ip"`
	IPs                    []AdminIP `json:"ips"`
	Locale                 string    `json:"locale"`
	InviteRequest          *string   `json:"invite_request"`
	Role                   Role      `json:"role"`
	Confirmed              bool      `json:"confirmed"`
	Approved               bool      `json:"approved"`
	Disabled               bool      `json:"disabled"`
	Silenced               bool      `json:"silenced"`
	Suspended              bool      `json:"suspended"`
	Account                Account   `json:"account"`
	CreatedByApplicationID *string   `json:"created_by_application_id"`
	InvitedByAccountID     *string   `json:"invited_by_account_id"`
	ReportsCount           int       `json:"reports_count"`
	ResolvedReportsCount   int       `json:"resolved_reports_count"`
}

AdminAccount represents an account in admin context

type AdminAccountActionRequest

type AdminAccountActionRequest struct {
	Type                  string `json:"type"`                // suspend, unsuspend, silence, unsilence, etc.
	ReportID              string `json:"report_id,omitempty"` // Report that caused this action
	WarningPresetID       string `json:"warning_preset_id,omitempty"`
	Text                  string `json:"text,omitempty"` // Reason for action
	SendEmailNotification bool   `json:"send_email_notification"`
}

AdminAccountActionRequest represents a request to take action on an account

type AdminAgentPolicy

type AdminAgentPolicy struct {
	AllowAgents            bool `json:"allow_agents"`
	AllowAgentRegistration bool `json:"allow_agent_registration"`
	DefaultQuarantineDays  int  `json:"default_quarantine_days"`
	MaxAgentsPerOwner      int  `json:"max_agents_per_owner"`

	AllowRemoteAgents    bool     `json:"allow_remote_agents"`
	RemoteQuarantineDays int      `json:"remote_quarantine_days"`
	BlockedAgentDomains  []string `json:"blocked_agent_domains,omitempty"`
	TrustedAgentDomains  []string `json:"trusted_agent_domains,omitempty"`

	AgentMaxPostsPerHour           int `json:"agent_max_posts_per_hour"`
	VerifiedAgentMaxPostsPerHour   int `json:"verified_agent_max_posts_per_hour"`
	AgentMaxFollowsPerHour         int `json:"agent_max_follows_per_hour"`
	VerifiedAgentMaxFollowsPerHour int `json:"verified_agent_max_follows_per_hour"`

	HybridRetrievalEnabled       bool `json:"hybrid_retrieval_enabled"`
	HybridRetrievalMaxCandidates int  `json:"hybrid_retrieval_max_candidates"`

	UpdatedAt time.Time `json:"updated_at"`
}

AdminAgentPolicy is the REST representation of instance-level agent policy.

type AdminCreateUserRequest

type AdminCreateUserRequest struct {
	Username    string `json:"username"`
	Email       string `json:"email,omitempty"`        // Ignored - email is disabled
	Password    string `json:"password,omitempty"`     // Ignored - passwordless auth only
	DisplayName string `json:"display_name,omitempty"` // Optional
	Role        string `json:"role,omitempty"`         // Optional (defaults to "user")
}

AdminCreateUserRequest defines the request body for creating a new user.

type AdminDemoteModeratorResponse

type AdminDemoteModeratorResponse struct {
	UserID    string `json:"user_id"`
	Username  string `json:"username"`
	NewRole   string `json:"new_role"`
	DemotedBy string `json:"demoted_by"`
}

AdminDemoteModeratorResponse represents the response when demoting a moderator to user.

type AdminDomainAllowRequest

type AdminDomainAllowRequest struct {
	Domain string `json:"domain"`
}

AdminDomainAllowRequest represents a request to allow a domain.

type AdminDomainAllowResponse

type AdminDomainAllowResponse struct {
	ID        string    `json:"id"`
	Domain    string    `json:"domain"`
	CreatedAt time.Time `json:"created_at"`
}

AdminDomainAllowResponse represents a domain allow in API responses.

type AdminDomainBlockRequest

type AdminDomainBlockRequest struct {
	Domain         string `json:"domain"`
	Severity       string `json:"severity"`
	RejectMedia    bool   `json:"reject_media"`
	RejectReports  bool   `json:"reject_reports"`
	PrivateComment string `json:"private_comment"`
	PublicComment  string `json:"public_comment"`
	Obfuscate      bool   `json:"obfuscate"`
}

AdminDomainBlockRequest represents a request to block a domain at the instance level.

type AdminDomainBlockResponse

type AdminDomainBlockResponse struct {
	ID             string    `json:"id"`
	Domain         string    `json:"domain"`
	Severity       string    `json:"severity"`
	RejectMedia    bool      `json:"reject_media"`
	RejectReports  bool      `json:"reject_reports"`
	PrivateComment string    `json:"private_comment,omitempty"`
	PublicComment  string    `json:"public_comment,omitempty"`
	Obfuscate      bool      `json:"obfuscate"`
	CreatedAt      time.Time `json:"created_at"`
	UpdatedAt      time.Time `json:"updated_at"`
}

AdminDomainBlockResponse represents an admin domain block in API responses.

type AdminIP

type AdminIP struct {
	IP     string    `json:"ip"`
	UsedAt time.Time `json:"used_at"`
}

AdminIP represents IP address info in admin context

type AdminModerationDecision

type AdminModerationDecision struct {
	ID         string    `json:"id"`
	EventType  string    `json:"event_type"`
	ActorID    string    `json:"actor_id"`
	Severity   string    `json:"severity"`
	Confidence float64   `json:"confidence"`
	CreatedAt  time.Time `json:"created_at"`
}

AdminModerationDecision represents a summary of a recent moderation decision.

type AdminModerationEvent

type AdminModerationEvent struct {
	ID              string    `json:"id"`
	EventType       string    `json:"event_type"`
	ActorID         string    `json:"actor_id"`
	ObjectID        string    `json:"object_id"`
	ObjectType      string    `json:"object_type"`
	Category        string    `json:"category"`
	Severity        string    `json:"severity"`
	Reason          string    `json:"reason"`
	Evidence        []any     `json:"evidence,omitempty"`
	ConfidenceScore float64   `json:"confidence_score"`
	CreatedAt       time.Time `json:"created_at"`
}

AdminModerationEvent represents an event returned by moderation event listings.

type AdminModerationEventOverrideRequest

type AdminModerationEventOverrideRequest struct {
	Decision string `json:"decision"` // "approve" or "reject"
	Reason   string `json:"reason"`
}

AdminModerationEventOverrideRequest represents a request to override a moderation event decision.

type AdminModerationEventOverrideResponse

type AdminModerationEventOverrideResponse struct {
	EventID  string `json:"event_id"`
	Decision string `json:"decision"`
	Action   string `json:"action"`
	Override bool   `json:"override"`
	Admin    string `json:"admin"`
	Reason   string `json:"reason"`
}

AdminModerationEventOverrideResponse represents the result of overriding a moderation event.

type AdminModerationOverviewResponse

type AdminModerationOverviewResponse struct {
	PendingReviews   int                       `json:"pending_reviews"`
	OpenReports      int                       `json:"open_reports"`
	ActiveModerators int                       `json:"active_moderators"`
	RecentDecisions  []AdminModerationDecision `json:"recent_decisions"`
	TrustGraphHealth AdminTrustGraphHealth     `json:"trust_graph_health"`
}

AdminModerationOverviewResponse represents moderation system overview information.

type AdminModerationReviewersResponse

type AdminModerationReviewersResponse struct {
	Reviewers []AdminReviewer `json:"reviewers"`
	Total     int             `json:"total"`
}

AdminModerationReviewersResponse represents GET /api/v1/admin/moderation/reviewers.

type AdminPromoteModeratorResponse

type AdminPromoteModeratorResponse struct {
	UserID     string `json:"user_id"`
	Username   string `json:"username"`
	NewRole    string `json:"new_role"`
	PromotedBy string `json:"promoted_by"`
}

AdminPromoteModeratorResponse represents the response when promoting a user to moderator.

type AdminReport

type AdminReport struct {
	ID                   string     `json:"id"`
	ActionTaken          bool       `json:"action_taken"`
	ActionTakenAt        *time.Time `json:"action_taken_at"`
	Category             string     `json:"category"`
	Comment              string     `json:"comment"`
	Forwarded            bool       `json:"forwarded"`
	CreatedAt            time.Time  `json:"created_at"`
	UpdatedAt            time.Time  `json:"updated_at"`
	Account              Account    `json:"account"`
	TargetAccount        Account    `json:"target_account"`
	AssignedAccount      *Account   `json:"assigned_account"`
	ActionTakenByAccount *Account   `json:"action_taken_by_account"`
	Statuses             []Status   `json:"statuses"`
	Rules                []Rule     `json:"rules"`
}

AdminReport represents a report in admin context

type AdminReviewer

type AdminReviewer struct {
	ID              string    `json:"id"`
	Username        string    `json:"username"`
	Role            string    `json:"role"`
	TotalReviews    int       `json:"total_reviews"`
	AccurateReviews int       `json:"accurate_reviews"`
	AccuracyRate    float64   `json:"accuracy_rate"`
	LastReviewAt    time.Time `json:"last_review_at"`
}

AdminReviewer represents a reviewer/moderator user returned by reviewer listings.

type AdminTrustGraphEdge

type AdminTrustGraphEdge struct {
	From      string    `json:"from"`
	To        string    `json:"to"`
	Trust     float64   `json:"trust"`
	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`
}

AdminTrustGraphEdge represents an edge in the trust graph response.

type AdminTrustGraphHealth

type AdminTrustGraphHealth struct {
	TotalRelationships int     `json:"total_relationships"`
	AverageTrustScore  float64 `json:"average_trust_score"`
	IsolatedUsers      int     `json:"isolated_users"`
}

AdminTrustGraphHealth represents trust graph health metrics.

type AdminTrustGraphNode

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

AdminTrustGraphNode represents a node in the trust graph response.

type AdminTrustGraphResponse

type AdminTrustGraphResponse struct {
	Nodes []AdminTrustGraphNode `json:"nodes"`
	Edges []AdminTrustGraphEdge `json:"edges"`
	Stats AdminTrustGraphStats  `json:"stats"`
}

AdminTrustGraphResponse represents GET /api/v1/admin/moderation/trust/graph.

type AdminTrustGraphStats

type AdminTrustGraphStats struct {
	TotalNodes int `json:"total_nodes"`
	TotalEdges int `json:"total_edges"`
}

AdminTrustGraphStats represents summary statistics for a trust graph response.

type AdminUpdateTrustRequest

type AdminUpdateTrustRequest struct {
	Trust    float64 `json:"trust"`
	Category string  `json:"category,omitempty"`
	Reason   string  `json:"reason"`
}

AdminUpdateTrustRequest represents a request to update a trust relationship.

type AdminUpdateTrustResponse

type AdminUpdateTrustResponse struct {
	FromActorID string    `json:"from_actor_id"`
	ToActorID   string    `json:"to_actor_id"`
	Trust       float64   `json:"trust"`
	Category    string    `json:"category"`
	UpdatedBy   string    `json:"updated_by"`
	Reason      string    `json:"reason"`
	UpdatedAt   time.Time `json:"updated_at"`
}

AdminUpdateTrustResponse represents the result of updating a trust relationship.

type AdminVerifyAgentRequest

type AdminVerifyAgentRequest struct {
	Reason         string `json:"reason,omitempty"`
	ExitQuarantine bool   `json:"exit_quarantine,omitempty"`
}

AdminVerifyAgentRequest is the request payload for admin verification actions.

type Agent

type Agent struct {
	Username          string            `json:"username"`
	DisplayName       string            `json:"display_name"`
	Bio               string            `json:"bio,omitempty"`
	CreatedAt         *time.Time        `json:"created_at,omitempty"`
	Verified          bool              `json:"verified"`
	VerifiedAt        *time.Time        `json:"verified_at,omitempty"`
	AgentType         string            `json:"agent_type"`
	AgentVersion      string            `json:"agent_version"`
	AgentOwner        string            `json:"agent_owner,omitempty"`
	DelegatedScopes   []string          `json:"delegated_scopes,omitempty"`
	AgentCapabilities AgentCapabilities `json:"agent_capabilities"`
}

Agent is the REST representation of a local agent account.

type AgentActivityLogEntry

type AgentActivityLogEntry struct {
	AgentUsername string    `json:"agent_username"`
	Action        string    `json:"action"`
	TargetID      string    `json:"target_id,omitempty"`
	Timestamp     time.Time `json:"timestamp"`
	Metadata      any       `json:"metadata,omitempty"`
}

AgentActivityLogEntry represents a single audited agent action.

type AgentActivityLogList

type AgentActivityLogList []AgentActivityLogEntry

AgentActivityLogList is the response payload for GET /api/v1/agents/{username}/activity.

type AgentCapabilities

type AgentCapabilities struct {
	CanPost   bool `json:"can_post"`
	CanReply  bool `json:"can_reply"`
	CanBoost  bool `json:"can_boost"`
	CanFollow bool `json:"can_follow"`
	CanDM     bool `json:"can_dm"`

	RestrictedDomains []string `json:"restricted_domains,omitempty"`
	MaxPostsPerHour   int      `json:"max_posts_per_hour"`
	RequiresApproval  bool     `json:"requires_approval"`
}

AgentCapabilities describes what an agent account is permitted to do. This mirrors `pkg/agents.Capabilities`, but is scoped to the public REST surface.

type AgentDelegationRequest

type AgentDelegationRequest struct {
	AgentUsername string   `json:"agent_username"`
	DisplayName   string   `json:"display_name"`
	Bio           string   `json:"bio,omitempty"`
	Scopes        []string `json:"scopes"`
	ExpiresIn     int      `json:"expires_in,omitempty"`
	AgentInfo     any      `json:"agent_info,omitempty"`
}

AgentDelegationRequest is the request payload for POST /api/v1/agents/delegate.

Lesser is email-free. This endpoint does not accept email.

type AgentDelegationResponse

type AgentDelegationResponse struct {
	Account Account            `json:"account"`
	Token   OAuthTokenResponse `json:"token"`
}

AgentDelegationResponse is the response payload for POST /api/v1/agents/delegate.

type AgentKeyChallengeRequest

type AgentKeyChallengeRequest struct {
	Username string `json:"username"`
}

AgentKeyChallengeRequest is the request payload for challenge issuance endpoints.

type AgentKeyChallengeResponse

type AgentKeyChallengeResponse struct {
	ID        string    `json:"id"`
	Username  string    `json:"username"`
	Action    string    `json:"action"`
	Message   string    `json:"message"`
	IssuedAt  time.Time `json:"issued_at"`
	ExpiresAt time.Time `json:"expires_at"`
}

AgentKeyChallengeResponse is the response payload for agent key challenges.

type AgentMemoryEventRequest

type AgentMemoryEventRequest struct {
	// EventType must be one of: "correction", "retraction".
	EventType string `json:"event_type,omitempty"`

	// OriginalID references the status being corrected/retracted. If omitted, the server may
	// default to in_reply_to_id when provided.
	OriginalID string `json:"original_id,omitempty"`

	// Reason is an optional short justification (for auditability).
	Reason string `json:"reason,omitempty"`
}

AgentMemoryEventRequest describes an explicit memory event for agent-authored posts.

This is a Lesser extension. For the MVP, agents use normal immutable statuses and express corrections/retractions by creating a new status with an attached event.

type AgentMemorySearchContext

type AgentMemorySearchContext struct {
	ThreadRoot string   `json:"thread_root,omitempty"`
	ReplyCount int      `json:"reply_count,omitempty"`
	Tags       []string `json:"tags,omitempty"`

	// Event-sourced memory fields.
	EventType  string `json:"event_type,omitempty"`
	OriginalID string `json:"original_id,omitempty"`
}

AgentMemorySearchContext provides metadata that helps clients reason about a memory hit.

type AgentMemorySearchRequest

type AgentMemorySearchRequest struct {
	Query          string         `json:"query,omitempty"`
	Tags           []string       `json:"tags,omitempty"`
	DateRange      *DateRange     `json:"date_range,omitempty"`
	IncludeThreads bool           `json:"include_threads,omitempty"`
	Limit          int            `json:"limit,omitempty"`
	ThreadID       string         `json:"thread_id,omitempty"`
	Mode           string         `json:"mode,omitempty"` // "timeline" (default) or "hybrid"
	Options        map[string]any `json:"options,omitempty"`
}

AgentMemorySearchRequest is the request payload for /api/v1/agents/memory/search.

This endpoint is agent-scoped and is intended to support "timeline-as-memory" retrieval.

type AgentMemorySearchResponse

type AgentMemorySearchResponse struct {
	Results     []AgentMemorySearchResult `json:"results"`
	Total       int                       `json:"total"`
	QueryTimeMS int                       `json:"query_time_ms"`
}

AgentMemorySearchResponse is the response payload for /api/v1/agents/memory/search.

type AgentMemorySearchResult

type AgentMemorySearchResult struct {
	Status         *Status                   `json:"status"`
	RelevanceScore float64                   `json:"relevance_score"`
	Context        *AgentMemorySearchContext `json:"context,omitempty"`
	Thread         []*Status                 `json:"thread,omitempty"`
}

AgentMemorySearchResult represents a single memory hit with lightweight context.

type AgentPostAttribution

type AgentPostAttribution struct {
	TriggerType    string `json:"trigger_type,omitempty"`
	TriggerDetails string `json:"trigger_details,omitempty"`

	MemoryCitations []string `json:"memory_citations,omitempty"`

	DelegatedBy string   `json:"delegated_by,omitempty"`
	Scopes      []string `json:"scopes,omitempty"`

	Constraints  []string `json:"constraints,omitempty"`
	ModelVersion string   `json:"model_version,omitempty"`
}

AgentPostAttribution captures transparency metadata for an agent-authored post.

This is a Lesser extension and may be absent for human-authored content.

type AgentRotateKeyRequest

type AgentRotateKeyRequest struct {
	PublicKey string `json:"public_key"`
	KeyType   string `json:"key_type"`

	ChallengeID string `json:"challenge_id"`
	Signature   string `json:"signature"`
}

AgentRotateKeyRequest is the request payload for POST /api/v1/agents/{username}/rotate-key.

type AgentSelfAuthTokenRequest

type AgentSelfAuthTokenRequest struct {
	Username    string `json:"username"`
	ChallengeID string `json:"challenge_id"`
	Signature   string `json:"signature"`
}

AgentSelfAuthTokenRequest is the request payload for POST /api/v1/agents/auth/token.

type AgentSelfRegistrationRequest

type AgentSelfRegistrationRequest struct {
	Username    string `json:"username"`
	DisplayName string `json:"display_name"`
	Bio         string `json:"bio,omitempty"`

	PublicKey string `json:"public_key"`
	KeyType   string `json:"key_type"`

	ChallengeID string `json:"challenge_id"`
	Signature   string `json:"signature"`

	Scopes    []string `json:"scopes,omitempty"`
	AgentInfo any      `json:"agent_info,omitempty"`
}

AgentSelfRegistrationRequest is the request payload for POST /api/v1/agents/register.

Lesser is email-free. This endpoint does not accept email.

type AgentSelfRegistrationResponse

type AgentSelfRegistrationResponse struct {
	Account Account            `json:"account"`
	Token   OAuthTokenResponse `json:"token"`
}

AgentSelfRegistrationResponse is the response payload for POST /api/v1/agents/register.

type Announcement

type Announcement struct {
	ID          string                 `json:"id"`
	Content     string                 `json:"content"`
	Text        string                 `json:"text"`
	PublishedAt string                 `json:"published_at"`
	UpdatedAt   string                 `json:"updated_at"`
	AllDay      bool                   `json:"all_day"`
	StartsAt    *string                `json:"starts_at,omitempty"`
	EndsAt      *string                `json:"ends_at,omitempty"`
	Read        bool                   `json:"read"` // Whether the user has dismissed it
	Reactions   []AnnouncementReaction `json:"reactions"`
	Mentions    []AnnouncementAccount  `json:"mentions"`
	Statuses    []AnnouncementStatus   `json:"statuses"`
	Tags        []AnnouncementTag      `json:"tags"`
	Emojis      []CustomEmoji          `json:"emojis"`
}

Announcement represents an announcement in the Mastodon API

type AnnouncementAccount

type AnnouncementAccount struct {
	ID       string `json:"id"`
	Username string `json:"username"`
	URL      string `json:"url"`
	Acct     string `json:"acct"`
}

AnnouncementAccount represents an account mentioned in an announcement

type AnnouncementReaction

type AnnouncementReaction struct {
	Name      string `json:"name"`
	Count     int    `json:"count"`
	Me        bool   `json:"me"`
	URL       string `json:"url,omitempty"`
	StaticURL string `json:"static_url,omitempty"`
}

AnnouncementReaction represents a reaction to an announcement

type AnnouncementStatus

type AnnouncementStatus struct {
	ID  string `json:"id"`
	URL string `json:"url"`
}

AnnouncementStatus represents a status linked in an announcement

type AnnouncementTag

type AnnouncementTag struct {
	Name string `json:"name"`
	URL  string `json:"url"`
}

AnnouncementTag represents a hashtag in an announcement

type AppRegistrationRequest

type AppRegistrationRequest struct {
	ClientName   string `json:"client_name"`
	RedirectURIs string `json:"redirect_uris"`
	Scopes       string `json:"scopes"`
	Website      string `json:"website,omitempty"`
	ClientClass  string `json:"client_class,omitempty"`
}

AppRegistrationRequest represents a Mastodon-compatible client registration request

type AppRegistrationResponse

type AppRegistrationResponse struct {
	ID           string `json:"id"`
	Name         string `json:"name"`
	Website      string `json:"website,omitempty"`
	RedirectURI  string `json:"redirect_uri"`
	ClientID     string `json:"client_id"`
	ClientSecret string `json:"client_secret,omitempty"`
	VapidKey     string `json:"vapid_key,omitempty"` // For push notifications
}

AppRegistrationResponse represents the response after successful app registration

type ClearNotificationsRequest

type ClearNotificationsRequest struct {
}

ClearNotificationsRequest represents a request to clear notifications

type CommunityNoteRateLimit

type CommunityNoteRateLimit struct {
	Limit     int    `json:"limit"`
	Remaining int    `json:"remaining"`
	Reset     string `json:"reset"`
}

CommunityNoteRateLimit represents rate limit details for note creation.

type CommunityNoteSource

type CommunityNoteSource struct {
	URL string `json:"url"`
}

CommunityNoteSource represents a note source entry (request-side).

type CommunityNoteStats

type CommunityNoteStats struct {
	Total          int     `json:"total"`
	Visible        int     `json:"visible"`
	AverageScore   float64 `json:"average_score"`
	AverageHelpful float64 `json:"average_helpful"`
}

CommunityNoteStats represents aggregate stats for a note listing.

type CommunityNoteSummary

type CommunityNoteSummary struct {
	ID               string    `json:"id"`
	ObjectID         string    `json:"object_id"`
	AuthorID         string    `json:"author_id"`
	Content          string    `json:"content"`
	Language         string    `json:"language"`
	Sources          []string  `json:"sources"`
	HelpfulVotes     int       `json:"helpful_votes"`
	NotHelpfulVotes  int       `json:"not_helpful_votes"`
	Score            float64   `json:"score"`
	VisibilityStatus string    `json:"visibility_status"`
	CreatedAt        time.Time `json:"created_at"`
}

CommunityNoteSummary represents a minimal note payload returned by GET /api/v1/notes/{object_id}.

type CommunityNotesResponse

type CommunityNotesResponse struct {
	Notes []CommunityNoteSummary `json:"notes"`
	Stats CommunityNoteStats     `json:"stats"`
}

CommunityNotesResponse represents the response from GET /api/v1/notes/{object_id}.

type ConsensusReview

type ConsensusReview struct {
	ReviewerID     string  `json:"reviewer_id"`
	ReviewerDomain string  `json:"reviewer_domain,omitempty"`
	Action         string  `json:"action"`
	Confidence     float64 `json:"confidence"`
	TrustWeight    float64 `json:"trust_weight"`
	ReviewedAt     string  `json:"reviewed_at"`
}

ConsensusReview represents a single review in consensus visualization

type ConsensusVisualization

type ConsensusVisualization struct {
	EventID         string             `json:"event_id"`
	ObjectID        string             `json:"object_id"`
	Category        string             `json:"category"`
	Severity        int                `json:"severity"`
	ConfidenceScore float64            `json:"confidence_score"`
	Reviews         []*ConsensusReview `json:"reviews"`
	ReviewerCount   int                `json:"reviewer_count"`
	ConsensusScore  float64            `json:"consensus_score,omitempty"`
	Decision        string             `json:"decision,omitempty"`
	DecidedAt       string             `json:"decided_at,omitempty"`
}

ConsensusVisualization represents the consensus state for a moderation event

type Context

type Context struct {
	Ancestors   []Status `json:"ancestors"`
	Descendants []Status `json:"descendants"`
}

Context represents the ancestors and descendants of a status

type Conversation

type Conversation struct {
	ID         string    `json:"id"`
	Unread     bool      `json:"unread"`
	Accounts   []Account `json:"accounts"`
	LastStatus *Status   `json:"last_status,omitempty"`
}

Conversation represents a direct message conversation

type CreateAnnouncementRequest

type CreateAnnouncementRequest struct {
	Content  string `json:"content"`
	Text     string `json:"text,omitempty"`
	AllDay   bool   `json:"all_day"`
	StartsAt string `json:"starts_at,omitempty"`
	EndsAt   string `json:"ends_at,omitempty"`
}

CreateAnnouncementRequest represents a request to create an announcement (admin only)

type CreateCommunityNoteRequest

type CreateCommunityNoteRequest struct {
	ObjectID   string                `json:"object_id"`
	ObjectType string                `json:"object_type"`
	Content    string                `json:"content"`
	Language   string                `json:"language"`
	Sources    []CommunityNoteSource `json:"sources,omitempty"`
}

CreateCommunityNoteRequest represents POST /api/v1/notes.

type CreateCommunityNoteResponse

type CreateCommunityNoteResponse struct {
	Note      *storage.CommunityNote `json:"note"`
	RateLimit CommunityNoteRateLimit `json:"rate_limit"`
}

CreateCommunityNoteResponse represents the response from POST /api/v1/notes.

type CreateCustomEmojiRequest

type CreateCustomEmojiRequest struct {
	Shortcode string `json:"shortcode"`
	URL       string `json:"url"`
	StaticURL string `json:"static_url,omitempty"`
	Category  string `json:"category,omitempty"`
}

CreateCustomEmojiRequest represents a request to create a custom emoji (admin only)

type CreateDomainBlockRequest

type CreateDomainBlockRequest struct {
	Domain         string `json:"domain"`
	Severity       string `json:"severity"`        // "silence" or "suspend"
	RejectMedia    bool   `json:"reject_media"`    // Whether to reject media files from this domain
	RejectReports  bool   `json:"reject_reports"`  // Whether to reject reports from this domain
	PrivateComment string `json:"private_comment"` // Private admin notes
	PublicComment  string `json:"public_comment"`  // Public reason for the block
	Obfuscate      bool   `json:"obfuscate"`       // Whether to obfuscate the domain in public lists
}

CreateDomainBlockRequest represents a request to create a domain block

type CreateFilterRequest

type CreateFilterRequest struct {
	Title              string                   `json:"title"`
	Context            []string                 `json:"context"`
	FilterAction       string                   `json:"filter_action"`
	Severity           string                   `json:"severity,omitempty"`
	MatchMode          string                   `json:"match_mode,omitempty"`
	CaseSensitive      bool                     `json:"case_sensitive"`
	ExpiresIn          *int                     `json:"expires_in,omitempty"`
	KeywordsAttributes []FilterKeywordAttribute `json:"keywords_attributes,omitempty"`
}

CreateFilterRequest represents POST /api/v2/filters.

type CreateListRequest

type CreateListRequest struct {
	Title         string `json:"title"`
	RepliesPolicy string `json:"replies_policy,omitempty"` // defaults to "list"
}

CreateListRequest represents a request to create a list

type CreateQuotePostRequest

type CreateQuotePostRequest struct {
	Status      string `json:"status,omitempty"`
	Visibility  string `json:"visibility,omitempty"`
	SpoilerText string `json:"spoiler_text,omitempty"`
	Sensitive   bool   `json:"sensitive"`
	Language    string `json:"language,omitempty"`
}

CreateQuotePostRequest represents POST /api/v1/statuses/{id}/quote.

type CreateReportRequest

type CreateReportRequest struct {
	AccountID string   `json:"account_id"`
	StatusIDs []string `json:"status_ids,omitempty"`
	Comment   string   `json:"comment,omitempty"`
	Forward   bool     `json:"forward"`
	Category  string   `json:"category,omitempty"`
	RuleIDs   []int    `json:"rule_ids,omitempty"`
}

CreateReportRequest represents the request body for POST /api/v1/reports.

type CreateStatusRequest

type CreateStatusRequest struct {
	Status      string   `json:"status"`                   // Text content of the status
	InReplyToID string   `json:"in_reply_to_id,omitempty"` // ID of the status being replied to
	MediaIDs    []string `json:"media_ids,omitempty"`      // Array of media attachment IDs
	Poll        *Poll    `json:"poll,omitempty"`           // Poll object
	Sensitive   bool     `json:"sensitive"`                // Mark status as sensitive
	SpoilerText string   `json:"spoiler_text,omitempty"`   // Content warning
	Visibility  string   `json:"visibility"`               // public, unlisted, private, direct
	Language    string   `json:"language,omitempty"`       // ISO 639-1 language code
	ScheduledAt *string  `json:"scheduled_at,omitempty"`   // ISO 8601 datetime for scheduling

	// Lesser extension: optional transparency metadata for agent-authored posts.
	AgentAttribution *AgentPostAttribution `json:"agent_attribution,omitempty"`

	// Lesser extension: optional memory event metadata for corrections/retractions.
	MemoryEvent *AgentMemoryEventRequest `json:"memory_event,omitempty"`
}

CreateStatusRequest represents a Mastodon-compatible status creation request

type CreateVouchRequest

type CreateVouchRequest struct {
	To         string  `json:"to"`
	Confidence float64 `json:"confidence"`
	Context    string  `json:"context"`
}

CreateVouchRequest represents POST /api/v1/vouches.

type CustomEmoji

type CustomEmoji struct {
	Shortcode       string `json:"shortcode"`
	URL             string `json:"url"`
	StaticURL       string `json:"static_url"`
	VisibleInPicker bool   `json:"visible_in_picker"`
	Category        string `json:"category,omitempty"`
}

CustomEmoji represents a custom emoji

type DateRange

type DateRange struct {
	Start string `json:"start,omitempty"`
	End   string `json:"end,omitempty"`
}

DateRange is an inclusive date-only range (YYYY-MM-DD) used for memory retrieval.

type DomainBlock

type DomainBlock struct {
	ID             string    `json:"id"`
	Domain         string    `json:"domain"`
	CreatedAt      time.Time `json:"created_at"`
	Severity       string    `json:"severity"`        // "silence" or "suspend"
	RejectMedia    bool      `json:"reject_media"`    // Whether to reject media files from this domain
	RejectReports  bool      `json:"reject_reports"`  // Whether to reject reports from this domain
	PrivateComment string    `json:"private_comment"` // Private admin notes
	PublicComment  string    `json:"public_comment"`  // Public reason for the block
	Obfuscate      bool      `json:"obfuscate"`       // Whether to obfuscate the domain in public lists
}

DomainBlock represents an instance-level domain block

type EmailDomainBlockRequest

type EmailDomainBlockRequest struct {
	Domain string `json:"domain"`
}

EmailDomainBlockRequest represents a request to block an email domain.

type EmailDomainBlockResponse

type EmailDomainBlockResponse struct {
	ID        string    `json:"id"`
	Domain    string    `json:"domain"`
	CreatedAt time.Time `json:"created_at"`
}

EmailDomainBlockResponse represents an email domain block in API responses.

type EmailDomainBlocksResponse

type EmailDomainBlocksResponse struct {
	Blocks     []EmailDomainBlockResponse `json:"blocks"`
	NextCursor *string                    `json:"next_cursor,omitempty"`
}

EmailDomainBlocksResponse represents GET /api/v1/admin/email_domain_blocks.

type Emoji

type Emoji struct {
	Shortcode       string `json:"shortcode"`
	URL             string `json:"url"`
	StaticURL       string `json:"static_url"`
	VisibleInPicker bool   `json:"visible_in_picker"`
}

Emoji represents an emoji (used in various responses)

type EmptyObject

type EmptyObject struct{}

EmptyObject represents an empty JSON object response.

type ExportDateRange

type ExportDateRange struct {
	Start string `json:"start"`
	End   string `json:"end"`
}

ExportDateRange represents a date range for filtering exports.

type ExportDownloadResponse

type ExportDownloadResponse struct {
	DownloadURL string  `json:"download_url"`
	ExpiresAt   *string `json:"expires_at,omitempty"`
}

ExportDownloadResponse represents the response from GET /api/v1/exports/{id}/download.

type ExportJob

type ExportJob struct {
	ID          string  `json:"id"`
	Status      string  `json:"status"`
	Type        string  `json:"type"`
	Format      string  `json:"format"`
	CreatedAt   string  `json:"created_at"`
	DownloadURL *string `json:"download_url,omitempty"`
	ExpiresAt   *string `json:"expires_at,omitempty"`
	FileSize    *int64  `json:"file_size,omitempty"`
	RecordCount *int    `json:"record_count,omitempty"`
	Error       *string `json:"error,omitempty"`
}

ExportJob represents an export job status.

type ExportRequest

type ExportRequest struct {
	Type         string           `json:"type"`
	Format       string           `json:"format"`
	IncludeMedia bool             `json:"include_media"`
	DateRange    *ExportDateRange `json:"date_range,omitempty"`
	Options      map[string]any   `json:"options,omitempty"`
}

ExportRequest represents a data export request.

type FavouriteResponse

type FavouriteResponse struct {
	ID              string `json:"id"`
	CreatedAt       string `json:"created_at"`
	Favourited      bool   `json:"favourited,omitempty"`
	Reblogged       bool   `json:"reblogged,omitempty"`
	FavouritesCount int    `json:"favourites_count,omitempty"`
	ReblogsCount    int    `json:"reblogs_count,omitempty"`
	URI             string `json:"uri"`
	URL             string `json:"url"`
	Content         string `json:"content"`
	Visibility      string `json:"visibility"`
	Language        string `json:"language"`
}

FavouriteResponse represents the response for favourite/unfavourite actions

type FederationInstanceResponse

type FederationInstanceResponse struct {
	Instance InstanceInfoResponse `json:"instance"`
	Details  map[string]any       `json:"details"`
}

FederationInstanceResponse represents GET /api/v1/admin/federation/instance/{domain}.

type FederationInstancesResponse

type FederationInstancesResponse struct {
	Instances  []InstanceInfoResponse `json:"instances"`
	NextCursor *string                `json:"next_cursor,omitempty"`
}

FederationInstancesResponse represents GET /api/v1/admin/federation/instances.

type FederationStatisticsResponse

type FederationStatisticsResponse struct {
	ActiveInstances int64                         `json:"active_instances"`
	TotalMessages   int64                         `json:"total_messages"`
	TotalUsers      int64                         `json:"total_users"`
	TimeRange       FederationStatisticsTimeRange `json:"time_range"`
}

FederationStatisticsResponse represents GET /api/v1/admin/federation/statistics.

type FederationStatisticsTimeRange

type FederationStatisticsTimeRange struct {
	Start string `json:"start"`
	End   string `json:"end"`
}

FederationStatisticsTimeRange represents the time range returned by federation statistics.

type Field

type Field struct {
	Name       string  `json:"name"`
	Value      string  `json:"value"`
	VerifiedAt *string `json:"verified_at,omitempty"`
}

Field represents an account field (used in Account)

type FilterKeywordAttribute

type FilterKeywordAttribute struct {
	Keyword      string   `json:"keyword"`
	WholeWord    bool     `json:"whole_word"`
	IsRegex      *bool    `json:"is_regex,omitempty"`
	MatchWeight  *float64 `json:"match_weight,omitempty"`
	ContextTypes []string `json:"context_types,omitempty"`
}

FilterKeywordAttribute represents a keyword entry in the filter create/update request.

type FilterTestResponse

type FilterTestResponse struct {
	Content      string                     `json:"content"`
	TotalFilters int                        `json:"total_filters"`
	MatchedCount int                        `json:"matched_count"`
	Results      []*moderation.FilterResult `json:"results"`
}

FilterTestResponse represents the response from POST /api/v2/filters/test.

type FlagRequest

type FlagRequest struct {
	ObjectID        string  `json:"object_id"`
	ObjectType      string  `json:"object_type"` // "status", "account", "media"
	Category        string  `json:"category"`    // spam, hate_speech, harassment, etc.
	Severity        int     `json:"severity"`    // 1-4
	ConfidenceScore float64 `json:"confidence_score"`
	Reason          string  `json:"reason"`
}

FlagRequest represents a content flagging request

type FollowRequest

type FollowRequest struct {
	Reblogs *bool `json:"reblogs,omitempty"`
	Notify  *bool `json:"notify,omitempty"`
}

FollowRequest represents a follow request with options

type GroupedNotificationAccount

type GroupedNotificationAccount struct {
	ID          string `json:"id"`
	Username    string `json:"username"`
	DisplayName string `json:"display_name"`
	Avatar      string `json:"avatar"`
	Bot         bool   `json:"bot"`
	CreatedAt   string `json:"created_at"`
}

GroupedNotificationAccount represents an account summary in a grouped notification response.

type GroupedNotificationEntry

type GroupedNotificationEntry struct {
	ID        string `json:"id"`
	CreatedAt string `json:"created_at"`
	ActorID   string `json:"actor_id"`
	TargetID  string `json:"target_id"`
	Read      bool   `json:"read"`
}

GroupedNotificationEntry represents a minimal entry in the optional all_notifications list.

type GroupedNotificationGroup

type GroupedNotificationGroup struct {
	ID                string                         `json:"id"`
	Type              string                         `json:"type"`
	GroupKey          string                         `json:"group_key"`
	Count             int                            `json:"count"`
	LatestCreatedAt   string                         `json:"latest_created_at"`
	EarliestCreatedAt string                         `json:"earliest_created_at"`
	Read              bool                           `json:"read"`
	SampleAccounts    []GroupedNotificationAccount   `json:"sample_accounts"`
	Summary           string                         `json:"summary"`
	Status            *GroupedNotificationStatus     `json:"status,omitempty"`
	MostRecent        *GroupedNotificationMostRecent `json:"most_recent,omitempty"`
	AllNotifications  []GroupedNotificationEntry     `json:"all_notifications,omitempty"`
}

GroupedNotificationGroup represents a grouped notification response entry.

type GroupedNotificationMostRecent

type GroupedNotificationMostRecent struct {
	ID        string `json:"id"`
	CreatedAt string `json:"created_at"`
	ActorID   string `json:"actor_id"`
}

GroupedNotificationMostRecent represents a minimal \"most recent\" notification entry.

type GroupedNotificationStatus

type GroupedNotificationStatus struct {
	ID         string `json:"id"`
	Content    string `json:"content"`
	CreatedAt  string `json:"created_at"`
	URL        string `json:"url"`
	Visibility string `json:"visibility"`
}

GroupedNotificationStatus represents a minimal status payload for grouped notifications.

type ImportJob

type ImportJob struct {
	ID        string         `json:"id"`
	Status    string         `json:"status"`
	Type      string         `json:"type"`
	CreatedAt string         `json:"created_at"`
	Processed int            `json:"processed"`
	Total     *int           `json:"total,omitempty"`
	Errors    []string       `json:"errors,omitempty"`
	Results   *ImportResults `json:"results,omitempty"`
}

ImportJob represents an import job status.

type ImportRequest

type ImportRequest struct {
	Type string `json:"type"`
	Data string `json:"data"`
	Mode string `json:"mode"`
}

ImportRequest represents a data import request.

type ImportResults

type ImportResults struct {
	Success int `json:"success"`
	Skipped int `json:"skipped"`
	Failed  int `json:"failed"`
}

ImportResults represents the result summary for a completed import.

type Instance

type Instance struct {
	URI              string         `json:"uri"`
	Title            string         `json:"title"`
	ShortDescription string         `json:"short_description"`
	Description      string         `json:"description"`
	Version          string         `json:"version"`
	Languages        []string       `json:"languages"`
	Registrations    bool           `json:"registrations"`
	ApprovalRequired bool           `json:"approval_required"`
	InvitesEnabled   bool           `json:"invites_enabled"`
	Configuration    map[string]any `json:"configuration"`
	Stats            map[string]any `json:"stats"`
	Thumbnail        string         `json:"thumbnail"`
	ContactAccount   *Account       `json:"contact_account"`
	Rules            []any          `json:"rules"`
}

Instance represents instance information

type InstanceActivityEntry

type InstanceActivityEntry struct {
	Week          string `json:"week"`
	Statuses      string `json:"statuses"`
	Logins        string `json:"logins"`
	Registrations string `json:"registrations"`
}

InstanceActivityEntry represents a single entry in GET /api/v1/instance/activity.

type InstanceDomainBlock

type InstanceDomainBlock struct {
	Domain   string `json:"domain"`
	Digest   string `json:"digest"`
	Severity string `json:"severity"`
	Comment  string `json:"comment"`
}

InstanceDomainBlock represents a public instance domain block in GET /api/v1/instance/domain_blocks.

type InstanceInfoResponse

type InstanceInfoResponse struct {
	Domain        string    `json:"domain"`
	Software      string    `json:"software,omitempty"`
	Version       string    `json:"version,omitempty"`
	ActiveUsers   int       `json:"active_users"`
	TotalMessages int64     `json:"total_messages"`
	TrustScore    float64   `json:"trust_score"`
	FirstSeen     time.Time `json:"first_seen"`
	LastSeen      time.Time `json:"last_seen"`
	IsSilenced    bool      `json:"is_silenced"`
	IsSuspended   bool      `json:"is_suspended"`
}

InstanceInfoResponse represents instance information in API responses.

type InstanceV1Response

type InstanceV1Response struct {
	URI                 string                 `json:"uri"`
	Title               string                 `json:"title"`
	ShortDescription    string                 `json:"short_description"`
	Description         string                 `json:"description"`
	Email               string                 `json:"email"`
	Version             string                 `json:"version"`
	URLs                map[string]any         `json:"urls"`
	Stats               map[string]any         `json:"stats"`
	Thumbnail           string                 `json:"thumbnail"`
	Languages           []string               `json:"languages"`
	Registrations       bool                   `json:"registrations"`
	ApprovalRequired    bool                   `json:"approval_required"`
	InvitesEnabled      bool                   `json:"invites_enabled"`
	ContactAccount      map[string]any         `json:"contact_account,omitempty"`
	Configuration       map[string]any         `json:"configuration"`
	ExtendedDescription string                 `json:"extended_description,omitempty"`
	VAPIDKey            string                 `json:"vapid_key,omitempty"`
	Rules               []storage.InstanceRule `json:"rules"`
}

InstanceV1Response represents the response for GET /api/v1/instance.

type InstanceV2Response

type InstanceV2Response struct {
	Domain        string         `json:"domain"`
	Title         string         `json:"title"`
	Version       string         `json:"version"`
	SourceURL     string         `json:"source_url"`
	Description   string         `json:"description"`
	Usage         map[string]any `json:"usage"`
	Thumbnail     map[string]any `json:"thumbnail"`
	Icon          []any          `json:"icon"`
	Languages     []string       `json:"languages"`
	Configuration map[string]any `json:"configuration"`
	Registrations map[string]any `json:"registrations"`
	APIVersions   map[string]any `json:"api_versions"`
	Contact       map[string]any `json:"contact"`
	Rules         []Rule         `json:"rules"`
}

InstanceV2Response represents the response for GET /api/v2/instance.

type LinkTimelineEntry

type LinkTimelineEntry struct {
	ID      string `json:"id"`
	Content string `json:"content"`
	URL     string `json:"url"`
}

LinkTimelineEntry represents the minimal timeline entry returned by GET /api/v1/timelines/link.

type List

type List struct {
	ID            string `json:"id"`
	Title         string `json:"title"`
	RepliesPolicy string `json:"replies_policy"` // "followed", "list", or "none"
}

List represents a Mastodon-compatible list

type Marker

type Marker struct {
	LastReadID string `json:"last_read_id"`
	UpdatedAt  string `json:"updated_at"`
	Version    int    `json:"version"`
}

Marker represents a timeline position marker

type MarkersResponse

type MarkersResponse struct {
	Home          *Marker `json:"home,omitempty"`
	Notifications *Marker `json:"notifications,omitempty"`
}

MarkersResponse represents the response for markers endpoint

type MediaAttachment

type MediaAttachment struct {
	ID          string         `json:"id"`
	Type        string         `json:"type"`
	URL         string         `json:"url"`
	PreviewURL  string         `json:"preview_url"`
	RemoteURL   *string        `json:"remote_url"`
	TextURL     string         `json:"text_url"`
	Meta        map[string]any `json:"meta"`
	Description string         `json:"description"`
	Blurhash    string         `json:"blurhash"`
}

MediaAttachment represents a media attachment

type MediaUploadResponse

type MediaUploadResponse struct {
	ID          string         `json:"id"`
	Type        string         `json:"type"`
	URL         string         `json:"url"`
	PreviewURL  string         `json:"preview_url"`
	RemoteURL   *string        `json:"remote_url"`
	TextURL     string         `json:"text_url"`
	Meta        map[string]any `json:"meta"`
	Description string         `json:"description"`
	Blurhash    string         `json:"blurhash"`
}

MediaUploadResponse represents the response after uploading media

type MessageResponse

type MessageResponse struct {
	Message string `json:"message"`
}

MessageResponse represents a generic message response.

type ModerationEventResponse

type ModerationEventResponse struct {
	ID              string  `json:"id"`
	EventType       string  `json:"event_type"`
	ObjectID        string  `json:"object_id"`
	ObjectType      string  `json:"object_type"`
	Category        string  `json:"category"`
	Severity        int     `json:"severity"`
	ConfidenceScore float64 `json:"confidence_score"`
	Status          string  `json:"status"`
	CreatedAt       string  `json:"created_at"`
}

ModerationEventResponse represents a moderation event in API responses

type ModerationHistoryResponse

type ModerationHistoryResponse struct {
	ObjectID      string                           `json:"object_id"`
	Events        []storage.ModerationEvent        `json:"events"`
	Decisions     []storage.ModerationDecision     `json:"decisions"`
	Timeline      []ModerationHistoryTimelineEntry `json:"timeline"`
	CurrentStatus string                           `json:"current_status"`
	LastUpdated   string                           `json:"last_updated"`
}

ModerationHistoryResponse represents the response from GET /api/v1/moderation/history/{object_id}.

type ModerationHistoryTimelineEntry

type ModerationHistoryTimelineEntry struct {
	Timestamp string                      `json:"timestamp"`
	Type      string                      `json:"type"`
	Event     *storage.ModerationEvent    `json:"event,omitempty"`
	Decision  *storage.ModerationDecision `json:"decision,omitempty"`
}

ModerationHistoryTimelineEntry represents a timeline entry in GET /api/v1/moderation/history/{object_id}.

type ModerationReviewResponse

type ModerationReviewResponse struct {
	ReviewID   string `json:"review_id"`
	EventID    string `json:"event_id"`
	Action     string `json:"action"`
	ReviewedAt string `json:"reviewed_at"`
}

ModerationReviewResponse represents the response from POST /api/v1/moderation/review.

type MuteRequest

type MuteRequest struct {
	Notifications *bool   `json:"notifications,omitempty"`
	Duration      *string `json:"duration,omitempty"`
}

MuteRequest represents a mute request with options

type NodeInfo

type NodeInfo struct {
	Version           string           `json:"version"`
	Software          NodeInfoSoftware `json:"software"`
	Protocols         []string         `json:"protocols"`
	Services          NodeInfoServices `json:"services"`
	OpenRegistrations bool             `json:"openRegistrations"`
	Usage             NodeInfoUsage    `json:"usage"`
	Metadata          map[string]any   `json:"metadata"`
}

NodeInfo represents a NodeInfo 2.0 response.

type NodeInfoLink struct {
	Rel  string `json:"rel"`
	Href string `json:"href"`
}

NodeInfoLink represents a link in the .well-known/nodeinfo response.

type NodeInfoServices

type NodeInfoServices struct {
	Inbound  []string `json:"inbound"`
	Outbound []string `json:"outbound"`
}

NodeInfoServices represents services information.

type NodeInfoSoftware

type NodeInfoSoftware struct {
	Name       string `json:"name"`
	Version    string `json:"version"`
	Repository string `json:"repository,omitempty"`
	Homepage   string `json:"homepage,omitempty"`
}

NodeInfoSoftware represents software information.

type NodeInfoUsage

type NodeInfoUsage struct {
	Users         NodeInfoUsers `json:"users"`
	LocalPosts    int           `json:"localPosts"`
	LocalComments int           `json:"localComments"`
}

NodeInfoUsage represents usage statistics.

type NodeInfoUsers

type NodeInfoUsers struct {
	Total          int `json:"total"`
	ActiveHalfyear int `json:"activeHalfyear"`
	ActiveMonth    int `json:"activeMonth"`
}

NodeInfoUsers represents user statistics.

type NodeInfoWellKnown

type NodeInfoWellKnown struct {
	Links []NodeInfoLink `json:"links"`
}

NodeInfoWellKnown represents the .well-known/nodeinfo response.

type Notification

type Notification struct {
	ID        string    `json:"id"`
	Type      string    `json:"type"`
	CreatedAt time.Time `json:"created_at"`
	Account   Account   `json:"account"`
	Status    *Status   `json:"status,omitempty"`
}

Notification represents a Mastodon-compatible notification

type NotificationFilter

type NotificationFilter struct {
	Types        []string // Filter by notification types
	ExcludeTypes []string // Exclude specific notification types
	AccountID    string   // Filter by account
	Limit        int      // Maximum number to return
	MinID        string   // Return results newer than this ID
	MaxID        string   // Return results older than this ID
	SinceID      string   // Return results newer than this ID (for polling)
}

NotificationFilter represents parameters for filtering notifications

type OAuthAuthorizeResponse

type OAuthAuthorizeResponse struct {
	NextURL string `json:"next_url"`
}

OAuthAuthorizeResponse represents the response when returning the next_url redirect as JSON.

type OAuthConsentRequest

type OAuthConsentRequest struct {
	State  string `json:"state"`
	Action string `json:"action"`
}

OAuthConsentRequest represents the form body posted to /oauth/consent.

type OAuthConsentResponse

type OAuthConsentResponse struct {
	RedirectURI string `json:"redirect_uri"`
}

OAuthConsentResponse represents the JSON response from /oauth/consent.

type OAuthDeviceCodeRequest added in v1.1.2

type OAuthDeviceCodeRequest struct {
	ClientID     string `json:"client_id"`
	ClientSecret string `json:"client_secret,omitempty"`
	Scope        string `json:"scope,omitempty"`
}

OAuthDeviceCodeRequest represents a device authorization request (RFC 8628-style).

This is sent as application/x-www-form-urlencoded to POST /oauth/device/code.

type OAuthDeviceCodeResponse added in v1.1.2

type OAuthDeviceCodeResponse struct {
	DeviceCode              string `json:"device_code"`
	UserCode                string `json:"user_code"`
	VerificationURI         string `json:"verification_uri"`
	VerificationURIComplete string `json:"verification_uri_complete,omitempty"`
	ExpiresIn               int    `json:"expires_in"`
	Interval                int    `json:"interval"`
}

OAuthDeviceCodeResponse represents the server response for device authorization initiation.

type OAuthDeviceConsentRequest added in v1.1.2

type OAuthDeviceConsentRequest struct {
	UserCode string `json:"user_code"`
	Action   string `json:"action"` // approve|deny
}

OAuthDeviceConsentRequest represents a device session consent action.

This is sent as application/x-www-form-urlencoded to POST /oauth/device/consent.

type OAuthDeviceConsentResponse added in v1.1.2

type OAuthDeviceConsentResponse struct {
	Status  string `json:"status"`
	Message string `json:"message,omitempty"`
}

OAuthDeviceConsentResponse represents the server response after approving/denying a device session.

type OAuthDeviceVerifyRequest added in v1.1.2

type OAuthDeviceVerifyRequest struct {
	UserCode string `json:"user_code"`
}

OAuthDeviceVerifyRequest represents a device verification lookup request.

This is sent as application/x-www-form-urlencoded to POST /oauth/device/verify.

type OAuthDeviceVerifyResponse added in v1.1.2

type OAuthDeviceVerifyResponse struct {
	UserCode   string   `json:"user_code"`
	ClientID   string   `json:"client_id"`
	ClientName string   `json:"client_name,omitempty"`
	ClientURL  string   `json:"client_url,omitempty"`
	Scopes     []string `json:"scopes,omitempty"`
	Status     string   `json:"status"`
	ExpiresIn  int      `json:"expires_in"`
	Interval   int      `json:"interval"`
}

OAuthDeviceVerifyResponse represents the device session metadata used by the auth UI to show consent.

type OAuthErrorResponse

type OAuthErrorResponse struct {
	Error            string `json:"error"`
	ErrorDescription string `json:"error_description,omitempty"`
	ErrorURI         string `json:"error_uri,omitempty"`
}

OAuthErrorResponse represents an OAuth error

type OAuthRevokeRequest

type OAuthRevokeRequest struct {
	Token         string `json:"token"`
	TokenTypeHint string `json:"token_type_hint,omitempty"`
	ClientID      string `json:"client_id"`
	ClientSecret  string `json:"client_secret"`
}

OAuthRevokeRequest represents a token revocation request

type OAuthTokenRequest

type OAuthTokenRequest struct {
	GrantType    string `json:"grant_type"`
	Code         string `json:"code,omitempty"`
	DeviceCode   string `json:"device_code,omitempty"`
	RedirectURI  string `json:"redirect_uri,omitempty"`
	ClientID     string `json:"client_id"`
	ClientSecret string `json:"client_secret,omitempty"`
	CodeVerifier string `json:"code_verifier,omitempty"`
	RefreshToken string `json:"refresh_token,omitempty"`
	Scope        string `json:"scope,omitempty"`
}

OAuthTokenRequest represents a token request

type OAuthTokenResponse

type OAuthTokenResponse struct {
	AccessToken  string `json:"access_token"`
	TokenType    string `json:"token_type"`
	ExpiresIn    int    `json:"expires_in"`
	RefreshToken string `json:"refresh_token,omitempty"`
	Scope        string `json:"scope,omitempty"`
	CreatedAt    int64  `json:"created_at"`
}

OAuthTokenResponse represents a token response

type OEmbedResponse

type OEmbedResponse struct {
	Type            string `json:"type"`                       // always "rich" for statuses
	Version         string `json:"version"`                    // always "1.0"
	Title           string `json:"title,omitempty"`            // optional title
	AuthorName      string `json:"author_name"`                // account display name
	AuthorURL       string `json:"author_url"`                 // account URL
	ProviderName    string `json:"provider_name"`              // instance name
	ProviderURL     string `json:"provider_url"`               // instance URL
	CacheAge        int    `json:"cache_age"`                  // cache duration in seconds
	HTML            string `json:"html"`                       // embeddable HTML
	Width           int    `json:"width"`                      // width of embed
	Height          *int   `json:"height,omitempty"`           // height if known
	ThumbnailURL    string `json:"thumbnail_url,omitempty"`    // thumbnail if available
	ThumbnailWidth  *int   `json:"thumbnail_width,omitempty"`  // thumbnail width
	ThumbnailHeight *int   `json:"thumbnail_height,omitempty"` // thumbnail height
}

OEmbedResponse represents the oEmbed response format.

type Poll

type Poll struct {
	// Request fields (used when creating a poll)
	Options    []string `json:"options,omitempty"`     // Array of poll options (2-4 options) - only for requests
	ExpiresIn  int      `json:"expires_in,omitempty"`  // Duration in seconds
	Multiple   bool     `json:"multiple,omitempty"`    // Allow multiple choices
	HideTotals bool     `json:"hide_totals,omitempty"` // Hide vote counts until poll ends

	// Response fields (returned in API responses)
	ID          string       `json:"id,omitempty"`           // Poll ID
	ExpiresAt   string       `json:"expires_at,omitempty"`   // ISO 8601 datetime
	Expired     bool         `json:"expired,omitempty"`      // Whether the poll has ended
	VotesCount  int          `json:"votes_count,omitempty"`  // Total number of votes
	VotersCount int          `json:"voters_count,omitempty"` // Total number of voters
	Voted       bool         `json:"voted,omitempty"`        // Whether the current user voted
	OwnVotes    []int        `json:"own_votes,omitempty"`    // Which options the user voted for
	OptionsData []PollOption `json:"-"`                      // Internal field for detailed option data
	Emojis      []any        `json:"emojis,omitempty"`       // Custom emojis used in options
}

Poll represents a poll in a status Note: This struct is used for both requests and responses. For requests, Options field contains simple strings. For responses, OptionsData should be populated and will be marshaled as "options".

func (Poll) MarshalJSON

func (p Poll) MarshalJSON() ([]byte, error)

MarshalJSON custom marshaling for Poll to handle options field

type PollOption

type PollOption struct {
	Title      string `json:"title"`       // The text of the option
	VotesCount int    `json:"votes_count"` // Number of votes for this option
}

PollOption represents an option in a poll response

type PollVoteRequest

type PollVoteRequest struct {
	Choices []int `json:"choices"` // Array of option indices (0-based)
}

PollVoteRequest represents a vote submission request

type Preferences

type Preferences struct {
	PostingDefaultVisibility string `json:"posting:default:visibility"`
	PostingDefaultSensitive  bool   `json:"posting:default:sensitive"`
	PostingDefaultLanguage   string `json:"posting:default:language"`
	ReadingExpandMedia       string `json:"reading:expand:media"`
	ReadingExpandSpoilers    bool   `json:"reading:expand:spoilers"`
	ReadingAutoplayGifs      bool   `json:"reading:autoplay:gifs"`
}

Preferences represents user preferences

type PreviewCard

type PreviewCard struct {
	URL          string `json:"url"`
	Title        string `json:"title"`
	Description  string `json:"description"`
	Type         string `json:"type"`
	AuthorName   string `json:"author_name"`
	AuthorURL    string `json:"author_url"`
	ProviderName string `json:"provider_name"`
	ProviderURL  string `json:"provider_url"`
	HTML         string `json:"html"`
	Width        int    `json:"width"`
	Height       int    `json:"height"`
	Image        string `json:"image"`
	EmbedURL     string `json:"embed_url"`
	Blurhash     string `json:"blurhash"`
}

PreviewCard represents a Mastodon-style link preview card.

type PushNotification

type PushNotification struct {
	ID               string    `json:"-"`
	Username         string    `json:"-"`
	SubscriptionID   string    `json:"-"`
	NotificationType string    `json:"notification_type"`
	Title            string    `json:"title"`
	Body             string    `json:"body"`
	Icon             string    `json:"icon,omitempty"`
	PreferredLocale  string    `json:"preferred_locale"`
	AccessToken      string    `json:"access_token"`
	NotificationID   string    `json:"notification_id"`
	CreatedAt        time.Time `json:"-"`
}

PushNotification represents a notification to be sent via push

type PushSubscription

type PushSubscription struct {
	ID        string                 `json:"id"`
	Endpoint  string                 `json:"endpoint"`
	Keys      PushSubscriptionKeys   `json:"keys"`
	Alerts    PushSubscriptionAlerts `json:"alerts"`
	Policy    string                 `json:"policy,omitempty"`
	ServerKey string                 `json:"server_key"`
}

PushSubscription represents a push notification subscription

type PushSubscriptionAlerts

type PushSubscriptionAlerts struct {
	Follow        bool `json:"follow"`
	Favourite     bool `json:"favourite"`
	Reblog        bool `json:"reblog"`
	Mention       bool `json:"mention"`
	Poll          bool `json:"poll"`
	FollowRequest bool `json:"follow_request"`
	Status        bool `json:"status"`
	Update        bool `json:"update"`
	AdminSignUp   bool `json:"admin.sign_up"`
	AdminReport   bool `json:"admin.report"`
}

PushSubscriptionAlerts represents which events trigger push notifications

type PushSubscriptionData

type PushSubscriptionData struct {
	Endpoint string               `json:"endpoint"`
	Keys     PushSubscriptionKeys `json:"keys"`
}

PushSubscriptionData contains the subscription endpoint and keys

type PushSubscriptionKeys

type PushSubscriptionKeys struct {
	P256dh string `json:"p256dh"`
	Auth   string `json:"auth"`
}

PushSubscriptionKeys represents the keys for push encryption

type PushSubscriptionRequest

type PushSubscriptionRequest struct {
	Subscription PushSubscriptionData   `json:"subscription"`
	Data         PushSubscriptionAlerts `json:"data"`
}

PushSubscriptionRequest represents a request to create/update push subscription

type QuotePermissionsResponse

type QuotePermissionsResponse struct {
	AllowPublic    bool     `json:"allow_public"`
	AllowFollowers bool     `json:"allow_followers"`
	AllowMentioned bool     `json:"allow_mentioned"`
	BlockList      []string `json:"block_list"`
}

QuotePermissionsResponse represents quote permissions for an account.

type QuoteStatusAccount

type QuoteStatusAccount struct {
	ID       string  `json:"id"`
	Username *string `json:"username,omitempty"`
}

QuoteStatusAccount represents the minimal account payload used by quote endpoints.

type QuoteStatusSummary

type QuoteStatusSummary struct {
	ID        string             `json:"id"`
	CreatedAt string             `json:"created_at"`
	Account   QuoteStatusAccount `json:"account"`
	Content   string             `json:"content"`
}

QuoteStatusSummary represents the minimal status payload used by quote endpoints.

type ReblogRequest

type ReblogRequest struct {
	Comment    *string `json:"comment,omitempty"`    // Optional commentary for quote boost
	Visibility string  `json:"visibility,omitempty"` // Visibility for quote boost (defaults to public)
}

ReblogRequest represents an enhanced reblog request that supports optional commentary

type Relationship

type Relationship struct {
	ID                  string `json:"id"`
	Following           bool   `json:"following"`
	ShowingReblogs      bool   `json:"showing_reblogs"`
	Notifying           bool   `json:"notifying"`
	FollowedBy          bool   `json:"followed_by"`
	Blocking            bool   `json:"blocking"`
	BlockedBy           bool   `json:"blocked_by"`
	Muting              bool   `json:"muting"`
	MutingNotifications bool   `json:"muting_notifications"`
	Requested           bool   `json:"requested"`
	DomainBlocking      bool   `json:"domain_blocking"`
	Endorsed            bool   `json:"endorsed"`
	Note                string `json:"note"`
}

Relationship represents a relationship between two accounts

type RemoveAccountsRequest

type RemoveAccountsRequest struct {
	AccountIDs []string `json:"account_ids"`
}

RemoveAccountsRequest represents a request to remove accounts from a list

type Report

type Report struct {
	ID            string   `json:"id"`
	ActionTaken   bool     `json:"action_taken"`
	ActionTakenAt *string  `json:"action_taken_at"`
	Category      string   `json:"category"`
	Comment       string   `json:"comment"`
	Forwarded     bool     `json:"forwarded"`
	CreatedAt     string   `json:"created_at"`
	StatusIDs     []string `json:"status_ids"`
	RuleIDs       []int    `json:"rule_ids"`
	TargetAccount *Account `json:"target_account"`
}

Report represents a user report

type ReputationDocumentRequest

type ReputationDocumentRequest struct {
	Document string `json:"document"`
}

ReputationDocumentRequest represents a request containing a portable reputation document.

type ReputationEvidence

type ReputationEvidence struct {
	TotalPosts     int `json:"total_posts"`
	TotalFollowers int `json:"total_followers"`
	AccountAge     int `json:"account_age"`
	VouchCount     int `json:"vouch_count"`
}

ReputationEvidence represents supporting evidence for a reputation score.

type ReputationKeysResponse

type ReputationKeysResponse struct {
	PublicKey string `json:"publicKey"`
}

ReputationKeysResponse represents GET /.well-known/reputation-keys.

type ReputationResponse

type ReputationResponse struct {
	ID              string             `json:"id"`
	Instance        string             `json:"instance"`
	TotalScore      int                `json:"total_score"`
	TrustScore      int                `json:"trust_score"`
	ActivityScore   int                `json:"activity_score"`
	ModerationScore int                `json:"moderation_score"`
	CommunityScore  int                `json:"community_score"`
	CalculatedAt    time.Time          `json:"calculated_at"`
	Version         string             `json:"version"`
	Evidence        ReputationEvidence `json:"evidence"`
}

ReputationResponse represents GET /api/v1/reputation/{actor_id}.

type ReviewQueueItem

type ReviewQueueItem struct {
	ID              string  `json:"id"`
	ObjectID        string  `json:"object_id"`
	ObjectType      string  `json:"object_type"`
	ObjectPreview   string  `json:"object_preview,omitempty"`
	AuthorID        string  `json:"author_id,omitempty"`
	Category        string  `json:"category"`
	Severity        int     `json:"severity"`
	ConfidenceScore float64 `json:"confidence_score"`
	PriorityScore   float64 `json:"priority_score"`
	ReportCount     int     `json:"report_count"`
	Status          string  `json:"status"`
	CreatedAt       string  `json:"created_at"`
}

ReviewQueueItem represents an item in the moderation review queue

type ReviewRequest

type ReviewRequest struct {
	EventID    string  `json:"event_id"`
	Action     string  `json:"action"`     // none, warning, silence, suspend, remove, etc.
	Category   string  `json:"category"`   // spam, hate_speech, harassment, etc.
	Severity   int     `json:"severity"`   // 1-4
	Confidence float64 `json:"confidence"` // 0.0-1.0
	Notes      string  `json:"notes,omitempty"`
}

ReviewRequest represents a moderation review submission

type Role

type Role struct {
	ID          string `json:"id"`
	Name        string `json:"name"`
	Color       string `json:"color,omitempty"`
	Permissions int    `json:"permissions"`
	Highlighted bool   `json:"highlighted"`
}

Role represents a user role

type Rule

type Rule struct {
	ID   string `json:"id"`
	Text string `json:"text"`
}

Rule represents an instance rule

type ScheduledStatus

type ScheduledStatus struct {
	ID               string       `json:"id"`
	ScheduledAt      string       `json:"scheduled_at"`
	Params           StatusParams `json:"params"`
	MediaAttachments []any        `json:"media_attachments"`
}

ScheduledStatus represents a scheduled status

type ScheduledStatusUpdateRequest

type ScheduledStatusUpdateRequest struct {
	ScheduledAt string `json:"scheduled_at"`
}

ScheduledStatusUpdateRequest represents a request to update a scheduled status

type SearchResult

type SearchResult struct {
	Accounts []Account `json:"accounts"`
	Statuses []Status  `json:"statuses"`
	Hashtags []Tag     `json:"hashtags"`
}

SearchResult represents search results

type SearchResults

type SearchResults struct {
	Accounts []Account `json:"accounts"`
	Statuses []Status  `json:"statuses"`
	Hashtags []any     `json:"hashtags"`
}

SearchResults represents search results

type SearchSuggestion

type SearchSuggestion struct {
	Type  string  `json:"type"`
	Value string  `json:"value"`
	Score float64 `json:"score"`
}

SearchSuggestion represents a search suggestion result.

type SetupBootstrapActor

type SetupBootstrapActor struct {
	Username string `json:"username"`
	Acct     string `json:"acct"`
	Actor    string `json:"actor"`
}

SetupBootstrapActor describes the bootstrap actor identity.

type SetupBootstrapChallengeRequest

type SetupBootstrapChallengeRequest struct {
	Address string `json:"address"`
	ChainID int    `json:"chainId,omitempty"`
}

SetupBootstrapChallengeRequest represents POST /setup/bootstrap/challenge.

type SetupBootstrapChallengeResponse

type SetupBootstrapChallengeResponse struct {
	ChallengeID string    `json:"challenge_id"`
	Challenge   string    `json:"challenge"`
	IssuedAt    time.Time `json:"issued_at"`
	ExpiresAt   time.Time `json:"expires_at"`

	ID              string    `json:"id"`
	Username        string    `json:"username"`
	Address         string    `json:"address"`
	ChainID         int       `json:"chainId"`
	Nonce           string    `json:"nonce"`
	Message         string    `json:"message"`
	IssuedAtLegacy  time.Time `json:"issuedAt"`
	ExpiresAtLegacy time.Time `json:"expiresAt"`
}

SetupBootstrapChallengeResponse represents POST /setup/bootstrap/challenge.

Includes backwards-compatible fields used by earlier clients.

type SetupBootstrapState

type SetupBootstrapState struct {
	Username           string `json:"username"`
	WalletAddressSet   bool   `json:"wallet_address_set"`
	WalletAddress      string `json:"wallet_address,omitempty"`
	PrimaryAdminSet    bool   `json:"primary_admin_set"`
	PrimaryAdmin       string `json:"primary_admin,omitempty"`
	SetupSessionScheme string `json:"setup_session_scheme"`
}

SetupBootstrapState describes bootstrap activation state.

type SetupBootstrapVerifyRequest

type SetupBootstrapVerifyRequest struct {
	ChallengeID      string `json:"challengeId,omitempty"`
	ChallengeIDSnake string `json:"challenge_id,omitempty"`
	Address          string `json:"address"`
	Signature        string `json:"signature"`
	Message          string `json:"message,omitempty"`
	Challenge        string `json:"challenge,omitempty"`
}

SetupBootstrapVerifyRequest represents POST /setup/bootstrap/verify.

Supports both snake_case and camelCase variants for compatibility.

type SetupBootstrapVerifyResponse

type SetupBootstrapVerifyResponse struct {
	TokenType  string    `json:"token_type"`
	Token      string    `json:"token"`
	SetupToken string    `json:"setup_token"`
	ExpiresAt  time.Time `json:"expires_at"`
}

SetupBootstrapVerifyResponse represents POST /setup/bootstrap/verify.

type SetupCreateAdminRequest

type SetupCreateAdminRequest struct {
	Username    string                   `json:"username"`
	DisplayName string                   `json:"displayName,omitempty"`
	Wallet      auth.WalletVerifyRequest `json:"wallet"`
}

SetupCreateAdminRequest represents POST /setup/admin.

type SetupCreateAdminResponse

type SetupCreateAdminResponse struct {
	Username string `json:"username"`
	Actor    string `json:"actor"`
}

SetupCreateAdminResponse represents POST /setup/admin.

type SetupFinalizeResponse

type SetupFinalizeResponse struct {
	InstanceState string         `json:"instance_state"`
	Locked        bool           `json:"locked"`
	ActivatedAt   *time.Time     `json:"activated_at,omitempty"`
	URLs          SetupStageURLs `json:"urls"`
}

SetupFinalizeResponse represents POST /setup/finalize.

type SetupStageURLs

type SetupStageURLs struct {
	Client      string `json:"client"`
	API         string `json:"api"`
	Auth        string `json:"auth"`
	Setup       string `json:"setup"`
	SetupStatus string `json:"setup_status"`
	WS          string `json:"ws"`
	Media       string `json:"media"`
	AuthSetup   string `json:"auth_setup"`
}

SetupStageURLs describes the URLs relevant to a stage (single-domain path routing).

type SetupStatusResponse

type SetupStatusResponse struct {
	InstanceState   string              `json:"instance_state"`
	Locked          bool                `json:"locked"`
	FinalizeAllowed bool                `json:"finalize_allowed"`
	BootstrapActor  SetupBootstrapActor `json:"bootstrap_actor"`
	URLs            SetupStageURLs      `json:"urls"`
	Bootstrap       SetupBootstrapState `json:"bootstrap"`
	ActivatedAt     *time.Time          `json:"activated_at,omitempty"`
}

SetupStatusResponse represents GET /setup/status.

type Status

type Status struct {
	ID                 string         `json:"id"`
	CreatedAt          string         `json:"created_at"`
	InReplyToID        *string        `json:"in_reply_to_id"`
	InReplyToAccountID *string        `json:"in_reply_to_account_id"`
	Sensitive          bool           `json:"sensitive"`
	SpoilerText        string         `json:"spoiler_text"`
	Visibility         string         `json:"visibility"`
	Language           string         `json:"language"`
	URI                string         `json:"uri"`
	URL                string         `json:"url"`
	RepliesCount       int            `json:"replies_count"`
	ReblogsCount       int            `json:"reblogs_count"`
	FavouritesCount    int            `json:"favourites_count"`
	Favourited         bool           `json:"favourited"`
	Reblogged          bool           `json:"reblogged"`
	Muted              bool           `json:"muted"`
	Bookmarked         bool           `json:"bookmarked"`
	Pinned             bool           `json:"pinned"`
	Content            string         `json:"content"`
	Reblog             *Status        `json:"reblog"`
	Application        map[string]any `json:"application,omitempty"`
	Account            Account        `json:"account"`
	MediaAttachments   []any          `json:"media_attachments"`
	Mentions           []any          `json:"mentions"`
	Tags               []any          `json:"tags"`
	Emojis             []any          `json:"emojis"`
	Card               *any           `json:"card"`
	Poll               *Poll          `json:"poll"`
	Filtered           []interface{}  `json:"filtered"`
	EditedAt           *string        `json:"edited_at"`

	// Quote boost extensions
	IsQuoteBoost   bool    `json:"is_quote_boost,omitempty"`
	QuotedStatus   *Status `json:"quoted_status,omitempty"`
	QuotedStatusID *string `json:"quoted_status_id,omitempty"`

	// Lesser extension: agent transparency metadata for Service/bot accounts.
	AgentAttribution *AgentPostAttribution `json:"agent_attribution,omitempty"`
}

Status represents a Mastodon-compatible status response

type StatusContext

type StatusContext struct {
	Ancestors   []Status `json:"ancestors"`
	Descendants []Status `json:"descendants"`
}

StatusContext represents the context of a status (ancestors and descendants)

type StatusEdit

type StatusEdit struct {
	Content          string  `json:"content"`
	SpoilerText      string  `json:"spoiler_text"`
	Sensitive        bool    `json:"sensitive"`
	CreatedAt        string  `json:"created_at"`
	Account          Account `json:"account"`
	Poll             *Poll   `json:"poll,omitempty"`
	MediaAttachments []any   `json:"media_attachments"`
	Emojis           []any   `json:"emojis"`
}

StatusEdit represents a single edit in the status history

type StatusParams

type StatusParams struct {
	Text          string   `json:"text"`
	MediaIDs      []string `json:"media_ids,omitempty"`
	Sensitive     bool     `json:"sensitive"`
	SpoilerText   string   `json:"spoiler_text,omitempty"`
	Visibility    string   `json:"visibility"`
	Language      string   `json:"language,omitempty"`
	InReplyToID   string   `json:"in_reply_to_id,omitempty"`
	ApplicationID string   `json:"application_id,omitempty"`
	Poll          *Poll    `json:"poll,omitempty"`
}

StatusParams represents the parameters for a scheduled status

type StatusSearchResult

type StatusSearchResult struct {
	ID              string   `json:"id"`
	Content         string   `json:"content"`
	URL             string   `json:"url"`
	AccountID       string   `json:"account_id"`
	AccountUsername string   `json:"account_username"`
	CreatedAt       string   `json:"created_at"`
	Score           float64  `json:"score"`
	Highlights      []string `json:"highlights,omitempty"`
}

StatusSearchResult represents a status search result entry returned by /api/v1/search/statuses.

type StatusSource

type StatusSource struct {
	ID          string `json:"id"`
	Text        string `json:"text"`
	SpoilerText string `json:"spoiler_text"`
}

StatusSource represents the source/raw content of a status

type SuccessResponse

type SuccessResponse struct {
	Success bool   `json:"success"`
	Message string `json:"message,omitempty"`
}

SuccessResponse represents a generic success response (optionally with a message).

type SuggestionV1

type SuggestionV1 struct {
	Account Account `json:"account"`
}

SuggestionV1 represents a v1 suggestion item returned by GET /api/v1/suggestions.

type SuggestionV2

type SuggestionV2 struct {
	Source  string  `json:"source"`
	Account Account `json:"account"`
}

SuggestionV2 represents a v2 suggestion item returned by GET /api/v2/suggestions.

type Tag

type Tag struct {
	Name      string       `json:"name"`
	URL       string       `json:"url"`
	History   []TagHistory `json:"history,omitempty"`
	Following *bool        `json:"following,omitempty"`
}

Tag represents a hashtag

type TagHistory

type TagHistory struct {
	Day      string `json:"day"`
	Uses     string `json:"uses"`
	Accounts string `json:"accounts"`
}

TagHistory represents hashtag usage statistics for a day

type TestFilterRequest

type TestFilterRequest struct {
	Content string   `json:"content"`
	Context []string `json:"context"`
}

TestFilterRequest represents POST /api/v2/filters/test.

type Trend

type Trend struct {
	Type  string `json:"type"`
	Value any    `json:"value"`
}

Trend represents a mixed trend item returned by GET /api/v1/trends and /api/v2/trends.

type TrendingStatusAccount

type TrendingStatusAccount struct {
	ID string `json:"id"`
}

TrendingStatusAccount represents the account object embedded in trending status summaries.

type TrendingStatusSummary

type TrendingStatusSummary struct {
	ID        string                `json:"id"`
	URL       string                `json:"url"`
	Account   TrendingStatusAccount `json:"account"`
	Content   string                `json:"content"`
	CreatedAt string                `json:"created_at"`
}

TrendingStatusSummary represents a lightweight trending status entry.

type TrustRelationshipResponse

type TrustRelationshipResponse struct {
	ID            string  `json:"id"`
	TrusteeID     string  `json:"trustee_id"`
	TrusteeDomain string  `json:"trustee_domain,omitempty"`
	Category      string  `json:"category"`
	Score         float64 `json:"score"`
	Confidence    float64 `json:"confidence"`
	UpdatedAt     string  `json:"updated_at"`
}

TrustRelationshipResponse represents a trust relationship in API responses

type TrustScoreResponse

type TrustScoreResponse struct {
	ActorID      string             `json:"actor_id"`
	ActorDomain  string             `json:"actor_domain,omitempty"`
	OverallScore float64            `json:"overall_score"`
	Scores       map[string]float64 `json:"scores"`
	TrusterCount int                `json:"truster_count"`
	CalculatedAt string             `json:"calculated_at"`
}

TrustScoreResponse represents an actor's trust score in API responses

type UpdateAdminAgentPolicyRequest

type UpdateAdminAgentPolicyRequest struct {
	AllowAgents            bool `json:"allow_agents"`
	AllowAgentRegistration bool `json:"allow_agent_registration"`
	DefaultQuarantineDays  int  `json:"default_quarantine_days"`
	MaxAgentsPerOwner      int  `json:"max_agents_per_owner"`

	AllowRemoteAgents    bool     `json:"allow_remote_agents"`
	RemoteQuarantineDays int      `json:"remote_quarantine_days"`
	BlockedAgentDomains  []string `json:"blocked_agent_domains,omitempty"`
	TrustedAgentDomains  []string `json:"trusted_agent_domains,omitempty"`

	AgentMaxPostsPerHour           int `json:"agent_max_posts_per_hour"`
	VerifiedAgentMaxPostsPerHour   int `json:"verified_agent_max_posts_per_hour"`
	AgentMaxFollowsPerHour         int `json:"agent_max_follows_per_hour"`
	VerifiedAgentMaxFollowsPerHour int `json:"verified_agent_max_follows_per_hour"`

	HybridRetrievalEnabled       bool `json:"hybrid_retrieval_enabled"`
	HybridRetrievalMaxCandidates int  `json:"hybrid_retrieval_max_candidates"`
}

UpdateAdminAgentPolicyRequest is the request payload for updating instance-level agent policy.

type UpdateAgentRequest

type UpdateAgentRequest struct {
	DisplayName       string             `json:"display_name,omitempty"`
	Bio               string             `json:"bio,omitempty"`
	AgentType         string             `json:"agent_type,omitempty"`
	AgentVersion      string             `json:"agent_version,omitempty"`
	AgentCapabilities *AgentCapabilities `json:"agent_capabilities,omitempty"`

	// ExitQuarantine allows an owner/admin to approve an agent to post publicly before the quarantine window ends.
	ExitQuarantine bool `json:"exit_quarantine,omitempty"`
}

UpdateAgentRequest is the request payload for PATCH /api/v1/agents/{username}.

type UpdateCredentialsRequest

type UpdateCredentialsRequest struct {
	DisplayName  string `json:"display_name"`
	Note         string `json:"note"`
	Avatar       string `json:"avatar"`
	Header       string `json:"header"`
	Locked       bool   `json:"locked"`
	Discoverable bool   `json:"discoverable"`
	Bot          bool   `json:"bot"`
}

UpdateCredentialsRequest represents a request to update user credentials

type UpdateCustomEmojiRequest

type UpdateCustomEmojiRequest struct {
	Category        *string `json:"category,omitempty"`
	VisibleInPicker *bool   `json:"visible_in_picker,omitempty"`
	Disabled        *bool   `json:"disabled,omitempty"`
}

UpdateCustomEmojiRequest represents a request to update a custom emoji (admin only)

type UpdateDomainBlockRequest

type UpdateDomainBlockRequest struct {
	Severity       string `json:"severity,omitempty"`        // "silence" or "suspend"
	RejectMedia    *bool  `json:"reject_media,omitempty"`    // Whether to reject media files from this domain
	RejectReports  *bool  `json:"reject_reports,omitempty"`  // Whether to reject reports from this domain
	PrivateComment string `json:"private_comment,omitempty"` // Private admin notes
	PublicComment  string `json:"public_comment,omitempty"`  // Public reason for the block
	Obfuscate      *bool  `json:"obfuscate,omitempty"`       // Whether to obfuscate the domain in public lists
}

UpdateDomainBlockRequest represents a request to update a domain block

type UpdateListRequest

type UpdateListRequest struct {
	Title         string `json:"title,omitempty"`
	RepliesPolicy string `json:"replies_policy,omitempty"`
}

UpdateListRequest represents a request to update a list

type UpdateMediaRequest

type UpdateMediaRequest struct {
	Description string `json:"description,omitempty"`
	Focus       string `json:"focus,omitempty"`
}

UpdateMediaRequest represents a request to update media metadata.

type UpdateQuotePermissionsRequest

type UpdateQuotePermissionsRequest struct {
	AllowPublic    *bool    `json:"allow_public,omitempty"`
	AllowFollowers *bool    `json:"allow_followers,omitempty"`
	AllowMentioned *bool    `json:"allow_mentioned,omitempty"`
	BlockList      []string `json:"block_list,omitempty"`
}

UpdateQuotePermissionsRequest represents a request to update quote permissions.

type UpdateStatusRequest

type UpdateStatusRequest struct {
	Status      string   `json:"status"`
	SpoilerText string   `json:"spoiler_text"`
	Sensitive   bool     `json:"sensitive"`
	MediaIDs    []string `json:"media_ids"`
	Visibility  string   `json:"visibility,omitempty"`
	Language    string   `json:"language,omitempty"`
}

UpdateStatusRequest represents a request to update a status

type UpdateTrustRequest

type UpdateTrustRequest struct {
	TrusteeID     string  `json:"trustee_id"`
	TrusteeDomain string  `json:"trustee_domain,omitempty"`
	Category      string  `json:"category"`   // content, behavior, technical, general
	Score         float64 `json:"score"`      // -1.0 to 1.0
	Confidence    float64 `json:"confidence"` // 0.0 to 1.0
}

UpdateTrustRequest represents a trust relationship update request

type UserNoteAccount

type UserNoteAccount struct {
	ID       string `json:"id"`
	Username string `json:"username"`
	Acct     string `json:"acct"`
}

UserNoteAccount represents a minimal account payload for user note statuses.

type UserNoteCard

type UserNoteCard struct {
	Type       string   `json:"type"`
	ObjectID   string   `json:"object_id"`
	ObjectType string   `json:"object_type"`
	Score      float64  `json:"score"`
	Sources    []string `json:"sources,omitempty"`
}

UserNoteCard represents note metadata embedded in the user notes response.

type UserNoteStatus

type UserNoteStatus struct {
	ID               string          `json:"id"`
	Content          string          `json:"content"`
	CreatedAt        string          `json:"created_at"`
	Account          UserNoteAccount `json:"account"`
	Visibility       string          `json:"visibility"`
	Sensitive        bool            `json:"sensitive"`
	SpoilerText      string          `json:"spoiler_text"`
	MediaAttachments []any           `json:"media_attachments"`
	Mentions         []any           `json:"mentions"`
	Tags             []any           `json:"tags"`
	Emojis           []any           `json:"emojis"`
	ReblogsCount     int             `json:"reblogs_count"`
	FavouritesCount  int             `json:"favourites_count"`
	RepliesCount     int             `json:"replies_count"`
	URL              string          `json:"url"`
	Card             UserNoteCard    `json:"card"`
}

UserNoteStatus represents a status-like response entry for GET /api/v1/accounts/{id}/notes.

type VerifyCredentialsResponse

type VerifyCredentialsResponse struct {
	ID             string         `json:"id"`
	Username       string         `json:"username"`
	Acct           string         `json:"acct"`
	DisplayName    string         `json:"display_name"`
	Locked         bool           `json:"locked"`
	Bot            bool           `json:"bot"`
	Discoverable   bool           `json:"discoverable"`
	Group          bool           `json:"group"`
	Note           string         `json:"note"`
	URL            string         `json:"url"`
	Avatar         string         `json:"avatar"`
	AvatarStatic   string         `json:"avatar_static"`
	Header         string         `json:"header"`
	HeaderStatic   string         `json:"header_static"`
	FollowersCount int            `json:"followers_count"`
	FollowingCount int            `json:"following_count"`
	StatusesCount  int            `json:"statuses_count"`
	LastStatusAt   string         `json:"last_status_at"`
	Emojis         []any          `json:"emojis"`
	Fields         []any          `json:"fields"`
	CreatedAt      string         `json:"created_at"`
	Role           string         `json:"role"`
	Source         map[string]any `json:"source"`
}

VerifyCredentialsResponse represents the current user info

type VoteCommunityNoteRequest

type VoteCommunityNoteRequest struct {
	VoteType string `json:"vote_type"`
	Reason   string `json:"reason,omitempty"`
}

VoteCommunityNoteRequest represents POST /api/v1/notes/{id}/vote.

type VoteCommunityNoteResponse

type VoteCommunityNoteResponse struct {
	Vote   *storage.CommunityNoteVote `json:"vote"`
	NoteID string                     `json:"note_id"`
}

VoteCommunityNoteResponse represents the response from POST /api/v1/notes/{id}/vote.

type VouchResponse

type VouchResponse struct {
	ID                string     `json:"id"`
	From              string     `json:"from"`
	To                string     `json:"to"`
	Confidence        float64    `json:"confidence"`
	Context           string     `json:"context"`
	CreatedAt         time.Time  `json:"created_at"`
	ExpiresAt         time.Time  `json:"expires_at"`
	VoucherReputation int        `json:"voucher_reputation"`
	Active            bool       `json:"active"`
	Revoked           bool       `json:"revoked"`
	RevokedAt         *time.Time `json:"revoked_at,omitempty"`
}

VouchResponse represents a vouch in API responses.

type WalletChallengeRequest

type WalletChallengeRequest struct {
	Address  string `json:"address"`
	ChainID  int    `json:"chainId,omitempty"`
	Username string `json:"username"`
}

WalletChallengeRequest represents POST /auth/wallet/challenge.

type WalletLinkRequest

type WalletLinkRequest struct {
	Address     string `json:"address"`
	ChainID     int    `json:"chainId,omitempty"`
	WalletType  string `json:"walletType,omitempty"`
	ChallengeID string `json:"challengeId,omitempty"`
	Signature   string `json:"signature,omitempty"`
	Message     string `json:"message,omitempty"`
	Username    string `json:"username,omitempty"`
}

WalletLinkRequest represents POST /auth/wallet/link.

type WalletLinkResponse

type WalletLinkResponse struct {
	Success     bool   `json:"success"`
	Message     string `json:"message"`
	Address     string `json:"address"`
	AccessToken string `json:"access_token,omitempty"`
	TokenType   string `json:"token_type,omitempty"`
	ExpiresIn   int    `json:"expires_in,omitempty"`
}

WalletLinkResponse represents the success payload for POST /auth/wallet/link.

type WalletListResponse

type WalletListResponse struct {
	Wallets []*storage.WalletCredential `json:"wallets"`
	Count   int                         `json:"count"`
}

WalletListResponse represents GET /auth/wallet/list.

type WalletUnlinkResponse

type WalletUnlinkResponse struct {
	Success bool   `json:"success"`
	Message string `json:"message"`
	Address string `json:"address"`
}

WalletUnlinkResponse represents the success payload for DELETE /auth/wallet/unlink/{address}.

type WalletVerifyResponse

type WalletVerifyResponse struct {
	Verified bool   `json:"verified"`
	Message  string `json:"message"`
}

WalletVerifyResponse represents the success payload for POST /auth/wallet/verify.

type WebAuthnBeginLoginRequest

type WebAuthnBeginLoginRequest struct {
	Username string `json:"username"`
}

WebAuthnBeginLoginRequest represents POST /api/v1/auth/webauthn/login/begin.

type WebAuthnBeginResponse

type WebAuthnBeginResponse struct {
	PublicKey map[string]any `json:"publicKey"`
	Challenge string         `json:"challenge"`
}

WebAuthnBeginResponse represents the publicKey + challenge response used for WebAuthn begin endpoints.

type WebAuthnCredentialSummary

type WebAuthnCredentialSummary struct {
	ID         string    `json:"id"`
	Name       string    `json:"name"`
	CreatedAt  time.Time `json:"created_at"`
	LastUsedAt time.Time `json:"last_used_at"`
}

WebAuthnCredentialSummary represents a WebAuthn credential summary in API responses.

type WebAuthnCredentialsResponse

type WebAuthnCredentialsResponse struct {
	Credentials []WebAuthnCredentialSummary `json:"credentials"`
}

WebAuthnCredentialsResponse represents GET /api/v1/auth/webauthn/credentials.

type WebAuthnFinishLoginRequest

type WebAuthnFinishLoginRequest struct {
	Username   string         `json:"username"`
	Challenge  string         `json:"challenge"`
	Response   map[string]any `json:"response"`
	DeviceName string         `json:"device_name"`
}

WebAuthnFinishLoginRequest represents POST /api/v1/auth/webauthn/login/finish.

type WebAuthnFinishRegistrationRequest

type WebAuthnFinishRegistrationRequest struct {
	Challenge      string         `json:"challenge"`
	Response       map[string]any `json:"response"`
	CredentialName string         `json:"credential_name"`
}

WebAuthnFinishRegistrationRequest represents POST /api/v1/auth/webauthn/register/finish.

type WebAuthnUpdateCredentialRequest

type WebAuthnUpdateCredentialRequest struct {
	Name string `json:"name"`
}

WebAuthnUpdateCredentialRequest represents PUT /api/v1/auth/webauthn/credentials/{credentialId}.

Jump to

Keyboard shortcuts

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