Buni.aiDocs

Project API settings

The API Access tab of a project - keys, endpoint URLs, the External API switch, default policies, callback URL and managed webhooks.

Each chatbot and automation project has its own API settings under Settings › API Access. Tokens, defaults and limits set here apply to that project only.

The API Access tab with Getting Started with Your API, Your API Keys and Your Trigger Endpoints

Your API Keys

Lists the project's active tokens with their name, prefix, Last used time and scopes. Use New key to create one and Revoke to delete one. See Authentication.

Your Trigger Endpoints

Ready-to-copy URLs for this project, with your organization ID and project ID filled in. Select Copy URL next to the one you need.

LabelEndpointShown for
Bot Message (sync)POST /bots/{projectId}/messageChatbot
Bot Invoke (async)POST /bots/{projectId}/invokeChatbot
Flow Trigger (sync) / (async)POST /flows/{projectId}/trigger, /trigger-asyncChatbot
Automation Trigger (sync) / (async)POST /automations/{projectId}/trigger, /trigger-asyncAutomation
Invocation Logs, Invocation MetricsGET /external-invocations/logs, /metricsBoth

Logs and metrics are dashboard-only

Invocation Logs and Invocation Metrics need a signed-in Buni.ai session; an API token gets no data from them. To check one run from your code, use GET /external-invocations/{invocationId} with the token that started it.

The URLs use the address you opened the app on. Call https://www.buni.ai/... from your integration.

Advanced Settings

Expand Advanced Settings to change the project defaults. Select Save defaults to apply them.

Project Defaults

SettingDefaultWhat it does
Enable External APIOnWhen off, every token-authenticated call to this project returns 403 External API access is disabled for this project, and queued or scheduled async runs fail when they come up. Tokens stay valid for when you turn it back on.
Default enrollment policyONE_TIMEUsed when neither the request's enrollmentPolicy nor the trigger sets one. ONE_TIME or EVERY_MATCH.
Default on-error policyABORTUsed when neither the request's onErrorPolicy nor the trigger sets one. ABORT or CONTINUE.
Default callback URLEmptyWhere async runs report their result when the request has no webhookUrl. Must be https. See Async runs and callbacks.
Default callback secretEmptySigns those callbacks.
Rate limit / minutePlan defaultRequests each token may make to each endpoint per window.
Rate limit window (ms)Plan defaultLength of the rate-limit window. See Rate limits and quotas.

The policies and callback settings are resolved in this order, first match wins:

  1. The request body (enrollmentPolicy, onErrorPolicy, webhookUrl, webhookSecret).
  2. The trigger's own settings. In an automation's Trigger node, the external trigger section has Enrollment Policy, On Error Policy and a Callback Override with Callback URL and Callback Secret.
  3. The project defaults above.

The chosen policies are recorded on the invocation and passed to the run.

Managed Webhook Subscriptions

Shown once the project is published. Buni.ai creates the webhook in your Stripe, Shopify or GitHub account for you, pointed at this project, instead of you pasting a URL into the provider's dashboard.

FieldUsed for
SourceStripe, Shopify or GitHub.
Events (comma separated)The provider's event names, for example payment_intent.succeeded,invoice.paid or orders/create.
Stripe secret keyStripe only.
Shopify store domain, Shopify access tokenShopify only.
GitHub token, Repository (owner/repo), Webhook secret (optional)GitHub only.

Select Save subscription. The card then shows the subscription's Status, Endpoint, Provider ID and any Failure reason. Revoke subscription removes the webhook from the provider.

Invocation Health, templates and examples

  • Invocation Health shows counts of triggered, succeeded and failed runs, the median duration, and the most recent invocations with their status.
  • Workflow Template Library stores reusable request payloads at project or organization level. It is managed in the app only.
  • Advanced Request Examples builds a sample request (curl, Postman, JavaScript, Node Axios, Python or PHP) from fields such as Trigger key, Enrollment policy, Webhook URL, Delay seconds or Run at, and can send it with a token you paste.

How requests are checked against the trigger

Calls to /flows/.../trigger and /automations/.../trigger (sync and async) are validated against the project's Trigger node before the run starts:

  • The external trigger must be enabled on the node.
  • If you send triggerKey, it must equal the node's trigger key (default external_event).
  • The payload must contain every top-level key of the node's expected payload (Schema Config on an automation Trigger node).

A request that fails these checks returns 500 with the reasons in error, for example Payload is missing required keys: customerId. Send "dryRun": true first: the response's result.validation lists expectedKeys, actualKeys and missingKeys without running anything. Scheduled runs (runAt or delaySeconds) skip these checks when they fire.

Chatbot flows

A chatbot's Trigger node has no field for the expected payload, so it keeps the default of event and customerId. Include both as top-level fields when you call /flows/{projectId}/trigger, or check with a dry run.

Last reviewed 24 September 2026

On this page