Add OpenAI Ads CLI commands#12
Open
adhikjoshi wants to merge 2 commits intoopenai:mainfrom
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds an
openai adsCLI namespace for the OpenAI Ads API and documents how each Ads endpoint maps to a CLI command.Authentication:
The Ads CLI sends requests to the fixed Ads API endpoint:
https://api.ads.openai.com/v1.Example flow:
Ads API endpoint coverage
GET /ad_accountopenai ads account retrieveGET /campaignsopenai ads campaigns list--limit,--after,--before,--orderPOST /campaignsopenai ads campaigns create--name,--description,--status,--start-time,--end-time,--lifetime-spend-limit-micros,--country,--exclude-countryGET /campaigns/{campaign_id}openai ads campaigns retrieve <campaign_id><campaign_id>or--campaign-idPOST /campaigns/{campaign_id}openai ads campaigns update <campaign_id><campaign_id>or--campaign-id,--name,--description,--status,--start-time,--end-time,--lifetime-spend-limit-micros,--targeting,--country,--exclude-countryPOST /campaigns/{campaign_id}/activateopenai ads campaigns activate <campaign_id><campaign_id>or--campaign-idPOST /campaigns/{campaign_id}/pauseopenai ads campaigns pause <campaign_id><campaign_id>or--campaign-idPOST /campaigns/{campaign_id}/archiveopenai ads campaigns archive <campaign_id><campaign_id>or--campaign-idGET /ad_groupsopenai ads ad-groups list--campaign-id,--limit,--after,--before,--orderPOST /ad_groupsopenai ads ad-groups create--campaign-id,--name,--description,--context-hint,--status,--billing-event-type,--max-bid-microsGET /ad_groups/{ad_group_id}openai ads ad-groups retrieve <ad_group_id><ad_group_id>or--ad-group-idPOST /ad_groups/{ad_group_id}openai ads ad-groups update <ad_group_id><ad_group_id>or--ad-group-id,--name,--description,--context-hint,--status,--bidding-config,--billing-event-type,--max-bid-microsPOST /ad_groups/{ad_group_id}/activateopenai ads ad-groups activate <ad_group_id><ad_group_id>or--ad-group-idPOST /ad_groups/{ad_group_id}/pauseopenai ads ad-groups pause <ad_group_id><ad_group_id>or--ad-group-idPOST /ad_groups/{ad_group_id}/archiveopenai ads ad-groups archive <ad_group_id><ad_group_id>or--ad-group-idGET /adsopenai ads ads list--ad-group-id,--limit,--after,--before,--orderPOST /adsopenai ads ads create--ad-group-id,--name,--status,--creative-type,--title,--body,--target-url,--file-idGET /ads/{ad_id}openai ads ads retrieve <ad_id><ad_id>or--ad-idPOST /ads/{ad_id}openai ads ads update <ad_id><ad_id>or--ad-id,--name,--status,--creative,--creative-type,--title,--body,--target-url,--file-idPOST /ads/{ad_id}/activateopenai ads ads activate <ad_id><ad_id>or--ad-idPOST /ads/{ad_id}/pauseopenai ads ads pause <ad_id><ad_id>or--ad-idPOST /ads/{ad_id}/archiveopenai ads ads archive <ad_id><ad_id>or--ad-idPOST /uploadopenai ads files upload--fileor--image-urlGET /ad_account/insightsopenai ads insights account--time-granularity,--aggregation-level,--limit,--after,--before,--field,--time-range,--filter,--sortGET /campaigns/{campaign_id}/insightsopenai ads insights campaign <campaign_id><campaign_id>or--campaign-id, plus insights flagsGET /ad_groups/{ad_group_id}/insightsopenai ads insights ad-group <ad_group_id><ad_group_id>or--ad-group-id, plus insights flagsGET /ads/{ad_id}/insightsopenai ads insights ad <ad_id><ad_id>or--ad-id, plus insights flagsVerification
go test ./pkg/cmd -run 'TestAds' -count=1go test ./... -run '^$'go test ./internal/...go vet ./...go run ./cmd/openai --help | rg -n "ads|OPENAI_ADS|base-url" -C 1go run ./cmd/openai ads campaigns create --helpNote: full
go test ./...requires the repo mock server onlocalhost:4010for existing generated API tests; without it, unrelated tests fail before exercising Ads-specific code.