Takes a text as text, a public URL or inline base64 — PDF, DOCX, ODT, HTML and Markdown ar
Takes a text as text, a public URL or inline base64 — PDF, DOCX, ODT, HTML and Markdown are read — and returns it as a graph: the people, organisations, places, products, documents and events it names, and the relations it states between them. Every relation carries the sentence it came from word for word, plus the character offset and line where that sentence stands, and each of those quotes is looked up in the source text before the answer goes out: an exact match, or a match after whitespace…
4000 (raw units)
price
1
calls / 30d
1
unique payers
2026-08-20
updated
Provider
buero.halowerk.com · discovered, not yet claimed by its owner
Payment (x402 accepts[])
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "4000",
"maxTimeoutSeconds": 300
}
]Output schema
{
"bazaar": {
"info": {
"input": {
"body": {
"document": {
"text": "Die Nordlicht GmbH hat am 3. Maerz 2026 einen Rahmenvertrag mit der Sued-Elektrik AG geschlossen.\n\nGeschaeftsfuehrerin der Nordlicht GmbH ist Anna Berger.\n\nDie Sued-Elektrik AG liefert die Steuergeraete aus ihrem Werk in Ulm."
},
"entity_types": [
"person",
"organisation",
"place",
"document"
],
"max_relations": 20
},
"bodyType": "json",
"method": "POST",
"type": "http"
}
},
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"additionalProperties": false,
"properties": {
"document": {
"additionalProperties": false,
"description": "The text to read. Exactly one of text, url or content_base64.",
"properties": {
"content_base64": {
"description": "The file inline, base64.",
"maxLength": 4000000,
"type": "string"
},
"filename": {
"description": "Only consulted when the bytes carry no recognisable signature.",
"maxLength": 260,
"type": "string"
},
"format": {
"default": "auto",
"description": "Override the detected format. \"auto\" reads it from the bytes.",
"enum": [
"auto",
"pdf",
"docx",
"odt",
"html",
"markdown",
"rtf",
"text"
],
"type": "string"
},
"text": {
"description": "The text directly. Cheapest and clearest — its length is billed as counted here.",
"maxLength": 200000,
"type": "string"
},
"url": {
"description": "Public http(s) URL of a PDF, DOCX, ODT, HTML or text file. Private and local addresses are refused.",
"maxLength": 2048,
"type": "string"
}
},
"type": "object"
},
"document_chars": {
"description": "Only needed when the text arrives by url or content_base64: its length in characters, which is what you are billed for. A longer text is refused with its real length and nothing is charged.",
"maximum": 24000,
"minimum": 1,
"type": "integer"
},
"entity_types": {
"description": "Which kinds of entity to look for. Default: person, organisation, place, product, document, event.",
"items": {
"enum": [
"person",
"organisation",
"place",
"product",
"document",
"event",
"amount",
"other"
],
"type": "string"
},
"maxItems": 8,
"minItems": 1,
"type": "array"
},
"include_isolated_entities": {
"default": true,
"description": "Also return entities that ended up with no relation. Off means they are only counted.",
"type": "boolean"
},
"include_unverified": {
"default": true,
"description": "Also return relations whose quote could not be located in the source, clearly marked. Off means they are only counted.",
"type": "boolean"
},
"max_relations": {
"default": 60,
"description": "How many relations to return at most. What is dropped is counted, never silently cut.",
"maximum": 120,
"minimum": 1,
"type": "integer"
}
},
"required": [
"document"
],
"type": "object"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"method": {
"enum": [
"POST",
"PUT",
"PATCH"
],
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}
}
}Use it
curl
curl "https://buero.halowerk.com/v1/entity-graph" # -> 402 Payment Required, accepts[] lists how to pay # retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paid
JavaScript
const res = await fetch("https://buero.halowerk.com/v1/entity-graph");
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}Python
import httpx
res = httpx.get("https://buero.halowerk.com/v1/entity-graph")
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerMachine-readable
Everything on this page is also available as clean JSON at /resources/15230.json, and this resource appears in /discovery/resources and /discovery/search.