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

> ## Agent Instructions
> Reconify's API reference is read-only for customer data. Do not invent endpoints or authentication behavior beyond the OpenAPI contract.
> The public OpenAPI document contains only the documented external /v2 contract.

# Python requests

> Understand the argument conventions every operation shares.

Every operation follows the same shape.

| Argument         | Passed as                                          |
| ---------------- | -------------------------------------------------- |
| Path parameters  | Positional arguments, in path order.               |
| Request body     | A typed model, after the path arguments.           |
| Query parameters | Keyword arguments.                                 |
| Options          | Keyword-only: `raw`, `timeout`, `idempotency_key`. |

```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
info = client.metadata.get_api_info()

page = client.events.list_events(limit=25)

issue = client.issues.get_issue("00000000-0000-7000-8000-000000000001")

updated = client.issues.update_issue(
    "00000000-0000-7000-8000-000000000001",
    PatchIssueRequest(assigned_to="00000000-0000-7000-8000-000000000002"),
)
```

Assignment is repeatable. Send the same request again to get the same result.

## Idempotent notes

`idempotency_key` is keyword-only and applies only to note creation. The SDK
sends it as the `Idempotency-Key` header.

```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
note = client.issues.add_issue_note(
    "00000000-0000-7000-8000-000000000001",
    AddNoteRequest(body="Confirmed that the provider callback arrived late."),
    idempotency_key="note-provider-late-000000000001",
)
```

Reuse the same key with the same body to retry safely. Reusing the key with a
different body raises `ReconifyConflictError`.

## Timeouts

The client timeout is 30 seconds. Override it per call, with a number or an
`httpx.Timeout`.

```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
import httpx

result = client.ingestion.ingest_monitoring_events(batch, timeout=10)

page = client.issues.list_issues(
    timeout=httpx.Timeout(connect=2.0, read=20.0, write=10.0, pool=5.0),
)
```

## Raw responses

Pass `raw=True` when you need the status code, headers, or request ID rather
than a parsed model.

```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
response = client.ingestion.ingest_monitoring_events(batch, raw=True)

print(response.status_code)
print(response.request_id)
print(response.json())
```

`RawResponse` exposes `status_code`, `headers`, `body`, `request_id`, and
`json()`.

## Correlate requests

Set `request_id` on the client to send `X-Request-ID` with every request. Use it
to join your logs to Reconify's.

```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
client = Reconify(request_id="checkout-worker-3")
```

## Batch limits

The SDK checks the serialized request before sending and raises
`ReconifyValidationError` when it exceeds 5 MiB. A batch holds 1 to 500 events,
and each event is limited to 256 KiB.

## Bring your own HTTP client

Pass `http_client` to share a connection pool, set proxies, or install
instrumentation.

```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
import httpx

with httpx.Client(limits=httpx.Limits(max_connections=20)) as http:
    client = Reconify(http_client=http)
```

The SDK does not close a client you supplied.

## Models

Request and response models live in `reconify.models` and are Pydantic v2
classes, so your editor and type checker know every field.

```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
from reconify.models import (
    AddNoteRequest,
    MonitoringBatchRequest,
    MonitoringEvent,
    MonitoringEventData,
    PatchIssueRequest,
)

event = MonitoringEvent(
    flow="payment_to_wallet",
    type="payment.succeeded",
    reference="order-123",
    entity_id="wallet_123",
    amount="150.00",
    currency="USD",
    data=MonitoringEventData(provider="stripe", provider_reference="pi_123"),
    metadata={"channel": "web"},
)
```

The package ships `py.typed`, so `mypy` and `pyright` check your calls without
extra stubs.

<Tip>
  Enum values are accepted as plain strings. `type="payment.succeeded"` and
  `type=EventType.PAYMENT_SUCCEEDED` are equivalent. Response models keep an
  unrecognized value as a string instead of failing, so a new event type added by
  a later API version does not break your reader.
</Tip>

## Next

Read collections page by page in [Pagination](/sdks/python/pagination).
