Skip to main content
The iap command group provides comprehensive management of in-app purchases (IAP), including creation, pricing, localization, and submission workflows.

Overview

In-app purchases allow you to sell digital content and features within your app:
  • Consumables - Products that can be purchased multiple times (e.g., game currency)
  • Non-Consumables - One-time purchases (e.g., premium features)
  • Non-Renewing Subscriptions - Time-limited access that doesn’t auto-renew

List In-App Purchases

List all in-app purchases for an app.
asc iap list --app "APP_ID"
Required Flags:
  • --app - App ID (or ASC_APP_ID env)
Optional Flags:
  • --limit - Results per page (1-200)
  • --paginate - Fetch all pages automatically
  • --next - Pagination URL
  • --legacy - Use v1 endpoint (for backward compatibility)
Examples:
# List all IAPs
asc iap list --app "123456789"

# Fetch all pages
asc iap list --app "123456789" --paginate

# Use legacy v1 endpoint
asc iap list --app "123456789" --legacy

Get IAP Details

Retrieve details for a specific in-app purchase.
asc iap get --id "IAP_ID"
Required Flags:
  • --id - In-app purchase ID
Optional Flags:
  • --legacy - Use v1 endpoint

Create In-App Purchase

Create a new in-app purchase product.
asc iap create \
  --app "APP_ID" \
  --type CONSUMABLE \
  --ref-name "Pro" \
  --product-id "com.example.pro"
Required Flags:
  • --app - App ID (or ASC_APP_ID env)
  • --type - IAP type: CONSUMABLE, NON_CONSUMABLE, NON_RENEWING_SUBSCRIPTION
  • --ref-name - Reference name (internal identifier)
  • --product-id - Product ID (must match your app’s bundle ID prefix)
Optional Flags:
  • --family-sharable - Enable Family Sharing (cannot be undone)
Product ID Format: Product IDs typically follow this pattern:
<bundle_id>.<product_identifier>
Example: If your bundle ID is com.example.myapp, product IDs might be:
  • com.example.myapp.pro
  • com.example.myapp.coins100
  • com.example.myapp.unlock
Examples:
# Create consumable IAP
asc iap create \
  --app "123456789" \
  --type CONSUMABLE \
  --ref-name "100 Coins" \
  --product-id "com.example.app.coins100"

# Create non-consumable with Family Sharing
asc iap create \
  --app "123456789" \
  --type NON_CONSUMABLE \
  --ref-name "Lifetime Access" \
  --product-id "com.example.app.lifetime" \
  --family-sharable

# Create non-renewing subscription
asc iap create \
  --app "123456789" \
  --type NON_RENEWING_SUBSCRIPTION \
  --ref-name "Season Pass" \
  --product-id "com.example.app.season2024"

Update In-App Purchase

Update an existing in-app purchase.
asc iap update \
  --id "IAP_ID" \
  --ref-name "New Name"
Required Flags:
  • --id - In-app purchase ID
Optional Flags:
  • --ref-name - New reference name
  • --family-sharable - Enable Family Sharing (cannot be disabled once enabled)
Note: Product ID and type cannot be changed after creation.

Delete In-App Purchase

Delete an in-app purchase.
asc iap delete --id "IAP_ID" --confirm
Required Flags:
  • --id - In-app purchase ID
  • --confirm - Confirm deletion
Warning: Deletion is permanent and affects customer purchases. Only delete products that were never released.

Pricing

View Pricing

View current pricing for in-app purchases in an app.
asc iap prices --app "APP_ID"

Manage Price Points

Work with App Store price points and tiers.
# List available price points
asc iap price-points list \
  --territory "USA" \
  --app "APP_ID"

# Get price point details
asc iap price-points get --id "PRICE_POINT_ID"

Manage Price Schedules

Configure pricing schedules for in-app purchases.
# View price schedule
asc iap price-schedules get --iap-id "IAP_ID"

# Set base territory
asc iap price-schedules set-base-territory \
  --iap-id "IAP_ID" \
  --territory "USA"

Localizations

Manage in-app purchase localizations for different languages and regions.

List Localizations

asc iap localizations list --iap-id "IAP_ID"
Optional Flags:
  • --limit - Results per page (1-200)
  • --paginate - Fetch all pages

Create Localization

asc iap localizations create \
  --iap-id "IAP_ID" \
  --locale "en-US" \
  --name "Premium Features" \
  --description "Unlock all premium features"

Update Localization

asc iap localizations update \
  --id "LOCALIZATION_ID" \
  --name "Updated Name" \
  --description "Updated description"

Delete Localization

asc iap localizations delete \
  --id "LOCALIZATION_ID" \
  --confirm

Images and Screenshots

Upload Promotional Image

Upload a promotional image for an in-app purchase.
asc iap images create \
  --iap-id "IAP_ID" \
  --file "./promo-image.png"
Image Requirements:
  • Format: PNG or JPG
  • Size: 1024 x 1024 pixels
  • Color space: RGB
  • Maximum file size: 4MB

Manage Review Screenshots

Upload screenshots for App Review.
# Create review screenshot
asc iap review-screenshots create \
  --iap-id "IAP_ID" \
  --file "./screenshot.png"

# List review screenshots
asc iap review-screenshots list --iap-id "IAP_ID"

# Delete review screenshot
asc iap review-screenshots delete \
  --id "SCREENSHOT_ID" \
  --confirm

