BETA - Intapp REST Client
This version of the SDK is in BETA only. If you would like to be included in the beta, please contact Brian Michael brian.michael@intapp.com
Expected GA Release 2610.
The Intapp REST Client is a lightweight, HTTPX-based REST client library with multi-authentication support, retry logic, and structured logging. It serves as the foundation for Intapp API integrations.
🔌
Foundation Library: This client is used internally by the DealCloud Python SDK and can be used standalone for any REST API integration.
Key Features
📚
For complete RestClient signatures, parameters, and methods, see the API Reference.
| Feature | Description |
|---|---|
| HTTPX Backend | Modern async HTTP client with connection pooling |
| Sync & Async | Support both synchronous scripts and async applications |
| Multi-Auth | OAuth2, API Key, Basic, JWT, Entra ID, Okta |
| Smart Retry | Built-in 429/5xx handling with exponential backoff |
| Structured Logging | Request/response logging with sensitive data masking |
| Per-Status Retries | Configure different retry counts per HTTP status code |
| Enterprise Auth | httpx-auth integration for Azure AD, AWS SigV4, and more |
| OpenTelemetry | Distributed tracing via httpx instrumentation |
| Streaming Download | download_file() / adownload_file() for memory-efficient file downloads |
| Parallel Requests | parallel_get(), parallel_post(), parallel_put() for bulk operations |
Why Use This?
- Standalone API Client: Use for any REST API, not just DealCloud
- Production Ready: Retry logic and error handling
- Type Safe: Full typing support with Pydantic models
- Lightweight: Minimal dependencies, fast startup
Installation
pip install intapp-rest-client
pip install intapp-rest-client[jwt] # JWT authentication
pip install intapp-rest-client[enterprise-auth] # Azure AD, Okta, AWSQuick Examples
Using OAuth2 Client Credentials
from intapp_rest_client import RestClient, OAuth2Config, RetryConfig
client = RestClient(
base_url="https://api.example.com/",
oauth2_config=OAuth2Config(
token_url="https://api.example.com/oauth/token",
client_id="your_client_id",
client_secret="your_secret",
scope="data"
),
retry_config=RetryConfig(
max_retries=5,
backoff_factor=2.0,
retryable_statuses=(429, 500, 502, 503, 504)
)
)
# GET request
data = client.get("/api/v4/resources")
# POST with JSON body
result = client.post("/api/v4/resources", json={"name": "New Resource"})
client.close()Context Manager
with RestClient(base_url="https://api.example.com/", api_key="your-key") as client:
data = client.get("/api/v4/resources")Async Usage
import asyncio
from intapp_rest_client import RestClient, OAuth2Config
async def main():
async with RestClient(
base_url="https://api.example.com/",
oauth2_config=OAuth2Config(...)
) as client:
# Async requests
data = await client.aget("/api/v4/resources")
result = await client.apost("/api/v4/resources", json={"name": "New"})
asyncio.run(main())HTTP Methods
| Method | Sync | Async | Description |
|---|---|---|---|
| GET | get() | aget() | Retrieve resources |
| POST | post() | apost() | Create resources |
| PUT | put() | aput() | Replace resources |
| PATCH | patch() | apatch() | Update resources |
| DELETE | delete() | adelete() | Remove resources |
| HEAD | head() | ahead() | Headers only (e.g. Content-Length, ETag) |
| OPTIONS | options() | aoptions() | CORS / API discovery |
Raw Response and Streaming
| Method | Sync | Async | Use Case |
|---|---|---|---|
get_raw() | ✅ | aget_raw() | Binary downloads (small files) |
post_raw() | ✅ | apost_raw() | File uploads |
request_raw() | ✅ | arequest_raw() | Any method |
download_file() | ✅ | adownload_file() | Streaming file download (memory-efficient) |
Pagination Methods
Memory-efficient streaming pagination for large datasets:
| Method | Pagination In | Use Case |
|---|---|---|
get_paginated() | Query params | Standard REST pagination |
post_paginated() | Request body | Query-based pagination |
post_paginated_params() | Query params | POST with URL pagination |
# Stream large dataset without loading into memory
for batch in client.get_paginated(
"/api/v4/data/rows/Company",
page_size=1000,
data_key="rows"
):
process_batch(batch)Topics
Authentication→Retry Configuration→Async Operations→Pagination→Streaming File Download→Parallel Requests→Error Handling→Tracing→
Support
For issues and feature requests, contact your Intapp representative or visit the API Documentation (opens in a new tab).