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

  1. Log in to your Qorrelate dashboard
  2. Navigate to Settings → API Keys
  3. Click Create New Key
  4. 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

POST

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
}
POST

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
          }
        }]
      }]
    }]
  }'
POST

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 }
        }]
      }]
    }]
  }'
GET

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"
GET

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.

GET

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
GET

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.

POST

Create API Key

POST /v1/organizations/{organization_id}/api-keys

Request Body

{
  "name": "Production Key",
  "expires_days": 365  // optional, null = never expires
}
GET

List API Keys

GET /v1/organizations/{organization_id}/api-keys
DELETE

Revoke API Key

DELETE /v1/organizations/{organization_id}/api-keys/{key_name}

Organizations

Manage organizations, members, and invitations.

GET

Get Current Organization

GET /v1/organizations/me
GET

List Organization Members

GET /v1/organizations/{organization_id}/members
POST

Invite Member

POST /v1/organizations/{organization_id}/invitations
GET

Get Usage Statistics

GET /v1/organizations/{organization_id}/usage

Alerts

Configure alerts based on log patterns, metric thresholds, or trace conditions.

POST

Create Alert

POST /v1/organizations/{organization_id}/alerts
GET

List Alerts

GET /v1/organizations/{organization_id}/alerts
PUT

Update Alert

PUT /v1/organizations/{organization_id}/alerts/{alert_id}
POST

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.