[GH-ISSUE #154] Add App Clips CLI support (experiences and invocations) #35

Closed
opened 2026-02-26 21:32:54 +03:00 by kerem · 3 comments
Owner

Originally created by @rudrankriyam on GitHub (Jan 25, 2026).
Original GitHub issue: https://github.com/rudrankriyam/App-Store-Connect-CLI/issues/154

Overview

Add CLI support for App Clips: default/advanced experiences, images, and beta invocations, using the App Store Connect API. This should follow JSON-first output and explicit flag conventions.

Scope (OpenAPI resources)

  • appClips
  • Default experiences: appClipDefaultExperiences, appClipDefaultExperienceLocalizations
  • Advanced experiences: appClipAdvancedExperiences, appClipAdvancedExperienceImages
  • Images: appClipHeaderImages
  • Review details: appClipAppStoreReviewDetails (invocation URLs)
  • Beta invocations: betaAppClipInvocations, betaAppClipInvocationLocalizations

Proposed CLI

Top-level group:

  • asc app-clips <subcommand> [flags]

Subcommands:

  • app-clips list|get (for appClips)
  • app-clips default-experiences list|get|create|update|delete
  • app-clips default-experiences localizations list|get|create|update|delete
  • app-clips advanced-experiences list|get|create|update|delete
  • app-clips advanced-experiences images create|delete
  • app-clips header-images create|delete
  • app-clips invocations list|get|create|update|delete (beta)
  • app-clips invocations localizations list|get|create|update|delete (beta)

Examples:

  • asc app-clips default-experiences list --app APP_ID
  • asc app-clips default-experiences create --app APP_ID --app-clip-id CLIP_ID --action OPEN
  • asc app-clips advanced-experiences create --app APP_ID --action PLAY --bundle-id com.example.clip
  • asc app-clips advanced-experiences images create --experience-id EXP_ID --file image.png
  • asc app-clips invocations create --app APP_ID --app-clip-id CLIP_ID --url "https://example.com/clip"

Flag patterns

Common:

  • --app, --output, --pretty, --limit, --next, --paginate, --confirm

Resource-specific examples:

  • --app-clip-id, --experience-id, --invocation-id
  • --action, --bundle-id, --category
  • --locale, --title, --subtitle
  • --file for image uploads
  • --url for invocation URLs

Output

  • JSON minified by default
  • --pretty for JSON
  • --output table/markdown for list commands

Acceptance criteria

  • Commands appear in asc app-clips --help
  • CRUD works for default experiences
  • CRUD works for default experience localizations
  • CRUD works for advanced experiences
  • Image upload/delete works for advanced experience images and header images
  • CRUD works for beta invocations and their localizations
  • Pagination and --next validation works
  • Delete requires --confirm

Tests

  • Command flag validation tests
  • HTTP client tests for list/get/create/update/delete
  • Upload tests for image resources
  • Output tests for table/markdown

Implementation notes

  • Add cmd/app_clips*.go and internal/asc/client_app_clips*.go
  • Add output helpers in internal/asc/output_app_clips.go
  • Register command in cmd/root.go
  • Add resource type constants in internal/asc/client_types.go
  • Follow patterns in cmd/beta_groups.go, cmd/apps.go, internal/asc/output_*
Originally created by @rudrankriyam on GitHub (Jan 25, 2026). Original GitHub issue: https://github.com/rudrankriyam/App-Store-Connect-CLI/issues/154 # Overview Add CLI support for App Clips: default/advanced experiences, images, and beta invocations, using the App Store Connect API. This should follow JSON-first output and explicit flag conventions. # Scope (OpenAPI resources) - `appClips` - Default experiences: `appClipDefaultExperiences`, `appClipDefaultExperienceLocalizations` - Advanced experiences: `appClipAdvancedExperiences`, `appClipAdvancedExperienceImages` - Images: `appClipHeaderImages` - Review details: `appClipAppStoreReviewDetails` (invocation URLs) - Beta invocations: `betaAppClipInvocations`, `betaAppClipInvocationLocalizations` # Proposed CLI Top-level group: - `asc app-clips <subcommand> [flags]` Subcommands: - `app-clips list|get` (for `appClips`) - `app-clips default-experiences list|get|create|update|delete` - `app-clips default-experiences localizations list|get|create|update|delete` - `app-clips advanced-experiences list|get|create|update|delete` - `app-clips advanced-experiences images create|delete` - `app-clips header-images create|delete` - `app-clips invocations list|get|create|update|delete` (beta) - `app-clips invocations localizations list|get|create|update|delete` (beta) Examples: - `asc app-clips default-experiences list --app APP_ID` - `asc app-clips default-experiences create --app APP_ID --app-clip-id CLIP_ID --action OPEN` - `asc app-clips advanced-experiences create --app APP_ID --action PLAY --bundle-id com.example.clip` - `asc app-clips advanced-experiences images create --experience-id EXP_ID --file image.png` - `asc app-clips invocations create --app APP_ID --app-clip-id CLIP_ID --url "https://example.com/clip"` # Flag patterns Common: - `--app`, `--output`, `--pretty`, `--limit`, `--next`, `--paginate`, `--confirm` Resource-specific examples: - `--app-clip-id`, `--experience-id`, `--invocation-id` - `--action`, `--bundle-id`, `--category` - `--locale`, `--title`, `--subtitle` - `--file` for image uploads - `--url` for invocation URLs # Output - JSON minified by default - `--pretty` for JSON - `--output table/markdown` for list commands # Acceptance criteria - [ ] Commands appear in `asc app-clips --help` - [ ] CRUD works for default experiences - [ ] CRUD works for default experience localizations - [ ] CRUD works for advanced experiences - [ ] Image upload/delete works for advanced experience images and header images - [ ] CRUD works for beta invocations and their localizations - [ ] Pagination and `--next` validation works - [ ] Delete requires `--confirm` # Tests - Command flag validation tests - HTTP client tests for list/get/create/update/delete - Upload tests for image resources - Output tests for table/markdown # Implementation notes - Add `cmd/app_clips*.go` and `internal/asc/client_app_clips*.go` - Add output helpers in `internal/asc/output_app_clips.go` - Register command in `cmd/root.go` - Add resource type constants in `internal/asc/client_types.go` - Follow patterns in `cmd/beta_groups.go`, `cmd/apps.go`, `internal/asc/output_*`
kerem closed this issue 2026-02-26 21:32:55 +03:00
Author
Owner

@rudrankriyam commented on GitHub (Jan 29, 2026):

@cursor Please implement this issue.

Guidance (same expectations as for me):

  • Follow docs/GO_STANDARDS.md and docs/TESTING.md.
  • Use docs/openapi/paths.txt + docs/openapi/latest.json for endpoints and schemas.
  • Keep CLI behavior consistent: explicit flags, JSON-first output, no interactive prompts, --confirm for destructive actions.
  • Implement asc app-clips group for experiences and invocations per the issue scope.
  • Add table/markdown output for list commands and wire output in internal/asc/output_* + output_core.go.
  • Add HTTP client tests for CRUD + CLI validation tests + output tests.
  • No live credentials are available. Do not run network tests; rely on mocks.
  • When done, run make build, make lint, make test, and create a PR.

Thanks!

<!-- gh-comment-id:3820976111 --> @rudrankriyam commented on GitHub (Jan 29, 2026): @cursor Please implement this issue. Guidance (same expectations as for me): - Follow `docs/GO_STANDARDS.md` and `docs/TESTING.md`. - Use `docs/openapi/paths.txt` + `docs/openapi/latest.json` for endpoints and schemas. - Keep CLI behavior consistent: explicit flags, JSON-first output, no interactive prompts, `--confirm` for destructive actions. - Implement `asc app-clips` group for experiences and invocations per the issue scope. - Add table/markdown output for list commands and wire output in `internal/asc/output_*` + `output_core.go`. - Add HTTP client tests for CRUD + CLI validation tests + output tests. - No live credentials are available. Do not run network tests; rely on mocks. - When done, run `make build`, `make lint`, `make test`, and create a PR. Thanks!
Author
Owner

@cursor[bot] commented on GitHub (Jan 29, 2026):

Summary:

  • I added the full asc app-clips CLI group (app clips, default/advanced experiences, header images, beta invocations/localizations, and review-details) plus new ASC client support, pagination wiring, and table/markdown output for list commands.
  • I implemented image upload flows for advanced experience images and header images, and added delete result outputs consistent with existing CLI patterns.
  • I added coverage with CLI validation tests, HTTP client CRUD tests, upload flow tests, and output table/markdown tests.

Tests:

  • make build
  • make lint
  • make test

Notes:

  • I didn’t create a PR because this environment manages PRs automatically, but the branch is pushed (cursor/app-clips-cli-support-472e).

View PR
Open in Cursor Open in Web

<!-- gh-comment-id:3820976514 --> @cursor[bot] commented on GitHub (Jan 29, 2026): Summary: - I added the full `asc app-clips` CLI group (app clips, default/advanced experiences, header images, beta invocations/localizations, and review-details) plus new ASC client support, pagination wiring, and table/markdown output for list commands. - I implemented image upload flows for advanced experience images and header images, and added delete result outputs consistent with existing CLI patterns. - I added coverage with CLI validation tests, HTTP client CRUD tests, upload flow tests, and output table/markdown tests. Tests: - `make build` - `make lint` - `make test` Notes: - I didn’t create a PR because this environment manages PRs automatically, but the branch is pushed (`cursor/app-clips-cli-support-472e`). <a href="https://github.com/rudrankriyam/App-Store-Connect-CLI/pull/311"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/view-pr-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/view-pr-light.png"><img alt="View PR" width="86" height="28" src="https://cursor.com/assets/images/view-pr-light.png"></picture></a> <a href="https://cursor.com/background-agent?bcId=bc-82fca79f-25fe-4253-8ef2-c253357901cc"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/agents?id=bc-82fca79f-25fe-4253-8ef2-c253357901cc"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>
Author
Owner

@rudrankriyam commented on GitHub (Jan 30, 2026):

Fixed by #311.

<!-- gh-comment-id:3822506603 --> @rudrankriyam commented on GitHub (Jan 30, 2026): Fixed by #311.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/App-Store-Connect-CLI#35
No description provided.