# HTTP & Integration Nodes

Nodes for communicating with external services.

---

## HTTP Request

Makes HTTP requests to external APIs and services. Includes SSRF (Server-Side Request Forgery) protection to prevent requests to internal network addresses.

**Category:** HTTP & Integration

### Configuration

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| **url** | String | Yes | — | The URL to request |
| **method** | String | No | `GET` | HTTP method: `GET`, `POST`, `PUT`, `DELETE`, `PATCH`, `HEAD`, `OPTIONS` |
| **timeout** | Number | No | 30 | Request timeout in seconds (1-300) |
| **follow_redirects** | Boolean | No | true | Whether to follow HTTP redirects |
| **allow_internal_requests** | Boolean | No | false | Allow requests to internal/private network addresses |

### Input Ports

| Port | Type | Description |
|------|------|-------------|
| **url** | String | Dynamic URL (overrides configuration) |
| **headers** | Object | HTTP headers as key-value pairs (e.g., `{"Authorization": "Bearer token123"}`) |
| **body** | Mixed | Request body (for POST, PUT, PATCH) |

### Output Ports

| Port | Type | Description |
|------|------|-------------|
| **status_code** | Number | HTTP response status code (e.g., 200, 404, 500) |
| **headers** | Object | Response headers |
| **body** | String | Response body as text |
| **json** | Object | Response body parsed as JSON (if applicable) |
| **url** | String | The URL that was requested |
| **method** | String | The HTTP method used |
| **request_time** | Number | Request duration in milliseconds |

### Example: Call an External API

1. Set **url** to `https://api.example.com/data`
2. Set **method** to `GET`
3. Add headers if needed (e.g., API key)
4. Connect the **json** output to a Data Extractor to pull out specific fields

### Tips

- Use **Data Extractor** or **Data Shaper** after HTTP Request to extract specific fields from the response.
- For APIs requiring authentication, pass the API key or token via the **headers** input port.
- The **json** output port automatically parses JSON responses. If the response is not valid JSON, use the **body** output (raw text) instead.
- Set a reasonable **timeout** for slow external APIs to avoid blocking the workflow.
