# B2B credit-hold release packet

Companion to **Who May Release a B2B Credit Hold**.

The account-manager brief may **rank** an account because it is on hold. It does not release the hold. See [`b2b-account-health-dashboard.md`](b2b-account-health-dashboard.md). Quote issue while the account is on hold stays **recommend only** — [`b2b-quote-approval-gates.md`](b2b-quote-approval-gates.md).

Aging buckets below are **worksheet labels**. Replace them with your credit policy. They are not a FactualMinds collections result.

## Packet (reads only)

| Field | Tool | Why it is in the packet |
| ----- | ---- | ----------------------- |
| Account id, assigned owner | `getAccount` | A shopper JWT must not see another account |
| Hold reason code | `getCreditHold` | Limit breach, past due, dispute, manual — do not collapse these |
| Open invoices, aging | `listOpenInvoices` | The number finance already trusts |
| Promise-to-pay | `getPaymentPromise` | A note in the prompt is not a promise |
| Disputed balance | `listDisputes` | Releasing over a dispute is a write |
| Open order blocked | `getOrder` | What is actually stuck |
| Margin on that order | `getOrderMargin` | Sales pressure is not a reason code |
| Strategic flag | `getAccount` | Only if CRM returns it. Not a model adjective |

Forbidden on every token, including sales: `releaseCreditHold`, `raiseCreditLimit`, `writeOffInvoice`.

## Recommendation the agent may return

| Recommendation | Typical evidence | Who may act in the ERP |
| -------------- | ---------------- | ---------------------- |
| **Keep hold** | Past due beyond your bucket, no promise, or an open dispute | Nobody this week — the hold stands |
| **Partial release** | Promise on file, remainder inside limit, order margin named | Finance |
| **Release** | Cash applied, dispute closed, limit now covers the order | Finance |
| **Human review** | Reason code missing, two ERPs disagree, or sales asks to "just ship" | Finance, not the model |

Timeout and missing fields **fail closed**. The order stays on hold.

## Cap

If this packet is one row on the morning list, keep the published account-manager cap: **five** priorities. Overflow is watch. Twenty "urgent holds" is the failure mode already written on that brief.

## Related

- Account ranking: [`b2b-account-health-dashboard.md`](b2b-account-health-dashboard.md)
- Quote gates: [`b2b-quote-approval-gates.md`](b2b-quote-approval-gates.md)
- Order exceptions (payment failure is not this hold): [`order-exception-playbook.md`](order-exception-playbook.md)
