development
md 47 lines 2.31 KB
Rendered Raw
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)).