#!/usr/bin/env bash set -euo pipefail ENV_FILE="${1:-.env}" if [[ ! -f "$ENV_FILE" ]]; then echo "ERROR: Cannot find $ENV_FILE" exit 1 fi # Load only the Paddle values we need. get_env() { grep -E "^${1}=" "$ENV_FILE" | head -1 | cut -d= -f2- } PADDLE_ENVIRONMENT="$(get_env PADDLE_ENVIRONMENT)" PADDLE_API_URL="$(get_env PADDLE_API_URL)" PADDLE_API_KEY="$(get_env PADDLE_API_KEY)" PERSONAL_MONTHLY="$(get_env PADDLE_PERSONAL_MONTHLY_PRICE_ID)" PERSONAL_ANNUAL="$(get_env PADDLE_PERSONAL_ANNUAL_PRICE_ID)" PRO_MONTHLY="$(get_env PADDLE_PROFESSIONAL_MONTHLY_PRICE_ID)" PRO_ANNUAL="$(get_env PADDLE_PROFESSIONAL_ANNUAL_PRICE_ID)" if [[ -z "$PADDLE_API_KEY" ]]; then echo "ERROR: PADDLE_API_KEY is missing" exit 1 fi echo echo "Paddle environment: $PADDLE_ENVIRONMENT" echo "API URL: $PADDLE_API_URL" echo echo "Prices to update:" echo " Personal monthly -> £4.99" echo " Personal annual -> £39.99" echo " Professional monthly -> £8.99" echo " Professional annual -> £79.99" echo if [[ "$PADDLE_ENVIRONMENT" == "production" ]]; then echo "WARNING: THIS IS THE LIVE PADDLE ACCOUNT." printf "Type LIVE to continue: " read -r confirmation if [[ "$confirmation" != "LIVE" ]]; then echo "Cancelled." exit 1 fi else printf "Type YES to update the sandbox prices: " read -r confirmation if [[ "$confirmation" != "YES" ]]; then echo "Cancelled." exit 1 fi fi update_price() { local id="$1" local amount="$2" local description="$3" if [[ -z "$id" ]]; then echo "ERROR: Missing price ID for $description" exit 1 fi echo echo "Updating $description ($id)..." response="$( curl --silent --show-error --fail-with-body \ --request PATCH \ "${PADDLE_API_URL}/prices/${id}" \ --header "Authorization: Bearer ${PADDLE_API_KEY}" \ --header "Content-Type: application/json" \ --data "{ \"unit_price\": { \"amount\": \"${amount}\", \"currency_code\": \"GBP\" } }" )" if command -v jq >/dev/null 2>&1; then echo "$response" | jq '{ id: .data.id, description: .data.description, price: .data.unit_price, billing_cycle: .data.billing_cycle, status: .data.status }' else echo "$response" fi } # Paddle amounts are in pennies: # £4.99 = 499 # £39.99 = 3999 # £8.99 = 899 # £79.99 = 7999 update_price "$PERSONAL_MONTHLY" 499 "Personal Monthly" update_price "$PERSONAL_ANNUAL" 3999 "Personal Annual" update_price "$PRO_MONTHLY" 899 "Professional Monthly" update_price "$PRO_ANNUAL" 7999 "Professional Annual" echo echo "----------------------------------------" echo "All Paddle prices updated successfully." echo "----------------------------------------"