Bezahlte Endpunkte für autonome Agenten. Abrechnung über x402 in USDC auf Base Mainnet.
POST /v1/image-palette
Takes an image by URL or inline base64 and returns its colour palette: up to sixteen colours, each with the share of the visible area it covers, its HEX and sRGB values, its OKLCH coordinates, and the WCAG 2.1 contrast ratio against white, against black and against every other colour in the palette. The grouping runs in OKLab rather than RGB, because distance in RGB does not match what an eye sees — it merges dark blue with black and splits two yellows nobody tells apart. The dominant colour is simply the largest share; the accent is chosen as the most chromatic colour whose hue is at least twenty degrees away from the dominant one, and when no such colour exists the answer says so instead of naming an arbitrary second colour. The result is deterministic: the same file returns the same palette, byte for byte, because the sampling edge is fixed at 200 pixels, the starting points are chosen by frequency and greatest distance rather than at random, the iteration count is bounded, and every tie is broken by colour key. Alongside each cluster mean the closest colour that actually occurs in the image is returned, so a value can be quoted that is really present rather than an average that is not. The limits are stated plainly. This reports the colours that are there, not the colours a brand uses: it does not read logos, does not name colours, does not detect gradients as gradients, and does not simulate colour vision deficiency. The contrast figures follow WCAG 2.1, which is what audits and accessibility rules currently require; that formula is known to overstate the readability of light text on mid-tone backgrounds, and the answer says so rather than presenting a pass as a guarantee. Transparent pixels below an alpha of 128 are excluded and counted separately, an animated image is read as its first frame only, and an image with an embedded colour profile other than sRGB is converted by libvips, which is reported.
0.002 USDC je Aufruf · MCP image_palette
POST /v1/stt
Takes an audio or video file by URL or inline base64 and returns the transcript: the full text, every word with start and end time and its own confidence, the utterances and paragraphs the recogniser separated, and the detected language with its confidence where no language was specified. Alongside comes a confidence breakdown — mean, median, lowest tenth, and the weakest words listed with their timestamps — because a transcript reads equally fluent where the recogniser was certain and where it guessed, and the difference is exactly what a caller needs before quoting it. The running time is measured locally with ffprobe before anything is sent, so a file longer than declared is refused with its real length and nothing is charged, at this end or the provider. Billing is per started audio minute and the price is fixed before the file is even fetched, which is why the caller declares the length. Processing is by Deepgram, and that is stated in every answer along with what leaves this machine: Deepgram uses submitted content to train its models by default, so this service sends the per-request opt-out on every single call — a measure whose effect cannot be verified from the outside, since unknown parameters are accepted just as silently, and the answer says so rather than implying a guarantee. The result is machine-generated and must not be passed off as human transcription. Nothing is cached; neither audio nor transcript is written to any database, log or error message.
0.02 USDC je Aufruf · MCP stt
POST /v1/diarize
Takes an audio or video file by URL or inline base64 and reports who spoke when. Every turn comes back with its speaker label, start and end time, duration, word count and text, and consecutive words from the same speaker are merged into one turn rather than left as a word list. On top of the turns come the figures that make a recording readable at a glance: talking time and share per speaker, number of turns each, longest uninterrupted stretch with its timestamp, speaker changes per minute, and how much of the running time carries no speech at all. The running time is measured locally with ffprobe before anything is sent, so a file longer than declared is refused with its real length and nothing is charged at either end. What this endpoint does not do is identify anybody: it returns speaker 0 and speaker 1, not names, it compares no voices against any reference and stores no voice profile — that would be a biometric feature and a different service entirely. Diarization is also not exact; speakers with similar voices get merged, a single speaker on a bad line gets split, and short interjections are the least reliable part, which is why the confidence figures come with it. Processing is by Deepgram, whose terms make training on submitted content the default, so the per-request opt-out is sent on every call — its effect cannot be verified from outside, and the answer says so. Nothing is cached and neither audio nor transcript reaches any database, log or error message.
0.025 USDC je Aufruf · MCP diarize
POST /v1/doc-translate
Takes a document as text, a public URL or inline base64 — PDF, DOCX, ODT, HTML and Markdown are read — and returns it translated into the target language. Structure is the point: heading levels, indentation, blank lines, list markers, the number of table columns, placeholders such as double-brace tokens or printf specifiers, URLs, e-mail addresses, file names and fenced code blocks are meant to come through untouched. Rather than assert that, the endpoint measures it. Line count, table rows and columns, headings, list items, code fences, URLs and the full set of placeholders are counted before and after, and every difference is returned as a named finding — a placeholder that vanished or a table that lost a column is reported, not smoothed over, because that is the failure a caller only discovers once the document is in use. Terms the model left in the source language are listed separately. What this endpoint does not do is certify: it is not a sworn translation, it makes no claim about legal equivalence of terms across jurisdictions, and for a contract that has to hold up somewhere, a translated clause is a reading aid and not the clause. The text is processed by a third-party model — provider, what leaves this machine and whether it is used for training are named in every answer, because a caller under confidentiality has to make that call themselves. Nothing is cached and no part of the document reaches any database, log or error message.
0.006 USDC je Aufruf · MCP doc_translate
POST /v1/tts
Takes a text and returns it spoken, as MP3, WAV, Opus, FLAC or raw linear16, encoded base64 with its media type and the resulting running time. The voice is chosen freely from the provider catalogue — over a hundred voices across languages and accents — and is validated against that catalogue before the request goes out, so a mistyped voice name comes back immediately with a list of near matches instead of a provider error. Pricing follows the voice: Aura-2 costs twice as much at the provider as Aura-1, so charging both alike would overcharge the cheaper one, and the rate that applies is stated in the payment challenge before you pay. The purchase cost is computed from the character count the provider itself reports and returned with every answer, so the margin is verifiable rather than asserted. Processing is by Deepgram, whose terms make training on submitted content the default; this service therefore sends the per-request opt-out on every call, and states plainly that the effect of that opt-out cannot be verified from the client side because unknown parameters are accepted just as silently. The result is machine-generated speech and the provider forbids passing it off as a human recording — if it goes somewhere a listener could mistake it for a person, that is the caller's disclosure to make. Nothing is cached and no text is written to any database, log or error message.
0.080 USDC je Aufruf · MCP tts
POST /v1/bg-remove
Takes an image by URL or inline base64 and returns it with the background removed, as PNG or WebP with a real alpha channel, together with the share of the frame that survived, the bounding box of the remaining subject and the option to crop to it. The whole computation runs locally with rembg and the U2-Net model: the image is not sent anywhere, no provider sees it, nothing is retained, and there is consequently no purchase price and no third-party terms to accept — for a product photo not yet published or a picture of a person, that is the whole point. Optional alpha matting refines the edge for hair and fur at a noticeably higher compute cost, and is off by default because it is slower and not always better. The limits are stated: the model finds the salient subject, so an image with no clear subject, several equally prominent ones, or a subject the same colour as its background produces a poor mask, and the returned foreground share is the number that shows it — a result near zero or near one almost always means the cut-out failed rather than that the picture was unusual. Glass, smoke, fine mesh and motion blur are the known hard cases. The result is a suggestion, not a measurement, and nothing here decides whether the image may be used.
0.01 USDC je Aufruf · MCP bg_remove
POST /v1/doc-convert
Takes one file, by URL or inline base64, and returns it in the format you ask for. Text documents go through pandoc, so DOCX, ODT, EPUB, HTML, Markdown, RST, Org, LaTeX, RTF, MediaWiki, Textile, CSV and Jupyter notebooks convert in both directions. A PDF is a one-way street: its text is extracted with poppler (to markdown, html or plain text) or its pages are rendered to PNG or JPEG at a chosen dpi, but no format converts into PDF here — this machine has no PDF typesetting engine (no LaTeX, no wkhtmltopdf), and pandoc listing pdf among its output formats does not change that, so asking for PDF output is refused with the reason rather than failing halfway. Raster images convert between PNG, JPEG, WebP, AVIF and TIFF with optional downscaling and quality, and the before/after dimensions and byte sizes come back with them. The input format is taken from the bytes themselves, not from the file name or the Content-Type the server claimed, and both are reported so a mismatch stays visible. A scanned PDF with no text layer returns empty text and says so — there is no OCR in this endpoint, and an empty result is the honest finding rather than a fault.
0.005 USDC je Aufruf · MCP doc_convert
POST /v1/doc-diff
Takes two documents, by URL, inline base64 or raw text, extracts the text of each and compares them. Paragraphs are the unit: the answer lists every block that was removed, added, or kept but reworded, and for reworded blocks it names the individual words that went and came, so a single changed number in a long clause is visible instead of the whole clause being flagged. Alongside the content diff a structural comparison reports headings, paragraph, list and table-line counts on both sides. The similarity score is deliberately symmetric — two times the shared words divided by the sum of both lengths — because a one-sided measure would rate a heavily shortened document as almost unchanged. Both sides are measured the same way over the same units; if the two inputs arrive in different formats, so that one text comes out of a PDF and the other out of a DOCX, that is reported as a caveat, because part of any structural difference then comes from the extraction path and not from the documents. Ordering and duplicate paragraphs are handled by a shortest-edit-script diff, not by set comparison. What this endpoint does not do is judge: it says what changed, never whether the change is favourable, material or lawful.
0.002 USDC je Aufruf · MCP doc_diff
POST /v1/pdf-fill
Called without "fields" it inspects: every AcroForm field of the PDF comes back with its name, type, current value, whether it is required or read-only, the permitted options for dropdowns, radio groups and list boxes, and the character limit of text fields. Called with "fields" it fills exactly those and returns the resulting PDF as base64, together with what each field held before and after. Values are checked against the form before anything is written — an unknown field name, a value outside a dropdown list, text beyond a field length limit or a write to a read-only field is refused with the reason and nothing is charged, because a half-filled PDF is worse than none. Signatures are outside this service by design: it will not set a cryptographic signature and will not paste a picture of one, it refuses any write to a signature field, and if the document already carries a signature it refuses to modify it at all — any change to a signed PDF breaks that signature, and returning a document whose proof is quietly broken would be the most damaging thing this endpoint could do. Inspection of a signed document is still available. Optional flattening bakes the entered values into the page content so they can no longer be edited; note that flattening is irreversible and removes the form.
0.005 USDC je Aufruf · MCP pdf_fill
POST /v1/image-dupe
Takes between two and eight images by URL or inline base64 and compares each pair. Three perceptual hashes are computed, because each fails differently: an average hash over an 8x8 grey image is cheap but moves with brightness, a gradient hash reads the slope between neighbouring pixels and survives exposure changes, and a DCT hash over the low frequencies of a 32x32 grey image is the sturdiest against rescaling and re-encoding. A SHA-256 catches byte-identical files, which perceptual hashes cannot distinguish from a lossless re-save. Every pair comes back with all three Hamming distances, the verdict, and the thresholds that produced it, so a caller sorting a large collection can move the line without re-buying. Optional checks re-hash the second image mirrored and rotated by 90, 180 and 270 degrees and report which transform matched, because a rotated copy is a duplicate to a human and a completely different image to a hash. Images too flat to carry a hash verdict — colour fields, blank scans, a logo on white — are detected and returned as inconclusive with their measured distances rather than as a match, because in the low-frequency band two unrelated plain surfaces sit as close together as two copies of the same photograph, and reporting that as a duplicate would be the easiest way for this endpoint to be confidently wrong. The other limits are stated rather than implied: perceptual hashing is robust against rescaling, re-compression, mild colour and brightness changes, and reasonably robust against small overlays; it is not robust against cropping, which shifts the whole frame, and it says nothing about whether two images show the same object or scene. This is duplicate detection, not image recognition, and neither the images nor their hashes are stored beyond the request.
0.005 USDC je Aufruf · MCP image_dupe
POST /v1/c2pa-verify
Takes one media file by URL or inline base64 and reads its C2PA manifest store. The answer says whether a manifest is present at all, whether the cryptographic checks pass — every failing check is returned with its code and explanation, so a hash mismatch on the image data is distinguishable from a broken claim signature — who the signing certificate names as issuer, its serial number, the signing algorithm and the signing time, the chain of ingredients a derived file inherited from, and every edit action the manifest records. Where the manifest declares a digital source type, it is translated: trainedAlgorithmicMedia means generated by a model, compositeWithTrainedAlgorithmicMedia means partly so, digitalCapture means a camera. The verdict is deliberately narrow. A passing check proves that the file has not changed since it was signed and matches what the signer signed. It does not prove that the signer is who the certificate says, that the depicted scene is real, or that nothing was omitted before signing — and this endpoint does not check the issuer against a trust list, so an unknown or self-issued certificate produces the same passing hashes as a camera manufacturer, and the answer says so instead of implying accreditation. The absence of a manifest is likewise reported as absence and nothing more: almost no file in the world carries Content Credentials, so a missing manifest is not evidence of manipulation. Nothing is stored beyond the request.
0.002 USDC je Aufruf · MCP c2pa_verify
POST /v1/keyframes
Takes a video by URL or inline base64 and reports where the picture changes. FFmpeg measures the difference between consecutive frames; every jump above the threshold starts a new scene, and the answer lists each scene with start, end, duration and the fraction of the running time it covers, plus the raw detection score positions. A thumbnail can be rendered per scene, sampled a little after the cut rather than exactly on it because the frame on the cut is often a transition, and returned as base64 JPEG at a width you choose. Media facts come from ffprobe: duration, container, codec, resolution, frame rate and whether there is audio. The threshold is the whole game and is therefore exposed and reported back: at 0.2 a slow pan becomes several scenes, at 0.6 a hard cut between similar shots is missed, and 0.3 to 0.4 suits most edited material — no threshold is correct for all footage, and the endpoint does not pretend otherwise. What it does not do is understand the video: it detects visual discontinuity, so a lighting change or a camera flash counts as a scene change and a cut between two similar shots does not, and it neither recognises objects nor reads the audio. Billing is per started minute, and because the price has to be fixed before the file is even fetched, the caller declares the length: if the video turns out longer than declared, the call is refused with the real duration and nothing is charged.
0.01 USDC je Aufruf · MCP keyframes
POST /v1/msds-extract
Downloads one public PDF up to 5 MiB through SSRF-safe redirect checks or accepts extracted text, runs pdftotext in a private temporary directory, and deterministically extracts the requested codes with their source lines. Temporary PDF and text files are deleted before the response. It does not OCR scans, identify symbols from images, translate legal wording or certify regulatory completeness.
0.010 USDC je Aufruf · MCP msds_extract
POST /v1/oss-opencv-planar-camera-calibrate
Takes matched object and image points from multiple views of a planar calibration target and returns the camera matrix, five distortion coefficients and the RMS reprojection error that the fit actually achieved. The error figure is the point: it tells a caller whether the calibration is usable before anything is built on top of it, instead of handing back numbers that look plausible. The third radial coefficient k3 is fixed to zero, which is the stable choice for the short focal lengths this is used with. No image is processed here — the correspondences must already be detected. The result describes this lens at this focus setting and does not transfer to another camera, another zoom or another rig.
0.003 USDC je Aufruf · MCP oss_opencv_planar_camera_calibrate
POST /v1/oss-opencv-stereo-rig-calibrate
Given paired calibration observations and the intrinsics of both cameras, this computes the rotation and translation between them and derives everything a stereo pipeline needs downstream: rectification transforms for both views, both projection matrices, and the disparity-to-depth mapping. The RMS error in pixels says how well the rig geometry actually fits the data. Intrinsics are taken as supplied and held fixed, so a poor single-camera calibration propagates rather than being silently absorbed — calibrate each camera first and check its RMS. No images are rectified here; the matrices are returned for the caller to apply.
0.003 USDC je Aufruf · MCP oss_opencv_stereo_rig_calibrate
POST /v1/oss-opencv-landmark-camera-pose
Solves for the rigid transform between an object's coordinate frame and the camera, given 3D landmark coordinates, where those landmarks appear in the image, and the camera matrix and distortion. Returns the rotation and translation together with the reprojection RMSE, so a caller can tell a well-constrained pose from one that merely converged. This is the standard step for placing a known object in a scene or locating a camera against a known marker. The landmarks must genuinely be where you say they are: the solution is only as good as the model coordinates supplied, and the reprojection error measures consistency with that model, not its correctness.
0.002 USDC je Aufruf · MCP oss_opencv_landmark_camera_pose
POST /v1/oss-opencv-robust-planar-homography
Fits a 2D projective transform between two point sets with RANSAC at a caller-chosen reprojection threshold, and returns both the homography and the inlier mask. The mask is what makes this useful beyond a plain fit: bad correspondences are named rather than quietly averaged in, so a caller can re-run detection, drop a frame or raise an alarm. Suitable for document rectification, planar tracking and image stitching where the scene really is flat. A homography only describes a plane or a pure rotation — for a scene with depth the fit will find inliers and still be the wrong model. The inlier count is the honest signal there.
0.002 USDC je Aufruf · MCP oss_opencv_robust_planar_homography
POST /v1/oss-opencv-paired-point-triangulate
Triangulates 3D positions from corresponding points in two calibrated views using the supplied projection matrices. Degenerate cases are reported honestly: a correspondence whose rays are near-parallel has no finite intersection, and it comes back as null with its position in the finite mask, instead of as an enormous coordinate that silently poisons whatever consumes it. That makes the result safe to feed into a fitting step without a sanity filter of your own. Projection matrices are taken as given and not validated against each other; correspondences must already be matched. Accuracy depends on the baseline between views, which this cannot check for you.
0.002 USDC je Aufruf · MCP oss_opencv_paired_point_triangulate
POST /v1/oss-opencv-rectified-stereo-disparity
Runs semi-global block matching over a rectified grayscale stereo pair and returns per-pixel disparity together with the count of pixels that could actually be matched. Pixels with no reliable match stay unmatched rather than being interpolated, so occlusions and textureless regions are visible in the output instead of hidden by plausible-looking values. Disparities are positive and bounded at 16 pixels, which suits small-baseline rigs and close range. The images must already be rectified — this does not rectify them, and an unrectified pair yields a confidently wrong map. Disparity is not depth: convert it with the disparity-to-depth matrix from rig calibration.
0.004 USDC je Aufruf · MCP oss_opencv_rectified_stereo_disparity
POST /v1/oss-opencv-dense-frame-optical-flow
Computes dense Farneback optical flow between two consecutive grayscale frames and returns the horizontal and vertical displacement of every pixel. Unlike sparse tracking this covers the whole image, which is what you want for measuring motion in regions with no distinct features to track — smoke, water, crowds, a panning background. Both frames must be the same size and should come from the same camera at a short interval. The method assumes brightness constancy: a change in exposure, a lighting flash or heavy motion blur will register as apparent motion that did not happen. Large displacements between frames are systematically underestimated, so sample often enough for the motion you expect.
0.004 USDC je Aufruf · MCP oss_opencv_dense_frame_optical_flow
POST /v1/oss-opencv-external-contour-metrics
Finds the external contours in a caller-supplied binary mask and reports, for each, its area, perimeter, centroid and bounding rectangle, plus the total foreground pixel count. The division of labour is deliberate: segmentation is a domain decision, so the mask comes from you and the measurement comes from here, which keeps the numbers reproducible and independent of any threshold this service might have chosen. Only outer contours are reported — holes inside a shape do not appear as their own entries, though they do affect the measured area. Values are in pixels; converting to physical units needs a scale that this service does not know.
0.002 USDC je Aufruf · MCP oss_opencv_external_contour_metrics
POST /v1/oss-opencv-robot-hand-eye-calibrate
Solves the hand-eye problem: given a series of gripper-to-base poses read from the robot and the matching target-to-camera poses seen by the camera, it recovers the rigid transform between camera and gripper that stays constant as the arm moves. This is what lets a robot act on what its camera sees. The poses must be genuinely synchronized — a pairing that is off by one sample produces a confident and entirely wrong transform, and nothing in the data reveals it. Vary the orientation between poses, not just the position: pure translation leaves the rotation underdetermined. The pose count is returned so a caller can record how much evidence the result rests on.
0.003 USDC je Aufruf · MCP oss_opencv_robot_hand_eye_calibrate
POST /v1/oss-opencv-calibrated-lens-undistort
Resamples a grayscale image to remove radial and tangential lens distortion, using the camera matrix and five distortion coefficients you supply — typically from a planar calibration. Dimensions and camera matrix are preserved, so the corrected image drops into an existing pipeline without any change to geometry downstream. Because the output frame is unchanged, strongly distorted corners are pushed outside the image and are simply lost rather than being retained in a larger canvas. The correction is only as good as the coefficients: a model from a different lens or a different focus setting will bend the image the wrong way, and the result will look plausible while being wrong.
0.002 USDC je Aufruf · MCP oss_opencv_calibrated_lens_undistort