Upload log chunk
curl --request POST \
--url https://logging.monolisk.co/upstream \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"jobId": "job-123",
"jobMeta": {
"jobType": "build",
"gameId": "game-456",
"placeId": 789,
"placeName": "Main Place",
"startTime": "2025-01-01T00:00:00Z",
"runtime": 5000
},
"groups": {
"group1": {
"id": "group1",
"name": "Build Process",
"format": {
"color": [
0,
255,
0
],
"bold": true
}
}
},
"messages": [
{
"groupId": "group1",
"content": "Starting build process...",
"time": 1704067200000,
"type": "info"
}
]
}
'import requests
url = "https://logging.monolisk.co/upstream"
payload = {
"jobId": "job-123",
"jobMeta": {
"jobType": "build",
"gameId": "game-456",
"placeId": 789,
"placeName": "Main Place",
"startTime": "2025-01-01T00:00:00Z",
"runtime": 5000
},
"groups": { "group1": {
"id": "group1",
"name": "Build Process",
"format": {
"color": [0, 255, 0],
"bold": True
}
} },
"messages": [
{
"groupId": "group1",
"content": "Starting build process...",
"time": 1704067200000,
"type": "info"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
jobId: 'job-123',
jobMeta: {
jobType: 'build',
gameId: 'game-456',
placeId: 789,
placeName: 'Main Place',
startTime: '2025-01-01T00:00:00Z',
runtime: 5000
},
groups: {
group1: {id: 'group1', name: 'Build Process', format: {color: [0, 255, 0], bold: true}}
},
messages: [
{
groupId: 'group1',
content: 'Starting build process...',
time: 1704067200000,
type: 'info'
}
]
})
};
fetch('https://logging.monolisk.co/upstream', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://logging.monolisk.co/upstream",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'jobId' => 'job-123',
'jobMeta' => [
'jobType' => 'build',
'gameId' => 'game-456',
'placeId' => 789,
'placeName' => 'Main Place',
'startTime' => '2025-01-01T00:00:00Z',
'runtime' => 5000
],
'groups' => [
'group1' => [
'id' => 'group1',
'name' => 'Build Process',
'format' => [
'color' => [
0,
255,
0
],
'bold' => true
]
]
],
'messages' => [
[
'groupId' => 'group1',
'content' => 'Starting build process...',
'time' => 1704067200000,
'type' => 'info'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://logging.monolisk.co/upstream"
payload := strings.NewReader("{\n \"jobId\": \"job-123\",\n \"jobMeta\": {\n \"jobType\": \"build\",\n \"gameId\": \"game-456\",\n \"placeId\": 789,\n \"placeName\": \"Main Place\",\n \"startTime\": \"2025-01-01T00:00:00Z\",\n \"runtime\": 5000\n },\n \"groups\": {\n \"group1\": {\n \"id\": \"group1\",\n \"name\": \"Build Process\",\n \"format\": {\n \"color\": [\n 0,\n 255,\n 0\n ],\n \"bold\": true\n }\n }\n },\n \"messages\": [\n {\n \"groupId\": \"group1\",\n \"content\": \"Starting build process...\",\n \"time\": 1704067200000,\n \"type\": \"info\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://logging.monolisk.co/upstream")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"jobId\": \"job-123\",\n \"jobMeta\": {\n \"jobType\": \"build\",\n \"gameId\": \"game-456\",\n \"placeId\": 789,\n \"placeName\": \"Main Place\",\n \"startTime\": \"2025-01-01T00:00:00Z\",\n \"runtime\": 5000\n },\n \"groups\": {\n \"group1\": {\n \"id\": \"group1\",\n \"name\": \"Build Process\",\n \"format\": {\n \"color\": [\n 0,\n 255,\n 0\n ],\n \"bold\": true\n }\n }\n },\n \"messages\": [\n {\n \"groupId\": \"group1\",\n \"content\": \"Starting build process...\",\n \"time\": 1704067200000,\n \"type\": \"info\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://logging.monolisk.co/upstream")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"jobId\": \"job-123\",\n \"jobMeta\": {\n \"jobType\": \"build\",\n \"gameId\": \"game-456\",\n \"placeId\": 789,\n \"placeName\": \"Main Place\",\n \"startTime\": \"2025-01-01T00:00:00Z\",\n \"runtime\": 5000\n },\n \"groups\": {\n \"group1\": {\n \"id\": \"group1\",\n \"name\": \"Build Process\",\n \"format\": {\n \"color\": [\n 0,\n 255,\n 0\n ],\n \"bold\": true\n }\n }\n },\n \"messages\": [\n {\n \"groupId\": \"group1\",\n \"content\": \"Starting build process...\",\n \"time\": 1704067200000,\n \"type\": \"info\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body"Invalid JSON""Unauthorized""Forbidden""Method Not Allowed"LOGGING
Upload Log
Upload a chunk of logs to the system. The logs will be automatically chunked if they exceed size limits.
POST
/
upstream
Upload log chunk
curl --request POST \
--url https://logging.monolisk.co/upstream \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"jobId": "job-123",
"jobMeta": {
"jobType": "build",
"gameId": "game-456",
"placeId": 789,
"placeName": "Main Place",
"startTime": "2025-01-01T00:00:00Z",
"runtime": 5000
},
"groups": {
"group1": {
"id": "group1",
"name": "Build Process",
"format": {
"color": [
0,
255,
0
],
"bold": true
}
}
},
"messages": [
{
"groupId": "group1",
"content": "Starting build process...",
"time": 1704067200000,
"type": "info"
}
]
}
'import requests
url = "https://logging.monolisk.co/upstream"
payload = {
"jobId": "job-123",
"jobMeta": {
"jobType": "build",
"gameId": "game-456",
"placeId": 789,
"placeName": "Main Place",
"startTime": "2025-01-01T00:00:00Z",
"runtime": 5000
},
"groups": { "group1": {
"id": "group1",
"name": "Build Process",
"format": {
"color": [0, 255, 0],
"bold": True
}
} },
"messages": [
{
"groupId": "group1",
"content": "Starting build process...",
"time": 1704067200000,
"type": "info"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
jobId: 'job-123',
jobMeta: {
jobType: 'build',
gameId: 'game-456',
placeId: 789,
placeName: 'Main Place',
startTime: '2025-01-01T00:00:00Z',
runtime: 5000
},
groups: {
group1: {id: 'group1', name: 'Build Process', format: {color: [0, 255, 0], bold: true}}
},
messages: [
{
groupId: 'group1',
content: 'Starting build process...',
time: 1704067200000,
type: 'info'
}
]
})
};
fetch('https://logging.monolisk.co/upstream', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://logging.monolisk.co/upstream",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'jobId' => 'job-123',
'jobMeta' => [
'jobType' => 'build',
'gameId' => 'game-456',
'placeId' => 789,
'placeName' => 'Main Place',
'startTime' => '2025-01-01T00:00:00Z',
'runtime' => 5000
],
'groups' => [
'group1' => [
'id' => 'group1',
'name' => 'Build Process',
'format' => [
'color' => [
0,
255,
0
],
'bold' => true
]
]
],
'messages' => [
[
'groupId' => 'group1',
'content' => 'Starting build process...',
'time' => 1704067200000,
'type' => 'info'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://logging.monolisk.co/upstream"
payload := strings.NewReader("{\n \"jobId\": \"job-123\",\n \"jobMeta\": {\n \"jobType\": \"build\",\n \"gameId\": \"game-456\",\n \"placeId\": 789,\n \"placeName\": \"Main Place\",\n \"startTime\": \"2025-01-01T00:00:00Z\",\n \"runtime\": 5000\n },\n \"groups\": {\n \"group1\": {\n \"id\": \"group1\",\n \"name\": \"Build Process\",\n \"format\": {\n \"color\": [\n 0,\n 255,\n 0\n ],\n \"bold\": true\n }\n }\n },\n \"messages\": [\n {\n \"groupId\": \"group1\",\n \"content\": \"Starting build process...\",\n \"time\": 1704067200000,\n \"type\": \"info\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://logging.monolisk.co/upstream")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"jobId\": \"job-123\",\n \"jobMeta\": {\n \"jobType\": \"build\",\n \"gameId\": \"game-456\",\n \"placeId\": 789,\n \"placeName\": \"Main Place\",\n \"startTime\": \"2025-01-01T00:00:00Z\",\n \"runtime\": 5000\n },\n \"groups\": {\n \"group1\": {\n \"id\": \"group1\",\n \"name\": \"Build Process\",\n \"format\": {\n \"color\": [\n 0,\n 255,\n 0\n ],\n \"bold\": true\n }\n }\n },\n \"messages\": [\n {\n \"groupId\": \"group1\",\n \"content\": \"Starting build process...\",\n \"time\": 1704067200000,\n \"type\": \"info\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://logging.monolisk.co/upstream")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"jobId\": \"job-123\",\n \"jobMeta\": {\n \"jobType\": \"build\",\n \"gameId\": \"game-456\",\n \"placeId\": 789,\n \"placeName\": \"Main Place\",\n \"startTime\": \"2025-01-01T00:00:00Z\",\n \"runtime\": 5000\n },\n \"groups\": {\n \"group1\": {\n \"id\": \"group1\",\n \"name\": \"Build Process\",\n \"format\": {\n \"color\": [\n 0,\n 255,\n 0\n ],\n \"bold\": true\n }\n }\n },\n \"messages\": [\n {\n \"groupId\": \"group1\",\n \"content\": \"Starting build process...\",\n \"time\": 1704067200000,\n \"type\": \"info\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body"Invalid JSON""Unauthorized""Forbidden""Method Not Allowed"Authorizations
Authorization header with Bearer token
Body
application/json
Map of group IDs to group definitions
Show child attributes
Show child attributes
Example:
{
"group1": {
"id": "group1",
"name": "Build Process",
"format": { "color": [0, 255, 0], "bold": true }
}
}
Array of log messages
Show child attributes
Show child attributes
Unique job identifier
Example:
"job-123"
Show child attributes
Show child attributes
Response
Log chunk uploaded successfully