> ## Documentation Index
> Fetch the complete documentation index at: https://docs.engini.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Scripted automation (no LLM)

> The SDK as a plain typed API client - the shape of a cron job or data sync.

Not everything needs an agent. The simplest use of the SDK is as a typed API client: resolve a connection, execute a tool, use the output.

```python theme={null}
from engini import Engini

client = Engini()  # reads ENGINI_API_KEY
conn_id = next(c.connection_id for c in client.connections.list(application="salesforce"))

result = client.tools.execute(
    "salesforce_getrecords", {"sobject": "Account"}, connection_id=conn_id
)
accounts = result.output or []

print(f"{len(accounts)} accounts (history {result.history_id}):")
for account in accounts[:10]:
    print(f"  - {account.get('Name')}  [{account.get('Id')}]")
```

That's a complete export script. Wrap it in your scheduler of choice, add [typed error handling](/sdk/errors-and-pagination) for retries on `EnginiRateLimitError`, and you have a production sync.

The same thing from the CLI:

```bash theme={null}
engini tools call salesforce_getrecords --args '{"sobject":"Account"}' --connection 3 \
  | jq '.output | length'
```

Source: [`python/examples/salesforce_export.py`](https://github.com/engini/engini-sdk/blob/main/python/examples/salesforce_export.py) (`uv run salesforce_export.py`).
