GET /v1/connections/{id}/reviews, /listings, /ads, 1 credit each) and propose actions: review replies, listing and keyword updates, screenshots, Apple Ads bids, keywords and negatives. Every action is a dry run with a before → after diff first; nothing is written until it is approved.
You can connect accounts in the dashboard (dash.appgoat.ai → Connections) or with POST /v1/connections. Credentials are verified with one cheap read before anything is stored, encrypted with AES-256-GCM, and never returned.
Credentials per provider
- App Store Connect (asc)
- Google Play Console (play_console)
- Apple Ads (apple_ads)
{ issuer_id, key_id, private_key, vendor_number? }- issuer_id: App Store Connect → Users and Access → Integrations → App Store Connect API, the Issuer ID above the keys table.
- key_id: the Key ID of the API key (10 characters).
- private_key: the contents of
AuthKey_<KEY_ID>.p8, downloaded once when the key was created. - vendor_number (optional): from Payments and Financial Reports, for the downloads and proceeds sync.
apps defaults to every app the key can see.invalid_credentials with error.param naming the field and error.hint saying where to find it.
Mode and plan limits
modeisactions(default) orread_only. On the Free plan connections are read-only;mode: "actions"returns 402plan_limit.- Each linked app uses one of the plan’s connected apps (Free: 1).
- Change the label, mode or linked apps with
PATCH /v1/connections/{id}; re-check the credentials withPOST /v1/connections/{id}/verifywhen a provider starts refusing access (provider_error).
Actions and approval
POST /v1/actions proposes a change and returns its diff and guardrail scores (policy, tone, claims). POST /v1/actions/{id}/approve applies it (1 credit when applied), or leaves it pending a person’s approval in the dashboard (403 forbidden with an approve_url). POST /v1/actions/{id}/reject discards it. The Reply to every review, Apple Ads optimizer and Localization push playbooks are built on this flow.