Maak uw platform Al-operable.
Call 2,420 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.
- Een verzoek van de orde. Getekend evenement.
POST een actie aan /api/v1.php met een scoped Bearer-toets. OpsIQ pinnen de werkruimte, valideert het actiecontract en machtigingen, voert dan uit of droogt deze uit. Geplaatst canonieke gebeurtenissen vertrekken via een HMAC-signede leveringswachtrij met traceerbare pogingen en begrensde herhalingen.
Van sleutel tot bestuurlijke integratie in Drie stappen.
Geef een minst-privilege sleutel, ontdek het gegenereerde contract, dry-run een schrijven, dan abonneer je op een webhook wanneer uw toepassing moet achtergrond evenement levering.
Haal een sleutel.
Meld u aan en genereer een scoped Bearer _API sleutel (opq_…) in de instellingen van de ontwikkelaar, en geven elke integratie alleen de oppervlakken die het nodig heeft.
Ontdek & valideren
Gelezen meta.actions, meta.action en meta.scopes; gebruik dry_run om schrijfbrieven te valideren voordat ze worden uitgevoerd.
& Abonneren uitvoeren
Voeg een idempotency sleutel voor schrijfsels toe, en schrijf vervolgens je eindpunt in op de canonieke gebeurtenissen die jouw toepassing nodig heeft.
Eén connectorpatroon. Vijf schone primitieven.
Alles wat per platform specifiek in een connector leeft. De kern OpsIQ blijft generiek, de AI blijft voorspelbaar en je integratie blijft auditeerbaar.
Vertel. OpsIQ Wat er net gebeurde.
Emit canonical events van uw platform, of definieer een geregeerde aangepaste gebeurtenis. Abonnees ontvangen het evenement via de geregistreerde prioriteit en leveringsregels.
Referentie gebeurtenisinvoice.paid, ticket.created, subscription.cancelled, customer.signed_up Of je eigen.
Abonnees voor de ventilatorDe AI-hersenen, automatiseringsregels, spiegelconnectoren en je webhaak-eindpunten reageren allemaal.
PrioriteitDeterministische verzending, zodat spiegels schrijven voordat ze brand melden.
Vertel OpsIQ wat de AI mag doen.
Elke genoemde operatie ontvangt een gegenereerd contract: scope, feature, lees of schrijf soort, risico, bevestigingsbeleid, aanvraag en responsschema, dry-run ondersteuning, idempotency en stabiele fouten.
Actieschema{
"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"] }
}
Druk gebeurtenissen naar uw stack - met cryptografische bewijs.
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
Gebruik directe HTTP of maak de client die u verkiest.
De volledige generaalAPI wordt gepubliceerd als OpenAPI 3.0.3 en Postman. PHP referentie afzenders plus Node en Python integratie clients dekken ondertekende event en webhook flows; elke stack kan hetzelfde bellen JSON het actieoppervlak direct.
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.",
},
)
Bouw één keer, plug alles in.
Een connector is een bestuurd pakket dat wordt gegenereerd of geïmporteerd via Identity, Auth, Test, Acties, Triggers en Review. Het manifest verklaart de vermogensoppervlakten OpsIQ mag ontmaskeren.
Open de zestrapsbouwerGewoon Engels in. Gecontroleerde operatie.
OpsIQ nooit de juiste oproep uitvinden. Het loopt door de geregistreerde contracten, bereidt de lading, vraagt om bevestiging wanneer de actie vereist, en produceert een volledige audit rij als het uitvoert, dus een AI die kan besluit wordt nooit een Al die je niet kunt vertrouwen.
API oppervlakte in een oogopslag.
One JSON POST surface exposes 2,420 named actions. Each generated contract declares auth scopes, read/write kind, risk, confirmation, request schema, dry-run, idempotency and stable errors.
ACTION tickets.replytickets.writedroog_run + idempotencyGeconfigureerd / uurACTION security.reportsecurity.writedroog_run + idempotencyGeconfigureerd / uurACTION platform.routes.writeadminbevestiging + sleutelGeconfigureerd / uurACTION meta.actionsOpenbare ontdekkingAlleen lezenGeconfigureerd / uurACTION tickets.listtickets.readAlleen lezenGeconfigureerd / uurACTION connectors.listconnectors.readAlleen lezenGeconfigureerd / uurhr.* contracten · hr.read / hr.write toepassingsgebiedACTION hr.people.listhr.readAlleen lezenGeconfigureerd / uurACTION hr.people.createhr.writedroog_run + idempotencyGeconfigureerd / uurACTION hr.org.treehr.readAlleen lezenGeconfigureerd / uurhr Hij krijgt een weigering, geen lege lijst. Wat PeopleOS HR is.De limiet van de tarieven wordt per sleutel ingesteld op een uur venster. X-RateLimit-Limit, X-RateLimit-Remaining en X-RateLimit-Reset; een afgewezen verzoek wordt teruggestuurd 429 met Retry-After. Gebruik de OpenAPI 3.0.3 contract of Postman collectie gegenereerd uit dezelfde runtime registers.
Bouwen, testen en loslaten in Zes stappen.
Start vanuit een bepaald profiel of definieer het contract zelf. De Builder valideert elke fase voordat het een zelfstandig connectorpakket genereert.
Valideer veilig, dan passeer de release gate.
Gebruik dry_run bij ondersteunde schrijfacties, voer de aan de Builder grenzende verbindingstest uit en inspecteer het gegenereerde manifest en contract voordat ze worden vrijgegeven. Pakketvalidatie controleert de namen van mogelijkheden, instellingen, herkomst en vereiste bestanden; achtergrondmedewerkers behandelen reactieve polling en uitgaande levering.
Een pakket kan geen vermogen claimen De code heeft geen.
OpsIQ\Connectors\ConnectorContract is het gezag. Runtime ontdekking, de Bouwer, first-party pakketten, conformance, de General API en elke verwijzing lees dat een register. Aangeven van een mogelijkheid en drie bestanden moeten met elkaar overeenkomen vóór OpsIQ leidt één rij naar je toe.
- 01 connector.php de runtime klasse
- 02 IdentityProvider.php stabiele externe sleutel
- 03 SalesIngest.php combineer sales()
- 04 actions.json genoemde bewerkingen
- 05 settings.json configuratie van de operator
- 06 connector_contract.json machineleesbare autoriteit
hmac-sha256 over een deterministische lading van per-bestand SHA-256 hashes antwoorden is dit gewijzigd sinds ondertekening- Een. ed25519 handtekening antwoorden Was het ondertekend door Nabtech, controleerbaar met de gebundelde publieke sleutel en geen gedeeld geheim. Bewerk een byte en de eerste stops overeenkomen.
marketplace.json is buiten de handtekening per definitie: het installatieprogramma schrijft het na ondertekening, zodat de uitgever nooit kon hebben ondertekend.
Een bewaker die nooit heeft gefaald is niet bewezen.
Groene tests zeggen dat je vandaag niets gebroken hebt. Ze vertellen niet dat de bewaker die je schreef zou stoppen met wat er geschreven staat, omdat een bewakers die nooit geoefend worden precies als een wachter voorbij gaan die niets doet. Dus we stoppen zijn hart expres en eisen dat de monitor gilt.
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.
De mutatie is nooit toegepast.
De zoektekst kwam niet overeen, het bestand was onaangeroerd, de suite is doorgegaan en het bewijs is opgenomen groen onder de oude code over code die nooit oud was. Gevangen door precies één tekstuele match te eisen en bestandshashes aan beide kanten te vergelijken.
De mutatie brak iets anders.
De suite werd rood omdat het dossier stopte met ontleden of de bootstrap stierf, en het bewijs nam een rode die niets te maken had met de bewaker. Gevangen door het plinten van de mutant en het eisen van de genaamd test onder de mislukkingen.
Het kan geen mutant op schijf achterlaten.
Elke mutatie kopieert het origineel naar een zijspan buiten de web-servered boom, schrijft een markeerder die de opmerkelijke verandering noemt en wordt ongedaan gemaakt door een uitschakelbehandelaar op elk afslagpad. Een markering van een gecrashte run wordt geëerd voordat de volgende mutatie van dat bestand.
Certificering is een opdracht met een uitgangscode.
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/ dekking instellingen, acties, Builder specificaties, reis en commercie event mappings, workflow recepten, connector contracten en release manifests.
- manifests met elkaar te parsen en het eens zijn
- mogelijkheden bestaan op de runtime klasse
- interfaces uitgevoerd indien aangegeven
- files elk gewenst bestand aanwezig
- acties overeenkomen met de acties manifest
- destructive declareer bevestiging
- identiteit een stabiele externe sleutel, geen e-mail
- opnieuw afspelen een herhaling van updates, nooit dupliceert
- onderneming verklaringen komen overeen met de uitbreiding
- documenten LEZING, DEVELOPER, VERANDERINGSLAG
- schema's elke JSON valideert
$ 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
De eerste op een echte niet-productierekening wijzen met --live-settings=/secure/test-acme.json. Terwijl u nog steeds aan het itereren bent, ruil de laatste voor --unsigned-ok: het behandelt een ontbrekende handtekening als een verwachte waarschuwing in plaats van te doen alsof het prima is.
Aangeven wat je kunt verkopen is een bestand, geen registratie.
Een connector die kan verkopen, verklaart welke van haar eigen Opdrachten beantwoorden OpsIQ's canonieke handel rollen. De aanwezigheid van het bestand is de claim. Het verschijnt in de verkoopinstellingen op het moment dat het verklaart en verdwijnt wanneer het stopt. Er is geen lijst om mee te doen en niemand om naar te vragen.
Een canonieke schrijven rol die is toegewezen aan een algemene record schrijven. De match is structureel: een opslagnaamwoord naast een veranderend werkwoord, ongeacht uw naamgeving conventie. Het schrijven van de bedrijfsrij direct slaat prijzen, beschikbaarheid vergrendeling en bevestiging mail van het platform, en produceert een bestelling de handelaar eigen systeem slechts half gelooft in. Nee recovery Een time-out is dus niet te herstellen.
{
"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 wordt gegenereerd en zijn schema-sets additionalProperties:falseEen met de hand geschreven blok zou dus falen en dan worden overschreven op de volgende generatorrun.
Een rol die niet in CommerceRole bestaat niet. OpsIQ leidt er nooit een uit een operatienaam, omdat een naam geen belofte is.
De operatie moet verschijnen in uw actions.json. Een verklaring die niet bestaat belooft de klant iets dat vervolgens produceert niets.
De gevaarlijkste timeout is degene nadat het platform al gedaan kan hebben. Zonder een idempotent "heeft mijn schrijfland" opzoeking, de enige opties zijn opnieuw proberen blind of verliezen van de bestelling.
Elke rol van betalingsklasse verklaart ook payment_profile met de milieu, webhook_verify gebruik maken van de eigen regeling van de aanbieder, en event_map. Een onopgegeven omgeving is hoe een test-mode provider een live betaling neemt.
OpsIQ vs een Integratie van doe-het-zelf.
Wat een contract gebonden, ondertekend, gecontroleerd platform geeft je dat het rollen van uw eigen webhooks en AI-actie loodgieters nooit zal.
| Vermogen | Rol je eigen | OpsIQ_ |
|---|---|---|
| Scoped Bearer API + HMAC-ondertekende webhooks | met de hand gewalst | ✓ |
| Dry-run schrijft + 24-uur succesvolle herhaling | Doe-het-zelf | ✓ |
| 1m→5m→30m→ 2h → 12hherstarten | DIY wachtrij | ✓ |
| Actie-contract register (AI kan oproepen niet uitvinden) | — | ✓ |
| Bevestigingsbeleid vóór bijwerkingen | — | ✓ |
| Stabiele fout envelop + verzoek ID's | Handmatig loggen | ✓ |
| Directe HTTP + gegenereerde clientopties | Schrijf je eigen | ✓ |
| OpenAPI 3.0.3 machineleesbaar contract | Misschien. | ✓ |
| Zestraps bouwer + pakket release gate | Een gereedschapsketen bouwen | ✓ |
| Werkruimte-gepinde sleutels en uurlimieten | Varieert | ✓ |
| Connectorpatroon: platformcode blijft geïsoleerd | — | ✓ |
Ontwikkelaarsvragen, Antwoord.
Authenticatie, contracten, retrieves, klantgeneratie, veilige testen en het connectormodel, voor de eerste productieaanvraag.
Authorization: Bearer opq_…. Sleutels kunnen onbeperkt, beperkt of alleen-lezen zijn, hebben een minst privilege scopen, gehoorzamen aan een uurlimiet en kan worden gepind op een werkruimte. Webhook ondertekening is apart: uitgaande leveringen dragen X-OpsIQ-Signature, X-OpsIQ-Timestamp, X-OpsIQ-Event en X-OpsIQ-Delivery.hash_hmac('sha256', $rawBody, $secret) en vergelijk zijn hexadecimale vertering met X-OpsIQ-Signature gebruik hash_equals. Valideren X-OpsIQ-Timestamp binnen uw afspeelvenster en gebruik X-OpsIQ-Delivery als traceerbaar leveringsnummer.dry_run over acties waarvan het gegenereerde contract het ondersteunt, voer de aan de Connector Builder grenzende verbindingstest uit, inspecteer zijn gegenereerde bestanden en passeer de pakket conformance en laat poorten vrij voordat u de connector als klaar behandelt.settings.json, facultatief actions.json, een gegenereerde capaciteit contract, documentatie en optionele bedrijfsextensies. De zes-trap Builder assembleert het; de register ontdekt het; overeenstemming en release poorten valideren.