2025-09-29 05:10:12 +04:00
|
|
|
|
|
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
# N8N Workflow API Endpoints Documentation
|
|
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
#
|
|
|
|
|
|
|
|
|
|
# Base URL
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
text
|
|
|
|
|
<https://scan-might-updates-postage.trycloudflare.com/api>
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
text
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
# Available Endpoints
|
|
|
|
|
|
|
|
|
|
#
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
##
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
1. Statistics Endpoint
|
|
|
|
|
**URL:*
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
* `/api/stats`
|
|
|
|
|
**Method:*
|
|
|
|
|
|
|
|
|
|
* GET
|
|
|
|
|
**Description:*
|
|
|
|
|
|
|
|
|
|
* Returns overall repository statistics
|
|
|
|
|
|
|
|
|
|
**Response Structure:*
|
|
|
|
|
|
|
|
|
|
*
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
json
|
2025-07-28 09:44:28 -05:00
|
|
|
{
|
|
|
|
|
"total": 2055,
|
|
|
|
|
"active": 215,
|
|
|
|
|
"inactive": 1840,
|
|
|
|
|
"triggers": {
|
|
|
|
|
"Manual": 1234,
|
|
|
|
|
"Webhook": 456,
|
|
|
|
|
"Scheduled": 234,
|
|
|
|
|
"Complex": 131
|
|
|
|
|
},
|
|
|
|
|
"complexity": {
|
|
|
|
|
"low": 1456,
|
|
|
|
|
"medium": 456,
|
|
|
|
|
"high": 143
|
|
|
|
|
},
|
|
|
|
|
"total_nodes": 29518,
|
|
|
|
|
"unique_integrations": 365,
|
|
|
|
|
"last_indexed": "2025-07-27 17:40:54"
|
|
|
|
|
}
|
2025-09-29 05:10:12 +04:00
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
text
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
##
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
2. Workflow Search Endpoint
|
|
|
|
|
**URL:*
|
|
|
|
|
|
|
|
|
|
* `/api/workflows`
|
|
|
|
|
**Method:*
|
|
|
|
|
|
|
|
|
|
* GET
|
|
|
|
|
**Description:*
|
|
|
|
|
|
|
|
|
|
* Search and paginate through workflows
|
|
|
|
|
|
|
|
|
|
**Query Parameters:*
|
|
|
|
|
|
|
|
|
|
*
|
2025-07-28 09:44:28 -05:00
|
|
|
|
|
|
|
|
- `q` (string): Search query (default: '')
|
2025-09-29 05:10:12 +04:00
|
|
|
|
|
|
|
|
- `trigger` (string): Filter by trigger type
|
|
|
|
|
|
|
|
|
|
- 'all', 'Webhook', 'Scheduled', 'Manual', 'Complex' (default: 'all')
|
|
|
|
|
|
|
|
|
|
- `complexity` (string): Filter by complexity
|
|
|
|
|
|
|
|
|
|
- 'all', 'low', 'medium', 'high' (default: 'all')
|
|
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
- `active_only` (boolean): Show only active workflows (default: false)
|
2025-09-29 05:10:12 +04:00
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
- `page` (integer): Page number (default: 1)
|
2025-09-29 05:10:12 +04:00
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
- `per_page` (integer): Results per page, max 100 (default: 20)
|
|
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
**Example Request:*
|
|
|
|
|
|
|
|
|
|
*
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
bash
|
|
|
|
|
curl "<https://scan-might-updates-postage.trycloudflare.com/api/workflows?per_page=100&page=1">
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
text
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
**Response Structure:*
|
|
|
|
|
|
|
|
|
|
*
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
json
|
2025-07-28 09:44:28 -05:00
|
|
|
{
|
|
|
|
|
"workflows": [
|
|
|
|
|
{
|
|
|
|
|
"id": 102,
|
|
|
|
|
"filename": "example.json",
|
|
|
|
|
"name": "Example Workflow",
|
|
|
|
|
"workflow_id": "",
|
|
|
|
|
"active": 0,
|
|
|
|
|
"description": "Example description",
|
|
|
|
|
"trigger_type": "Manual",
|
|
|
|
|
"complexity": "medium",
|
|
|
|
|
"node_count": 6,
|
|
|
|
|
"integrations": ["HTTP", "Google Sheets"],
|
|
|
|
|
"tags": [],
|
|
|
|
|
"created_at": "",
|
|
|
|
|
"updated_at": "",
|
|
|
|
|
"file_hash": "...",
|
|
|
|
|
"file_size": 4047,
|
|
|
|
|
"analyzed_at": "2025-07-27 17:40:54"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"total": 2055,
|
|
|
|
|
"page": 1,
|
|
|
|
|
"per_page": 100,
|
|
|
|
|
"pages": 21,
|
|
|
|
|
"query": "",
|
|
|
|
|
"filters": {
|
|
|
|
|
"trigger": "all",
|
|
|
|
|
"complexity": "all",
|
|
|
|
|
"active_only": false
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-09-29 05:10:12 +04:00
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
text
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|
|
|
|
|
|
3. Individual Workflow Detail Endpoint
|
|
|
|
|
**URL:*
|
|
|
|
|
|
|
|
|
|
* `/api/workflows/{filename}`
|
|
|
|
|
**Method:*
|
|
|
|
|
|
|
|
|
|
* GET
|
|
|
|
|
**Description:*
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
* Get detailed information about a specific workflow
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
**Example Request:*
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
*
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
bash
|
|
|
|
|
curl "<https://scan-might-updates-postage.trycloudflare.com/api/workflows/0150_Awsrekognition_GoogleSheets_Automation_Webhook.json">
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
text
|
|
|
|
|
|
|
|
|
|
**Response Structure:*
|
|
|
|
|
|
|
|
|
|
*
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
json
|
2025-07-28 09:44:28 -05:00
|
|
|
{
|
|
|
|
|
"metadata": {
|
|
|
|
|
"id": 102,
|
|
|
|
|
"filename": "0150_Awsrekognition_GoogleSheets_Automation_Webhook.json",
|
|
|
|
|
"name": "Awsrekognition Googlesheets Automation Webhook",
|
|
|
|
|
"workflow_id": "",
|
|
|
|
|
"active": 0,
|
|
|
|
|
"description": "Manual workflow that orchestrates Httprequest, Google Sheets, and Awsrekognition for data processing. Uses 6 nodes.",
|
|
|
|
|
"trigger_type": "Manual",
|
|
|
|
|
"complexity": "medium",
|
|
|
|
|
"node_count": 6,
|
|
|
|
|
"integrations": ["Httprequest", "Google Sheets", "Awsrekognition"],
|
|
|
|
|
"tags": [],
|
|
|
|
|
"created_at": "",
|
|
|
|
|
"updated_at": "",
|
|
|
|
|
"file_hash": "74bdca251ec3446c2f470c17024beccd",
|
|
|
|
|
"file_size": 4047,
|
|
|
|
|
"analyzed_at": "2025-07-27 17:40:54"
|
|
|
|
|
},
|
|
|
|
|
"raw_json": {
|
|
|
|
|
"nodes": [...],
|
|
|
|
|
"connections": {...}
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-09-29 05:10:12 +04:00
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
text
|
|
|
|
|
|
|
|
|
|
**Important:*
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
* The actual workflow metadata is nested under the `metadata` key, not at the root level.
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
#
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
##
|
|
|
|
|
|
|
|
|
|
4. Categories Endpoint
|
|
|
|
|
**URL:*
|
|
|
|
|
|
|
|
|
|
* `/api/categories`
|
|
|
|
|
**Method:*
|
|
|
|
|
|
|
|
|
|
* GET
|
|
|
|
|
**Description:*
|
|
|
|
|
|
|
|
|
|
* Get list of available workflow categories
|
|
|
|
|
|
|
|
|
|
**Response Structure:*
|
|
|
|
|
|
|
|
|
|
*
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
json
|
2025-07-28 09:44:28 -05:00
|
|
|
{
|
|
|
|
|
"categories": [
|
|
|
|
|
"AI Agent Development",
|
|
|
|
|
"Business Process Automation",
|
|
|
|
|
"CRM & Sales",
|
|
|
|
|
"Cloud Storage & File Management",
|
|
|
|
|
"Communication & Messaging",
|
|
|
|
|
"Creative Content & Video Automation",
|
|
|
|
|
"Creative Design Automation",
|
|
|
|
|
"Data Processing & Analysis",
|
|
|
|
|
"E-commerce & Retail",
|
|
|
|
|
"Financial & Accounting",
|
|
|
|
|
"Marketing & Advertising Automation",
|
|
|
|
|
"Project Management",
|
|
|
|
|
"Social Media Management",
|
|
|
|
|
"Technical Infrastructure & DevOps",
|
|
|
|
|
"Uncategorized",
|
|
|
|
|
"Web Scraping & Data Extraction"
|
|
|
|
|
]
|
|
|
|
|
}
|
2025-09-29 05:10:12 +04:00
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
text
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|
|
|
|
|
|
5. Category Mappings Endpoint
|
|
|
|
|
**URL:*
|
|
|
|
|
|
|
|
|
|
* `/api/category-mappings`
|
|
|
|
|
**Method:*
|
|
|
|
|
|
|
|
|
|
* GET
|
|
|
|
|
**Description:*
|
|
|
|
|
|
|
|
|
|
* Get complete mapping of workflow filenames to categories
|
|
|
|
|
|
|
|
|
|
**Response Structure:*
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
*
|
|
|
|
|
```text
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
json
|
2025-07-28 09:44:28 -05:00
|
|
|
{
|
|
|
|
|
"mappings": {
|
|
|
|
|
"0001_Telegram_Schedule_Automation_Scheduled.json": "Communication & Messaging",
|
|
|
|
|
"0002_Manual_Totp_Automation_Triggered.json": "Uncategorized",
|
|
|
|
|
"0003_Bitwarden_Automate.json": "Uncategorized",
|
|
|
|
|
"...": "...",
|
|
|
|
|
"workflow_filename.json": "Category Name"
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-09-29 05:10:12 +04:00
|
|
|
```text
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
text
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
**Total Mappings:*
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
* 2,055 filename-to-category mappings
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
#
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
##
|
|
|
|
|
|
|
|
|
|
6. Download Workflow Endpoint
|
|
|
|
|
**URL:*
|
|
|
|
|
|
|
|
|
|
* `/api/workflows/{filename}/download`
|
|
|
|
|
**Method:*
|
|
|
|
|
|
|
|
|
|
* GET
|
|
|
|
|
**Description:*
|
|
|
|
|
|
|
|
|
|
* Download the raw JSON file for a workflow
|
|
|
|
|
|
|
|
|
|
**Response:*
|
|
|
|
|
|
|
|
|
|
* Raw JSON workflow file with appropriate headers for download
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|
|
|
|
|
|
7. Workflow Diagram Endpoint
|
|
|
|
|
**URL:*
|
|
|
|
|
|
|
|
|
|
* `/api/workflows/{filename}/diagram`
|
|
|
|
|
**Method:*
|
|
|
|
|
|
|
|
|
|
* GET
|
|
|
|
|
**Description:*
|
|
|
|
|
|
|
|
|
|
* Generate a Mermaid diagram representation of the workflow
|
|
|
|
|
|
|
|
|
|
**Response Structure:*
|
|
|
|
|
|
|
|
|
|
*
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
json
|
2025-07-28 09:44:28 -05:00
|
|
|
{
|
|
|
|
|
"diagram": "graph TD\n node1[\"Node Name\\n(Type)\"]\n node1 --> node2\n ..."
|
|
|
|
|
}
|
2025-09-29 05:10:12 +04:00
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
text
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
#
|
|
|
|
|
|
|
|
|
|
# Usage Examples
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
## Get Business Process Automation Workflows
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
bash
|
2025-07-28 09:44:28 -05:00
|
|
|
|
|
|
|
|
# Step 1: Get category mappings
|
2025-09-29 05:10:12 +04:00
|
|
|
curl -s "<https://scan-might-updates-postage.trycloudflare.com/api/category-mappings"> \
|
2025-07-28 09:44:28 -05:00
|
|
|
| jq -r '.mappings | to_entries | map(select(.value == "Business Process Automation")) | .[].key'
|
|
|
|
|
|
|
|
|
|
# Step 2: For each filename, get details
|
2025-09-29 05:10:12 +04:00
|
|
|
curl -s "<https://scan-might-updates-postage.trycloudflare.com/api/workflows/{filename}"> \
|
2025-07-28 09:44:28 -05:00
|
|
|
| jq '.metadata'
|
2025-09-29 05:10:12 +04:00
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
text
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
## Search for Specific Workflows
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
bash
|
2025-07-28 09:44:28 -05:00
|
|
|
|
|
|
|
|
# Search for workflows containing "calendar"
|
2025-09-29 05:10:12 +04:00
|
|
|
curl -s "<https://scan-might-updates-postage.trycloudflare.com/api/workflows?q=calendar&per_page=50">
|
2025-07-28 09:44:28 -05:00
|
|
|
|
|
|
|
|
# Get only webhook-triggered workflows
|
2025-09-29 05:10:12 +04:00
|
|
|
curl -s "<https://scan-might-updates-postage.trycloudflare.com/api/workflows?trigger=Webhook&per_page=100">
|
2025-07-28 09:44:28 -05:00
|
|
|
|
|
|
|
|
# Get only active workflows
|
2025-09-29 05:10:12 +04:00
|
|
|
curl -s "<https://scan-might-updates-postage.trycloudflare.com/api/workflows?active_only=true&per_page=100">
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
text
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
## Pagination Through All Workflows
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
bash
|
2025-07-28 09:44:28 -05:00
|
|
|
|
|
|
|
|
# Get total pages
|
2025-09-29 05:10:12 +04:00
|
|
|
total_pages=$(curl -s "<https://scan-might-updates-postage.trycloudflare.com/api/workflows?per_page=100&page=1"> | jq '.pages')
|
2025-07-28 09:44:28 -05:00
|
|
|
|
|
|
|
|
# Loop through all pages
|
|
|
|
|
for page in $(seq 1 $total_pages); do
|
2025-09-29 05:10:12 +04:00
|
|
|
curl -s "<https://scan-might-updates-postage.trycloudflare.com/api/workflows?per_page=100&page=${page}">
|
2025-07-28 09:44:28 -05:00
|
|
|
done
|
2025-09-29 05:10:12 +04:00
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
text
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
# Rate Limiting and Best Practices
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
#
|
|
|
|
|
|
|
|
|
|
## Recommended Practices
|
2025-07-28 09:44:28 -05:00
|
|
|
|
|
|
|
|
- Use small delays between requests (0.05-0.1 seconds)
|
2025-09-29 05:10:12 +04:00
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
- Process in batches by category for better organization
|
2025-09-29 05:10:12 +04:00
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
- Handle JSON parsing errors gracefully
|
2025-09-29 05:10:12 +04:00
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
- Validate response structure before processing
|
|
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
#
|
|
|
|
|
|
|
|
|
|
## Performance Tips
|
|
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
- Use `per_page=100` for maximum efficiency
|
2025-09-29 05:10:12 +04:00
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
- Cache category mappings for multiple operations
|
2025-09-29 05:10:12 +04:00
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
- Process categories in parallel if needed
|
2025-09-29 05:10:12 +04:00
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
- Use jq for efficient JSON processing
|
|
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
#
|
|
|
|
|
|
|
|
|
|
# Error Handling
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
## Common Response Codes
|
2025-07-28 09:44:28 -05:00
|
|
|
|
|
|
|
|
- `200`: Success
|
2025-09-29 05:10:12 +04:00
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
- `404`: Workflow not found
|
2025-09-29 05:10:12 +04:00
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
- `500`: Server error
|
2025-09-29 05:10:12 +04:00
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
- `408`: Request timeout
|
|
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
#
|
|
|
|
|
|
|
|
|
|
## Error Response Structure
|
|
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
json
|
2025-07-28 09:44:28 -05:00
|
|
|
{
|
|
|
|
|
"error": "Error message",
|
|
|
|
|
"details": "Additional error details"
|
|
|
|
|
}
|
2025-09-29 05:10:12 +04:00
|
|
|
```text
|
|
|
|
|
|
|
|
|
|
text
|
|
|
|
|
|
|
|
|
|
#
|
2025-07-28 09:44:28 -05:00
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
# Data Quality Notes
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
## Known Issues
|
2025-07-28 09:44:28 -05:00
|
|
|
|
|
|
|
|
1. Some workflow names may be generic (e.g., "My workflow")
|
2025-09-29 05:10:12 +04:00
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
2. Integration names are extracted from node types and may vary in formatting
|
2025-09-29 05:10:12 +04:00
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
3. Descriptions are auto-generated and may not reflect actual workflow purpose
|
2025-09-29 05:10:12 +04:00
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
4. Active status indicates workflow configuration, not actual usage
|
|
|
|
|
|
2025-09-29 05:10:12 +04:00
|
|
|
#
|
|
|
|
|
|
|
|
|
|
## Data Reliability
|
|
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
- **File hashes**: Reliable for detecting changes
|
2025-09-29 05:10:12 +04:00
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
- **Node counts**: Accurate
|
2025-09-29 05:10:12 +04:00
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
- **Integration lists**: Generally accurate but may include core n8n components
|
2025-09-29 05:10:12 +04:00
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
- **Complexity ratings**: Based on node count (≤5: low, 6-15: medium, 16+: high)
|
2025-09-29 05:10:12 +04:00
|
|
|
|
2025-07-28 09:44:28 -05:00
|
|
|
- **Categories**: Human-curated and reliable
|