# Common Workflows

End-to-end implementation recipes for the most common Column integration patterns.

## Onboard a customer and open an account

```
Create entity → Verify KYC → Create bank account → Provision account number
```

```bash
# 1. Create entity
curl -X POST https://api.column.com/entities/person \
  -u test_your_api_key: \
  -H "Content-Type: application/json" \
  -d '{ "first_name": "Jane", "last_name": "Doe", ... }'

# 2. Poll or webhook for VERIFIED status
# event: entity.verification_status.completed

# 3. Create bank account
curl -X POST https://api.column.com/bank-accounts \
  -u test_your_api_key: \
  -H "Content-Type: application/json" \
  -d '{ "entity_id": "ent_xxx" }'
```

## Fund an account via ACH debit then pay out

See the full [two-legged transactions guide](/guides/two-legged-transactions).

Key steps:

1. Pull funds from customer's external bank (ACH debit)
2. Wait for `ach.outgoing_transfer.settled`
3. Push funds to destination (ACH credit or book transfer)

## Book transfer between accounts with a hold

Used for escrow, marketplace disbursements, or pre-authorization:

```bash
# 1. Create hold
curl -X POST https://api.column.com/transfers/book \
  -d '{ "hold": true, "amount": 5000, ... }'

# 2. Clear hold when ready to release
curl -X POST https://api.column.com/transfers/book/{id}/clear

# OR cancel hold to refund
curl -X POST https://api.column.com/transfers/book/{id}/cancel
```

## Receive and process an incoming wire

1. Subscribe to `wire.incoming_transfer.initiated` webhook
2. Validate sender and amount in your system
3. Sweep funds via book transfer to customer sub-accounts if needed
4. Return the wire if needed: `POST /transfers/wire/{id}/return`

## Generate a monthly statement

Statements generate automatically. Subscribe to `reporting.bank_account_monthly_statement.completed` and download the PDF or CSV when ready.

See the [statements guide](/guides/statements).
