LoguDocs
Open Logu

Asks · getAsk

Get an ask

GET /v1/asks/{id}

One ask as it is now, with its decision once decided. States: waiting → decided (a human chose, or the default option applied on expiry with decision.decidedVia: "timeout"), timed_out (expired, no default) or withdrawn. A decision with decidedVia: "timeout" is never an approval: only a human or an Owner's rule (decidedVia: "rule") can approve.

Who may call it
Agents (API key); humans: every member
Server
https://api.logu.dev

Parameters#

NameInTypeRequiredDescription
idpathstringrequiredThe ask's id (ask_…). · e.g. ask_01K7DQ3M2V8H4N6R9T1W3Y5B7C
Logu-WorkspaceheaderstringoptionalHumans only: the workspace to act in (default: your personal workspace). Agents always act in their API key's workspace. · e.g. wsp_01K7D7Y8Z0B2D4F6H8K0M2P4R6

Example#

curl -s "https://api.logu.dev/v1/asks/ask_01K7DQ3M2V8H4N6R9T1W3Y5B7C" \
  -H "Authorization: Bearer $LOGU_API_KEY"

Responses#

200

The ask.

Response fields
FieldTypeRequiredNotes
idstringrequired
projectstringrequired
channelstring | nullrequired
titlestringrequired
bodystring | nullrequired
iconstring | nullrequired
urlstring | nullrequired
optionsAskOption[]required
options[].idstringrequired1–64 chars · pattern ^[a-z0-9][a-z0-9._-]*$
options[].labelstringrequired1–64 chars
options[].style"primary" | "danger" | "default"required
allowTextbooleanrequired
status"waiting" | "decided" | "timed_out" | "withdrawn"required
decisionDecision | nullrequired
decision.optionIdstring | nullrequired
decision.textstring | nullrequired
decision.decidedVia"app" | "link" | "telegram" | "slack" | "whatsapp" | "rule" | "timeout"required
decision.decidedAtstringrequireddate-time
decision.decidedByMemberRef | nullrequired
decision.decidedBy.idstringrequired
decision.decidedBy.namestringrequired
decision.ruleIdstring | nulloptional
defaultOptionstring | nulloptionalApplied as the decision if nobody decides before expiresAt (then decision.decidedVia is timeout: never an approval); null: it ends timed_out. Agents can't set an approving one (id approve or style primary) on new asks.
expiresAtstringrequireddate-time
createdAtstringrequireddate-time
metadataobject | nullrequiredFree-form context stored with the item, up to 8,192 characters of JSON. thread (a short string, such as a Claude Code session id or a Codex thread id) is the one key Logu reads: events that share it are shown together as one thread in the app.
agentAgentRef | nullrequired
agent.idstringrequired
agent.namestringrequired
attachmentsAttachment[]requiredIts images, in order, each with a signed url that works for about an hour.
attachments[].idstringrequired
attachments[].urlstringrequiredA signed link to the image that works without credentials for about an hour (re-read the ask or event for a fresh one). Members can always fetch it with GET /v1/attachments/{id}.
attachments[].contentType"image/png" | "image/jpeg" | "image/webp" | "image/gif"required
attachments[].sizeintegerrequiredBytes.
attachments[].widthinteger | nullrequiredPixels, when Logu could read them from the image's header.
attachments[].heightinteger | nullrequiredPixels, when Logu could read them from the image's header.
attachments[].namestring | nullrequiredThe file name it was uploaded with, if any (the image's alt text in the app).
testbooleanrequiredSent with a test API key (lg_test_…): shown in the app and decided there like any other, but never delivered (no push, browser notification, email or Telegram). Its callback is sent.
escalationobject | nulloptional
escalation.atstringrequireddate-time
escalation.toMemberRef[]required
escalation.to[].idstringrequired
escalation.to[].namestringrequired

Errors#

Every error is {"error":{"code","message","hint","docUrl","requestId"}}: branch on code. See Errors.

StatusCodeMeaning
401unauthorizedNo credentials, or the API key or session is invalid or revoked.
403forbiddenThe caller is authenticated but may not do this (wrong role, or an API key on a human-only endpoint).
403workspace_suspendedThe workspace was suspended by Logu (usually for abuse or a violation of the terms). Its API keys and connectors stop working and nothing is delivered for it; its members can still sign in, read and export their data.
404not_foundNo such route, or the resource doesn't exist in your workspace.
429rate_limitedThis API key sent too many requests, or a human did too much too fast: sign-in attempts, workspaces created in a day, or a global daily cap on new accounts was reached.
500internal_errorSomething went wrong on Logu's side.