Qorrelate API
The Qorrelate API enables you to send logs, metrics, and traces using the OpenTelemetry Protocol (OTLP), query your observability data, and manage your organization's settings programmatically.
OpenTelemetry Native
Our APIs are fully compatible with the OpenTelemetry Protocol. You can use any OTLP-compatible SDK or exporter to send data to Qorrelate.
Authentication
All API requests require authentication using an API key. Include your API key in the
Authorization header.
# Using Authorization header (recommended) curl -X POST https://api.qorrelate.io/v1/logs \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '...'
Obtaining an API Key
- Log in to your Qorrelate dashboard
- Navigate to Settings → API Keys
- Click Create New Key
- Copy and securely store your API key
Keep Your API Key Secure
Never commit API keys to source control or share them publicly. Use environment variables or secrets management tools to store them securely.
Base URL
All API requests should be made to:
https://api.qorrelate.io
| Environment | Base URL |
|---|---|
| Production | https://api.qorrelate.io |
| Staging | https://api.wartime.live |
Rate Limits
API requests are subject to rate limiting to ensure fair usage and platform stability.
| Endpoint Type | Rate Limit |
|---|---|
| Ingestion (logs, metrics, traces) | 10,000 requests/minute |
| Query APIs | 1,000 requests/minute |
| Management APIs | 100 requests/minute |
Rate limit headers are included in all responses: X-RateLimit-Limit,
X-RateLimit-Remaining, X-RateLimit-Reset
Ingest Logs
Send logs to Qorrelate using the OTLP format. Supports both JSON and Protobuf encoding, with optional gzip compression.
POST /v1/logs
Request Headers
| Header | Value | Required |
|---|---|---|
Authorization |
Bearer YOUR_API_KEY | Yes |
Content-Type |
application/json or application/x-protobuf | Yes |
Content-Encoding |
gzip (optional) | No |
Example Request
curl -X POST https://api.qorrelate.io/v1/logs \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "resourceLogs": [{ "resource": { "attributes": [ { "key": "service.name", "value": { "stringValue": "my-service" } }, { "key": "service.version", "value": { "stringValue": "1.0.0" } } ] }, "scopeLogs": [{ "scope": { "name": "my-logger" }, "logRecords": [{ "timeUnixNano": "1702000000000000000", "severityText": "INFO", "body": { "stringValue": "User login successful" }, "attributes": [ { "key": "user.id", "value": { "stringValue": "user-123" } } ] }] }] }] }'
Response
{
"status": "success",
"logs_ingested": 1
}
Ingest Metrics
Send metrics to Qorrelate using the OTLP format. Supports gauges, counters, histograms, and summaries.
POST /v1/metrics
Example Request
curl -X POST https://api.qorrelate.io/v1/metrics \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "resourceMetrics": [{ "resource": { "attributes": [ { "key": "service.name", "value": { "stringValue": "my-service" } } ] }, "scopeMetrics": [{ "scope": { "name": "my-meter" }, "metrics": [{ "name": "http_requests_total", "description": "Total HTTP requests", "unit": "1", "sum": { "dataPoints": [{ "timeUnixNano": "1702000000000000000", "asInt": "100", "attributes": [ { "key": "method", "value": { "stringValue": "GET" } }, { "key": "status", "value": { "stringValue": "200" } } ] }], "isMonotonic": true } }] }] }] }'
Ingest Traces
Send distributed traces to Qorrelate using the OTLP format. Full support for spans, events, and links.
POST /v1/traces
Example Request
curl -X POST https://api.qorrelate.io/v1/traces \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "resourceSpans": [{ "resource": { "attributes": [ { "key": "service.name", "value": { "stringValue": "api-gateway" } } ] }, "scopeSpans": [{ "scope": { "name": "my-tracer" }, "spans": [{ "traceId": "5b8aa5a2d2c872e8321cf37308d69df2", "spanId": "051581bf3cb55c13", "name": "GET /api/users", "kind": 2, "startTimeUnixNano": "1702000000000000000", "endTimeUnixNano": "1702000000050000000", "attributes": [ { "key": "http.method", "value": { "stringValue": "GET" } }, { "key": "http.status_code", "value": { "intValue": "200" } } ], "status": { "code": 1 } }] }] }] }'
Search Logs
Search and filter logs using a powerful query language. Supports full-text search, field filters, and time ranges.
GET /v1/logs/search
Query Parameters
| Parameter | Type | Description |
|---|---|---|
query |
string | Search query (supports field:value syntax) |
severity |
string | Filter by severity (ERROR, WARN, INFO, DEBUG) |
service_name |
string | Filter by service name |
start_time |
string | Start time (ISO 8601 format) |
end_time |
string | End time (ISO 8601 format) |
limit |
integer | Maximum results (default: 100) |
use_regex |
boolean | Enable regex pattern matching |
Query Language Examples
error
— Find logs containing "error"
service.name:api-gateway AND severity:ERROR
— Field-specific search with AND
status_code>500
— Numeric comparison
attr.user.id:user-123
— Search in custom attributes
Example Request
curl -G https://api.qorrelate.io/v1/logs/search \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "query=service.name:api-gateway AND severity:ERROR" \ --data-urlencode "start_time=2024-01-01T00:00:00Z" \ --data-urlencode "limit=50"
Search Traces
Search for traces by service name, operation, duration, and more. Returns matching trace summaries.
GET /v1/traces/search
Query Parameters
| Parameter | Type | Description |
|---|---|---|
service |
string | Filter by service name |
operation |
string | Filter by operation/span name |
min_duration |
string | Minimum duration (e.g., "100ms", "1s") |
max_duration |
string | Maximum duration |
start_time |
string | Start time (ISO 8601) |
end_time |
string | End time (ISO 8601) |
Get Trace by ID
GET /v1/traces/{trace_id}
Returns all spans for a specific trace ID.
Query Metrics
Query metrics using PromQL-compatible syntax. Supports both instant queries and range queries.
Instant Query
GET /api/v1/query?query={promql}
Range Query
GET /api/v1/query_range?query={promql}&start={start}&end={end}&step={step}
Example Request
curl -G https://api.qorrelate.io/api/v1/query_range \ -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "query=rate(http_requests_total[5m])" \ --data-urlencode "start=2024-01-01T00:00:00Z" \ --data-urlencode "end=2024-01-01T01:00:00Z" \ --data-urlencode "step=60s"
List Available Metrics
GET /v1/metrics/list
Service Map
Get service dependency information derived from trace data. Shows how services communicate with each other.
GET /v1/service-map
Query Parameters
| Parameter | Type | Description |
|---|---|---|
start_time |
string | Start of time range (ISO 8601) |
end_time |
string | End of time range (ISO 8601) |
API Keys
Manage API keys for your organization. API keys are used for authentication when ingesting telemetry data.
Create API Key
POST /v1/organizations/{organization_id}/api-keys
Request Body
{
"name": "Production Key",
"expires_days": 365 // optional, null = never expires
}
List API Keys
GET /v1/organizations/{organization_id}/api-keys
Revoke API Key
DELETE /v1/organizations/{organization_id}/api-keys/{key_name}
Organizations
Manage organizations, members, and invitations.
Get Current Organization
GET /v1/organizations/me
List Organization Members
GET /v1/organizations/{organization_id}/members
Invite Member
POST /v1/organizations/{organization_id}/invitations
Get Usage Statistics
GET /v1/organizations/{organization_id}/usage
Alerts
Configure alerts based on log patterns, metric thresholds, or trace conditions.
Create Alert
POST /v1/organizations/{organization_id}/alerts
List Alerts
GET /v1/organizations/{organization_id}/alerts
Update Alert
PUT /v1/organizations/{organization_id}/alerts/{alert_id}
Add Notification Destination
POST /v1/organizations/{organization_id}/notification-destinations
Supported destinations: Slack, Email, PagerDuty, Webhook
OpenTelemetry Integration
Qorrelate is fully compatible with OpenTelemetry. Configure your OTLP exporters to send data directly to our endpoints.
OTLP Exporter Configuration
# Environment variables for OTLP exporters OTEL_EXPORTER_OTLP_ENDPOINT="https://api.qorrelate.io" OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer YOUR_API_KEY" OTEL_EXPORTER_OTLP_PROTOCOL="http/protobuf"
Python Example
from opentelemetry import trace from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor # Configure the exporter exporter = OTLPSpanExporter( endpoint="https://api.qorrelate.io/v1/traces", headers={"Authorization": "Bearer YOUR_API_KEY"} ) # Set up the tracer provider provider = TracerProvider() provider.add_span_processor(BatchSpanProcessor(exporter)) trace.set_tracer_provider(provider) # Get a tracer and create spans tracer = trace.get_tracer("my-service") with tracer.start_as_current_span("my-operation"): # Your code here pass
Qorrelate CLI
Use the Qorrelate CLI for zero-code instrumentation and easy setup.
Installation
curl -sSL https://install.qorrelate.io | bash
Initialize
qorrelate init --token YOUR_API_KEY
Run Your Application
# Zero-code instrumentation for any application
qorrelate run python app.py
qorrelate run node server.js
qorrelate run java -jar myapp.jar
Need Help?
Our team is here to help you get started with Qorrelate.