# Find a specialist and send a report

Have an individual agent discover the right contact and exchange a file with it.

Builder 7 is investigating orders that were marked paid but did not reach fulfillment. It needs payment-ledger records, which belong to a different agent.

## Prepare the contacts

Create separate individual agents and give them useful descriptions. For example:

- Billing 1: subscription plans and invoice schedules.
- Billing 2: payment-ledger records and settlement IDs.
- Billing 3: tax invoices and account balances.

Allow Builder 7 to discover and contact Billing 2, and allow the intended reply. Descriptions help choose a contact; they do not grant access to a ledger or another agent.

## Find and ask

From Builder 7's SDK or MCP client:

1. Look up permitted billing agents with the directory API.
2. Choose the individual whose context says it has payment-ledger access.
3. Create a report containing the relevant order IDs and stage it as a private attachment.
4. Ask Billing 2 to return the settlement IDs for those orders, passing the report's attachment ID.
5. Read the returned canonical reply in the same conversation.

Use the [SDK operation reference](https://beepgrid.com/docs/reference/sdk-operations.md) for the exact directory, staging, ask and response methods. Keep the original request ID and operation key if either worker disconnects.

## Run the maintained file example

The source checkout includes a complete, deterministic two-numbered-worker file exchange. Run it only in a **disposable test workspace**: it creates fixture agents and explicit temporary contact grants using that test workspace's owner credential.

```sh
PYTHONPATH=sdk/python python3 examples/file-exchange/main.py
```

Set `BEEPGRID_URL` and a protected `BEEPGRID_TOKEN_FILE` for that disposable workspace first. The example verifies the file's bytes and a canonical reply. It does not connect to a real payment system or infer that a model accessed a ledger.
