IngestAPI Reference
Ship JSON logs from any runtime, shipper, or sidecar to one HTTPS endpoint. We tie them back to entities and incidents so SREs see what actually happened, not just lines in a file.
Ingest API keys are managed inside your Tech Guys 2 Go portal. Use separate keys per service or environment and rotate immediately if exposed.
- Portal → Settings → Ingest / Logs
- Create a key per app or pipeline
- Use it as your X-TG2G-Api-Key header
Endpoint, headers & basic JSON shape
Logs are sent in batches. Each request can optionally describe the entity (service, host, function, etc.) the logs belong to, plus an array of individual log records.
POST to:
https://ingest.techguys2go.com/v1/logsRequired headers:
X-TG2G-Api-Key: <YOUR_INGEST_API_KEY>
Content-Type: application/jsonUse a different ingest key per service or environment so you can rotate quickly without impacting everything.
{
"source": "checkout-service",
"entity": {
"name": "checkout-service",
"kind": "service",
"tags": ["prod", "payments"]
},
"logs": [
{
"timestamp": "2024-01-01T12:00:00Z",
"level": "error",
"message": "Payment gateway timeout",
"requestId": "abc-123",
"region": "us-east-1"
},
{
"timestamp": "2024-01-01T12:00:03Z",
"level": "info",
"message": "Retry succeeded",
"requestId": "abc-123"
}
]
}Required: message on each log record. Optional: timestamp, level, and any other fields (stored as metadata and searchable later).
Field reference
| Field | Type | Required | Description |
|---|---|---|---|
| source | string | Recommended | Logical source of logs (e.g. checkout-service, fluent-bit, node-sidecar). |
| entity | object | Optional | Ties logs to a specific entity in your estate (service, host, job, function). Helps correlate logs with incidents. |
| entity.name | string | Recommended | The name of the service / component, e.g. checkout-service. |
| entity.kind | string | Optional | Free-form type like service, host, job, etc. |
| entity.tags | string[] | Optional | Tags that help slice logs (env, team, region, feature). |
| logs | array | Required | Array of individual log records for this request. |
| logs[].message | string | Required | Human-readable message. This is the only required field per log record. |
| logs[].timestamp | ISO 8601 string | Optional | When the event occurred. If omitted, the ingest time is used. |
| logs[].level | string | Optional | Any level you use (e.g. info, warn, error). |
| logs[].anything_else | any | Optional | Any custom fields (requestId, region, userId, featureFlag, etc.). Stored in metadata and available for search/filters. |
You don't need to reshape your entire schema — send what you have today. We'll preserve extra fields and make them queryable.
Plug in your existing log shippers
No special agent required. Point your existing log forwarder at our HTTPS endpoint with the header X-TG2G-Api-Key, and wrap records in the source /logs shape shown above.
Replace <YOUR_INGEST_API_KEY> with a key from your portal. You can also swap source / entity names to match your services.
POST https://ingest.techguys2go.com/v1/logs
X-TG2G-Api-Key: <YOUR_INGEST_API_KEY>
Content-Type: application/json
{
"source": "checkout-service",
"entity": {
"name": "checkout-service",
"kind": "service",
"tags": ["prod", "payments"]
},
"logs": [
{
"timestamp": "2024-01-01T12:00:00Z",
"level": "error",
"message": "Payment gateway timeout",
"requestId": "abc-123",
"region": "us-east-1"
},
{
"timestamp": "2024-01-01T12:00:03Z",
"level": "info",
"message": "Retry succeeded",
"requestId": "abc-123"
}
]
}
For more complex shapes, you can use filters (Lua, remap, processors) at the shipper layer to emit { "source": "...", "logs": [ ... ] } per request. Everything else stays the same: POST to https://ingest.techguys2go.com/v1/logs with your ingest key.
Want to pair on wiring logs into incidents?
We can help you go from "logs in a bucket" to incident-aware logging — tied to entities, SLOs, and real SRE workflows.