Erste Schritte
Diese Anleitung führt Sie durch Ihre erste Anfrage an den Magisterium A2A-Endpunkt, den Abruf der resultierenden Aufgabe und das Lesen der strukturierten Antwort.
Voraussetzungen
- Ein kostenpflichtiger Magisterium-Plan (Pro, Organisation oder Enterprise). Kostenlose Konten erhalten von A2A einen
PLAN_REQUIREDFehler. - Ein OAuth-2.0-Access-Token, das mit Ihrem
magisterium.com-Konto verknüpft ist. A2A nutzt denselben OAuth-Flow wie der Magisterium MCP-Server; ermitteln Sie die Endpunkte für Autorisierung, Token und dynamische Registrierung aus den OAuth-Metadaten unterhttps://www.magisterium.com/.well-known/oauth-authorization-server. - Die Skills, die Sie aufrufen möchten — siehe Skills für die vollständige Liste.
Hinweis: Die langlebigen API-Schlüssel, die in der API-Konsole erstellt werden, funktionieren für Chat Completions, Search und News, sind aber nicht gültig für A2A — A2A akzeptiert ausschließlich über OAuth ausgestellte Benutzer-Tokens.
Exportieren Sie Ihr Access Token als Umgebungsvariable, damit die folgenden Beispiele es automatisch übernehmen:
export MAGISTERIUM_TOKEN=<your-access-token-here>Schritt 1: Den Agenten entdecken
Bevor Sie den Endpunkt aufrufen, können Sie die öffentliche Agent Card abrufen, um zu sehen, welche Skills verfügbar sind, und die Protokollversion zu bestätigen:
curl https://www.magisterium.com/.well-known/agent.jsonDie Karte erfordert keine Authentifizierung. Orchestratoren können sie eine Stunde lang zwischenspeichern — der Endpunkt setzt Cache-Control: public, max-age=3600.
Schritt 2: Ihre erste Nachricht senden
Alle A2A-Operationen laufen über einen einzigen JSON-RPC-Endpunkt: POST https://www.magisterium.com/api/v1/a2a. Das folgende Beispiel ruft message/send auf dem catholic_qa-Skill auf.
curl -X POST https://www.magisterium.com/api/v1/a2a \
-H "Authorization: Bearer $MAGISTERIUM_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "message/send",
"params": {
"message": {
"role": "user",
"messageId": "msg-001",
"kind": "message",
"parts": [{ "kind": "text", "text": "What does the Church teach about the Real Presence?" }],
"metadata": { "skillId": "catholic_qa" }
}
}
}'const accessToken = process.env.MAGISTERIUM_TOKEN!;
const response = await fetch("https://www.magisterium.com/api/v1/a2a", {
method: "POST",
headers: {
Authorization: `Bearer ${accessToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "message/send",
params: {
message: {
role: "user",
messageId: crypto.randomUUID(),
kind: "message",
parts: [
{ kind: "text", text: "What does the Church teach about the Real Presence?" },
],
metadata: { skillId: "catholic_qa" },
},
},
}),
});
const { result: task } = await response.json();
console.log(task.id, task.status.state);
for (const artifact of task.artifacts ?? []) {
for (const part of artifact.parts) {
if (part.kind === "text") console.log(part.text);
}
}import os
import uuid
import httpx
access_token = os.environ["MAGISTERIUM_TOKEN"]
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "message/send",
"params": {
"message": {
"role": "user",
"messageId": str(uuid.uuid4()),
"kind": "message",
"parts": [
{"kind": "text", "text": "What does the Church teach about the Real Presence?"}
],
"metadata": {"skillId": "catholic_qa"},
}
},
}
response = httpx.post(
"https://www.magisterium.com/api/v1/a2a",
headers={
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json",
},
json=payload,
timeout=60,
)
task = response.json()["result"]
print(task["id"], task["status"]["state"])
for artifact in task.get("artifacts", []):
for part in artifact["parts"]:
if part["kind"] == "text":
print(part["text"])Schritt 3: Die Antwort lesen
message/send gibt ein Task-Objekt mit kind: "task" zurück. Ein synchroner Skill-Aufruf endet immer in einem von zwei Endzuständen:
status.state == "completed"— die Ergebnisse befinden sich inresult.artifacts. Jedes Artefakt hat eineartifactId, einen optionalennameund einen oder mehrereparts(text,dataoderfile).status.state == "failed"— der Fehlergrund steht instatus.message.parts[0].text.
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"id": "task_abc123",
"contextId": "ctx_def456",
"kind": "task",
"status": { "state": "completed", "timestamp": "2026-04-20T12:00:00.000Z" },
"artifacts": [
{
"artifactId": "art_ghi789",
"name": "catholic_qa_response",
"parts": [
{ "kind": "text", "text": "The Catholic Church teaches..." },
{ "kind": "data", "data": { "citations": [] } }
]
}
]
}
}Schritt 4: Eine Aufgabe abrufen oder abbrechen
Aufgaben werden 24 Stunden lang gespeichert und können per ID mit tasks/get erneut abgerufen werden:
curl -X POST https://www.magisterium.com/api/v1/a2a \
-H "Authorization: Bearer $MAGISTERIUM_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tasks/get",
"params": { "id": "task_abc123" }
}'Wenn Sie eine Aufgabe abbrechen müssen, rufen Sie tasks/cancel mit derselben ID auf. Da alle Magisterium-Skills synchron aufgelöst werden, ist ein Abbruch nur in seltenen Retry-Szenarien sinnvoll — eine Aufgabe, die bereits completed oder failed ist, kann nicht abgebrochen werden und gibt INVALID_PARAMS zurück.
Häufige Fehler
| Code | Bedeutung | Lösung |
|---|---|---|
-32004 | Unauthorized | Überprüfen Sie den Authorization-Header und ob das Zugriffstoken gültig und nicht abgelaufen ist. |
-32005 | Kostenpflichtiger Plan erforderlich | Upgraden Sie Ihr Konto unter magisterium.com/plan. |
-32002 | Skill nicht gefunden | Stellen Sie sicher, dass metadata.skillId mit einer in der Agent Card aufgeführten ID übereinstimmt. |
-32003 | Rate-Limit überschritten | Warten Sie retryAfter Sekunden (im Fehler-data enthalten), bevor Sie es erneut versuchen. |
Siehe die vollständige API-Referenz für jede Methode und jeden Fehlercode.