Lav din platform - Kan betjenes.
Call 2,418 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.
- Jeg har bedt om det. Underskrevet.
PATTERSON en aktion til /api/v1.php med en scoped Bearer nøgle. OpsIQ pins arbejdsrummet, validerer den handling kontrakt og tilladelser, derefter udfører eller tør- kører det. Tegnet kanoniske begivenheder forlade gennem en HMAC-signeret levering kø med sporbare forsøg og afgrænset genveje.
Fra nøgle til styret integration i tre trin.
Udsted en least-privilege nøgle, opdage den genererede kontrakt, tør- køre en skrive, og derefter abonnere på en webhook, når din ansøgning har brug for baggrund begivenhed levering.
Få en nøgle
Tilmeld og generér en opfanget Beater API nøgle (opq_…) i udviklerindstillinger, og give hver integration kun de overflader, det har brug for.
Oplev & validitetName
Læs meta.actions, meta.action og meta.scopes; brug dry_run at validere skriver før henrettelse.
Kør & abonnement
Tilføj en idempotens-nøgle til skriver, og skriv derefter dit endepunkt på de kanoniske begivenheder din ansøgning har brug for.
Et stik mønster. Fem rene primitive.
Alt platform- specifikke lever i en konnektor. OpsIQ kerne forbliver generiske, AI forbliver forudsigelig, og din integration forbliver audible.
Fortæl OpsIQ, hvad der lige skete.
Emit kanoniske begivenheder fra din platform, eller definere en styret brugerdefineret begivenhed. Abonnenter modtager begivenheden gennem den registrerede prioritet og leveringsregler.
Begivenhedsreferenceinvoice.paid, ticket.created, subscription.cancelled, customer.signed_up eller din egen.
Fanoout abonnenterAI-hjernen, automatiseringsregler, spejlkonnektorer og dine webhook endepunkter reagerer alle.
Prioriteret rækkefølgeAfsendelsessystemet er deterministisk, så spejle skriver før ild.
Fortælle OpsIQ hvad AI 'en har lov til at gøre.
Hver navngivet operation modtager en genereret kontrakt: omfang, funktion, læse eller skrive art, risiko, bekræftelsespolitik, anmodning og svar skema, tørrun støtte, idemagogi og stabile fejl.
Handlingsplan{
"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"] }
}
Skub begivenheder til din stak - med kryptografisk bevis.
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
Brug direkte HTTP eller generere den klient, du foretrækker.
Den fulde generalAPI er offentliggjort som OpenAPI 3.0.3 og Postman. PHP reference sendere plus Node og Python integration klienter dækker signeret begivenhed og webhook strømme; enhver stak kan kalde det samme JSON aktionsoverflade direkte.
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.",
},
)
Byg engang, sæt dig ind i alt.
Et stik er en styret pakke genereret eller importeret gennem Identitet, Auth, Test, Handlinger, Triggers og anmeldelse. Dens manifest erklærer de kapacitetsområder OpsIQ er tilladt at afsløre.
Åbn 6-trins bygherre- Enkelt engelsk. - Den er færdig.
OpsIQ opfinder aldrig det rigtige opkald. Det går gennem de registrerede kontrakter, forbereder nyttelasten, beder om bekræftelse, når handlingen kræver det, og producerer en komplet revision række, når det udfører, så en AI, der kan handling bliver aldrig en AI, man ikke kan stole på.
API overflade på et blik.
One JSON POST surface exposes 2,418 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 + idempotensKonfiguration / timeACTION security.reportsecurity.writedry_run + idempotensKonfiguration / timeACTION platform.routes.writeadminbekræftelse + nøgleKonfiguration / timeACTION meta.actionsOffentlig opdagelseKun læstKonfiguration / timeACTION tickets.listtickets.readKun læstKonfiguration / timeACTION connectors.listconnectors.readKun læstKonfiguration / timehr.* kontrakter · hr.read / hr.write ScopesACTION hr.people.listhr.readKun læstKonfiguration / timeACTION hr.people.createhr.writedry_run + idempotensKonfiguration / timeACTION hr.org.treehr.readKun læstKonfiguration / timehr får en afvisning, ikke en tom liste. PeopleOS HR 's virkning.Rate grænser er konfigureret pr. nøgle på en time vindue. Responses blockage X-RateLimit-Limit, X-RateLimit-Remaining og X-RateLimit-Reset; en afvist anmodning returneres 429 med Retry-After. Brug OpenAPI 3.0.3 kontrakt eller Postmansamling genereres fra de samme runtime registre.
Byg, test og slip ind seks etaper.
Start fra en styret profil eller definer selv kontrakten. Byggeren validerer hvert trin, før den genererer en selvbehersket konnektor pakke.
Validér sikkert, og send så udløsningsporten.
Anvendelse dry_run på understøttede skrive handlinger, køre Builder 's afgrænset forbindelse test, og inspicer den genererede manifest og kontrakt før udgivelse. Pakke validering kontrol af kapacitet navne, indstillinger, herkomst og nødvendige filer; baggrund arbejdere håndterer reaktiv polling og udgående levering.
En pakke kan ikke kræve en kapacitet dens kode ikke har.
OpsIQ\Connectors\ConnectorContract er den myndighed. Runtime opdagelse, Builder, first-part pakker, overensstemmelse, Den generelle API og hver reference læste, at en registreringsdatabasen. Declare en evne og tre filer er nødt til at være enige med hinanden før OpsIQ ruterne en enkelt række til dig.
- 01 connector.php klasse af køretid
- 02 IdentityProvider.php stabil ekstern nøgle
- 03 SalesIngest.php AftalSalg ()
- 04 actions.json navngivne operationer
- 05 settings.json operatørkonfiguration
- 06 connector_contract.json maskinlæsbar myndighed
hmac-sha256 over en deterministisk nyttelast af per- fil SHA-256 hash- svar er blevet ændret siden undertegnelsen. An ed25519 signatursvar var det underskrevet af Nabtech, kan kontrolleres med den bundtede offentlige nøgle og ingen delt hemmelighed. Redigér en byte og de første stopper matchning.
marketplace.json er uden for underskriften pr. definition: installeringsprogrammet skriver det efter underskrift, så forlaget kunne aldrig have underskrevet det.
En vagt, der aldrig har fejlet er ubevist.
De siger ikke, at den vagt, du skrev, ville stoppe det, der stod skrevet for at stoppe, fordi en vagt, som aldrig bliver udøvet, går nøjagtig som en vagt der intet gør. Så vi stopper dens hjerte med vilje og kræver, at monitoren skriger.
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.
Mutationen har aldrig fundet sted.
Søgningsteksten matcher ikke, filen var uberørt, suiten passerede, og beviset er optaget grøn under den gamle kode om kode, der aldrig var gammel. Fanget ved at kræve præcis en tekstmæssig match og sammenligne fil hashes begge sider.
Mutationen ødelagde noget andet.
Suiten gik rød, fordi filen stoppede parsing eller bootstrap døde, og beviset indspillet en rød, der ikke havde noget at gøre med vagten. Fanget ved linting mutanten og kræver navngivet test blandt fejlene.
Det kan ikke efterlade en mutant på disken.
Hver mutation kopierer originalen til en sidevogn uden for webserveret træ, skriver et markør navngivning den udestående ændring, og er fortrudt af en nedlukning håndteringskanal på hver exit sti. En markør fra en styrtede løb er hædret før den næste mutation af filen.
Certificering er en kommando med en udgangskode.
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/ dække indstillinger, handlinger, Builder specs, rejse og handel begivenhed tilknytninger, workflow opskrifter, konnektor kontrakter og release manifester.
- manifests parse og aftale med hinanden
- kapaciteter findes på runtime klassen
- interfaces gennemføres, hvis det er anmeldt
- files hver krævet fil til stede
- aktioner matche de handlinger manifestere
- destructive Bekræft
- identitet en stabil ekstern nøgle, ikke e-mail
- spil igen en gentagelse af opdateringer, aldrig duplikerer
- virksomhed erklæringer, der matcher forlængelsen
- Dokumenter README, REYOPER, CHANGELOG
- skemaer hver JSON validerer
$ 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
Punkter den første på en reel ikke-produktion konto med --live-settings=/secure/test-acme.jsonMens du stadig er iterating, byt den sidste for --unsigned-ok: det behandler en manglende underskrift som en forventet advarsel snarere end foregive, at det er fint.
Erklærer hvad du kan sælge er en fil, ikke en registrering.
En konnektor, der kan sælge erklærer, hvilken af sine egne Operationer besvarer OpsIQ 's kanoniske handelsroller. Tilstedeværelsen af filen er kravet. Det vises i salgsindstillingerne det øjeblik, den erklærer og forsvinder, når den stopper. Der er ingen liste at deltage i, og ingen at spørge.
En kanonisk skrive rolle kortlagt til en generisk rekord skrive. Kampen er strukturel: et lagernavneord ved siden af et muterende verbum, uanset din navngivning konvention. Skrivning business række direkte springer platformens priser, tilgængelighed låsning og bekræftelse mail, og producerer en ordre handelsmandens eget system kun halvdelen tror på. recovery - Så en timeout er uinddrivelig.
{
"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 genereres og dens skema sæt additionalProperties:false, så en håndskrevet blok der ville mislykkes validering og derefter blive overskrevet på den næste generator køre.
En rolle, der ikke CommerceRole findes ikke. OpsIQ udleder aldrig en fra et operations navn, fordi et navn ikke er et løfte.
Operationen skal vises i din actions.jsonAt erklære en, der ikke eksisterer, lover kunden noget, som så ikke producerer noget.
Den farligste timeout er den, efter at platformen kan allerede har gjort arbejdet. Uden en idempotent "gjorde min skrive land" opslag, de eneste muligheder er prøve blind eller miste ordren.
Enhver betalings- klasse rolle også erklærer payment_profile med miljø, webhook_verify ved hjælp af udbyderens egen ordning, og event_map. Et uangivet miljø er, hvordan en test- mode udbyder tager en live betaling.
OpsIQ vs en Det er en integration.
Hvilket kontraktbundet, underskrevet, revideret platform giver dig, at rullende dine egne webkroge og AI- action VVS aldrig vil.
| Kapacitet | Rul din egen | OpsIQ |
|---|---|---|
| Scoped Beater API + HMAC- signerede webkroge | Håndvalset | ✓ |
| Dry- run skriver + 24- time succesfuld spil | Det gør jeg. | ✓ |
| 1m → 5m → 30m →2h → 12h Retues | DIY kø | ✓ |
| Action- contract register (AI kan ikke opfinde opkald) | — | ✓ |
| Bekræftelsespolitik før bivirkninger | — | ✓ |
| Stabil fejlkonvolut + anmodningsID | Manuel logning | ✓ |
| Direkte HTTP + genererede klientindstillinger | Skriv dine egne | ✓ |
| OpenAPI 3.0.3 maskinlæsbar kontrakt | Måske. | ✓ |
| Six- stage Builder + pakke release gate | Opbygge en værktøjskæde | ✓ |
| Arbejdsrumstaster og timegrænser | Varers | ✓ |
| Forbindelsesmønster: platformkode forbliver isoleret | — | ✓ |
Udvikler spørgsmål, Det er ikke det, jeg vil sige.
Autentificering, kontrakter, genforsøg, kundegenerering, sikker prøvning og stikkontakt model, før den første produktionsanmodning.
Authorization: Bearer opq_…. Nøgler kan være ubegrænset, begrænset eller read- only, bære mindst-priviligation scope, adlyde en time grænse og kan fastgøres til et arbejdsområde. Webhook signering er separat: udgående leverancer carry X-OpsIQ-Signature, X-OpsIQ-Timestamp, X-OpsIQ-Event og X-OpsIQ-Delivery.hash_hmac('sha256', $rawBody, $secret) og sammenligne sin hexadecimal digest med X-OpsIQ-Signature brug hash_equals. Validér X-OpsIQ-Timestamp inden for dit genafspilningsvindue og brug X-OpsIQ-Delivery som identifikatoren for den sporbare levering.dry_run på handlinger, hvis genereret kontrakt understøtter det, køre Connector Builder 's afgrænset forbindelse test, inspicere sine genererede filer, og passere pakken overensstemmelse og frigive gates før behandling af stikket som klar.settings.json, fakultativ actions.json, en genereret kapacitet kontrakt, dokumentation og valgfri enterprise udvidelser. Den seks- trins Builder samler det; registret opdager det; overensstemmelse og frigivelse gates validere det.