Skip to main content

Connect Webhook

Webhooks allow you to receive document data from your Workflow directly to your server in real-time.

Setting Up Webhooks

Webhooks are ideal when you want to handle events from specific Workflows in your Server. This allows for more granular control and easier integration with specific business processes.

To set up a Webhook:

  1. Navigate to the desired Workflow.
  2. Go to the "Workflow" tab.
  3. In the export section, look for the Webhook option.
  4. Set your Webhook Endpoint and click save.

Webhook Setup

Webhook Payload

The webhook payload contains an event, timestamp, and data field. Here's an example:

{
"event": "file_request_status_change",
"timestamp": "2024-07-25T14:30:29.565249",
"data": {
"request_id": "a7813466-6f9a-4c33-8128-427e7a4df755",
"request_status": "completed",
"response_body": {
"file_name": "Q2_Financial_Report_2024.pdf",
"file_presigned_url": "https://documentpro-parsed-files.s3.amazonaws.com/Q2_Financial_Report_2024_parsed.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=...",
"user_error_msg": null,
"template_id": "8e9beda9-5cba-42eb-a70a-b3e5eec9120a",
"template_type": "financial_report",
"template_title": "Quarterly Financial Report Parser",
"num_pages": 15,
"result_json_data": {
"company_name": "TechCorp Innovations Inc.",
"report_period": "Q2 2024",
"financial_highlights": [
{
"month": "April",
"total_revenue": 1250000,
"net_income": 450000,
"earnings_per_share": 2.25,
"operating_cash_flow": 550000
}
]
}
},
"created_at": "2024-07-25T14:30:10.696893",
"updated_at": "2024-07-25T14:30:29.565249"
}
}

The request_status field can be one of: completed, failed, exception, pending, or processing. When the request_status is completed, the result_json_data field will contain the parsed data.

Example Webhook Implementations

Flask (Python)

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/webhook', methods=['POST'])
def webhook():
if request.is_json:
data = request.get_json()

event = data.get('event')
request_status = data.get('data', {}).get('request_status')

print(f'Received event: {event}')
print(f'Received request_status: {request_status}')

# Process the data here as needed
if request_status == 'completed':
parsed_data = data.get('data', {}).get('response_body', {}).get('result_json_data', {})
# Handle the parsed data
print(f'Parsed data: {parsed_data}')

return jsonify({'message': 'Received'}), 200
else:
return jsonify({'error': 'Expected application/json data'}), 400

if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)

Express (Node.js)

const express = require('express');
const bodyParser = require('body-parser');

const app = express();
app.use(bodyParser.json());

app.post('/webhook', (req, res) => {
const data = req.body;

const event = data.event;
const requestStatus = data.data?.request_status;
console.log(`Received event: ${event}`);
console.log(`Received request_status: ${requestStatus}`);

// Process the data as needed
if (requestStatus === 'completed') {
const parsedData = data.data?.response_body?.result_json_data;
// Handle the parsed data
console.log('Parsed data:', parsedData);
}

res.json({message: 'Received'});
});

app.listen(5000, () => {
console.log('Server is running on port 5000');
});

By implementing webhooks, you can automate your workflow and process parsed data in real-time as soon as it becomes available.