---
name: accoil-tools
description: Read and operate an Accoil Tools account at staging.tools.accoil.com — Atlassian Marketplace apps, their licences and transactions, the lifecycle events synthesized from them (trial started, converted, renewed, churned), and the analytics destinations those events are delivered to. Use when the user asks about their Marketplace app's trials, conversions, renewals or churn; a sync run that failed or is stuck; dead letters or contract anomalies; event delivery to Accoil, Segment, PostHog, Amplitude, Mixpanel or a REST endpoint; or anything hosted at staging.tools.accoil.com.
---

# Accoil Tools

An agent-native platform at `https://staging.tools.accoil.com`. Every page serves three representations of
the same RESTful URL: HTML for humans, Markdown for you, OpenAPI for your writes. There is
no separate API to learn — **the app is the API**.

Marketplace Events, its first tool, watches an Atlassian Marketplace app's licences and
transactions, synthesizes canonical lifecycle events, and delivers them to the customer's
analytics stack.

## Authenticate

Send a bearer token on every request. A human mints one at
**Settings → Agent** (`/<account_slug>/settings/agent`); you cannot mint your own.

```
Authorization: Bearer accoil_pat_…
Accept: text/markdown
```

- Tokens are **read-scoped by default**. A read token that attempts any `POST`/`PATCH`/
  `PUT`/`DELETE` gets `403` — that check is keyed on HTTP method and cannot be skipped.
- A token never grants more than its owner's role in an account. Suspended accounts are
  read-only for everyone.
- No token yet? `https://staging.tools.accoil.com/agent` and `https://staging.tools.accoil.com/skill.md` are readable
  without one, and say how to get one.

## Read

Append `.md` or send `Accept: text/markdown` to any URL.

- **Start at `https://staging.tools.accoil.com/agent`** and navigate by following links. Do not guess or
  construct URLs — every page carries the links that are relevant next, and the set of
  accounts and tools you can reach is not knowable in advance.
- Add `?detail=full` for teaching prose, payload samples and field-level notes. The
  default is a skimmable summary; ask for full when a page's summary left you guessing.
- Unfamiliar term? Every page links the concepts it uses (`/concepts/<id>`). Read the
  concept once rather than inferring from the table.
- Paginated pages project their pagination as links. Follow them; do not raise the page
  size to swallow a whole table.

## Write

Every write affordance in a Markdown page names its method, path, and an OpenAPI slice:

```
Start a sync → POST /acme/amp_events/products/42/syncs
spec: /specs/amp_events/create_sync
```

Fetch that slice for the exact request body. Whole documents live at
`/specs/platform/openapi` (auth, accounts, members, tokens, billing, `/system`) and
`/specs/amp_events/openapi` (Marketplace Events).

**Confirm with the user before any write that starts a sync, changes or deletes a
destination, revokes a token, or removes a member.** A sync spends the account's event
quota and delivers to a live analytics pipeline; a changed destination silently redirects
a customer's production data.

## What lives where

| Surface | Path | What you'll find |
| --- | --- | --- |
| Front door | `/agent` | How to authenticate, your accounts, everything below |
| Account | `/<slug>` | Dashboard and table of contents for one account |
| Marketplace Events | `/<slug>/amp_events` | Products, and the tool's own dashboard |
| A product | `/<slug>/amp_events/products/<id>` | Overview, licences, transactions, events, runs, problems, settings |
| Destinations | `…/products/<id>/connections` | Where synthesized events are delivered |
| Runs | `…/products/<id>/runs` | Every sync attempt, its status and counts |
| Problems | `…/products/<id>/problems` | Dead letters (failed deliveries) and contract anomalies |
| Notifications | `/<slug>/amp_events/notifications` | Webhook/email streams for state changes |
| Members | `/<slug>/members` | Who is in the account, and their role |
| Settings | `/<slug>/settings` | Account, profile, billing, API tokens, agent handoff |
| Operators | `/system` | Cross-account surface — app admins only |

## Rules

- **Follow links; don't construct URLs.** A path you assembled from this table may 404
  because the account lacks that tool — entitlement makes a tool *absent*, not disabled.
- **A 404 on an account-scoped page means "not a member or does not exist"** — the two are
  deliberately indistinguishable. Do not probe to tell them apart.
- **Numbers on these pages are facts, not placeholders.** "Events 0" means zero events.
- **Report what a page says, not what you expected it to say.** A sync that shows
  `failed` with a dead letter has a cause on its own page; read it before theorising.
- **Don't cache the map.** Products, destinations and entitlements change; re-read the
  page rather than reusing what you saw in an earlier session.
