Make your platform AI-operable.
Call 1,728 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. Signed event out.
POST an action to /api/v1.php with a scoped Bearer key. OpsIQ pins the workspace, validates the action contract and permissions, then executes or dry-runs it. Subscribed canonical events leave through an HMAC-signed delivery queue with traceable attempts and bounded retries.
From key to governed integration in three steps.
Issue a least-privilege key, discover the generated contract, dry-run a write, then subscribe a webhook when your application needs background event delivery.
Get a key
Sign up and generate a scoped Bearer API key (opq_…) in developer settings, and give each integration only the surfaces it needs.
Discover & validate
Read meta.actions, meta.action and meta.scopes; use dry_run to validate writes before execution.
Execute & subscribe
Add an idempotency key for writes, then subscribe your endpoint to the canonical events your application needs.
One connector pattern. Five clean primitives.
Anything platform-specific lives in a connector. The OpsIQ core stays generic, the AI stays predictable, and your integration stays auditable.
Tell OpsIQ what just happened.
Emit canonical events from your platform, or define a governed custom event. Subscribers receive the event through the registered priority and delivery rules.
Event referenceinvoice.paid, ticket.created, subscription.cancelled, customer.signed_up or your own.
Fan-out subscribersThe AI brain, automation rules, mirror connectors and your webhook endpoints all react.
Priority orderDeterministic dispatch so mirrors write before alerts fire.
Tell OpsIQ what the AI is allowed to do.
Every named operation receives a generated contract: scope, feature, read or write kind, risk, confirmation policy, request and response schema, dry-run support, idempotency and stable errors.
Action schema{
"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 to your stack - with cryptographic proof.
Subscribe any URL to any event. OpsIQ POSTs the JSON payload signed with HMAC-SHA256 over the raw body - verify it in a few lines.
$raw = file_get_contents('php://input');
$sig = $_SERVER['HTTP_X_OPSIQ_SIGNATURE'] ?? '';
$expected = hash_hmac('sha256', $raw, $secret); // hex digest, no prefix
if (!hash_equals($expected, $sig)) http_response_code(401);
$event = json_decode($raw, true);
Use direct HTTP or generate the client you prefer.
The full General API is published as OpenAPI 3.0.3 and Postman. PHP reference senders plus Node and Python integration clients cover signed event and webhook flows; any stack can call the same JSON action surface directly.
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.",
},
)
Build once. Plug into anything.
A connector is a governed package generated or imported through Identity, Auth, Test, Actions, Triggers and Review. Its manifest declares the capability surfaces OpsIQ is allowed to expose.
Open the six-stage BuilderPlain English in. Audited operation out.
OpsIQ never invents the right call. It walks through the registered contracts, prepares the payload, asks for confirmation when the action requires it, and produces a complete audit row when it executes, so an AI that can act never becomes an AI you can't trust.
API surface at a glance.
One JSON POST surface exposes 1,728 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 + idempotencyConfigured / hourACTION security.reportsecurity.writedry_run + idempotencyConfigured / hourACTION platform.routes.writeadminconfirmation + keyConfigured / hourACTION meta.actionsPublic discoveryRead onlyConfigured / hourACTION tickets.listtickets.readRead onlyConfigured / hourACTION connectors.listconnectors.readRead onlyConfigured / hourRate limits are configured per key on an hourly window. Responses expose X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset; a rejected request returns 429 with Retry-After. Use the OpenAPI 3.0.3 contract or Postman collection generated from the same runtime registries.
Build, test and release in six stages.
Start from a governed profile or define the contract yourself. The Builder validates each stage before it generates a self-contained connector package.
Validate safely, then pass the release gate.
Use dry_run on supported write actions, run the Builder's bounded connection test, and inspect the generated manifest and contract before release. Package validation checks capability names, settings, provenance and required files; background workers handle reactive polling and outbound delivery.
OpsIQ vs a DIY integration.
What a contract-bound, signed, audited platform gives you that rolling your own webhooks and AI-action plumbing never will.
| Capability | Roll your own | OpsIQ |
|---|---|---|
| Scoped Bearer API + HMAC-signed webhooks | Hand-rolled | ✓ |
| Dry-run writes + 24-hour successful replay | DIY | ✓ |
| 1m → 5m → 30m → 2h → 12h retries | DIY queue | ✓ |
| Action-contract registry (AI can't invent calls) | — | ✓ |
| Confirmation policy before side-effects | — | ✓ |
| Stable error envelope + request IDs | Manual logging | ✓ |
| Direct HTTP + generated client options | Write your own | ✓ |
| OpenAPI 3.0.3 machine-readable contract | Maybe | ✓ |
| Six-stage Builder + package release gate | Build a toolchain | ✓ |
| Workspace-pinned keys and hourly limits | Varies | ✓ |
| Connector pattern: platform code stays isolated | — | ✓ |
Developer questions, answered.
Authentication, contracts, retries, client generation, safe testing and the connector model, before the first production request.
Authorization: Bearer opq_…. Keys can be unrestricted, restricted or read-only, carry least-privilege scopes, obey an hourly limit and can be pinned to a workspace. Webhook signing is separate: outbound deliveries carry X-OpsIQ-Signature, X-OpsIQ-Timestamp, X-OpsIQ-Event and X-OpsIQ-Delivery.hash_hmac('sha256', $rawBody, $secret) and compare its hexadecimal digest with X-OpsIQ-Signature using hash_equals. Validate X-OpsIQ-Timestamp within your replay window and use X-OpsIQ-Delivery as the traceable delivery identifier.dry_run on actions whose generated contract supports it, run the Connector Builder's bounded connection test, inspect its generated files, and pass the package conformance and release gates before treating the connector as ready.settings.json, optional actions.json, a generated capability contract, documentation and optional enterprise extensions. The six-stage Builder assembles it; the registry discovers it; conformance and release gates validate it.