Skip to main content

HTTP

Accepts POSTed data directly to the Monad API endpoint.

Requirements

There are no Prerequisites to start using the HTTP input. Simply create an HTTP Input and attach it to a pipeline.

Details

The HTTP input is an extremely flexible method for ingesting data into the Monad platform. By creating an Http input, users can publish any data they wish to a pipeline without needing to have a specifically implemented input to support that data. This allows data to be sent via any programming language or even via curl as a starting point.

Sending data

Sending data to an Http input requires sending a POST request to the Monad API with the pipeline id with /api/v2/http/send/{pipeline_id} and a valid request body.

The request body accepts either:

  • A single JSON object
  • Multiple JSON objects in JSONL (JSON Lines) format - line-delimited JSON where each line is a separate JSON object

Each JSON object will be sent to the stream exactly as it is provided.

Authentication

All requests to the HTTP input endpoint require authentication using an organization API key with the pipeline:data:write permission.

API Key Requirements

The API key must meet the following requirements:

  • Must be an organization API key (not a personal API key)
  • Must have the pipeline:data:write permission, which is included by default in the following roles:
    • Contributor
    • System Administrator
  • Alternatively, the permission can be added to a custom role

Required Headers

You must include one of the following authentication headers:

  • Authorization: ApiKey <API_KEY>
  • x-api-key: <API_KEY>

The Content-Type header is not required, but if provided, it must be set to application/json.

Examples

cURL Example

curl --request POST \
--url https://app.monad.com/api/v2/http/send/<pipeline-id> \
--header 'authorization: ApiKey <api-key>' \
--data '
{
"event_type": "authentication",
"user": "admin@example.com",
"status": "success",
"timestamp": "2024-01-15T10:30:00Z"
}{
"event_type": "file_access",
"user": "user@example.com",
"file_path": "/sensitive/data.txt",
"timestamp": "2024-01-15T10:31:00Z"
}'

Python Example

import requests
import json

url = 'https://app.monad.com/api/v2/http/send/{pipeline_id}'
headers = {
'accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': 'ApiKey <API_KEY>',
}

# Line-delimited JSON records
data = '''{
"event_type": "authentication",
"user": "admin@example.com",
"status": "success",
"timestamp": "2024-01-15T10:30:00Z"
}{
"event_type": "file_access",
"user": "user@example.com",
"file_path": "/sensitive/data.txt",
"timestamp": "2024-01-15T10:31:00Z"
}'''

response = requests.post(url, headers=headers, data=data)
print(json.dumps(response.json(), indent=2))

Response Examples

Success Response (200)

{
"status": "success",
"count": 1
}

Error Responses

ResponseDescription
authorization requiredNo authentication header was provided
invalid JWTThe provided JWT token is invalid
failed to get api keyThe API key is no longer valid
access denied: this endpoint requires pipeline:data:writeThe API key lacks the required pipeline:data:write permission
error reading request bodyThe request body contains invalid JSON
An item of this type does not exist.The provided pipeline ID does not exist
pipeline not found or not an HTTP inputThe pipeline exists but is not configured as an HTTP input