Self-hosted · modular · agent-ready

Useful content in.
Clean data out.

FetchHarbor turns web pages, HTML, PDFs and local AI models into focused HTTP services. Discover what is available, call one endpoint, and optionally settle each request through x402.

POST /html-to-md
curl -X POST \
  https://fetchharbor.benlab.download//html-to-md \
  -H "Content-Type: application/json" \
  -d '{"html":"<h1>Hello</h1>"}'

 {"markdown":"# Hello"}
LIVE CATALOG

Capabilities at this harbor

The catalog comes from the same registry that generates the API and x402 discovery document, so enabled services and prices stay aligned.

GET · POST0.01 USDC

scrape

Fetch one public HTTP(S) URL for research, extraction, or agent workflows. Returns the final URL, upstream status, content type, and decoded content. Private, local, metadata, and reserved destinations are blocked; redirects are revalidated and response size and duration are bounded.

/scrape
GET · POST0.005 USDC

html-to-md

Convert a supplied HTML string into deterministic, LLM-ready Markdown. Preserves headings, links, lists, emphasis, and code without fetching a URL or invoking an AI model. Input is bounded to 2,000,000 characters.

/html-to-md
GET · POST0.01 USDC

pdf-parse

Extract embedded text from a public PDF URL or multipart upload for research and retrieval pipelines. Returns text, page count, and character count; scanned-image OCR is not included. Remote and uploaded PDFs are limited to the operator-configured maximum size.

/pdf-parse
POST0.01 USDC

chat

Generate one bounded assistant response with the operator's self-hosted Ollama model. Use for short, single-message inference where local processing is preferred. Accepts up to 8,000 characters and returns the model name, response text, and token counts when Ollama supplies them.

/chat
POST0.04 USDC

audio-speech

Generate private, locally processed English speech from bounded text. Returns WAV audio as base64 JSON, uses a fixed voice allowlist, and does not retain or log submitted text.

/v1/audio/speech
POST0.025 USDC

audio-transcribe

Transcribe up to five minutes of base64 audio in the isolated local media worker. Returns detected language, duration, and text without retaining the source audio or transcript.

/audio/transcribe
POST0.035 USDC

audio-subtitles

Transcribe bounded audio and generate deterministic SRT or WebVTT subtitle text locally. Audio, transcripts, and subtitles are not retained.

/audio/subtitles
POST0.015 USDC

audio-convert

Convert bounded audio to WAV, MP3, Opus, or FLAC with fixed server-side FFmpeg arguments in an isolated worker. Returns base64 JSON and retains no media.

/audio/convert
POST0.05 USDC

audio-transcribe-summary

Transcribe bounded audio and explicitly pass the resulting text to the operator's local Ollama model for a concise summary. No input or output content is retained.

/audio/transcribe-summary
HOW IT WORKS

One predictable flow

Designed for scripts, applications, agents and service marketplaces—not just human-operated dashboards.

Discover

Read /.well-known/x402.json or /services to find enabled capabilities, methods and current prices.

Request

Send normal HTTP input. OpenAPI documents the exact schema, limits and output for every registered service.

Settle when enabled

An unpaid request receives standard x402 payment requirements. A compatible client settles and retries without an account or subscription.

Deployment status

9 services registered · health and readiness checks available

x402 enabled