Machen Sie Ihre Plattform AI-operabel.
Call 2,415 named operations through one contract-generated API, with least-privilege scopes, workspace pinning, dry-run validation and replay-safe writes. Subscribe to canonical events through HMAC-signed background webhooks, or build a governed package in the six-stage Connector Builder.
Scoped Request in. Signiertes Event out.
POST eine Aktion zum /api/v1.php mit einem Scoped Bearer-Schlüssel. OpsIQ pins den Workspace, validiert den Aktionsvertrag und die Berechtigungen, führt ihn dann aus oder läuft trocken durch. Abonnierte kanonische Ereignisse gehen durch eine HMAC-signierte Lieferwarteschlange mit nachvollziehbaren Versuchen und begrenzten Wiederholungen.
Vom Schlüssel zur regierten Integration in drei Stufen.
Geben Sie einen Schlüssel mit den geringsten Privilegien aus, entdecken Sie den generierten Vertrag, führen Sie ein Schreiben durch und abonnieren Sie dann einen Webhook, wenn Ihre Anwendung eine Hintergrundereignislieferung benötigt.
Holen Sie sich einen Schlüssel
Melden Sie sich an und erzeugen Sie einen Scoped Bearer API Schlüssel (in Englisch)opq_…) in Entwicklereinstellungen, und geben Sie jeder Integration nur die Oberflächen, die sie benötigt.
Entdecken & validieren
Lesen meta.actions, meta.action und meta.scopes; Verwendung dry_run um Schreibvorgänge vor der Ausführung zu validieren.
Ausführen & Abonnieren
Fügen Sie einen idempotency Schlüssel für Schreibvorgänge hinzu und abonnieren Sie dann Ihren Endpunkt zu den kanonischen Ereignissen, die Ihre Anwendung benötigt.
Ein Steckverbindermuster. Fünf saubere Primitive.
Alles, was plattformspezifisch ist, lebt in einem Connector. Der OpsIQ -Kern bleibt generisch, die KI bleibt vorhersehbar und Ihre Integration bleibt auditierbar.
Sagen Sie OpsIQ, was gerade passiert ist.
Senden Sie kanonische Ereignisse von Ihrer Plattform aus oder definieren Sie ein geregeltes benutzerdefiniertes Ereignis. Abonnenten erhalten das Ereignis über die registrierten Prioritäts- und Lieferregeln.
Datum des Ereignissesinvoice.paid, ticket.created, subscription.cancelled, customer.signed_up oder Ihre eigene.
Fan-Out-AbonnentenDas KI-Gehirn, Automatisierungsregeln, Spiegelsteckverbinder und Ihre Webhook-Endpunkte reagieren alle.
RangfolgeDeterministischer Versand, so dass Spiegel vor Alarmen Feuer schreiben.
Sagen Sie OpsIQ, was die KI tun darf.
Jede benannte Operation erhält einen generierten Vertrag: Umfang, Funktion, Lese- oder Schreibart, Risiko, Bestätigungsrichtlinie, Anfrage- und Antwortschema, Dry-Run-Unterstützung, Idempotenz und stabile Fehler.
Aktionsschema{
"action": "tickets.reply",
"kind": "write",
"scopes": ["tickets.write", "admin"],
"feature": "ticket_system",
"risk": "medium",
"confirmation": "recommended",
"idempotency": "supported",
"dry_run": true,
"request": { "type": "object" },
"response": { "required": ["success"] }
}
Push-Events auf Ihren Stack - mit kryptographischen Beweis.
Subscribe any URL to any of the 52 deliverable events. OpsIQ POSTs the JSON payload signed with HMAC-SHA256 over the scheme version, the timestamp, the delivery ID and the body together, not the body alone, so yesterday's delivery cannot be replayed at you today.
$raw = file_get_contents('php://input');
$sig = $_SERVER['HTTP_X_OPSIQ_SIGNATURE'] ?? ''; // "v2=<hex>"
$ts = (int)($_SERVER['HTTP_X_OPSIQ_TIMESTAMP'] ?? 0);
$id = (int)($_SERVER['HTTP_X_OPSIQ_DELIVERY'] ?? 0);
if (abs(time() - $ts) > 300) http_response_code(401); // replay window
[$ver, $hex] = array_pad(explode('=', $sig, 2), 2, ''); // split the prefix
$signed = $ver . '.' . $ts . '.' . $id . '.' . $raw; // NOT the body alone
$expected = hash_hmac('sha256', $signed, $secret);
if (!hash_equals($expected, $hex)) http_response_code(401);
$event = json_decode($raw, true); // $id is stable across retries
Verwenden Sie direktes HTTP oder generieren Sie den Client, den Sie bevorzugen.
Der vollständige GeneralAPI veröffentlicht als OpenAPI 3.0.3 PHP-Referenzsender plus Node- und Python-Integrationsclients decken signierte Ereignis- und Webhook-Flows ab; jeder Stack kann dasselbe aufrufen JSON Aktionsfläche direkt.
const response = await fetch(`${base}/api/v1.php`, {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.OPSIQ_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
action: "tickets.reply",
dry_run: true,
idempotency_key: crypto.randomUUID(),
body: "Thanks. We are checking this now."
})
});
$payload = json_encode([
'action' => 'tickets.reply',
'dry_run' => true,
'idempotency_key' => bin2hex(random_bytes(16)),
'body' => 'Thanks - we are checking this now.',
]);
$ch = curl_init($base . '/api/v1.php');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('OPSIQ_KEY'),
'Content-Type: application/json',
],
]);
response = requests.post(
f"{base}/api/v1.php",
headers={
"Authorization": f"Bearer {os.environ['OPSIQ_KEY']}",
"Content-Type": "application/json",
},
json={
"action": "tickets.reply",
"dry_run": True,
"idempotency_key": str(uuid.uuid4()),
"body": "Thanks - we are checking this now.",
},
)
Einmal bauen. Stecken Sie sich in alles ein.
Ein Konnektor ist ein Regelpaket, das durch Identität, Auth, Test, Aktionen, Trigger und Review generiert oder importiert wird. Sein Manifest erklärt die Fähigkeit der Oberflächen OpsIQ darf freigelegt werden.
Öffnen Sie den sechsstufigen BuilderEinfaches Englisch in. Audited Operation Out.
OpsIQ erfindet nie den richtigen Aufruf. Es geht durch die registrierten Verträge, bereitet die Nutzlast vor, fragt nach Bestätigung, wenn die Aktion es erfordert, und erzeugt eine vollständige Audit-Zeile, wenn es ausgeführt wird, also eine KI, die Akt wird nie zu einer KI, der man nicht vertrauen kann.
API Oberfläche Auf einen Blick.
One JSON POST surface exposes 2,415 named actions. Each generated contract declares auth scopes, read/write kind, risk, confirmation, request schema, dry-run, idempotency and stable errors.
ACTION tickets.replytickets.writedry_run + idempotenzKonfiguriert / StundeACTION security.reportsecurity.writedry_run + idempotenzKonfiguriert / StundeACTION platform.routes.writeAdminBestätigung + SchlüsselKonfiguriert / StundeACTION meta.actionsÖffentliche EntdeckungNur lesenKonfiguriert / StundeACTION tickets.listtickets.readNur lesenKonfiguriert / StundeACTION connectors.listconnectors.readNur lesenKonfiguriert / Stundehr.* Verträge · hr.read / hr.write AnwendungsbereicheACTION hr.people.listhr.readNur lesenKonfiguriert / StundeACTION hr.people.createhr.writedry_run + idempotenzKonfiguriert / StundeACTION hr.org.treehr.readNur lesenKonfiguriert / Stundehr Eine Ablehnung, keine leere Liste. Was PeopleOS HR ist.Die Tarifgrenzen werden pro Schlüssel in einem Stundenfenster konfiguriert. Antworten zeigen X-RateLimit-Limit, X-RateLimit-Remaining und X-RateLimit-Reset; eine abgelehnte Anfrage kehrt zurück 429 mit Retry-After. Verwenden Sie die OpenAPI 3.0.3 Vertrag oder Postbotensammlung aus denselben Laufzeitregistern generiert.
Build, Test und Release in sechs Etappen.
Beginnen Sie mit einem geregelten Profil oder definieren Sie den Vertrag selbst. Der Builder validiert jede Phase, bevor er ein in sich geschlossenes Steckverbinderpaket generiert.
Validieren Sie sicher und passieren Sie dann das Release Gate.
Verwendung dry_run bei unterstützten Schreibaktionen den Test der begrenzten Verbindung des Builders durchführen und das generierte Manifest und den Vertrag vor der Veröffentlichung prüfen; die Validierung von Paketen überprüft Fähigkeitsnamen, Einstellungen, Herkunft und erforderliche Dateien; Hintergrundmitarbeiter behandeln reaktive Abfragen und Outbound-Lieferung.
Ein Paket kann keine Fähigkeit beanspruchen Der Code hat es nicht.
OpsIQ\Connectors\ConnectorContract Runtime Discovery, der Builder, First-Party-Pakete, Konformität, die General API und jede Referenz liest, dass ein Register. Deklarieren Sie eine Fähigkeit und drei Dateien müssen vorher miteinander übereinstimmen OpsIQ Eine einzelne Reihe führt zu Ihnen.
- 01 connector.php Laufzeitklasse
- 02 IdentityProvider.php stabiler externer Schlüssel
- 03 SalesIngest.php concusi (Verkaufspreis)
- 04 actions.json benannte Operationen
- 05 settings.json Betreiberkonfiguration
- 06 connector_contract.json maschinenlesbare Behörde
hmac-sha256 über eine deterministische Nutzlast von per Datei SHA-256 Hashes Antworten wurde seit der Unterzeichnung geändert. An ed25519 Unterschriftenantworten Es wurde von Nabtech signiert, mit dem gebündelten öffentlichen Schlüssel und ohne gemeinsames Geheimnis überprüfbar.
marketplace.json liegt definitionsgemäß außerhalb der Signatur: Der Installateur schreibt sie nach dem Signieren, so dass der Publisher sie niemals hätte signieren können.
Ein Wächter, der nie versagt hat ist unbewiesen.
Grüne Tests sagen Ihnen heute nichts ist kaputt. Sie sagen Ihnen nicht, dass der Wächter, den Sie geschrieben haben, das Ding stoppen würde, für das er geschrieben wurde, weil ein Wärter, der nie ausgeübt wird, genau wie ein Wächtern geht, der nichts tut.
211 /* A read role must never reach a destructive operation. */ 212- if ($isRead && $isDestructive) { 212+ if (false) { 213 $errors[] = "read role '{$role}' points at a destructive op"; 214 return false; 215 }
1[ ok ]hash sha256 4f2a9c1e… remember the file exactly as it is 2[ ok ]control exit 0 green BEFORE anything is touched 3[ ok ]mutate 1 match, lint ok one replacement, then php -l the mutant 4[RED ]prove exit 1 and "read role destructive" IS in the failures 5[ ok ]restore bytes written the original, not a regenerated copy 6[ ok ]verify sha256 matches and the check is green again ══ PROVEN. file restored, hash matched, 1 proof run, 0 failed.
Die Mutation hat nie angewendet.
Der Suchtext stimmte nicht überein, die Datei war unberührt, die Suite bestanden und der Beweis aufgezeichnet Grün unter dem alten Code Über Code, der nie alt war. Gefangen durch die Anforderung genau einer Textübereinstimmung und Vergleich von Datei-Hashes auf beiden Seiten.
Die Mutation hat etwas anderes gebrochen.
Die Suite wurde rot, weil die Datei nicht mehr analysiert wurde oder der Bootstrap starb und der Beweis ein Rot aufzeichnete, das nichts mit dem Wächter zu tun hatte. Name Testen Sie unter den Fehlern.
Es kann keine Mutante auf der Festplatte hinterlassen.
Jede Mutation kopiert das Original auf einen Beiwagen außerhalb des web-servierten Baumes, schreibt eine Markierung mit der Bezeichnung der ausstehenden Änderung und wird von einem Shutdown-Handler auf jedem Ausstiegspfad rückgängig gemacht. Eine Markierung aus einem abgestürzten Lauf wird vor der nächsten Mutation dieser Datei geehrt.
Zertifizierung ist ein Kommando mit einem Ausstiegscode.
Not a review queue where somebody reads your code and forms an opinion. Run the same suites we run, on your own machine, before you submit. 8 published JSON Schemas under doc/contracts/schemas/ umfassen Einstellungen, Aktionen, Builder-Spezifikationen, Journey- und Commerce-Event-Mappings, Workflow-Rezepte, Connector-Verträge und Release-Manifeste.
- manifests Parse und vereinbaren miteinander
- Fähigkeiten auf der Runtime-Klasse vorhanden
- interfaces umgesetzt, wenn erklärt
- files jede erforderliche Datei vorhanden
- Maßnahmen Die Aktionen manifestieren sich
- destructive Bestätigung der Erklärung
- Identität ein stabiler externer Schlüssel, keine E-Mail
- Wiederholung a Wiederholungs-Updates, niemals Duplikate
- Unternehmen Erklärungen entsprechen der Verlängerung
- Dokumente README, ENTWICKLUNGSBEREICH
- Schemata Jede JSON validiert
$ php tools/test_connector_conformance_all.php --connector=acme
$ php tools/test_connector_json_schemas.php
$ php tools/verify_commerce_contracts.php
$ php tools/release_gate_connectors.php --require-signatures
Richten Sie den ersten auf ein echtes Nicht-Produktionskonto mit --live-settings=/secure/test-acme.jsonWährend Sie noch iterieren, tauschen Sie den letzten für --unsigned-ok: Es behandelt eine fehlende Signatur als erwartete Warnung, anstatt so zu tun, als wäre es in Ordnung.
Erklären, was Sie verkaufen können Es ist eine Datei, keine Registrierung.
Ein Steckverbinder, der verkaufen kann, erklärt, welche von eigene Betriebsanweisungen OpsIQDie kanonischen Handelsrollen. Das Vorhandensein der Datei ist die Behauptung. Sie erscheint in den Verkaufseinstellungen, sobald sie erklärt wird und verschwindet, wenn sie aufhört. Es gibt keine Liste, der man beitreten kann und niemanden, den man fragen kann.
Ein kanonisches Schreibe Die Übereinstimmung ist strukturell: ein Speichernumer neben einem mutierenden Verb, was auch immer Ihre Namenskonvention ist. Das Schreiben der Business-Zeile überspringt die Preisgestaltung, Verfügbarkeitssperrung und Bestätigungsmail der Plattform und erzeugt eine Bestellung, an die das System des Händlers glaubt nur die Hälfte. Nein recovery Auch ein Timeout wäre nicht wiederherstellbar.
{
"commerce": {
"roles": {
"catalog_search": { "operation": "acme_search_products", "transport": "http" },
"order_get": { "operation": "acme_get_order", "transport": "http" },
"order_create": { "operation": "acme_create_order", "transport": "http",
"recovery": "acme_get_order" }
}
}
}
connector_contract.json wird generiert und seine Schemasätze additionalProperties:false, so dass ein von Hand verfasster Block dort die Validierung nicht bestehen würde und dann beim nächsten Generatorlauf überschrieben wird.
Eine Rolle, die nicht in CommerceRole OpsIQ leitet niemals einen von einem Operationsnamen ab, weil ein Name kein Versprechen ist.
Die Operation muss in Ihrem actions.jsonEine Erklärung, die nicht existiert, verspricht dem Kunden etwas, das dann nichts produziert.
Die gefährlichste Zeitüberschreitung ist die, nachdem die Plattform die Arbeit möglicherweise bereits erledigt hat.
Jede Rolle der Zahlungsklasse erklärt auch payment_profile mit dem Umwelt, webhook_verify das System des Anbieters selbst nutzen und event_mapEine nicht angegebene Umgebung ist, wie ein Testmodus-Anbieter eine Live-Zahlung nimmt.
OpsIQ vs. a DIY Integration.
Was für eine vertragsgebundene, unterzeichnete, geprüfte Plattform Ihnen bietet, dass das Rollen Ihrer eigenen Webhooks und AI-Action-Klebeinstallation niemals wird.
| Leistungsfähigkeit | Roll Your Own | OpsIQ |
|---|---|---|
| Scoped Bearer API + HMAC-signierte Webhooks | Handgerollt | ✓ |
| Dry-Run schreibt + 24 h erfolgreiche Wiederholung | DIY | ✓ |
| 1 m→5 m→30 m→ 2h → 12hWiederholungsversuche | DIY-Warteschlange | ✓ |
| Action-Vertragsregister (KI kann keine Anrufe erfinden) | — | ✓ |
| Bestätigungsrichtlinie vor Nebenwirkungen | — | ✓ |
| Stabile Fehlerumschlag + Request-IDs | Manuelle Protokollierung | ✓ |
| Direkt HTTP + generierte Clientoptionen | Schreibe dein eigenes | ✓ |
| OpenAPI 3.0.3 maschinenlesbarer Vertrag | Vielleicht | ✓ |
| Sechsstufiger Builder + Package Release Gate | Erstellen Sie eine Toolchain | ✓ |
| Workspace-angepinnte Tasten und Stundenlimits | Sorten | ✓ |
| Steckermuster: Plattformcode bleibt isoliert | — | ✓ |
Entwicklerfragen, beantwortet.
Authentifizierung, Verträge, Retries, Clientgenerierung, sicheres Testen und das Steckverbindermodell vor der ersten Produktionsanforderung.
Authorization: Bearer opq_…. Schlüssel können uneingeschränkt, eingeschränkt oder nur lesbar sein, Bereiche mit den geringsten Privilegien enthalten, eine Stundengrenze einhalten und an einen Arbeitsbereich angeheftet werden. X-OpsIQ-Signature, X-OpsIQ-Timestamp, X-OpsIQ-Event und X-OpsIQ-Delivery.hash_hmac('sha256', $rawBody, $secret) und vergleichen Sie seinen hexadezimalen Digest mit X-OpsIQ-Signature Verwendung hash_equals. Validieren X-OpsIQ-Timestamp innerhalb Ihres Wiedergabefensters und verwenden X-OpsIQ-Delivery als rückverfolgbare Lieferkennung.dry_run Führen Sie bei Aktionen, deren generierter Vertrag ihn unterstützt, den Bounded Connection Test des Connector Builders aus, inspizieren Sie die erzeugten Dateien und übergeben Sie die Paketkonformitäts- und Releasegates, bevor Sie den Verbinder als fertig behandeln.settings.json, optional actions.json, einen Vertrag über generierte Fähigkeiten, Dokumentation und optionale Unternehmenserweiterungen; der sechsstufige Builder stellt ihn zusammen; das Register entdeckt ihn; Konformitäts- und Freigabegates validieren ihn.