Skip to content
This page View Markdown Open in ChatGPT Open in Claude

Emit event

Emits an event of the account : its listeners run with the data, and the call answers what they returned.

Method POST
URL /api/system-api/admin/emit-event : admin is the user path of your account
Body { name, eventData?, executeListeners? } or an array of them
Answer data : the event with outputArr, one entry per listener
From code g.sys.system.emitEvent

The call

Body
{ "name": "order-placed", "eventData": { "order_no": 1001 }, "executeListeners": [ "send-invoice" ] }
Answer
{
    "success": true,
    "statusCode": 200,
    "data": { "name": "order-placed", "eventData": { "order_no": 1001 }, "executeListeners": [ "send-invoice" ], "outputArr": [ { "listenerName": "send-invoice", "output": { "notified": true } } ] }
}
Body : several events
[
    { "name": "order-placed", "eventData": { "order_no": 1001 } },
    { "name": "stock-changed", "executeListeners": [ "sync-warehouse", "alert-low-stock" ] }
]
  • executeListeners names the listeners to run ; absent, every listener of the event runs.
  • A chain which comes back to an event already running is stopped : no infinite loop.

From code

const result = await g.sys.system.emitEvent('order-placed', { order_no: 1001 }, [ 'send-invoice' ]);
g.logger.log(result.outputArr);
result = await g.sys.system.emit_event('order-placed', {'order_no': 1001}, ['send-invoice'])
g.logger.log(result.output_arr)
$result = $g->sys->system->emitEvent('order-placed', ['order_no' => 1001], ['send-invoice']);
$g->logger->log($result->outputArr);
var result = await g.Sys.System.EmitEvent("order-placed", new { order_no = 1001 }, ["send-invoice"]);
g.Logger.Log(result.OutputArr);
result, err := g.Sys.System.EmitEvent("order-placed", am.M{"order_no": 1001}, "send-invoice")
if err != nil {
    return nil, err
}
g.Logger.Log(result.OutputArr)
let result = g.sys.system.emit_event("order-placed", json!({ "order_no": 1001 }), &["send-invoice"])?;
g.logger.log(json!(result.output_arr));
EmittedEvent result = g.sys.system.emitEvent("order-placed", Map.of("order_no", 1001), List.of("send-invoice"));
g.logger.log(result.getOutputArr());
val result = g.sys.system.emitEvent("order-placed", mapOf("order_no" to 1001), listOf("send-invoice"))
g.logger.log(result.outputArr)

Access and settings

  • Over HTTP, a system API answers once its settings give it apiAccessType: TOKEN_ACCESS (the token of an API user whose group grants this system API, in x-am-authorization) or IS_PUBLIC. Without settings it is NO_ACCESS : your code calls it through g.sys, the admin panel tests it, and an HTTP call is refused. The group must also grant the event.
  • The settings can also cache the answer or require person tokens (authProviders) ; pre and post hooks run around it like around any API.
  • The request headers apply : x-am-response-case, x-am-content-type-response, x-am-internationalization, x-am-tenant-username…

Errors

Code When
400 The body is wrong : the message names the missing or invalid key.
401 No valid API user token, or the API is NO_ACCESS : You are not authorized to access this API.
403 No group grants this system API.