Availability

Control which territories can purchase your in-app purchases.

Get Availability

asc iap availability get --iap-id "IAP_ID"

Set Availability

asc iap availability set \
  --iap-id "IAP_ID" \
  --territories "USA,CAN,GBR"
Territory Codes: Use ISO 3166-1 alpha-3 codes:
  • USA - United States
  • CAN - Canada
  • GBR - United Kingdom
  • AUS - Australia
  • JPN - Japan

List Availabilities

asc iap availabilities list --iap-id "IAP_ID"
Promote in-app purchases on your App Store product page.

Get Promoted Purchase

asc iap promoted-purchase get --iap-id "IAP_ID"

Create Promoted Purchase

asc iap promoted-purchase create \
  --app "APP_ID" \
  --iap-id "IAP_ID" \
  --visibility SHOW

Update Promotion Order

asc iap promoted-purchase update-order \
  --app "APP_ID" \
  --iap-ids "IAP1,IAP2,IAP3"

Offer Codes

Create promotional offer codes for in-app purchases.

Create Offer Code

asc iap offer-codes create \
  --iap-id "IAP_ID" \
  --name "SPRING2024" \
  --customer-eligibility NEW_AND_EXISTING \
  --number-of-codes 100
Optional Flags:
  • --one-time - One-time use codes
  • --start-date - Start date (ISO 8601)
  • --end-date - End date (ISO 8601)

Manage Offer Code Prices

# Set offer code pricing
asc iap offer-code-prices set \
  --offer-code-id "CODE_ID" \
  --territory "USA" \
  --price-point "PRICE_POINT_ID"

Content

Manage hosted content for in-app purchases.
# Upload content
asc iap content upload \
  --iap-id "IAP_ID" \
  --file "./content.zip"

# Get content status
asc iap content get --iap-id "IAP_ID"

Submission

Submit in-app purchases for review.
asc iap submit --iap-id "IAP_ID" --confirm
Requirements before submission:
  • At least one localization
  • Pricing configured
  • Screenshots for review (if required)
  • All required metadata fields completed

Common Workflows

Create Complete IAP

#!/bin/bash
# Create a fully configured in-app purchase

APP_ID="123456789"
PRODUCT_ID="com.example.app.premium"

# 1. Create IAP
IAP_RESPONSE=$(asc iap create \
  --app "$APP_ID" \
  --type NON_CONSUMABLE \
  --ref-name "Premium Features" \
  --product-id "$PRODUCT_ID" \
  --output json)

IAP_ID=$(echo "$IAP_RESPONSE" | jq -r '.data.id')

# 2. Add localization
asc iap localizations create \
  --iap-id "$IAP_ID" \
  --locale "en-US" \
  --name "Premium Features" \
  --description "Unlock all premium features"

# 3. Upload promotional image
asc iap images create \
  --iap-id "$IAP_ID" \
  --file "./promo.png"

# 4. Set availability
asc iap availability set \
  --iap-id "$IAP_ID" \
  --territories "USA,CAN,GBR,AUS"

# 5. Configure pricing (requires price point ID)
# See pricing documentation for details

echo "IAP created with ID: $IAP_ID"

Bulk Update Availability

#!/bin/bash
# Update availability for multiple IAPs

TERRITORIES="USA,CAN,GBR,AUS,JPN"

for IAP_ID in $(asc iap list --app "$APP_ID" --output json | jq -r '.data[].id'); do
  echo "Updating $IAP_ID"
  asc iap availability set \
    --iap-id "$IAP_ID" \
    --territories "$TERRITORIES"
done

Export IAP Catalog

# Export all IAPs to JSON
asc iap list \
  --app "$APP_ID" \
  --paginate \
  --output json \
  > iap-catalog.json

# Format for review
jq '[.data[] | {id: .id, name: .attributes.name, productId: .attributes.productId, type: .attributes.inAppPurchaseType}]' iap-catalog.json

Family Sharing

Family Sharing allows up to six family members to share eligible in-app purchases. Enabling Family Sharing:
asc iap create \
  --app "APP_ID" \
  --type NON_CONSUMABLE \
  --ref-name "Premium" \
  --product-id "com.example.premium" \
  --family-sharable
Important Notes:
  • Only available for NON_CONSUMABLE and NON_RENEWING_SUBSCRIPTION types
  • Cannot be disabled once enabled
  • Consumables are never shareable

Best Practices

Product IDs

  • Use descriptive, hierarchical naming: com.example.app.category.item
  • Include version or tier in recurring products: com.example.app.premium.v2
  • Keep IDs under 100 characters
  • Use only alphanumerics, dots, and underscores

Localizations

  • Provide localizations for all supported app languages
  • Keep names concise (30 characters or less)
  • Write clear descriptions that explain value
  • Review translations with native speakers

Pricing

  • Research price tiers across key markets
  • Consider regional purchasing power
  • Test price sensitivity with A/B testing
  • Use offer codes for promotions rather than changing base price

Testing

  • Test all IAPs in sandbox environment before release
  • Verify purchase flows on multiple devices
  • Test restoration of non-consumables
  • Validate receipt verification on your backend
  • Subscriptions - Auto-renewable subscriptions
  • Apps - Manage app metadata and settings
  • Pricing - Territory pricing and currencies

API Reference