> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hitl.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Make Integration

> Build powerful visual automation scenarios with Make.com and HITL.sh, featuring real-time webhook triggers and advanced routing

# Make Integration

Integrate HITL.sh with Make.com (formerly Integromat) to create sophisticated automation scenarios with visual workflow design and real-time webhook triggers.

<Note>
  Before configuring Make, install the HITL.sh mobile app ([App Store](https://apps.apple.com/us/app/hitl-human-in-the-loop/id6752878072) | [Google Play](https://play.google.com/store/apps/details?id=hitl.sh.app)) since it's an integral part of the setup.
</Note>

<Frame>
  <img src="https://mintcdn.com/hitl/jwtPbPwD0u9j8zRm/images/integrations/make-pics/google-forms-submission.png?fit=max&auto=format&n=jwtPbPwD0u9j8zRm&q=85&s=48fb0a15e1c005d3c20e323e46eee7e8" alt="Make.com scenario with HITL.sh and Google Forms" width="3086" height="1400" data-path="images/integrations/make-pics/google-forms-submission.png" />
</Frame>

## Why Use Make with HITL.sh?

<CardGroup cols={2}>
  <Card title="Visual Scenario Builder" icon="diagram-project">
    Design complex automation with an intuitive drag-and-drop visual interface
  </Card>

  <Card title="Real-Time Webhooks" icon="bolt">
    Unique webhook trigger module for instant notifications when reviews complete
  </Card>

  <Card title="Advanced Data Mapping" icon="code">
    Powerful data transformation and mapping between services
  </Card>

  <Card title="1,000+ App Integrations" icon="plug">
    Connect with Google Workspace, databases, CRMs, and countless other services
  </Card>
</CardGroup>

## Available Modules

HITL.sh provides four powerful modules in Make.com:

<AccordionGroup>
  <Accordion title="Create Request">
    Submit content for human review:

    **Use Cases:**

    * Content moderation workflows
    * Approval processes
    * Quality assurance checks
    * Escalation routing

    **Required Fields:**

    * Loop ID
    * Request Text
    * Response Type
    * Response Config

    **Optional Fields:**

    * Processing Type
    * Priority
    * Timeout
    * Context
    * Callback URL
  </Accordion>

  <Accordion title="Get Request Status">
    Retrieve current status and response data:

    **Use Cases:**

    * Polling for completed reviews
    * Status monitoring
    * Progress tracking
    * Data synchronization

    **Required Fields:**

    * Request ID

    **Returns:**

    * Status (pending, completed, timeout, cancelled)
    * Response data
    * Reviewer information
    * Timestamps
  </Accordion>

  <Accordion title="Make an API Call">
    Direct access to HITL.sh API endpoints:

    **Use Cases:**

    * Advanced custom operations
    * Loop management
    * Bulk operations
    * Custom integrations

    **Features:**

    * Full API access
    * Custom headers
    * Query parameters
    * Request body customization
  </Accordion>

  <Accordion title="Watch Responses (Webhook)">
    Real-time trigger when requests complete:

    **Use Cases:**

    * Instant notification workflows
    * Real-time dashboards
    * Immediate action routing
    * Live status updates

    **Advantages:**

    * No polling required
    * Instant execution
    * Lower operation usage
    * Better performance

    <Warning>
      This is a unique feature not available in other integration platforms!
    </Warning>
  </Accordion>
</AccordionGroup>

## Module Comparison

Choose the right module for your use case:

| Feature               | Create Request    | Get Status     | API Call     | Watch Responses    |
| --------------------- | ----------------- | -------------- | ------------ | ------------------ |
| **Submit Reviews**    | ✅                 | ❌              | ✅            | ❌                  |
| **Check Status**      | ❌                 | ✅              | ✅            | ✅                  |
| **Real-Time**         | ❌                 | ❌              | ❌            | ✅                  |
| **Custom Operations** | ❌                 | ❌              | ✅            | ❌                  |
| **Ease of Use**       | Easy              | Easy           | Advanced     | Medium             |
| **Best For**          | Creating requests | Status polling | Advanced use | Real-time triggers |

## Setting Up Authentication

Connect your HITL.sh account to Make:

<Steps>
  <Step title="Add HITL.sh Module">
    Add any HITL.sh module to your scenario
  </Step>

  <Step title="Create Connection">
    Click "Add" next to the Connection field

    <Frame>
      <img src="https://mintcdn.com/hitl/jwtPbPwD0u9j8zRm/images/integrations/make-pics/authentication-connection.png?fit=max&auto=format&n=jwtPbPwD0u9j8zRm&q=85&s=f1e0381dd228e885aee2a7ff0ef3177d" alt="Setting up HITL.sh connection in Make" width="563" height="413" data-path="images/integrations/make-pics/authentication-connection.png" />
    </Frame>
  </Step>

  <Step title="Enter API Key">
    1. Go to your [HITL.sh dashboard](https://my.hitl.sh)
    2. Navigate to Settings → API Keys
    3. Copy your API key
    4. Paste it into the Make connection dialog
  </Step>

  <Step title="Save & Test">
    Save the connection and test with a simple scenario
  </Step>
</Steps>

## Module Configuration

### Create Request Module

<Frame>
  <img src="https://mintcdn.com/hitl/jwtPbPwD0u9j8zRm/images/integrations/make-pics/create-request.png?fit=max&auto=format&n=jwtPbPwD0u9j8zRm&q=85&s=904f1269b31e60521d051da65836ec30" alt="Create Request module configuration in Make" width="560" height="954" data-path="images/integrations/make-pics/create-request.png" />
</Frame>

**Configuration Fields:**

<ParamField body="Loop ID" type="string" required>
  Your HITL loop identifier from the dashboard
</ParamField>

<ParamField body="Request Text" type="string" required>
  Content or question for reviewers to evaluate
</ParamField>

<ParamField body="Response Type" type="select" required>
  text | single\_select | multi\_select | rating | number | boolean
</ParamField>

<ParamField body="Response Config" type="json" required>
  JSON configuration for the response type
</ParamField>

<ParamField body="Processing Type" type="select">
  time-sensitive (default) | deferred
</ParamField>

<ParamField body="Priority" type="select">
  low | medium (default) | high | critical
</ParamField>

<ParamField body="Timeout Seconds" type="number">
  60-86400 seconds (required for time-sensitive)
</ParamField>

<ParamField body="Default Response" type="varies">
  Fallback value matching response type format
</ParamField>

<ParamField body="Context" type="json">
  Additional metadata as JSON object
</ParamField>

### Get Request Status Module

<Frame>
  <img src="https://mintcdn.com/hitl/jwtPbPwD0u9j8zRm/images/integrations/make-pics/get-request-status.png?fit=max&auto=format&n=jwtPbPwD0u9j8zRm&q=85&s=6fea4f65650c3e70a911b6c5f65325b6" alt="Get Request Status module configuration in Make" width="1056" height="626" data-path="images/integrations/make-pics/get-request-status.png" />
</Frame>

**Configuration Fields:**

<ParamField body="Request ID" type="string" required>
  The ID returned when creating a request
</ParamField>

**Returns:**

```json theme={null}
{
  "request_id": "65f1234567890abcdef12348",
  "status": "completed",
  "priority": "high",
  "response_data": "approve",
  "response_by_user": {
    "id": "65f1234567890abcdef12350",
    "name": "John Reviewer",
    "email": "john@example.com"
  },
  "response_time_seconds": 145.5,
  "created_at": "2024-03-15T10:30:00Z",
  "updated_at": "2024-03-15T10:32:25Z"
}
```

### Make an API Call Module

<Frame>
  <img src="https://mintcdn.com/hitl/jwtPbPwD0u9j8zRm/images/integrations/make-pics/make-api-call.png?fit=max&auto=format&n=jwtPbPwD0u9j8zRm&q=85&s=809498fbeed6a0434e03468c1f9c9cde" alt="Make an API Call module for advanced operations" width="1106" height="1948" data-path="images/integrations/make-pics/make-api-call.png" />
</Frame>

**Use this for:**

* Custom API operations
* Loop management (create, update, delete)
* Batch operations
* Advanced queries

**Example - List All Loops:**

```
URL: /api/loops
Method: GET
Headers: Authorization: Bearer {{API_KEY}}
```

**Example - Cancel Request:**

```
URL: /api/requests/{{request_id}}
Method: DELETE
Headers: Authorization: Bearer {{API_KEY}}
```

### Watch Responses Module (Webhook Trigger)

<Frame>
  <img src="https://mintcdn.com/hitl/jwtPbPwD0u9j8zRm/images/integrations/make-pics/Trigger-Module.png?fit=max&auto=format&n=jwtPbPwD0u9j8zRm&q=85&s=1b0637ec841fc7aa32e31338b9ce75f9" alt="Watch Responses webhook trigger module" width="3100" height="1574" data-path="images/integrations/make-pics/Trigger-Module.png" />
</Frame>

**How it Works:**

<Steps>
  <Step title="Add Webhook Module">
    Add "HITL.sh > Watch Responses" as your scenario trigger
  </Step>

  <Step title="Copy Webhook URL">
    Make generates a unique webhook URL for this scenario
  </Step>

  <Step title="Configure in HITL Request">
    When creating requests, include the webhook URL as callback\_url
  </Step>

  <Step title="Automatic Triggering">
    Scenario automatically runs when reviewer completes the request
  </Step>
</Steps>

**Webhook Payload:**

```json theme={null}
{
  "event": "request.completed",
  "request_id": "65f1234567890abcdef12348",
  "loop_id": "65f1234567890abcdef12345",
  "status": "completed",
  "response_data": "approve",
  "response_by_user": {
    "id": "65f1234567890abcdef12350",
    "name": "Sarah Reviewer",
    "email": "sarah@example.com"
  },
  "response_time_seconds": 127.5,
  "timestamp": "2024-03-15T10:32:25Z"
}
```

## Supported Response Types

### Text Response

```json theme={null}
{
  "response_type": "text",
  "response_config": {
    "placeholder": "Enter feedback...",
    "min_length": 10,
    "max_length": 1000,
    "required": true
  }
}
```

**Returns:** String value

### Single Select

```json theme={null}
{
  "response_type": "single_select",
  "response_config": {
    "options": ["Approve", "Reject", "Revise"]
  }
}
```

**Returns:** Single string value (e.g., "approve")

### Multi Select

```json theme={null}
{
  "response_type": "multi_select",
  "response_config": {
    "options": ["Accuracy", "Tone", "Grammar"],
    "max_selections": 3
  }
}
```

**Returns:** Array of strings (e.g., \["accuracy", "grammar"])

### Rating

```json theme={null}
{
  "response_type": "rating",
  "response_config": {
    "scale_min": 1,
    "scale_max": 10,
    "scale_step": 0.5
  }
}
```

**Returns:** Number value (e.g., 7.5)

### Number

```json theme={null}
{
  "response_type": "number",
  "response_config": {
    "min_value": 0,
    "max_value": 1000,
    "decimal_places": 2
  }
}
```

**Returns:** Number value (e.g., 149.99)

### Boolean

```json theme={null}
{
  "response_type": "boolean",
  "response_config": {
    "true_label": "Yes, Approved",
    "false_label": "No, Rejected"
  }
}
```

**Returns:** Boolean value (true/false)

## Example Scenarios

### Google Forms Approval Workflow

**Scenario Flow:**

1. **Trigger:** New Google Forms Response
2. **Filter:** Check if requires approval
3. **HITL Create Request:** Send for human review
4. **Router:** Route based on response
   * Approved → Update Google Sheet, Send email
   * Rejected → Archive response, Notify submitter
   * Escalate → Create ticket, Notify manager

### Real-Time Content Moderation

**Scenario Flow (using Webhook):**

1. **Trigger:** HITL Watch Responses (Webhook)
2. **Switch:** Based on response\_data
   * "approve" → Post to social media, Log to database
   * "reject" → Send rejection notice, Archive content
   * "flag" → Create moderation ticket, Alert team

### Customer Support Escalation

**Scenario Flow:**

1. **Trigger:** New Zendesk Ticket
2. **Filter:** Priority = High or Urgent
3. **HITL Create Request:** Route to support manager
4. **Wait for Response:** Poll status every 5 minutes
5. **Action:** Based on decision
   * Assign to specialist team
   * Escalate to executive
   * Resolve with template

## Advanced Techniques

### Data Transformation

Map form data to HITL request format:

```javascript theme={null}
// Set multiple variables
{
  "loop_id": "{{1.loop_id}}",
  "request_text": formatString(
    "Review submission from {name}\nEmail: {email}\nMessage: {message}",
    {{1.name}},
    {{1.email}},
    {{1.message}}
  ),
  "priority": {{1.amount}} > 1000 ? "high" : "medium"
}
```

### Conditional Routing

Use routers to handle different response types:

```
Router
├─ Path 1: response_data = "approve"
│  └─ Send approval email
│  └─ Update CRM
│  └─ Post to Slack
│
├─ Path 2: response_data = "reject"
│  └─ Send rejection notice
│  └─ Archive submission
│
└─ Path 3: response_data = "escalate"
   └─ Create high-priority ticket
   └─ Notify management
   └─ Schedule follow-up
```

### Error Handling

Add error handlers to your scenarios:

<Steps>
  <Step title="Enable Error Handling">
    Right-click any module → Add error handler
  </Step>

  <Step title="Configure Fallback">
    Choose action: Ignore, Resume, Commit, or Rollback
  </Step>

  <Step title="Add Notification">
    Send error notifications to your team
  </Step>
</Steps>

## Best Practices

<CardGroup cols={2}>
  <Card title="Use Webhooks" icon="bolt">
    Prefer Watch Responses over polling Get Status for better performance
  </Card>

  <Card title="Data Validation" icon="shield-check">
    Validate data before sending to HITL to prevent errors
  </Card>

  <Card title="Error Handling" icon="triangle-exclamation">
    Always add error handlers to critical modules
  </Card>

  <Card title="Test Thoroughly" icon="flask">
    Run scenarios with test data before activating
  </Card>
</CardGroup>

## Troubleshooting

<AccordionGroup>
  <Accordion title="Connection Failed">
    **Solution:**

    * Verify API key is correct
    * Check API key permissions
    * Regenerate API key if needed
    * Test connection with simple request
  </Accordion>

  <Accordion title="Invalid Response Config">
    **Solution:**

    * Verify JSON syntax is correct
    * Match response\_config to response\_type
    * Check required fields are present
    * Review example configurations above
  </Accordion>

  <Accordion title="Webhook Not Triggering">
    **Solution:**

    * Verify webhook URL in callback\_url
    * Check webhook is active in Make
    * Test with manual webhook call
    * Review Make scenario execution logs
  </Accordion>

  <Accordion title="Request Timeout">
    **Solution:**

    * Increase timeout\_seconds value
    * Verify loop has active reviewers
    * Check notification settings
    * Consider using deferred processing
  </Accordion>
</AccordionGroup>

## Pricing & Operations

<Note>
  Each module execution counts as one operation. Using webhooks (Watch Responses) is more efficient than polling (Get Status) as it only triggers when there's actual data.
</Note>

## Next Steps

<CardGroup cols={2}>
  <Card title="n8n Integration" icon="workflow" href="/integrations/n8n">
    Explore n8n for open-source automation
  </Card>

  <Card title="Zapier Integration" icon="zap" href="/integrations/zapier">
    Learn about Zapier for simpler workflows
  </Card>

  <Card title="API Reference" icon="code" href="/api-reference/requests/create-request">
    View complete API documentation
  </Card>

  <Card title="Community" icon="users" href="https://discord.gg/jYVrpmnMP9">
    Join Discord for scenario templates and support
  </Card>
</CardGroup>
