Documentation
¶
Index ¶
- Constants
- func ClassifyError(err error) int
- func DollarsToCents(d float64) (int64, error)
- type Ad
- type AdAccount
- type AdCreative
- type AdSet
- type AggregateSourceError
- type AuthApp
- type AuthStatusResult
- type AuthUser
- type Campaign
- type Client
- type CreateAdParams
- type CreateAdSetParams
- type CreateCampaignParams
- type CreateCreativeParams
- type Creative
- type GraphError
- type Image
- type ListAccountsParams
- type ListAccountsResult
- type ListPagesParams
- type ListPagesResult
- type Page
- type PageIterator
- type PageSource
- type Response
- type SearchTargetingParams
- type SearchTargetingResult
- type SourceWarning
- type TargetingSuggestion
- type UploadImageParams
- type UploadVideoParams
- type Video
- type VideoStatus
- type VideoStatusParams
Constants ¶
const ( ExitSuccess = 0 ExitAPIError = 1 ExitAuthError = 2 ExitValidationError = 3 ExitConfigError = 4 ExitNetworkError = 5 )
Variables ¶
This section is empty.
Functions ¶
func ClassifyError ¶
func DollarsToCents ¶
Types ¶
type Ad ¶
type Ad struct {
ID string `json:"id"`
Name string `json:"name"`
AdSetID string `json:"adset_id"`
Creative AdCreative `json:"creative"`
Status string `json:"status"`
}
Ad represents a Meta ad returned by the API.
type AdAccount ¶
type AdAccount struct {
ID string `json:"id"`
AccountID string `json:"account_id"`
Name string `json:"name"`
AccountStatus int `json:"account_status"`
Currency string `json:"currency"`
TimezoneName string `json:"timezone_name"`
AmountSpent string `json:"amount_spent"`
Balance string `json:"balance"`
}
AdAccount represents a Meta ad account.
type AdCreative ¶
type AdCreative struct {
ID string `json:"id"`
}
AdCreative holds the creative reference within an ad.
type AdSet ¶
type AdSet struct {
ID string `json:"id"`
Name string `json:"name"`
CampaignID string `json:"campaign_id"`
Status string `json:"status"`
DailyBudget string `json:"daily_budget,omitempty"`
LifetimeBudget string `json:"lifetime_budget,omitempty"`
}
AdSet represents a Meta ad set returned by the API.
func CreateAdSet ¶
CreateAdSet creates a new ad set under the given ad account.
type AggregateSourceError ¶ added in v0.2.0
type AggregateSourceError struct {
Warnings []SourceWarning
}
AggregateSourceError is returned from ListPages when every attempted source produced an error and no pages were recovered. The caller can still inspect individual failures through Warnings.
func (*AggregateSourceError) Error ¶ added in v0.2.0
func (e *AggregateSourceError) Error() string
type AuthStatusResult ¶
type AuthStatusResult struct {
Valid bool `json:"valid"`
User AuthUser `json:"user"`
App AuthApp `json:"app"`
Permissions []string `json:"permissions"`
ExpiresAt string `json:"expires_at"`
Scopes []string `json:"scopes"`
}
AuthStatusResult contains the result of validating an access token.
func AuthStatus ¶
func AuthStatus(ctx context.Context, client Client) (*AuthStatusResult, error)
AuthStatus validates the current access token by calling /me, /me/permissions, and /debug_token to populate the full AuthStatusResult including app identity and token expiry. The client's token is used implicitly (injected by the transport layer).
type Campaign ¶
type Campaign struct {
ID string `json:"id"`
Name string `json:"name"`
Objective string `json:"objective"`
Status string `json:"status"`
DailyBudget string `json:"daily_budget,omitempty"`
LifetimeBudget string `json:"lifetime_budget,omitempty"`
}
Campaign represents a Meta campaign returned by the API.
func CreateCampaign ¶
func CreateCampaign(ctx context.Context, client Client, params CreateCampaignParams) (*Campaign, error)
CreateCampaign creates a new campaign under the given ad account.
type Client ¶
type Client interface {
Get(ctx context.Context, path string, params url.Values) (*Response, error)
Post(ctx context.Context, path string, params map[string]string) (*Response, error)
Upload(ctx context.Context, path string, file io.Reader, filename string, size int64, params map[string]string) (*Response, error)
Paginate(ctx context.Context, path string, params url.Values) *PageIterator
SetDryRun(v bool)
SetVerbose(v bool)
}
type CreateAdParams ¶
type CreateAdParams struct {
AccountID string
Name string
AdSetID string
CreativeID string
Status string // default: PAUSED
}
CreateAdParams holds the input for creating a Meta ad.
type CreateAdSetParams ¶
type CreateAdSetParams struct {
AccountID string
Name string
CampaignID string
DailyBudgetCents int64
LifetimeBudgetCents int64
OptimizationGoal string
BillingEvent string // default: IMPRESSIONS
BidAmountCents int64
Countries []string // required, non-empty
AgeMin int // default: 18
AgeMax int // default: 65
Genders []int // default: [1,2]
Interests []string // interest IDs
Behaviors []string
CustomAudiences []string
ExcludedCountries []string
PublisherPlatforms []string
PixelID string
CustomEventType string
StartTime string
EndTime string
AdvantageAudience bool // default: false (explicit targeting)
Status string // default: PAUSED
}
CreateAdSetParams holds the input for creating a Meta ad set.
type CreateCampaignParams ¶
type CreateCampaignParams struct {
AccountID string
Name string
Objective string // OUTCOME_SALES, OUTCOME_TRAFFIC, etc.
DailyBudgetCents int64 // mutually exclusive with LifetimeBudgetCents
LifetimeBudgetCents int64
BidStrategy string // default: LOWEST_COST_WITHOUT_CAP
Status string // default: PAUSED
SpecialAdCategory string // default: NONE
}
CreateCampaignParams holds the input for creating a Meta campaign.
type CreateCreativeParams ¶
type CreateCreativeParams struct {
AccountID string
Name string
PageID string // required
VideoID string // one of VideoID/ImageHash/ImageURL required
ImageHash string
ImageURL string
Message string // required
Headline string
Description string
CTA string // default: SHOP_NOW
Link string // required
InstagramAccountID string
}
CreateCreativeParams holds the input for creating a Meta ad creative.
type Creative ¶
Creative represents a Meta ad creative returned by the API.
func CreateCreative ¶
func CreateCreative(ctx context.Context, client Client, params CreateCreativeParams) (*Creative, error)
CreateCreative creates a new ad creative under the given ad account.
When the caller provides a VideoID but no ImageHash or ImageURL, CreateCreative auto-resolves a thumbnail image_hash via ensureVideoThumbnail before issuing the POST. Meta's adcreatives endpoint rejects video creatives without a thumbnail image even though the video already has an auto-generated one, and forcing users to download / re-upload / pass the hash by hand is exactly the kind of friction the CLI should eliminate. The auto-resolution is the obvious-correct default and is not gated behind a flag — there is no use case for a video creative without a thumbnail.
type GraphError ¶
type GraphError struct {
Message string `json:"message"`
Type string `json:"type"`
Code int `json:"code"`
Subcode int `json:"error_subcode"`
TraceID string `json:"fbtrace_id"`
UserTitle string `json:"error_user_title,omitempty"`
UserMessage string `json:"error_user_msg,omitempty"`
IsRetryable bool `json:"-"`
}
GraphError is the decoded representation of a Meta Graph API error response.
Meta includes two developer-facing fields on error responses — error_user_title and error_user_msg — that describe exactly what is wrong and how to fix it. They are the difference between a generic "Invalid parameter" and an actionable diagnostic, so they are surfaced on this struct (and in the Error() string) rather than being dropped.
func ParseGraphError ¶
func ParseGraphError(body []byte) *GraphError
func (*GraphError) Error ¶
func (e *GraphError) Error() string
Error renders the error as a scannable single line. When Meta provides the developer-facing UserTitle/UserMessage fields they are included, because they are typically the most actionable part of the payload.
type Image ¶ added in v0.2.1
type Image struct {
Hash string `json:"hash"`
Name string `json:"name,omitempty"`
URL string `json:"url,omitempty"`
URL128 string `json:"url_128,omitempty"`
Width int `json:"width,omitempty"`
Height int `json:"height,omitempty"`
}
Image is the canonical representation of a Meta ad image. Single source of truth for the shape returned by both UploadImage and any future GetImage call.
The Hash field is the canonical identifier consumed by ad creatives as image_hash (including as the thumbnail hash for video creatives).
func UploadImage ¶ added in v0.2.1
UploadImage uploads an image file to the specified ad account and returns the resulting Image record (including the hash, which is the canonical identifier consumed by creatives as image_hash).
Meta endpoint: POST /act_{account_id}/adimages The multipart upload is delegated to the shared Client.Upload primitive. The response is a map keyed by filename; this function looks up the entry matching the upload's filename and falls back to the first (and only) entry when Meta rewrites the key (e.g. stripping the file extension).
type ListAccountsParams ¶
type ListAccountsParams struct {
Limit int
}
ListAccountsParams configures the ad accounts listing request.
type ListAccountsResult ¶
type ListAccountsResult struct {
Data []AdAccount `json:"data"`
HasNext bool `json:"has_next"`
Cursor string `json:"cursor"`
}
ListAccountsResult contains ad accounts and pagination state.
func ListAccounts ¶
func ListAccounts(ctx context.Context, client Client, params ListAccountsParams) (*ListAccountsResult, error)
ListAccounts retrieves ad accounts accessible by the authenticated user. GET /me/adaccounts?fields=account_id,name,account_status,currency,timezone_name,amount_spent,balance&limit=N
type ListPagesParams ¶
type ListPagesParams struct {
// Limit is the per-API-call page size passed to every underlying Graph
// request (default 25).
Limit int
// All triggers exhaustive pagination of every source. Without it, each
// source fetches only its first page and the results are aggregated.
All bool
}
ListPagesParams configures the pages listing request.
type ListPagesResult ¶
type ListPagesResult struct {
Data []Page `json:"data"`
Warnings []SourceWarning `json:"warnings,omitempty"`
// HasNext is true when at least one source reported a next page. In
// aggregated mode the caller cannot resume from a single cursor, so this
// is purely informational.
HasNext bool `json:"has_next"`
// Cursor is retained for backward compatibility with the pre-aggregation
// API shape and is always empty in the aggregated implementation.
Cursor string `json:"cursor,omitempty"`
}
ListPagesResult contains the aggregated pages, any per-source warnings, and pagination state.
func ListPages ¶
func ListPages(ctx context.Context, client Client, params ListPagesParams) (*ListPagesResult, error)
ListPages retrieves every Facebook Page the authenticated user can access by aggregating /me/accounts, /me/businesses → /{bm}/owned_pages, and /{bm}/client_pages. Per-source failures become Warnings; the call only errors when every attempted source failed.
type Page ¶
type Page struct {
ID string `json:"id"`
Name string `json:"name"`
// Category is empty for pages returned from /owned_pages and
// /client_pages unless Meta includes it in the response.
Category string `json:"category,omitempty"`
// AccessToken is only present when the Page was reached via
// /me/accounts. Business-Manager-sourced Pages do not expose a Page
// access token on this endpoint.
AccessToken string `json:"access_token,omitempty"`
// Sources lists every route through which the user can reach this Page,
// sorted alphabetically for deterministic output.
Sources []PageSource `json:"sources"`
// BusinessIDs lists every Business Manager through which the Page is
// accessible, sorted lexicographically for deterministic output.
BusinessIDs []string `json:"business_ids,omitempty"`
// Tasks lists the permitted tasks on the Page, when Meta returns them.
// The set varies by source; when a Page is reachable through multiple
// sources the first non-empty set is retained.
Tasks []string `json:"tasks,omitempty"`
}
Page represents a Facebook Page the authenticated user can access.
The same logical Page can be reachable through multiple sources (e.g. a direct role plus a Business Manager). In that case a single Page entry is returned with all sources unioned into Sources.
type PageIterator ¶
type PageIterator struct {
// contains filtered or unexported fields
}
func NewPageIterator ¶
func NewPageIterator(client Client, path string, params url.Values) *PageIterator
func (*PageIterator) Err ¶
func (it *PageIterator) Err() error
func (*PageIterator) Page ¶
func (it *PageIterator) Page() (*Response, error)
type PageSource ¶ added in v0.2.0
type PageSource string
PageSource describes how the authenticated user has access to a Page.
const ( // PageSourceDirect means the user has a direct role on the Page // (returned by GET /me/accounts). PageSourceDirect PageSource = "direct" // PageSourceBusinessOwned means the Page is owned by a Business Manager // the user is a member of (GET /{bm}/owned_pages). PageSourceBusinessOwned PageSource = "business_owned" // PageSourceBusinessClient means a Business Manager the user is a member // of has client access to the Page (GET /{bm}/client_pages). PageSourceBusinessClient PageSource = "business_client" )
type SearchTargetingParams ¶
SearchTargetingParams contains the parameters for searching targeting options.
type SearchTargetingResult ¶
type SearchTargetingResult struct {
Data []TargetingSuggestion `json:"data"`
}
SearchTargetingResult contains the list of targeting suggestions from the API.
func SearchTargeting ¶
func SearchTargeting(ctx context.Context, client Client, params SearchTargetingParams) (*SearchTargetingResult, error)
SearchTargeting searches for targeting options (interests, behaviors, demographics, etc.).
type SourceWarning ¶ added in v0.2.0
type SourceWarning struct {
// Source is a stable, machine-parseable identifier like "me/accounts" or
// "business/581184769220955/owned_pages". No leading slash, no version.
Source string `json:"source"`
// Code is the Meta error code if the failure came from a Graph error.
Code int `json:"code,omitempty"`
// Message is a human-readable description of the failure.
Message string `json:"message"`
}
SourceWarning describes a partial failure of one source during aggregation.
type TargetingSuggestion ¶
type TargetingSuggestion struct {
ID string `json:"id"`
Name string `json:"name"`
Type string `json:"type"`
AudienceSizeLowerBound int64 `json:"audience_size_lower_bound"`
AudienceSizeUpperBound int64 `json:"audience_size_upper_bound"`
Path []string `json:"path"`
}
TargetingSuggestion represents a single targeting option returned by the API.
type UploadImageParams ¶ added in v0.2.1
UploadImageParams contains parameters for uploading an image to an ad account.
type UploadVideoParams ¶
type UploadVideoParams struct {
AccountID string
File io.Reader
Filename string
FileSize int64
Title string
}
UploadVideoParams contains the parameters for uploading a video to an ad account.
type Video ¶ added in v0.1.1
type Video struct {
ID string `json:"id"`
Title string `json:"title"`
Status VideoStatus `json:"status"`
Length float64 `json:"length"`
Picture string `json:"picture,omitempty"`
}
Video is the canonical representation of a Meta video resource, shared by UploadVideo and GetVideoStatus. It is the single source of truth for the shape of a video returned to callers.
Picture is Meta's auto-generated thumbnail URL, served from the FB CDN. It is populated once the video has finished encoding and is the source used by ensureVideoThumbnail to avoid forcing users to manually supply a thumbnail image when creating video creatives.
func GetVideoStatus ¶
GetVideoStatus fetches the current metadata and encoding status of a video.
func UploadVideo ¶
UploadVideo uploads a video file to the specified ad account and returns the full video record (id, title, status, length). Because Meta's upload endpoint only returns the new video's id, this function issues a follow-up GET against the same path used by GetVideoStatus so callers always receive a fully populated Video regardless of which code path produced it.
type VideoStatus ¶
type VideoStatus struct {
VideoStatus string `json:"video_status"`
ProcessingProgress int `json:"processing_progress"`
}
VideoStatus represents the encoding status of a video.
type VideoStatusParams ¶
type VideoStatusParams struct {
VideoID string
}
VideoStatusParams contains the parameters for checking video encoding status.