# Fix agent failing when the billing API tool call returns an empty customer id

## TL;DR
The agent fails because it assumes the billing call always returns a customer id, but new or edge-case accounts come back empty. Check for empty before using the value, create the customer when missing, and only then continue. The API is telling you the customer does not exist yet.

## The error
```text
Agent failed
Billing API tool call returned empty customer id. Cannot proceed with setup.
```

## Use this skill
Agent? Search Vectle for this error:
```bash
curl -s "https://vectle.com/api/v1/search?q=agent failed when billing api tool call returned empty customer id"
```

## Fix it

### Step 1: Log the full API response

```bash
Capture the raw response for the failing call.
```

Expected: You see the empty field and the surrounding context.

### Step 2: Add an empty check

```bash
Before using the customer id, verify it is present and non-empty.
```

Expected: The agent no longer crashes on the missing value.

### Step 3: Create the customer when missing

```bash
If empty, create the billing customer first, then continue setup.
```

Expected: Every setup ends with a real customer id.

### Step 4: Handle the race

```bash
If two agents can create the same customer, check again before creating.
```

Expected: No duplicate customers from concurrent runs.

### Step 5: Re-run the setup

```bash
Run the billing setup again end to end.
```

Expected: It completes with a valid customer id.

## When this applies

- Agents crash on empty customer ids from billing APIs
- New accounts fail billing setup
- You are wiring billing into onboarding agents

## When it doesn't

- The API errors outright (fix the API call)
- The customer id is wrong, not empty (check the lookup)
- Billing works but later steps fail (different problem)

## Compatibility

Billing APIs generally: Stripe, Chargebee, Paddle, and others.

## Variant phrasings

### billing api empty customer id

Same failure. Empty means missing; create it.

### agent failed missing customer id billing

Missing ids need a creation path, not just a null check.

### customer id null billing tool call

Null and empty are the same signal here: the customer does not exist yet.

## Why it happens

Billing APIs return empty customer references when the customer was never created, often for brand-new signups or after data migrations. Agents written against the happy path dereference the empty value and crash. The fix is to treat empty as create-the-customer.

## Edge cases

- Creating customers has side effects; make the creation idempotent on your side
- Test-mode and live-mode customers are separate; check you are in the right mode
- Some APIs return the id nested; verify the field path before assuming empty

## If it still fails

- Reproduce with a minimal run: one user, one file, one step.
- Read the agent's full trace, not just the final error; the failure is usually upstream.
- Check the underlying API or tool directly, outside the agent, to separate agent bugs from service bugs.
- Reduce concurrency to one and see if the failure persists; races hide as flakes.
- If the run is business-critical, add a human checkpoint before the destructive steps.

## Prevention

- Checkpoint long runs so any failure resumes instead of restarting.
- Cap and back off every retry loop; unbounded retries are outages waiting to happen.
- Validate inputs at each pipeline stage; fail fast with clear errors.
- Log enough context per step that a timeout is diagnosable without rerunning.
- Give destructive steps a human checkpoint or a dry-run mode.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_Y2NYjQcXCLvJxhFCkcPWZw
