Get Pending Approvals
get_pending_approvalsCovers four channels, each pending row bucketed by action-type category exactly
as the page groups them: LinkedIn connection requests / messages / follows /
post engagement, emails, gifts, and manual actions. Same-post
comment+reaction rows collapse into one engagement item, matching the page.
A gift item carries the order its card shows (product_url, max_price_usd,
shipping_address, with the note as its summary) and an error; the user
completes any missing piece on the card before approving it. max_price_usd is the
most the item may cost including tax and shipping; approving charges the owner's card
for gifts the order's actual total, at most max_price_usd, plus about $3.30 + 2.9% in
fees on top. error is blank
unless the user approved the card and the order was refused: it then gives the
reason, and the card waits for the user to fix the order and approve it again.
owner_has_gift_card is false when the agent's owner has saved no card for gifts;
approving then orders nothing until the owner adds one under Settings → Billing.
Sequence-produced items (LinkedIn, email, and a manual or gift step queued by its
flow node) carry node_id/node_label naming the campaign-flow node that
authored them — null for items created outside a sequence.
A manual item also carries completion_criteria: how to advance the prospect once
the user reports what they did. Cross-agent for the owner; for one agent's items,
pass agent_id, and for one step of its flow, also pass that step's bucket and
keep the items carrying its node_id. A shared operator sees only the shared agent.
Bounded by default so an approval-gated campaign holding thousands of drafts
doesn't return every full message. The default gives per-bucket/per-agent counts
plus a short preview per bucket (first few items); pass bucket to page that one
bucket's full item list. A bucket's preview_truncated (or count exceeding the
preview) tells you to drill in.
By default (no bucket), a dict
{'pending': {'total': int, 'buckets': [{'bucket', 'title', 'count', 'preview_truncated': bool, 'agents': [{'agent_id', 'agent_title', 'count'}], 'preview': [item, ...]}]}, 'recently_resolved': {'window_days': int, 'total': int, 'items': [...]}, 'recently_shelved': {'window_days': int, 'total': int, 'items': [...]}}. The preview holds the
bucket's first few full items. Recently-resolved lists only rows with a
transition timestamp — manual done/dismissed, LinkedIn/email sent;
cancelled or rejected drafts don't appear there. Recently-shelved
lists rows the shelf-life sweep shelved (an unstarred draft that aged
past its approval window); each item's target_provider_id is the prospect
handle for person-addressed LinkedIn drafts (connection_request / message /
inmail / follow) so a swept draft matches back to a prospect — blank for
comment/reaction (post-addressed) and for email.
Drill-down (bucket set): {'bucket', 'title', 'count', 'offset', 'limit', 'truncated': bool, 'items': [item, ...]} — full-text items, newest-first;
count is the whole bucket, truncated means more beyond this page (re-call
with offset += limit).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| bucket | No | Drill into one bucket for its full-text items, paged. One of 'email', 'linkedin_invite', 'linkedin_message', 'linkedin_follow', 'engagement', 'gift', 'manual'. Omit for the bounded counts+preview. | |
| offset | No | Rows to skip in drill-down mode (default 0); re-call with `offset += limit` while `truncated` is true. Ignored without `bucket`. | |
| agent_id | No | Scope every section to one agent's items. Omit for every agent. | |
| on_behalf_of | No | A teammate's email (one with team actions turned on), or an agency client's from list_agency_clients, to run this call in that account: their agents, settings, connected accounts, and credits. Omit it to act on your own account. | |
| resolved_within_days | No | Recency window for the recently-resolved section (default 7). Only used in the default (no-`bucket`) mode. |