Newsence Core Worker HTTP endpoints (frontend): GET /health POST /ingest - Ingest URL (JSON), image URL (JSON), or user-uploaded blob (multipart) POST /scrape - Sync extraction: {url} JSON or raw bytes -> NormalizedContent {markdown,text,metadata,status} POST /scrape/jobs - Async parse job (non-persisting): {url} or raw bytes -> {jobId} GET /scrape/jobs/:id - Poll parse job -> {status, result?, error?} POST /search - Hybrid corpus ranking (internal token) -> {success,data:{results}} POST /search/related - pgvector neighbours of a seed (internal token) -> {success,data:{ids}} POST /media/delete - Batch-delete user-file R2 objects by storage key (#162) -> {success,data} GET /stream/:instanceId - Workflow status (SSE, internal token) Signed media: GET /media/external/{options}/{mediaUrl} - Upstream image/video passthrough with edge cache GET /media/asset/{key}?sig=&exp= - Authenticated R2 asset