Every accepted HTTP call to your endpoint becomes a request record with captured metadata. Its body is stored when payload and storage limits allow.
What gets captured
| Field | Description |
|---|---|
method | HTTP verb — GET, POST, PUT, PATCH, DELETE, etc. |
headers | All request headers as a JSON object |
query | Parsed query string parameters |
content_type | Value of the Content-Type header, if present |
body_size_bytes | Size of the raw body in bytes |
source_ip | Sender’s IP address |
created_at | UTC timestamp when the request arrived |
Request content is encrypted at rest and isolated to your organization.
What doesn’t get captured
- Response bodies from your forward target (only status code and timing)
- Requests to paused endpoints (rejected before capture)
- Bodies exceeding your plan’s payload limit (rejected with
413)
Viewing requests
Dashboard
The endpoint detail page shows a live stream of incoming requests, newest first. Click any row to open the full inspector with headers, query, and body panels.
New requests appear automatically, usually within about a second, without refreshing.
API
List requests for an endpoint:
curl -s "https://api.hookdeploy.dev/v1/endpoints/ENDPOINT_ID/requests?limit=10" \
-H "Authorization: Bearer hd_live_YOUR_KEY"
Get a single request:
curl -s "https://api.hookdeploy.dev/v1/endpoints/ENDPOINT_ID/requests/REQUEST_ID" \
-H "Authorization: Bearer hd_live_YOUR_KEY"
The detail endpoint returns the body when it was stored and the caller is authorized. List responses omit bodies; use the single-request route for full captured content.
Retention
Requests are automatically deleted after the retention period for your plan. Retention is measured from created_at.
| Plan | Retention |
|---|---|
| Free | 7 days |
| Starter | 30 days |
| Team | 90 days |
| Enterprise | 365 days |
There is no manual “archive” — plan your replays and exports before retention expires. Enterprise retains request history for 365 days.
Payload limits
Each plan caps the maximum request body size at ingestion time. Bodies larger than the limit are rejected before storage:
HTTP/1.1 413 Payload Too Large
Content-Type: application/json
{"error":"payload too large"}
The sender receives 413. Nothing is stored.
| Plan | Max payload |
|---|---|
| Free | 256 KB |
| Starter | 1 MB |
| Team | 25 MB |
| Enterprise | 100 MB |
Monthly request usage
Each organization has monthly request capacity metered across all endpoints:
| Plan | Requests/month |
|---|---|
| Free | 5,000 |
| Starter | 15,000 |
| Team | 100,000 |
| Enterprise | 1,000,000 |
The monthly counter is metering information, not itself a hard ingestion gate. Protective ingestion controls can return 429 Too Many Requests when necessary. Check current usage in the dashboard under Billing or via GET /v1/usage; monthly usage resets at the start of the next calendar month (UTC).
Forward metadata
If auto-forwarding is enabled, each request record includes forward attempt details:
| Field | Description |
|---|---|
forward_url | URL the request was forwarded to |
forward_attempted_at | When the forward was attempted |
forward_status_code | HTTP status from your server |
forward_response_time_ms | Round-trip time in milliseconds |
forward_error | Error message if the forward failed (timeout, DNS, etc.) |
Forward failure does not affect the 200 response to the original sender.
Deleting requests
Individual request deletion requires the requests.delete permission (admin and super admin only). Deleting an endpoint cascades and removes all its requests.
Next steps
- Forwarding — Auto-proxy behavior and latency
- Replay — Re-send captured requests on demand
- Requests API — List and paginate via the REST API