Zapier Integration
Automate AssistLoop with Zapier
Zapier Integration API Reference
The AssistLoop API is specifically designed to integrate seamlessly with Zapier, enabling you to build powerful automation workflows without writing code. Our API follows REST principles with predictable resource-oriented URLs, accepts JSON-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes and OAuth 2.0 authentication.
What You Can Build
With the AssistLoop Zapier integration, you can:
- Trigger Zaps when new conversations start or when AI requests human assistance
- Automatically respond to customer conversations from other apps
- Close conversations as part of your workflow automation
- Query conversation history to feed data into your other tools
- Build custom workflows connecting AssistLoop with 6,000+ apps on Zapier
Base URL
https://api.assistloop.ai/api/v1Authentication
The AssistLoop Zapier integration uses OAuth 2.0 for secure authentication. When you connect AssistLoop to Zapier, you'll be prompted to authorize the connection through a secure OAuth flow. Zapier will automatically handle token management, including automatic token refresh when needed.
For Zapier Users
You don't need to manually manage tokens. Simply click "Connect an Account" in Zapier and follow the authorization prompts.
For Developers
If you're building custom Zapier actions or testing the API directly, all requests must include your access token in the Authorization header:
Authorization: Bearer YOUR_ACCESS_TOKENAll API requests must be made over HTTPS. Calls made over plain HTTP will fail.
Example Request with Authentication
curl https://api.assistloop.ai/api/v1/oauth/me \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"OAuth 2.0 Authorization Flow
AssistLoop uses OAuth 2.0 to securely connect with Zapier. This section describes the technical details of how Zapier obtains and refreshes access tokens when you connect your AssistLoop account.
Most Zapier users won't need to understand these technical details - Zapier handles the OAuth flow automatically. This section is primarily for developers building or debugging Zapier integrations.
OAuth 2.0 Endpoints
| Endpoint | URL | Purpose |
|---|---|---|
| Authorization | POST /api/v1/oauth/authorize | Obtain authorization code |
| Token | POST /oauth/token | Exchange code for token or refresh access token |
The /oauth/token endpoint is at the root level (not under /api/v1).
Available Scopes
| Scope | Description |
|---|---|
read:conversations | Read conversations and conversation details (default) |
read:messages | Read messages within conversations (default) |
manage:webhooks | Create and manage webhook subscriptions (default) |
write:conversations | Update conversation status and response mode |
If no scopes are specified, the token will have read:conversations, read:messages, and manage:webhooks scopes.
Step 1: Authorization Request
When you click "Connect an Account" in Zapier, Zapier directs you to AssistLoop's authorization page. Behind the scenes, Zapier sends this authorization request:
Endpoint: POST /api/v1/oauth/authorize
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| client_id | string | Yes | Your OAuth client ID from AssistLoop Dashboard |
| redirect_uri | string | Yes | The URL where users will be redirected after authorization |
| scope | string | No | Space-separated list of scopes (default scopes applied if not provided) |
| state | string | Yes | Random string to prevent CSRF attacks |
| approved | boolean | Yes | Set to true to approve the authorization |
Example Request
curl -X POST https://api.assistloop.ai/api/v1/oauth/authorize \
-H "Content-Type: application/json" \
-H "Cookie: your-session-cookie" \
-d '{
"client_id": "your-client-id",
"redirect_uri": "https://zapier.com/dashboard/auth/oauth/return/App1234CLIAPI/",
"scope": "read:conversations read:messages manage:webhooks",
"state": "random-state-string",
"approved": true
}'Response
{
"success": true,
"code": "def50200a1b2c3...",
"state": "random-state-string",
"user": {
"name": "John Doe",
"email": "[email protected]"
}
}The code is the authorization code that should be exchanged for an access token in the next step.
Step 2: Exchange Authorization Code for Access Token
After you approve the connection, Zapier automatically exchanges the authorization code for an access token using the /oauth/token endpoint.
Endpoint: POST /oauth/token
Request Parameters (Authorization Code Grant)
| Parameter | Type | Required | Description |
|---|---|---|---|
| grant_type | string | Yes | Must be authorization_code |
| client_id | string | Yes | Your OAuth client ID |
| client_secret | string | Yes | Your OAuth client secret |
| redirect_uri | string | Yes | Must match the redirect URI from authorization |
| code | string | Yes | The authorization code received in previous step |
Example Request
curl -X POST https://api.assistloop.ai/oauth/token \
-H "Content-Type: application/json" \
-d '{
"grant_type": "authorization_code",
"client_id": "your-client-id",
"client_secret": "your-client-secret",
"redirect_uri": "https://zapier.com/dashboard/auth/oauth/return/App1234CLIAPI/",
"code": "def50200a1b2c3..."
}'Response
{
"token_type": "Bearer",
"expires_in": 31536000,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGc...",
"refresh_token": "def50200d4e5f6..."
}token_type
Always "Bearer"
expires_in
Token lifetime in seconds (default: 1 year)
access_token
The access token to use for API requests
refresh_token
Token used to obtain a new access token when the current one expires
Step 3: Using the Access Token
Zapier automatically includes the access token in all API requests it makes on your behalf:
curl https://api.assistloop.ai/api/v1/oauth/me \
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc..."Step 4: Automatic Token Refresh
When your access token expires (after 1 year), Zapier automatically uses the refresh token to obtain a new access token without requiring you to re-authorize. This happens seamlessly in the background.
Endpoint: POST /oauth/token
Request Parameters (Refresh Token Grant)
| Parameter | Type | Required | Description |
|---|---|---|---|
| grant_type | string | Yes | Must be refresh_token |
| refresh_token | string | Yes | The refresh token from the previous response |
| client_id | string | Yes | Your OAuth client ID |
| client_secret | string | Yes | Your OAuth client secret |
| scope | string | No | Scopes for the new token (defaults to original) |
Example Request
curl -X POST https://api.assistloop.ai/oauth/token \
-H "Content-Type: application/json" \
-d '{
"grant_type": "refresh_token",
"refresh_token": "def50200d4e5f6...",
"client_id": "your-client-id",
"client_secret": "your-client-secret"
}'Response
{
"token_type": "Bearer",
"expires_in": 31536000,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGc...",
"refresh_token": "def50200g7h8i9..."
}Important
Each refresh operation returns a new refresh token. Always update your stored refresh token with the new one.
OAuth 2.0 Security Best Practices
Store Secrets Securely
Never expose your client secret in client-side code or version control
Use HTTPS
All OAuth requests must be made over HTTPS
Validate State
Always validate the state parameter to prevent CSRF attacks
Token Storage
Store access and refresh tokens securely (encrypted at rest)
Token Rotation
Update refresh tokens after each refresh operation
Scope Limitation
Request only the scopes your application needs
Errors
AssistLoop uses conventional HTTP response codes to indicate the success or failure of an API request. In general: Codes in the 2xx range indicate success. Codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter was omitted, a resource was not found, etc.). Codes in the 5xx range indicate an error with AssistLoop's servers (these are rare).
HTTP Status Code Summary
| Code | Status | Description |
|---|---|---|
| 200 | OK | Everything worked as expected. |
| 400 | Bad Request | The request was unacceptable, often due to missing a required parameter. |
| 401 | Unauthorized | No valid API token provided. |
| 403 | Forbidden | The API token doesn't have permissions to perform the request. |
| 404 | Not Found | The requested resource doesn't exist. |
| 422 | Validation Error | The request parameters failed validation. |
| 429 | Too Many Requests | Too many requests hit the API too quickly. Please retry with exponential backoff. |
| 500 | Internal Server Error | Something went wrong on AssistLoop's end. |
Error Response Format
{
"error": "Conversation not found",
"message": "The requested conversation could not be found or you don't have access to it."
}OAuth Endpoints
Get Current User
Retrieves information about the currently authenticated user. Use this endpoint to verify your authentication token and get details about the associated account.
Endpoint: GET /oauth/me
Example Request
curl https://api.assistloop.ai/api/v1/oauth/me \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"Response
{
"uuid": "usr_abc123",
"name": "John Doe",
"email": "[email protected]"
}Webhook Endpoints (Zapier Triggers)
Webhooks power Zapier triggers for your AssistLoop account. When you set up a trigger in Zapier (like "New Conversation" or "Human Handoff Required"), Zapier automatically subscribes to the appropriate webhook endpoint. When the event occurs in AssistLoop, we instantly notify Zapier to trigger your Zap.
Subscribe to Webhooks
Creates a new webhook subscription for Zapier triggers. When you enable a trigger in Zapier, Zapier automatically calls this endpoint to subscribe to events. When the event occurs in AssistLoop, we send the data to Zapier to trigger your Zap.
Endpoint: POST /webhooks/subscribe
For Zapier Users: This happens automatically when you set up a trigger. You don't need to call this endpoint manually.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| organization_uuid | string | Yes | The UUID of your organization. |
| agent_uuid | string | Yes | The UUID of the agent to monitor for events. |
| target_url | string | Yes | The URL where webhook payloads will be sent. Must be a valid HTTPS URL. |
| event | string | Yes | The type of event to subscribe to. One of: new_conversation, human_handoff_required. |
| platform | string | Yes | Must be zapier for Zapier integrations. |
| external_id | string | No | Optional external identifier for your integration (max 255 characters). |
Example Request
curl -X POST https://api.assistloop.ai/api/v1/webhooks/subscribe \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"organization_uuid": "org_xyz789",
"agent_uuid": "agt_abc123",
"target_url": "https://hooks.zapier.com/hooks/catch/123456/abcdef/",
"event": "new_conversation",
"platform": "zapier"
}'Response
{
"data": {
"id": "whk_xyz789",
"secret": "whsec_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6"
},
"message": "Webhook subscribed successfully"
}Important
The secret field is returned only once during subscription. Store it securely to verify webhook signatures.
Webhook Event Types (Zapier Triggers)
These are the available triggers you can use in your Zapier workflows:
New Conversation
Event: new_conversation
Triggers your Zap when a customer starts a new conversation with your AI agent. Perfect for logging conversations, sending notifications, or creating tickets.
Human Handoff Required
Event: human_handoff_required
Triggers your Zap when the AI determines human assistance is needed. Use this to notify your support team, create urgent tickets, or escalate to your help desk system.
Webhook Payload Examples
New Conversation Event
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"event": "new_conversation",
"timestamp": "2025-01-20T16:00:00+00:00",
"data": {
"conversation": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"status": true,
"response_mode": "ai",
"created_at": "2025-01-20T16:00:00+00:00"
},
"agent": {
"uuid": "agt_abc123",
"name": "Customer Support Agent"
},
"chat_user": {
"name": "Jane Smith",
"email": "[email protected]"
},
"organization": {
"uuid": "org_xyz789",
"name": "Acme Corporation"
},
"initial_message": {
"uuid": "msg_abc123",
"content": "Hi, I need help with my order",
"type": "guest",
"created_at": "2025-01-20T16:00:00+00:00"
}
}
}Human Handoff Required Event
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"event": "human_handoff_required",
"timestamp": "2025-01-20T16:05:00+00:00",
"data": {
"conversation": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"status": true,
"response_mode": "human",
"created_at": "2025-01-20T16:00:00+00:00"
},
"agent": {
"uuid": "agt_abc123",
"name": "Customer Support Agent"
},
"chat_user": {
"name": "Jane Smith",
"email": "[email protected]"
},
"organization": {
"uuid": "org_xyz789",
"name": "Acme Corporation"
},
"last_message": {
"uuid": "msg_def456",
"content": "I need to speak with a human agent",
"type": "guest",
"created_at": "2025-01-20T16:05:00+00:00"
}
}
}Unsubscribe from Webhooks
Removes a webhook subscription. Zapier automatically calls this endpoint when you turn off or delete a trigger.
Endpoint: DELETE /webhooks/unsubscribe/{uuid}
For Zapier Users: This happens automatically when you disable or delete a trigger. You don't need to call this endpoint manually.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| uuid | string | Yes | The UUID of the webhook subscription. |
Example Request
curl -X DELETE https://api.assistloop.ai/api/v1/webhooks/unsubscribe/whk_xyz789 \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"Response
{
"data": null,
"message": "Webhook unsubscribed successfully"
}Conversation Endpoints (Zapier Actions)
List Conversations
Use this action in Zapier to find and filter conversations. Perfect for building workflows that need to check conversation status, find conversations by date, or feed conversation data into other apps.
Endpoint: GET /automation/agents/{agentUuid}/conversations/list
Zapier Use Cases
- Find open conversations to send daily summaries to Slack
- Check for conversations in "human" mode to assign to support agents
- Export conversation lists to Google Sheets for reporting
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| agentUuid | string | Yes | The UUID of the agent. |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| status | integer | No | Filter by conversation status. 0 for closed, 1 for active/open. |
| response_mode | string | No | Filter by response mode. One of: ai, human. |
| created_from | string | No | Filter conversations created after this date (ISO 8601 format). |
| created_to | string | No | Filter conversations created before this date (ISO 8601 format). |
| per_page | integer | No | Number of conversations per page (min: 10, max: 100, default: 20). |
Example Request
curl "https://api.assistloop.ai/api/v1/automation/agents/agt_abc123/conversations/list?status=1&response_mode=ai&per_page=20" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"Response
The endpoint returns a direct array of conversation objects (not wrapped in a data field).
[
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"session_id": "sess_abc123",
"response_mode": "ai",
"status": true,
"last_message_seen": false,
"deleted_at": null,
"chat_user": {
"name": "Jane Smith",
"email": "[email protected]",
"country_code": "US",
"chat_user_id": "chu_xyz123"
}
}
]Field Descriptions
status: Boolean -truefor active/open,falsefor closedresponse_mode: String - Eitherai(AI responding) orhuman(human agent responding)last_message_seen: Boolean - Whether the last message has been seenchat_user: Object containing customer information
Get Recent Conversation Samples
Provides sample data when you're setting up a Zapier trigger. When you click "Test Trigger" in Zapier, this endpoint returns recent conversations so you can see what data your Zap will receive.
Endpoint: GET /automation/agents/{agentUuid}/conversations/recent-sample
For Zapier Users: This runs automatically when you test your trigger during Zap setup.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| agentUuid | string | Yes | The UUID of the agent. |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| limit | integer | No | Number of samples to return (default: 5, max: 10). |
| type | string | No | Sample type. One of: new_conversation, human_handoff_required (default: new_conversation). |
Example Request
curl "https://api.assistloop.ai/api/v1/automation/agents/agt_abc123/conversations/recent-sample?limit=3&type=new_conversation" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"Response
Returns an array of webhook payload samples in the same format as actual webhook deliveries.
[
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"event": "new_conversation",
"timestamp": "2025-01-20T15:30:00+00:00",
"data": {
"conversation": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"status": true,
"response_mode": "ai",
"created_at": "2025-01-20T15:30:00+00:00"
},
"agent": {
"uuid": "agt_abc123",
"name": "Customer Support Agent"
},
"chat_user": {
"name": "Sample Customer",
"email": "[email protected]"
},
"organization": {
"uuid": "org_xyz789",
"name": "Acme Corporation"
},
"initial_message": {
"uuid": "msg_sample123",
"content": "Hello, I have a question",
"type": "guest",
"created_at": "2025-01-20T15:30:00+00:00"
}
}
}
]When type=human_handoff_required, the response format changes slightly - initial_message becomes last_message and the event field is set to human_handoff_required.
Close Conversation
Use this Zapier action to automatically close conversations as part of your workflow. Great for marking conversations as complete after creating a help desk ticket, logging to your CRM, or after a certain amount of time.
Endpoint: POST /automation/conversations/{conversationUuid}/close
Rate Limit
10 requests per minute
Zapier Use Cases
- Close conversations after creating a Zendesk ticket
- Auto-close conversations that have been idle for 24 hours
- Mark conversations as complete after successful payment in Stripe
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| conversationUuid | string | Yes | The UUID of the conversation. |
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| platform | string | Yes | Must be zapier for Zapier integrations. |
Example Request
curl -X POST https://api.assistloop.ai/api/v1/automation/conversations/550e8400-e29b-41d4-a716-446655440000/close \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"platform": "zapier"
}'Response
{
"status": "conversation_closed",
"platform": "zapier"
}Message Endpoints (Zapier Actions)
Find Messages
Use this Zapier action to retrieve the full message history from a conversation. Perfect for including context when creating support tickets, logging conversations, or analyzing customer interactions.
Endpoint: GET /automation/conversations/{conversationUuid}/messages/find
Zapier Use Cases
- Fetch conversation history when creating a Zendesk ticket
- Log full conversation to Airtable or Google Sheets
- Send conversation transcript via email when human handoff is requested
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| conversationUuid | string | Yes | The UUID of the conversation. |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| created_from | string | No | Filter messages created after this date (ISO 8601 format). |
| created_to | string | No | Filter messages created before this date (ISO 8601 format). |
| per_page | integer | No | Number of messages per page (min: 10, max: 100, default: 20). |
Example Request
curl "https://api.assistloop.ai/api/v1/automation/conversations/550e8400-e29b-41d4-a716-446655440000/messages/find?per_page=20" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"Response
Returns a direct array of message objects, ordered by created_at descending (newest first).
[
{
"id": "msg_abc124",
"uuid": "660e8400-e29b-41d4-a716-446655440002",
"content": "I'd be happy to help you with your order. Could you provide your order number?",
"type": "agent",
"is_read": null,
"status": null,
"responder_type": "ai",
"emailed_at": null,
"email_seen": false,
"email_opened_at": null,
"via": "web",
"created_at": "2025-01-20T16:00:15.000000Z",
"user_feedback": null,
"sender_name": "Customer Support Agent",
"attachments": []
},
{
"id": "msg_abc123",
"uuid": "660e8400-e29b-41d4-a716-446655440001",
"content": "I need help with my order",
"type": "guest",
"is_read": null,
"status": null,
"responder_type": null,
"emailed_at": null,
"email_seen": false,
"email_opened_at": null,
"via": "web",
"created_at": "2025-01-20T16:00:00.000000Z",
"user_feedback": null,
"sender_name": "Jane Smith",
"attachments": []
}
]Field Descriptions
type: Message type -guest(customer),agent(AI or human), orplatform_action(system messages - excluded from results)responder_type: Who/what responded -ai,human_assistant, ornullfor guest messagessender_name: Display name of the sender (automatically computed)attachments: Array of file attachments associated with the messageuser_feedback: Customer feedback on AI response -positive,negative,not-allowed, ornull
Reply to Conversation
Use this Zapier action to automatically send messages to customers in response to events in other apps. Messages are sent as if from a human support agent.
Endpoint: POST /automation/conversations/{conversationUuid}/reply
Zapier Use Cases
- Send a message when a help desk ticket is created: "We've created ticket #12345"
- Notify customers when their order ships via your e-commerce platform
- Reply with order status when customer asks about their order
- Send proactive messages based on events in your CRM
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| conversationUuid | string | Yes | The UUID of the conversation. |
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| content | string | Yes | The message content to send. |
Example Request
curl -X POST https://api.assistloop.ai/api/v1/automation/conversations/550e8400-e29b-41d4-a716-446655440000/reply \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"content": "Thank you for contacting us. A support agent will be with you shortly."
}'Response
{
"status": "sent",
"message_id": "msg_xyz789"
}Important Notes
- The message is sent as type
agentwith responder_typehuman_assistant - The conversation's
response_modeis automatically switched tohuman - The message is broadcast in real-time to the customer
- The authenticated user is recorded as the human responder
Common Zapier Use Cases
Use Case 1: Slack Notification for New Conversations
Scenario: Get instant Slack notifications when customers start conversations with your AI agent.
Set Up Trigger
Trigger: AssistLoop - New Conversation
Add Slack Action
Action: Slack - Send Channel Message
Customize Message
Include customer name, email, and their first message in the Slack notification
Benefits
- Keep your team informed in real-time
- No customer conversation goes unnoticed
- Quick visibility into conversation volume
Zap Template: Use this Zap Template (coming soon)
Use Case 2: Auto-Create Zendesk Tickets on Human Handoff
Scenario: Automatically create a Zendesk ticket with full conversation context when AI needs human help.
Set Up Trigger
Trigger: AssistLoop - Human Handoff Required
Fetch Conversation History
Action 1: AssistLoop - Find Messages (get conversation history)
Create Zendesk Ticket
Action 2: Zendesk - Create Ticket
- Use conversation history in ticket description
- Add customer email as requester
- Set priority to high
Send Acknowledgment
Action 3: AssistLoop - Reply to Conversation
- Message: "Thanks! We've created ticket #(ticket_id) and a team member will help you shortly."
Close Conversation (Optional)
Action 4: AssistLoop - Close Conversation
Benefits
- Zero delay between AI handoff and ticket creation
- Full conversation context automatically included
- Customer gets immediate acknowledgment
- Conversation automatically closed to prevent AI responses
Zap Template: Use this Zap Template (coming soon)
Use Case 3: Auto-Close Inactive Conversations
Scenario: Keep your conversation list clean by automatically closing conversations that haven't had activity for 24 hours.
Set Up Schedule
Trigger: Schedule by Zapier - Every Day at 9 AM
List Open Conversations
Action 1: AssistLoop - List Conversations
- Filter: Status = Open (1)
Filter Inactive Conversations
Action 2: Filter by Zapier
- Only continue if updated_at is more than 24 hours ago
Send Goodbye Message
Action 3: AssistLoop - Reply to Conversation
- Message: "We haven't heard back from you. I'm marking this conversation as complete. Feel free to start a new conversation anytime!"
Close Conversation
Action 4: AssistLoop - Close Conversation
Pro Tips
- Use Zapier's Looping action to process multiple inactive conversations
- Adjust the time threshold based on your business hours
- Customize the goodbye message based on conversation context
Zap Template: Use this Zap Template (coming soon)
Use Case 4: Daily Conversation Report to Slack
Scenario: Get a daily digest of conversation metrics delivered to your team's Slack channel.
Set Up Schedule
Trigger: Schedule by Zapier - Every Day at 9 AM
Fetch Yesterday's Conversations
Action 1: AssistLoop - List Conversations
- Filter: created_from = yesterday's date
Generate Summary
Action 2: Formatter by Zapier - Create Summary
- Count total conversations
- Count by status (open vs closed)
- Count by response_mode (AI vs human)
Send to Slack
Action 3: Slack - Send Channel Message
- Format with metrics and highlights
- Include links to conversations needing attention
Example Slack Message
📊 Daily AssistLoop Report - March 15, 2025
✅ Total Conversations: 47
🤖 Handled by AI: 39 (83%)
👤 Required Human Help: 8 (17%)
📭 Currently Open: 5
✓ Closed: 42
🔗 View open conversations in dashboardZap Template: Use this Zap Template (coming soon)
Rate Limiting
To ensure reliable service for all Zapier users, we implement rate limits on API endpoints:
General Endpoints
60 requests per minute per connected account
Close Conversation
10 requests per minute
Webhook Deliveries
Automatic retries up to 3 times with exponential backoff
For Zapier Users: These rate limits are generous for typical Zap usage. If you hit a rate limit, Zapier will automatically retry the request. For high-volume workflows, consider adding a delay between actions or breaking them into multiple Zaps.
429 Error Handling: When a rate limit is exceeded, Zapier will receive a 429 Too Many Requests response and will automatically handle the retry logic.
Best Practices for Zapier Workflows
Designing Efficient Zaps
Start with Triggers, Not Polls
- Use our webhook-based triggers (New Conversation, Human Handoff Required) instead of polling endpoints
- Webhook triggers are instant and don't count against your Zapier task limit
- Polling-based searches should only be used when building scheduled reports or cleanup workflows
Handle Multiple Results
- When using "Find Messages" or "List Conversations," remember these return arrays
- Use Zapier's Looping action to process multiple items
- Consider using Filters to narrow down results before looping
Error Handling in Zaps
- Add Filter steps to skip API calls when data is missing
- Use Zapier's Error Handling to continue workflows even if one step fails
- Set up Task History monitoring to catch and fix errors quickly
Optimizing API Calls
Reduce Unnecessary Calls
- Don't fetch full message history if you only need the most recent message
- Use pagination (
per_page) wisely - start with 10-20 items, not 100 - Filter conversations by
created_fromdate to avoid fetching old data
Rate Limit Considerations
- If processing many conversations, add a 1-2 second delay between Close Conversation actions
- For bulk operations, spread them across multiple scheduled Zaps
- Monitor your Task History for 429 errors - these indicate you're hitting rate limits
Data Handling Best Practices
Understanding Field Types
- Conversation Status: Boolean (
true= open,false= closed). Use "1" in API filters, not "true" - Response Mode: String (
aiorhuman). Use this to route conversations differently - Message Types:
guest(customer),agent(AI/human). Filter to see only customer messages - Timestamps: ISO 8601 format with timezone. Use Zapier's date formatter to convert
Handling Missing Data
- Customer email and name may be null for anonymous conversations
- Always check if fields exist before using them in actions
- Use Zapier's Formatter to set default values for missing fields
Working with Message Content
- Messages may contain line breaks - use Formatter to clean up if needed
- Check for attachments array - it may be empty
- User feedback field is usually null (only set if customer rated the response)
Security Recommendations
Protect Customer Data
- Don't log customer messages to public channels
- Be careful when sending conversation data to third-party apps
- Use Zapier's Privacy Mode in Task History for sensitive data
OAuth Token Management
- Never share your connected account access with others
- Reconnect your AssistLoop account if you suspect token compromise
- Zapier handles token refresh automatically - don't try to manually refresh
Webhook Security
- Zapier automatically validates webhook signatures
- Webhook URLs are unique and secret - don't share them
- If a webhook URL is compromised, delete and recreate the trigger
Zapier OAuth Configuration
When setting up your Zapier integration, use the following OAuth configuration:
OAuth Configuration Parameters
| Parameter | Value |
|---|---|
| Authorization URL | https://api.assistloop.ai/api/v1/oauth/authorize |
| Access Token URL | https://api.assistloop.ai/oauth/token |
| Refresh Token URL | https://api.assistloop.ai/oauth/token |
| Client ID | (Provided in AssistLoop Dashboard) |
| Client Secret | (Provided in AssistLoop Dashboard) |
| Scope | read:conversations read:messages manage:webhooks |
| Scope Separator | Space |
Zapier OAuth Settings
- Grant Type: Authorization Code
- Authorization Code Method: POST (JSON body)
- Token Request Method: POST (JSON body)
- Refresh Token Method: POST (JSON body)
- Automatically Refresh: Yes
Test API Call
Configure Zapier's test API call to verify authentication:
- URL:
https://api.assistloop.ai/api/v1/oauth/me - Method: GET
- Expected Response: JSON with
uuid,name, andemailfields
Testing Your Integration
Authenticate
First, obtain an OAuth token from the AssistLoop Dashboard and test authentication:
curl https://api.assistloop.ai/api/v1/oauth/me \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"Expected Response:
{
"uuid": "usr_abc123",
"name": "Your Name",
"email": "[email protected]"
}Get Sample Data
Retrieve sample conversations to understand the data structure:
curl "https://api.assistloop.ai/api/v1/automation/agents/YOUR_AGENT_UUID/conversations/recent-sample?limit=1" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"This will return webhook-formatted sample data that shows exactly what your webhook will receive.
Subscribe to Webhooks
Set up a test webhook using a service like webhook.site:
curl -X POST https://api.assistloop.ai/api/v1/webhooks/subscribe \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"organization_uuid": "YOUR_ORG_UUID",
"agent_uuid": "YOUR_AGENT_UUID",
"target_url": "https://webhook.site/your-unique-url",
"event": "new_conversation",
"platform": "zapier"
}'Important
Save the returned secret value - you'll only see it once!
Test Conversation Queries
List recent conversations:
curl "https://api.assistloop.ai/api/v1/automation/agents/YOUR_AGENT_UUID/conversations/list?status=1&per_page=5" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"Test Message Operations
Using a conversation UUID from the previous step:
# Fetch messages
curl "https://api.assistloop.ai/api/v1/automation/conversations/CONVERSATION_UUID/messages/find?per_page=10" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
# Send a reply
curl -X POST https://api.assistloop.ai/api/v1/automation/conversations/CONVERSATION_UUID/reply \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"content": "This is a test message from the API"
}'Test Conversation Closing
curl -X POST https://api.assistloop.ai/api/v1/automation/conversations/CONVERSATION_UUID/close \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"platform": "zapier"
}'Troubleshooting
Common Issues
Support
For questions about the API or help with your integration:
- Documentation: https://api.assistloop.ai/docs
- Support Email: [email protected]
- Dashboard: https://api.assistloop.ai/dashboard
When contacting support, please include:
- Your organization UUID
- Agent UUID (if applicable)
- Request ID (from response headers:
Request-Id) - Full error message and response body
- Steps to reproduce the issue
- Sample request (with sensitive data redacted)