POST Anonyme Kontaktanfrage übermitteln
/api/v1/public/contact
Browserformular desselben Ursprungs; JSON oder URL-encoded, höchstens 64 KiB. Die Formularadresse dient ausschließlich als Reply-To; der Empfänger ist fest. Fünf Versuche je Netzwerkadresse in 15 Minuten, 100 global pro Stunde. Erfolg bestätigt SMTP-Annahme; Fehler erhalten Eingaben. Keine Anhänge oder automatische Antwort.
Auf dieser Seite
Zugriff und Rechte
Browserformular desselben Ursprungs; JSON oder URL-encoded, höchstens 64 KiB. Die Formularadresse dient ausschließlich als Reply-To; der Empfänger ist fest. Fünf Versuche je Netzwerkadresse in 15 Minuten, 100 global pro Stunde. Erfolg bestätigt SMTP-Annahme; Fehler erhalten Eingaben. Keine Anhänge oder automatische Antwort.
Eine Kontoanmeldung ist nicht erforderlich. Die angegebenen Prüfungen der Browserherkunft und Nutzungslimits gelten weiterhin.
Parameter und Header
| Feld | Position | Typ und Grenzen | Erforderlich | Bedeutung |
|---|---|---|---|---|
| lang | URL-Parameter | string; {"enum":["en","de"]} | Nein | Browserformular desselben Ursprungs; JSON oder URL-encoded, höchstens 64 KiB. Die Formularadresse dient ausschließlich als Reply-To; der Empfänger ist fest. Fünf Versuche je Netzwerkadresse in 15 Minuten, 100 global pro Stunde. Erfolg bestätigt SMTP-Annahme; Fehler erhalten Eingaben. Keine Anhänge oder automatische Antwort. |
Anfragekörper
| Feld | Typ und Grenzen | Erforderlich | Bedeutung |
|---|---|---|---|
| $ | object; {"additionalProperties":false} | Ja | — |
| string; {"format":"email","maxLength":254} | Ja | — | |
| $.message | string; {"maxLength":5000,"minLength":10} | Ja | — |
| $.name | string; {"maxLength":100} | Nein | — |
| $.subject | string; {"maxLength":150,"minLength":1} | Ja | — |
| $.website | string; {"maxLength":0} | Nein | — |
Antworten
application/problem+json
| Feld | Typ und Grenzen | Erforderlich | Bedeutung |
|---|---|---|---|
| $ | Problem | Ja | — |
| $.code | string | Ja | Stabiler maschinenlesbarer Fehlercode |
| $.detail | string | Ja | Kurze lokalisierte Erklärung ohne interne Fehlerdaten |
| $.instance | string | Ja | Einmalige relative Kennung /api/v1/requests/{request_id}; keine abrufbare Ressource |
| $.message | string | Ja | Vorübergehend für bestehende Clients gleich detail |
| $.message_key | string | Ja | Stabiler Übersetzungsschlüssel für einen Sprachwechsel der Anzeige ohne neue Anfrage |
| $.message_params | object; {"additionalProperties":true} | Ja | Benannte, sicher ausgegebene Meldungsparameter; kein beliebiges HTML |
| $.request_id | string; {"pattern":"^[0-9a-f]{32}$"} | Ja | Vom Server erzeugte Diagnosekennung. Enthält kein Logintoken und keine Zugangsdaten. |
| $.status | integer; {"maximum":599,"minimum":400} | Ja | — |
| $.title | string | Ja | Lokalisierte HTTP-Statusbezeichnung |
| $.type | string; {"const":"about:blank"} | Ja | — |
application/problem+json
| Feld | Typ und Grenzen | Erforderlich | Bedeutung |
|---|---|---|---|
| $ | Problem | Ja | — |
| $.code | string | Ja | Stabiler maschinenlesbarer Fehlercode |
| $.detail | string | Ja | Kurze lokalisierte Erklärung ohne interne Fehlerdaten |
| $.instance | string | Ja | Einmalige relative Kennung /api/v1/requests/{request_id}; keine abrufbare Ressource |
| $.message | string | Ja | Vorübergehend für bestehende Clients gleich detail |
| $.message_key | string | Ja | Stabiler Übersetzungsschlüssel für einen Sprachwechsel der Anzeige ohne neue Anfrage |
| $.message_params | object; {"additionalProperties":true} | Ja | Benannte, sicher ausgegebene Meldungsparameter; kein beliebiges HTML |
| $.request_id | string; {"pattern":"^[0-9a-f]{32}$"} | Ja | Vom Server erzeugte Diagnosekennung. Enthält kein Logintoken und keine Zugangsdaten. |
| $.status | integer; {"maximum":599,"minimum":400} | Ja | — |
| $.title | string | Ja | Lokalisierte HTTP-Statusbezeichnung |
| $.type | string; {"const":"about:blank"} | Ja | — |
Wiederholungen und asynchrone Aufträge
Für diese Änderung gibt es keine allgemeine Wiederholungsgarantie. Prüfen Sie bei unklarer Antwort den betroffenen Eintrag, bevor Sie es erneut versuchen. Beachten Sie Wartezeiten aus Retry-After und fordern Sie abgelaufene Anmelde- oder Aktionscodes neu an.
Anfragebeispiele
Ersetzen Sie Demokennungen, Zeitstempel und Platzhalter durch eigene Werte. Behalten Sie bei Wiederholungen Kennungen, Zeit und Inhalt bei. Diese Beispiele führen auf der Seite keine Anfragen aus.
Halten Sie Anmeldelinks, Codes, Cookies und Schlüssel privat. Schreiben Sie sie nicht in Logs und teilen Sie sie nicht in Hilfeanfragen.
curl --silent --show-error --output /dev/null --write-out "%{http_code}\n" \
--request POST \
--header @"$HOME/.config/metribeacon/headers.txt" \
--header "Origin: https://metribeacon.com" \
--header "Content-Type: application/json" \
--data-binary '{"email":"reader@example.test","subject":"Monitoring question","message":"Please explain the monitoring limits."}' \
"https://metribeacon.com/api/v1/public/contact"
import json
from pathlib import Path
from urllib.request import Request, HTTPRedirectHandler, build_opener
from urllib.error import HTTPError
headers = json.loads((Path.home() / ".config/metribeacon/headers.json").read_text())
headers["Origin"] = "https://metribeacon.com"
headers["Content-Type"] = "application/json"
request = Request("https://metribeacon.com/api/v1/public/contact", data="{\"email\":\"reader@example.test\",\"subject\":\"Monitoring question\",\"message\":\"Please explain the monitoring limits.\"}".encode("utf-8"), headers=headers, method="POST")
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, request, fp, code, message, headers, target):
return None
opener = build_opener(NoRedirect())
try:
with opener.open(request, timeout=10) as response:
print(response.status)
except HTTPError as error:
print(error.code)
error.close()
import { readFile } from "node:fs/promises";
import { homedir } from "node:os";
import { join } from "node:path";
const headers = JSON.parse(await readFile(join(homedir(), ".config/metribeacon/headers.json"), "utf8"));
headers["Origin"] = "https://metribeacon.com"
headers["Content-Type"] = "application/json";
const response = await fetch("https://metribeacon.com/api/v1/public/contact", {
method: "POST", headers, redirect: "manual",
signal: AbortSignal.timeout(10000), body: "{\"email\":\"reader@example.test\",\"subject\":\"Monitoring question\",\"message\":\"Please explain the monitoring limits.\"}",
});
console.log(response.status);
await response.body?.cancel();
package main
import (
"fmt"
"net/http"
"time"
"encoding/json"
"os"
"path/filepath"
"strings"
)
func main() {
home, err := os.UserHomeDir(); if err != nil { panic("request failed; credentials and response omitted") }
raw, err := os.ReadFile(filepath.Join(home, ".config/metribeacon/headers.json")); if err != nil { panic("request failed; credentials and response omitted") }
var headers map[string]string
if json.Unmarshal(raw, &headers) != nil { panic("invalid local headers") }
request, err := http.NewRequest("POST", "https://metribeacon.com/api/v1/public/contact", strings.NewReader("{\"email\":\"reader@example.test\",\"subject\":\"Monitoring question\",\"message\":\"Please explain the monitoring limits.\"}"))
if err != nil { panic("request failed; credentials and response omitted") }
for name, value := range headers { request.Header.Set(name, value) }
request.Header.Set("Origin", "https://metribeacon.com")
request.Header.Set("Content-Type", "application/json")
client := &http.Client{Timeout: 10*time.Second, CheckRedirect: func(*http.Request, []*http.Request) error { return http.ErrUseLastResponse }}
response, err := client.Do(request)
if err != nil { panic("request failed; credentials and response omitted") }
defer response.Body.Close()
fmt.Println(response.StatusCode)
}
Verwandte Anleitungen
- HTTP-API, OAuth und MCP
Finden Sie die Nutzer-API-Endpunkte mit Rechten, Feldern, Beispielen und Antwortformaten.
- GET Veröffentlichte Kontakt- und Rechtstextangaben lesen
Entwürfe werden nicht ausgeliefert. E-Mail-Adressen bleiben kodiert. Antworten sind no-store; Dokumentversionen sind inhaltsabhängige SHA-256-Werte. Versionsgebundenes öffentliches HTML ist noindex.
- GET Aktuell freigegebene API-Funktionen lesen
Lesen Sie aktuell verfügbare Monitoringfunktionen und die passende Vorlagenversion. Ihre eigenen Kontolimits gelten weiterhin.
- GET Öffentlichen Bereitschaftsstatus lesen
Öffentlichen Bereitschaftsstatus lesen.