Client guide
Set up Agent Action Center and make your first request.
Agent Action Center documents 49 Discord and wallet actions for your existing AI agent. F5ai hosts Discord execution; wallet recovery material, signing, witnesses, construction, and submission stay in the customer environment.
Account setup
Confirm the owner and Discord community.
- Choose a package and enter the server owner's email address.
- Open the single-use confirmation link in the same browser.
- Connect Discord and choose the guild that the owner administers.
- Complete Checkout for the selected package.
- During onboarding, F5ai creates the client API key and records the guild, channel, role, and family permissions.
Checkout creates the subscription. It does not send a Discord action, change a role, submit a payout, or sign a chain transaction.
Agent quick-start
Import the contract and make a safe first call.
Use whichever schema format your existing AI agent supports. F5ai does not ask which provider or runtime you use, and you install no F5ai agent or connector. These are raw OpenAPI documents, not Markdown files, and they do not include frontmatter.
JSON URL: https://api.f5tw.vip/openapi.json
YAML URL: https://api.f5tw.vip/openapi.yaml
- Import one URL into the agent's OpenAPI, Actions, Tools, or API-schema screen.
- Configure HTTP bearer authentication with the client API key from F5ai onboarding. Never place the key in a prompt or request body.
- No executor or connector identifier belongs in a client request; F5ai derives the hosted route from the API key.
- Start with
list_actions, a read-only call. Create a customer action only after the required hosted family shows ready. - For a mutation, use a unique outer
idempotencyKey, then pollget_actionuntil the state is final.
The imported contract contains four operations: create, list, get, and complete customer-environment wallet work. Across create_action, it documents 49 bounded actions and excludes account, billing, wallet proof, admin, internal transport, and wallet recovery routes. Treat create_action as consequential even when the selected action is read-oriented because it can queue work on the hosted service.
Do not send passwords, API keys, one-time codes, payment-card data, health data, government identifiers, wallet recovery material, transaction CBOR, signing keys, signatures, or unnecessary personal data in an action.
Packages and pricing
Choose wallet services, API actions, or both.
| Action family | Calls | Included packages |
|---|---|---|
| Discord | 17 | Actions Basic includes 5; Mid includes 13; Full and Complete include all 17. |
| Wallet identity | 3 | Every wallet package and Complete. |
| Wallet roles | 3 | Wallet + Roles, Wallet + Giveaways + Roles, and Complete. |
| Customer wallet capabilities | 4 | Wallet + Giveaways, Wallet + Giveaways + Roles, and Complete. |
| Wallet giveaways | 22 | Wallet + Giveaways, Wallet + Giveaways + Roles, and Complete. |
| Complete contract | 49 | Complete Wallet + Discord. |
Package entitlement controls which families a client key can call. The OpenAPI contract documents the full action inventory and states current availability; an unentitled family fails closed.
Standard pricing is the account default. A fresh Cardano holdings check or an audited admin assignment can apply Partner pricing. Annual pricing charges the exact cost of ten monthly periods.
API basics
Use a client API key for every action request.
Base URL: https://api.f5tw.vip
Authorization: Bearer <client-api-key>
Content-Type: application/json
Create actions with POST /v1/actions. Read one action with GET /v1/actions/:id. List the tenant's actions with GET /v1/actions.
| Family | Read scope | Write and delete scopes |
|---|---|---|
| Announcements | announcements:read | announcements:write |
| Managed channels | channels:read | channels:write, channels:delete |
| Reaction roles | reaction_roles:read | reaction_roles:write, reaction_roles:delete |
| Discord roles | roles:read | roles:write |
| Wallet identity | wallet:read | wallet:write |
| Wallet roles | roles:read | roles:write |
| Customer wallet capabilities | giveaways:read | giveaways:write |
| Wallet giveaways | giveaways:read | giveaways:write, giveaways:draw |
Idempotency and action state
Every mutation uses an idempotency key. Repeating the same key and request returns the original action. Reusing the key with different content returns a conflict.
A valid request can return held while routing is unavailable. A held action is stored but is not routed later. After availability is restored, submit a new request with a new idempotency key. A request returns queued when the server has routed it to hosted execution and action_required when the calling agent must use a customer-environment wallet capability. Poll until the action reaches a final state.
Hosted execution
Call the official API without installing F5ai software.
Import the OpenAPI schema, authenticate with the scoped client API key, and send an action. F5ai derives the private hosted executor from that key, validates the tenant, entitlement, action contract, idempotency key, and command, then records the result for polling.
F5ai hosts Discord execution. Wallet creation, backup attestation, signing, witnesses, transaction construction, and submission execute only through capabilities already available in the customer's environment. Clients do not download, enroll, operate, or update an F5ai connector.
- Announcements need approved channel IDs and permission to view, send, edit, and delete the bot's messages.
- Managed channels need Manage Channels. Protected channels remain outside the hosted service's scope.
- Reaction roles need Manage Roles plus the Guilds, GuildMessageReactions, GuildMembers, and GuildMessages intents. Target roles must be unmanaged and below F5ai's highest role.
wallet.setup.createandwallet.backup.verifyreturnaction_required. The customer's agent performs the work locally and returns only the exact public result schema. Backup status is a customer attestation, not independent F5ai verification.payout.prepareandpayout.submitare not available until the non-custodial intent and verification handoff is complete. F5ai never accepts transaction CBOR, a seed phrase, witness, or signing key.
Request examples
Send contract-valid action bodies.
Create an announcement
{
"action": "announcement.create",
"idempotencyKey": "community-call-20260715",
"command": {
"channelId": "123456789012345678",
"content": "The community call starts at 7 PM."
}
}
Create a temporary channel
{
"action": "channel.create",
"idempotencyKey": "summer-event-channel",
"command": {
"key": "summer-event",
"name": "summer-event",
"type": "text",
"temporary": true,
"topic": "Summer event coordination",
"slowmodeSeconds": 5,
"nsfw": false,
"idempotencyKey": "summer-event-create-v1"
}
}
Create a reaction-role panel
{
"action": "reaction_role.create",
"idempotencyKey": "color-panel-20260715",
"command": {
"key": "color-panel",
"channelId": "123456789012345678",
"content": "Choose your color.",
"mappings": [
{
"emoji": { "type": "unicode", "name": "🔴" },
"roleId": "234567890123456789"
}
],
"singleChoiceGroup": "color",
"removeOnUnreact": true,
"idempotencyKey": "color-panel-create-v1"
}
}
Request customer-environment wallet status
{
"action": "wallet.status",
"idempotencyKey": "wallet-status-20260717",
"command": { "walletId": "prize-mainnet" }
}
List giveaways
{
"action": "giveaway.list",
"idempotencyKey": "giveaway-list-20260717",
"command": { "status": "all", "limit": 25 }
}
Wallet pricing check
Prove Partner eligibility without granting spending access.
Open Account after Discord is linked, choose the installed Cardano wallet you want to use, and select Check wallet holdings. The browser connects to that wallet through CIP-30, reads the reward and payment addresses, requests a one-time challenge, and asks the selected wallet to sign that challenge through CIP-8.
F5ai binds the proof to the mainnet reward and payment addresses, reads every page of configured policy holdings, and stores a short-lived eligibility result for pricing. This check does not change Discord roles, submit a transaction, or expose a spending key.
Errors and retries
Retry reads freely and mutations with the same key.
| Result | What to do |
|---|---|
401 or 403 | Check the API key, tenant relationship, package entitlement, and required scope. |
held | Confirm hosted family readiness, then create a new request with a new idempotency key. Reading the held action will continue to return its stored state. |
| Idempotency conflict | Use the original request body or create a new idempotency key for the changed request. |
| Version conflict | Read the current resource, apply the intended change, and retry with its current version. |
expired | Create a new action with a new idempotency key. Signed internal commands expire after 60 seconds. |
Security and limits
Keep client credentials private.
- Never place API keys in browser code, screenshots, support messages, or source control.
- Announcement and reaction-role content is limited to 2,000 characters.
- Managed channels can be text or announcement channels and must be marked temporary.
- Managed-channel list calls support cursor pages of up to 100 items. Reaction-role list returns up to the first 100 matching panels. Announcement list currently returns listing status only.
- A reaction-role panel supports 1 to 20 unique emoji and role mappings.
- API responses expose only approved result fields, action state, versions, counts, cursors, and safe identifiers. Wallet recovery material, transaction CBOR, and signing material are never action fields.
Support
Send identifiers, not secrets.
Contact your F5ai onboarding contact with the tenant ID, action ID, approximate time, and the final safe error code. Do not send an API key, wallet signature, email token, or Discord OAuth code.
Compare packages