fix: check for existing billing meter before creating

- First check if a meter with 'devices_monitored' event exists
- Reuse existing meter ID if found
- Only create new meter if none exists
- Fixes error when meter already exists in Stripe account
This commit is contained in:
Graham McIntire 2026-03-06 10:58:52 -06:00
parent d3aa602ba4
commit 3e721b9395
No known key found for this signature in database

View file

@ -43,31 +43,46 @@ fi
echo "" echo ""
echo "==============================================" echo "=============================================="
echo "Step 1: Creating billing meter..." echo "Step 1: Checking for existing billing meter..."
echo "==============================================" echo "=============================================="
METER_RESPONSE=$(curl -s https://api.stripe.com/v1/billing/meters \ # First, check if a meter already exists
EXISTING_METERS=$(curl -s https://api.stripe.com/v1/billing/meters \
-u "${STRIPE_KEY}:" \ -u "${STRIPE_KEY}:" \
-H "Stripe-Version: 2024-11-20.acacia" \ -H "Stripe-Version: 2024-11-20.acacia")
-H "Content-Type: application/x-www-form-urlencoded" \
-d "display_name=Devices Monitored" \
-d "event_name=devices_monitored" \
-d "default_aggregation[formula]=sum" \
-d "value_settings[event_payload_key]=value")
METER_ID=$(echo "$METER_RESPONSE" | grep -o '"id":"mtr_[^"]*"' | head -1 | cut -d'"' -f4) METER_ID=$(echo "$EXISTING_METERS" | grep -o '"event_name":"devices_monitored"' -B 20 | grep -o '"id":"mtr_[^"]*"' | head -1 | cut -d'"' -f4)
if [[ -z "$METER_ID" ]]; then if [[ -n "$METER_ID" ]]; then
echo "Error creating meter:" echo "✓ Found existing billing meter!"
echo "$METER_RESPONSE" echo " Meter ID: $METER_ID"
exit 1 echo " Event name: devices_monitored"
else
echo "No existing meter found. Creating new one..."
METER_RESPONSE=$(curl -s https://api.stripe.com/v1/billing/meters \
-u "${STRIPE_KEY}:" \
-H "Stripe-Version: 2024-11-20.acacia" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "display_name=Devices Monitored" \
-d "event_name=devices_monitored" \
-d "default_aggregation[formula]=sum" \
-d "value_settings[event_payload_key]=value")
METER_ID=$(echo "$METER_RESPONSE" | grep -o '"id":"mtr_[^"]*"' | head -1 | cut -d'"' -f4)
if [[ -z "$METER_ID" ]]; then
echo "Error creating meter:"
echo "$METER_RESPONSE"
exit 1
fi
echo "✓ Billing meter created successfully!"
echo " Meter ID: $METER_ID"
echo " Display name: Devices Monitored"
echo " Event name: devices_monitored"
fi fi
echo "✓ Billing meter created successfully!"
echo " Meter ID: $METER_ID"
echo " Display name: Devices Monitored"
echo " Event name: devices_monitored"
echo "" echo ""
echo "==============================================" echo "=============================================="
echo "Step 2: Creating metered price..." echo "Step 2: Creating metered price..."