| 1 | # smbcloud-ascapi |
| 2 | |
| 3 | `smbcloud-ascapi` is the app stores coolest API. |
| 4 | |
| 5 | Eight crates, split by domain and layered so neither front end can drift |
| 6 | from the other: |
| 7 | |
| 8 | | Crate | What it is | |
| 9 | | --- | --- | |
| 10 | | `smbcloud-ascapi-core` | Shared transport: JWT auth, the HTTP client, JSON:API envelopes, error types | |
| 11 | | `smbcloud-ascapi-play` | Google Play (Edits v3): store listings, listing images, track release notes; service-account auth, independent of `core` | |
| 12 | | `smbcloud-ascapi-aso` | App Metadata: apps, app infos, versions, builds, pre-release versions, review submissions, bundle IDs, localizations, screenshots | |
| 13 | | `smbcloud-ascapi-pricing` | Pricing: app price schedules, and the per-territory prices joined with their price points and currencies | |
| 14 | | `smbcloud-ascapi-signing` | Code signing: certificates and provisioning profiles, plus local RSA key pair and CSR generation | |
| 15 | | `smbcloud-ascapi-reports` | Sales reports: account-level sales data, as Apple's gzip-compressed TSV | |
| 16 | | `smbcloud-ascapi-frontend` | Operations both surfaces share, so the CLI and the MCP server agree by construction, plus the CLI's `xcrun altool` upload | |
| 17 | | `smbcloud-ascapi-mcp` | The MCP contract and stdio server | |
| 18 | | `smbcloud-ascapi-cli` | The `asc` binary: clap command tree, plus `--mcp` | |
| 19 | |
| 20 | `aso`, `play`, `pricing`, `signing` and `reports` know nothing about each other, and neither knows |
| 21 | anything about the front ends. Each adds its calls to |
| 22 | `smbcloud_ascapi_core::Client` as **extension traits**, since Rust only |
| 23 | allows inherent impls in the crate that defines a type: |
| 24 | |
| 25 | ```rust |
| 26 | use smbcloud_ascapi_core::{ApiKey, Client}; |
| 27 | use smbcloud_ascapi_aso::prelude::*; // or pricing::prelude, signing::prelude |
| 28 | ``` |
| 29 | |
| 30 | MCP Registry name: `mcp-name: io.github.smbcloudXYZ/ascapi` |
| 31 | |
| 32 | ## Credentials |
| 33 | |
| 34 | The CLI signs requests with an App Store Connect API key: |
| 35 | |
| 36 | | Flag | Environment variable | Notes | |
| 37 | | --- | --- | --- | |
| 38 | | `--key-id` | `ASC_API_KEY` | The key id. There is no `ASC_KEY_ID`. | |
| 39 | | `--issuer-id` | `ASC_ISSUER_ID` | The issuer id from App Store Connect. | |
| 40 | | `--private-key-path` | `ASC_PRIVATE_KEY_PATH` | Defaults to `~/.appstoreconnect/private_keys/AuthKey_<key-id>.p8`. | |
| 41 | |
| 42 | With `--mcp`, credentials are resolved on each tool call, so the server can |
| 43 | list its tools before they are configured. |
| 44 | |
| 45 | ## Copyright |
| 46 | |
| 47 | © 2026 PT Sigit Mitra Bangun ([smbCloud](https://smbcloud.xyz)). |