Python
import os
from meibel import MeibelClient
client = MeibelClient(api_key=os.environ["MEIBEL_API_KEY"])
stream = client.documents.stream_trace(job_id="job_8f3a2b1c")
for event in stream:
if event.event == "layout_detected":
payload = event.json()
print(f"Layout detected on page {payload['page_number']}")
elif event.event == "table_extracted":
payload = event.json()
print(f"Table extracted: {payload['row_count']} rows")
elif event.event == "ocr_page":
payload = event.json()
print(f"OCR progress: page {payload['page_number']}")
elif event.event == "completed":
payload = event.json()
print(f"Parsing completed: {payload['document_id']}")
break
elif event.event == "error":
payload = event.json()
print(f"Error: {payload['user_message']}")
breakconst client = new MeibelClient({ apiKey: process.env.MEIBEL_API_KEY });
const jobId = "job_9f2a7c3e1b";
const stream = await client.documents.streamTrace(jobId);
for await (const event of stream) {
switch (event.type) {
case "layout_detected":
console.log(`Layout detected: ${event.pageCount} pages`);
break;
case "table_extracted":
console.log(`Table extracted on page ${event.page}`);
break;
case "ocr_page":
console.log(`OCR processed page ${event.page}/${event.totalPages}`);
break;
case "completed":
console.log(`Parsing completed: ${event.documentId}`);
break;
case "error":
console.error(`Parsing failed: ${event.message}`);
break;
}
}package main
import (
"context"
"fmt"
"os"
v2 "github.com/meibel-ai/meibel-go/v2"
)
func main() {
client := v2.NewClient(v2.WithAPIKey(os.Getenv("MEIBEL_API_KEY")))
stream, err := client.Documents.StreamTrace(context.Background(), "job_9f8e7d6c5b4a")
if err != nil {
panic(err)
}
for event := range stream.Events() {
switch e := event.(type) {
case v2.LayoutDetectedEvent:
fmt.Printf("layout detected: %+v\n", e)
case v2.TableExtractedEvent:
fmt.Printf("table extracted: %+v\n", e)
case v2.OcrPageEvent:
fmt.Printf("ocr page processed: %+v\n", e)
case v2.CompletedEvent:
fmt.Printf("parsing completed: %+v\n", e)
case v2.ErrorEvent:
fmt.Printf("parsing error: %+v\n", e)
}
}
if err := <-stream.Errors(); err != nil {
panic(err)
}
}curl --request GET \
--url https://api.meibel.ai/v2/documents/{job_id}/trace \
--header 'Meibel-API-Key: <api-key>'const options = {method: 'GET', headers: {'Meibel-API-Key': '<api-key>'}};
fetch('https://api.meibel.ai/v2/documents/{job_id}/trace', 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://api.meibel.ai/v2/documents/{job_id}/trace",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Meibel-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.get("https://api.meibel.ai/v2/documents/{job_id}/trace")
.header("Meibel-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meibel.ai/v2/documents/{job_id}/trace")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Meibel-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Documents
Stream document parsing trace
Subscribe to real-time parsing progress via Server-Sent Events.
GET
/
documents
/
{job_id}
/
trace
Python
import os
from meibel import MeibelClient
client = MeibelClient(api_key=os.environ["MEIBEL_API_KEY"])
stream = client.documents.stream_trace(job_id="job_8f3a2b1c")
for event in stream:
if event.event == "layout_detected":
payload = event.json()
print(f"Layout detected on page {payload['page_number']}")
elif event.event == "table_extracted":
payload = event.json()
print(f"Table extracted: {payload['row_count']} rows")
elif event.event == "ocr_page":
payload = event.json()
print(f"OCR progress: page {payload['page_number']}")
elif event.event == "completed":
payload = event.json()
print(f"Parsing completed: {payload['document_id']}")
break
elif event.event == "error":
payload = event.json()
print(f"Error: {payload['user_message']}")
breakconst client = new MeibelClient({ apiKey: process.env.MEIBEL_API_KEY });
const jobId = "job_9f2a7c3e1b";
const stream = await client.documents.streamTrace(jobId);
for await (const event of stream) {
switch (event.type) {
case "layout_detected":
console.log(`Layout detected: ${event.pageCount} pages`);
break;
case "table_extracted":
console.log(`Table extracted on page ${event.page}`);
break;
case "ocr_page":
console.log(`OCR processed page ${event.page}/${event.totalPages}`);
break;
case "completed":
console.log(`Parsing completed: ${event.documentId}`);
break;
case "error":
console.error(`Parsing failed: ${event.message}`);
break;
}
}package main
import (
"context"
"fmt"
"os"
v2 "github.com/meibel-ai/meibel-go/v2"
)
func main() {
client := v2.NewClient(v2.WithAPIKey(os.Getenv("MEIBEL_API_KEY")))
stream, err := client.Documents.StreamTrace(context.Background(), "job_9f8e7d6c5b4a")
if err != nil {
panic(err)
}
for event := range stream.Events() {
switch e := event.(type) {
case v2.LayoutDetectedEvent:
fmt.Printf("layout detected: %+v\n", e)
case v2.TableExtractedEvent:
fmt.Printf("table extracted: %+v\n", e)
case v2.OcrPageEvent:
fmt.Printf("ocr page processed: %+v\n", e)
case v2.CompletedEvent:
fmt.Printf("parsing completed: %+v\n", e)
case v2.ErrorEvent:
fmt.Printf("parsing error: %+v\n", e)
}
}
if err := <-stream.Errors(); err != nil {
panic(err)
}
}curl --request GET \
--url https://api.meibel.ai/v2/documents/{job_id}/trace \
--header 'Meibel-API-Key: <api-key>'const options = {method: 'GET', headers: {'Meibel-API-Key': '<api-key>'}};
fetch('https://api.meibel.ai/v2/documents/{job_id}/trace', 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://api.meibel.ai/v2/documents/{job_id}/trace",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Meibel-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.get("https://api.meibel.ai/v2/documents/{job_id}/trace")
.header("Meibel-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meibel.ai/v2/documents/{job_id}/trace")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Meibel-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Was this page helpful?
⌘I