Official Python SDK for Appnigma Integrations API
Project description
appnigma-integrations-client
Official Python SDK for the Appnigma Integrations API. This SDK provides a simple async interface for managing Salesforce connections and making proxied API calls to Salesforce.
Installation
pip install appnigma-integrations-client
Quick Start
import asyncio
from appnigma_integrations_client import AppnigmaClient
async def main():
# Initialize client
client = AppnigmaClient(
api_key='your-api-key' # Optional if APPNIGMA_API_KEY is set
)
# Get connection credentials
credentials = await client.get_connection_credentials(
connection_id='connectionId',
integration_id='integrationId' # Optional - extracted from API key if not provided
)
# Make a proxied Salesforce API call
response = await client.proxy_salesforce_request(
connection_id='connectionId',
request_data={
'method': 'GET',
'path': '/services/data/v59.0/query',
'query': {'q': 'SELECT Id, Name FROM Account LIMIT 10'}
},
integration_id='integrationId' # Optional - extracted from API key if not provided
)
# Clean up
await client.close()
asyncio.run(main())
Using Async Context Manager
import asyncio
from appnigma_integrations_client import AppnigmaClient
async def main():
async with AppnigmaClient(api_key='your-api-key') as client:
credentials = await client.get_connection_credentials('connectionId')
response = await client.proxy_salesforce_request(
'connectionId',
{
'method': 'GET',
'path': '/services/data/v59.0/query',
'query': {'q': 'SELECT Id, Name FROM Account LIMIT 10'}
}
)
asyncio.run(main())
Authentication
The SDK supports two ways to provide your API key:
Environment Variable (Recommended)
Set the APPNIGMA_API_KEY environment variable:
export APPNIGMA_API_KEY=your-api-key
Then initialize the client without providing the API key:
client = AppnigmaClient()
Explicit Configuration
Pass the API key directly in the constructor:
client = AppnigmaClient(api_key='your-api-key')
Note: API keys are integration-scoped. The integration_id parameter is optional and will be automatically extracted from your API key if not provided.
API Reference
AppnigmaClient
Main client class for interacting with the Appnigma Integrations API.
Constructor
AppnigmaClient(api_key=None, base_url=None, debug=False)
Parameters:
api_key(optional): API key for authentication. Defaults toAPPNIGMA_API_KEYenvironment variable.base_url(optional): Base URL for the API. Defaults tohttps://integrations.appnigma.ai.debug(optional): Enable debug logging. Defaults toFalse.
Methods
get_connection_credentials(connection_id, integration_id=None)
Retrieve decrypted access token and metadata for a Salesforce connection.
Parameters:
connection_id(str, required): The connection IDintegration_id(str, optional): Integration ID. Automatically extracted from API key if not provided.
Returns: ConnectionCredentials (TypedDict)
Example:
credentials = await client.get_connection_credentials('conn-123', 'int-456')
print(credentials['accessToken'])
print(credentials['instanceUrl'])
Response:
{
'accessToken': str,
'instanceUrl': str,
'environment': str,
'region': str,
'tokenType': str,
'expiresAt': str
}
list_connections(integration_id=None, environment=None, status=None, search=None, limit=None, cursor=None)
List connections for the integration (integration from API key).
Parameters:
integration_id(optional): Integration ID. Extracted from API key if not provided.environment,status,search,limit,cursor(optional): Filters and pagination.
Returns: ListConnectionsResponse with connections, totalCount, nextCursor (optional)
Example:
result = await client.list_connections(limit=10)
for conn in result['connections']:
print(conn['connectionId'], conn['userEmail'])
proxy_salesforce_request(connection_id, request_data, integration_id=None)
Make a proxied API call to Salesforce with automatic token refresh and usage tracking.
Parameters:
connection_id(str, required): The connection ID to userequest_data(SalesforceProxyRequest, required): Request configurationmethod(required): HTTP method - 'GET', 'POST', 'PUT', 'PATCH', or 'DELETE'path(required): Salesforce API path (e.g., '/services/data/v59.0/query')query(optional): Query parameters as key-value pairsdata(optional): Request body data (for POST, PUT, PATCH)
integration_id(str, optional): Integration ID. Automatically extracted from API key if not provided.
Returns: Raw Salesforce API response (dict, list, or other JSON-serializable type)
Example:
response = await client.proxy_salesforce_request(
'conn-123',
{
'method': 'GET',
'path': '/services/data/v59.0/query',
'query': {'q': 'SELECT Id, Name FROM Account LIMIT 10'}
}
)
close()
Close the aiohttp session. Call this when done with the client, or use the async context manager.
Example:
await client.close()
Error Handling
The SDK raises AppnigmaAPIError for all API errors. This exception includes:
status_code: HTTP status codeerror: Error type/codemessage: Human-readable error messageresponse_body: Full response body from API
Example:
from appnigma_integrations_client import AppnigmaClient, AppnigmaAPIError
try:
credentials = await client.get_connection_credentials('invalid-id')
except AppnigmaAPIError as e:
print(f'API Error {e.status_code}: {e.message}')
if e.status_code == 429:
details = e.get_details()
print(f'Rate limit exceeded. Plan limit: {details.get("planLimit")}')
except Exception as e:
print(f'Unexpected error: {e}')
Common Error Codes:
400: Bad Request - Missing required parameters or connection not in 'connected' status401: Unauthorized - Invalid or revoked API key403: Forbidden - API key doesn't match integration or connection doesn't belong to integration404: Not Found - Connection, Integration, or Company not found429: Too Many Requests - Monthly limit exceeded (includesplanLimit,currentUsage,offerings)500: Internal Server Error - Server errors or token refresh failures
Salesforce-Specific Examples
SOQL Query
response = await client.proxy_salesforce_request('conn-123', {
'method': 'GET',
'path': '/services/data/v59.0/query',
'query': {
'q': "SELECT Id, Name, Email FROM Contact WHERE AccountId = '001xx000003DGbQAAW' LIMIT 10"
}
})
print(response['records'])
Create Record (POST)
new_contact = await client.proxy_salesforce_request('conn-123', {
'method': 'POST',
'path': '/services/data/v59.0/sobjects/Contact',
'data': {
'FirstName': 'John',
'LastName': 'Doe',
'Email': 'john.doe@example.com',
'Phone': '555-1234'
}
})
print(f"Created contact: {new_contact['id']}")
Update Record (PATCH)
await client.proxy_salesforce_request('conn-123', {
'method': 'PATCH',
'path': '/services/data/v59.0/sobjects/Contact/003xx000004DGbQAAW',
'data': {
'Email': 'newemail@example.com',
'Phone': '555-5678'
}
})
Delete Record (DELETE)
await client.proxy_salesforce_request('conn-123', {
'method': 'DELETE',
'path': '/services/data/v59.0/sobjects/Contact/003xx000004DGbQAAW'
})
Configuration Options
Base URL
The default base URL is https://integrations.appnigma.ai. You can override it for testing:
client = AppnigmaClient(
api_key='your-api-key',
base_url='http://localhost:3000' # For local development
)
Debug Logging
Enable debug logging to see all HTTP requests and responses:
import logging
client = AppnigmaClient(
api_key='your-api-key',
debug=True
)
Debug logs will show:
- HTTP method and URL
- Headers (with API key redacted)
- Request body
- Response status and body
Note: API keys are automatically redacted in debug logs for security.
Type Hints
This SDK includes complete type hints for better IDE support and type checking:
from appnigma_integrations_client import (
AppnigmaClient,
ConnectionCredentials,
SalesforceProxyRequest,
AppnigmaAPIError
)
Requirements
- Python 3.8+
- aiohttp >= 3.8.0
License
MIT
Support
For issues, questions, or contributions, please visit our GitHub repository.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file appnigma_integrations_client-0.1.3.tar.gz.
File metadata
- Download URL: appnigma_integrations_client-0.1.3.tar.gz
- Upload date:
- Size: 10.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
69026307d057b680b1aa3ee215fa6bb5a7434b3917540bdf09a2db594299b584
|
|
| MD5 |
6a2f4ddd743f1ffad92b9e15a54db140
|
|
| BLAKE2b-256 |
8ab9e9bf8f3d7d08791bb8221bbe037087dd05c0468e9f09fefa0cafa390362f
|
File details
Details for the file appnigma_integrations_client-0.1.3-py3-none-any.whl.
File metadata
- Download URL: appnigma_integrations_client-0.1.3-py3-none-any.whl
- Upload date:
- Size: 9.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
130242ad716afbbcc559d386ddd600a548b1c0749a6786c1685d7195c536f9bf
|
|
| MD5 |
9c16440e89e5d4f3e9c209d24ec40e0d
|
|
| BLAKE2b-256 |
7caeb0d0217fe1f2a65268d3259b3404c37c44d55087546bdc40b94bd5d985a1
|