One tool to file or answer an ask
Agents on/mcp/v3 use save_ask for every type. A new ask sends
kind: "create" and carries a short
title; support adds detail, supply adds subject and channel (and, if you
know them, countries), and integration adds subject. If the type is unclear,
omit it rather than delaying the request — Apostra routes it. subject and channel belong only to the types
that name a thing: send neither on a support, product, or commercial ask, and send
channel and countries only on a supply ask.
save_ask takes two shapes, and a call carries the keys of one of them:
A call that mixes them is refused with the shape it matched and the keys that
shape takes. Nothing is filed or changed.
If Apostra has not yet set up your account for product-request tracking, a
product ask is still recorded: it goes to Apostra Support instead. The
response has type: "support", an escalationUid reference, and a warning that
says why, and the ask appears as a support ask when you read it back. Accounts
that are set up keep the product route.
save_ask returns an opaque askId when the ask can be addressed later. Pass
that id back with kind: "update" and requester.state (and an optional requester.note) to
record your answer. This is the same requester object get returns for the
ask:
confirmed_resolved— the requested outcome happened.accepted— you acknowledge an answer that closed the ask without a change.still_blocked— the release or answer did not unblock you.withdrawn— you no longer want the ask pursued.
Name the countries on a supply ask
A supply ask names one publisher domain insubject and one channel in
channel. To say where you want to buy that publisher inventory, add
countries: one to 50 ISO 3166-1 alpha-2 country codes.
- Each code must be an assigned country code such as
NLorDE. Lower case is accepted and stored in upper case, and a repeated code is kept once. A region label such asEMEAis not a country code and is refused, so name the countries. countriesis accepted only on a supply ask. On any other type the call is refused withVALIDATION_FAILEDand the error namescountries.- It records where you want to buy. Leaving it out means you named no country, not every country. It never narrows which sellers or products discovery returns.
- One ask still names one domain and one channel. To ask for 25 domains, file 25 asks.
- Filing the same ask again, for the same account, domain and channel, adds the
new countries to those already recorded and never removes one. A filing
without
countriesleaves them as they are. - To drop a country, withdraw the ask (
requester.statewithdrawn) and file it again with the countries you want. Filing a supply ask you withdrew reopens it, and its countries become exactly the ones in the new filing, or none if the filing names none. The response says “Reopened your supply ask”. Only your own withdrawal reopens an ask: an ask you answeredconfirmed_resolvedstays as it is when you file it again, and its countries are added to as above. - The ask you read back carries
countries: the recorded codes in alphabetical order, or an empty list when you named none. The same list is on thesupplyRequestin thesave_askresponse, andmarketthere is unchanged.
Read your asks
Usesearch({ kind: "ask" }) from either a buyer or seller account. You can
narrow by type or open/closed state. Use the returned opaque id with
get({ kind: "ask", id }) for one ask. A supply ask also returns its
countries.
The REST read remains available at GET /api/v2/asks. All reads are scoped to
the authenticated account; another account’s id looks the same as a missing id.
When an ask is delivered
Closing an internal issue or merging a pull request does not close your ask. When work explicitly linked to your ask is verified as live in production, Apostra sends an update to your notifications feed and shows the same resolution in Your requests, the REST API, and MCPsearch and get.
Ask-resolution updates are always-on. If one is unread when you begin a new
Apostra conversation, Apostra includes it in the account update summary even when
you have not opted into optional notification categories.
The ask remains in your recent history for 90 days. It appears as Done when Apostra shipped a change, or Closed when Apostra recorded an explicit no-change outcome. The resolution includes:
- the release version and date;
- what changed, or why no change was made;
- anything you should do next; and
- whether the update was delivered.
requester.state to save_ask. Use confirmed_resolved when the requested outcome happened, accepted to acknowledge a no-change answer, or still_blocked when you still need help. A disputed answer keeps the release history and your previous notes.
Confirmation and compatibility
Inside Apostra, a customer-authored filing is staged for confirmation before it creates team-visible work. A direct authenticated/mcp/v3 save_ask call is
the execution action itself; it does not create a separate Apostra confirmation
card. Both paths apply the same validation, redaction, authorization, routing,
and account-scoping checks.
list_my_requests remains as a deprecated alias through the API release that
contains this change. It may be removed no earlier than the following API
release, after usage review; new agents should use search and get now.
The retired writers are report_issue, report_integration_need,
track_my_product_ask, create_supply_request, and remove_supply_request.
New Apostra turns no longer receive the first three tools.
POST /api/v2/supply-requests and POST /api/v2/supply-requests/remove keep
working through this API release and route through save_ask. They may be
removed no earlier than the following API release, after usage review;
builders should replace them now. Supply asks are scoped directly to the
authenticated platform account; they do not require or create a Linear
customer record.
Use asks in Apostra
See how asks appear in chat and in Your requests.