Files
2026-10-19 14:11:28 +01:00

248 lines
6.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
PADDLE_API_KEY="${PADDLE_API_KEY:-}"
if [[ -z "$PADDLE_API_KEY" ]]; then
echo "ERROR: PADDLE_API_KEY is not set."
echo 'Run: export PADDLE_API_KEY="pdl_sdbx_apikey_..."'
exit 1
fi
API="https://sandbox-api.paddle.com"
api_post() {
local endpoint="$1"
local payload="$2"
curl --fail-with-body --silent --show-error \
--request POST \
--url "${API}${endpoint}" \
--header "Authorization: Bearer ${PADDLE_API_KEY}" \
--header "Content-Type: application/json" \
--data "$payload"
}
create_product() {
local name="$1"
local description="$2"
api_post "/products" "$(jq -n \
--arg name "$name" \
--arg description "$description" \
'{
name: $name,
description: $description,
type: "standard",
tax_category: "standard"
}'
)"
}
create_price() {
local product_id="$1"
local name="$2"
local description="$3"
local cycle="$4"
local usd="$5"
local gbp="$6"
local eur="$7"
local aud="$8"
api_post "/prices" "$(jq -n \
--arg product_id "$product_id" \
--arg name "$name" \
--arg description "$description" \
--arg cycle "$cycle" \
--arg usd "$usd" \
--arg gbp "$gbp" \
--arg eur "$eur" \
--arg aud "$aud" \
'{
product_id: $product_id,
name: $name,
description: $description,
billing_cycle: {
interval: $cycle,
frequency: 1
},
trial_period: {
interval: "day",
frequency: 7
},
unit_price: {
amount: $usd,
currency_code: "USD"
},
unit_price_overrides: [
{
country_codes: ["GB"],
unit_price: {
amount: $gbp,
currency_code: "GBP"
}
},
{
country_codes: ["IE"],
unit_price: {
amount: $eur,
currency_code: "EUR"
}
},
{
country_codes: ["AU"],
unit_price: {
amount: $aud,
currency_code: "AUD"
}
}
],
tax_mode: "account_setting",
quantity: {
minimum: 1,
maximum: 1
}
}'
)"
}
echo
echo "Creating Rsync Studio Paddle sandbox catalog..."
echo
#
# Personal
#
PERSONAL_PRODUCT=$(create_product \
"Rsync Studio Personal" \
"Rsync Studio for personal use.")
PERSONAL_PRODUCT_ID=$(echo "$PERSONAL_PRODUCT" | jq -r '.data.id')
echo "Created Personal product: $PERSONAL_PRODUCT_ID"
PERSONAL_MONTHLY=$(create_price \
"$PERSONAL_PRODUCT_ID" \
"Personal Monthly" \
"Rsync Studio Personal — monthly subscription with 7-day free trial." \
"month" \
"199" \
"199" \
"199" \
"299")
PERSONAL_MONTHLY_ID=$(echo "$PERSONAL_MONTHLY" | jq -r '.data.id')
echo "Created Personal Monthly: $PERSONAL_MONTHLY_ID"
PERSONAL_ANNUAL=$(create_price \
"$PERSONAL_PRODUCT_ID" \
"Personal Annual" \
"Rsync Studio Personal — annual subscription with 7-day free trial." \
"year" \
"1499" \
"1499" \
"1699" \
"2499")
PERSONAL_ANNUAL_ID=$(echo "$PERSONAL_ANNUAL" | jq -r '.data.id')
echo "Created Personal Annual: $PERSONAL_ANNUAL_ID"
#
# Professional
#
PRO_PRODUCT=$(create_product \
"Rsync Studio Professional" \
"Rsync Studio for professional and commercial use.")
PRO_PRODUCT_ID=$(echo "$PRO_PRODUCT" | jq -r '.data.id')
echo "Created Professional product: $PRO_PRODUCT_ID"
PRO_MONTHLY=$(create_price \
"$PRO_PRODUCT_ID" \
"Professional Monthly" \
"Rsync Studio Professional — monthly subscription with 7-day free trial." \
"month" \
"399" \
"399" \
"449" \
"699")
PRO_MONTHLY_ID=$(echo "$PRO_MONTHLY" | jq -r '.data.id')
echo "Created Professional Monthly: $PRO_MONTHLY_ID"
PRO_ANNUAL=$(create_price \
"$PRO_PRODUCT_ID" \
"Professional Annual" \
"Rsync Studio Professional — annual subscription with 7-day free trial." \
"year" \
"2999" \
"2999" \
"3499" \
"4999")
PRO_ANNUAL_ID=$(echo "$PRO_ANNUAL" | jq -r '.data.id')
echo "Created Professional Annual: $PRO_ANNUAL_ID"
echo
echo "============================================================"
echo " RSYNC STUDIO — PADDLE SANDBOX CATALOG"
echo "============================================================"
echo
echo "PERSONAL"
echo " Product ID: $PERSONAL_PRODUCT_ID"
echo " Monthly Price ID: $PERSONAL_MONTHLY_ID"
echo " Annual Price ID: $PERSONAL_ANNUAL_ID"
echo
echo "PROFESSIONAL"
echo " Product ID: $PRO_PRODUCT_ID"
echo " Monthly Price ID: $PRO_MONTHLY_ID"
echo " Annual Price ID: $PRO_ANNUAL_ID"
echo
echo "------------------------------------------------------------"
echo "Pricing"
echo "------------------------------------------------------------"
echo
printf "%-24s %-12s %-12s %-12s %-12s\n" \
"Plan" "USD" "UK" "Ireland" "Australia"
printf "%-24s %-12s %-12s %-12s %-12s\n" \
"Personal Monthly" '$1.99' '£1.99' '€1.99' 'A$2.99'
printf "%-24s %-12s %-12s %-12s %-12s\n" \
"Personal Annual" '$14.99' '£14.99' '€16.99' 'A$24.99'
printf "%-24s %-12s %-12s %-12s %-12s\n" \
"Professional Monthly" '$3.99' '£3.99' '€4.49' 'A$6.99'
printf "%-24s %-12s %-12s %-12s %-12s\n" \
"Professional Annual" '$29.99' '£29.99' '€34.99' 'A$49.99'
echo
echo "All four prices include a 7-day FREE trial."
echo
echo "============================================================"
cat > rsync-studio-paddle-ids.env <<EOF
PADDLE_PERSONAL_PRODUCT_ID=$PERSONAL_PRODUCT_ID
PADDLE_PERSONAL_MONTHLY_PRICE_ID=$PERSONAL_MONTHLY_ID
PADDLE_PERSONAL_ANNUAL_PRICE_ID=$PERSONAL_ANNUAL_ID
PADDLE_PROFESSIONAL_PRODUCT_ID=$PRO_PRODUCT_ID
PADDLE_PROFESSIONAL_MONTHLY_PRICE_ID=$PRO_MONTHLY_ID
PADDLE_PROFESSIONAL_ANNUAL_PRICE_ID=$PRO_ANNUAL_ID
EOF
echo
echo "IDs also saved to:"
echo " $(pwd)/rsync-studio-paddle-ids.env"
echo