First-party app
Action Network

Action Network

Manage Action Network people, tags, petitions, events, forms, fundraising pages, advocacy campaigns and mass email, and record signatures, RSVPs, submissions, donations and outreaches.

stable Customer Relationship ManagementMarketing

About

Action Network ships in the w6w first-party pack. It declares 70 actions, 3 health checks, and the host runs its code in a sandbox that never sees the credential.

App id
io.w6w.actionnetwork
Version
0.1.0
Author
w6w
Licence
MIT
Categories
Customer Relationship Management · Marketing

Overview

Action Network is the online organizing platform used by progressive groups, campaigns and unions. This app reads and writes its v2 API (OSDI, HAL+JSON): it creates and updates people (with tags and custom fields), tags and untags them, and manages petitions, events, forms, fundraising pages, advocacy (letter and call) campaigns and event campaigns.

It records what people do on those pages, creating or updating the person in the same call: petition signatures, event RSVPs and check-ins, form submissions, donations and outreaches. It lists and reads the saved queries, email wrappers and lists behind mass email, and creates, edits, schedules, sends and stops messages.

Health checks verify the API key and whether the public API entry point is answering. Action Network publishes no status page or rate-limit signal, and both are declared as such. Surveys, unique ID lists, list items and custom-field metadata are not covered.

Build with Action Network

Three routes to the same 70 actions. The Workflow tab is generated from Action Network's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.

Create Advocacy Campaign

advocacy-campaign-create

Create a advocacy campaign through the API. A letter (email) or call (phone) campaign that outreaches are recorded against.

Get Advocacy Campaign

advocacy-campaign-get

Fetch one advocacy campaign by its Action Network id.

List Advocacy Campaigns

advocacy-campaign-list

List advocacy campaigns visible to the API key, 25 per page, with an optional OData filter.

Update Advocacy Campaign

advocacy-campaign-update

Change fields on a advocacy campaign. Only the fields you set are sent; nothing is removed unless you clear it.

Get Attendance

attendance-get

Fetch one attendance by id, under its event or under the person. Give exactly one of the two.

List Attendances

attendance-list

List attendances: people who RSVPed to an event. Scope by event or by person. Give exactly one of the two.

Record RSVP

attendance-record

Record that a person RSVPed to an event, creating or updating the person in the same call. A person RSVPs once; recording again replaces the earlier RSVP.

Update RSVP Status

attendance-update

Mark an RSVP as accepted or attended (check-in).

Get Campaign

campaign-get

Fetch one campaign by its Action Network id.

List Campaigns

campaign-list

List campaigns: a campaign page created in Action Network's interface. The API only reads them.

Get Donation

donation-get

Fetch one donation by id, under its fundraising page or under the person. Give exactly one of the two (or neither, for the account-wide route).

List Donations

donation-list

List donations: people who donated. Scope by fundraising page or by person. With neither id it lists every one on the account.

Record Donation

donation-record

Record a donation made elsewhere against a fundraising page, creating or updating the donor in the same call. Moves no money. Donations are not deduplicated, so recording twice records two.

Get Embed Code

embed-get

Get the copy-and-paste JavaScript that embeds an action's page on any website, in six style variants. Only actions created in Action Network's own interface have one.

Create Event Campaign

event-campaign-create

Create a event campaign through the API. Groups events under one heading; add events with Create Event in Event Campaign.

Create Event in Event Campaign

event-campaign-event-create

Create an event under an event campaign. Events in a campaign with vetting enabled start as pending_approval.

Get Event Campaign

event-campaign-get

Fetch one event campaign by its Action Network id.

List Event Campaigns

event-campaign-list

List event campaigns visible to the API key, 25 per page, with an optional OData filter.

Update Event Campaign

event-campaign-update

Change fields on a event campaign. Only the fields you set are sent; nothing is removed unless you clear it.

Create Event

event-create

Create a event through the API. API-created events have no public page, send no autoresponse or reminders and have no manage page; they appear in targeting once they have an RSVP.

Get Event

event-get

Fetch one event by its Action Network id.

List Events

event-list

List events visible to the API key, 25 per page, with an optional OData filter.

Update Event

event-update

Change fields on a event. Only the fields you set are sent; nothing is removed unless you clear it.

Create Form

form-create

Create a form through the API. API-created forms have no public page; submissions are recorded through the API.

Get Form

form-get

Fetch one form by its Action Network id.

List Forms

form-list

List forms visible to the API key, 25 per page, with an optional OData filter.

Update Form

form-update

Change fields on a form. Only the fields you set are sent; nothing is removed unless you clear it.

Create Fundraising Page

fundraising-page-create

Create a fundraising page through the API. An API-created page takes no payments itself; donations are recorded against it with Record Donation.

Get Fundraising Page

fundraising-page-get

Fetch one fundraising page by its Action Network id.

List Fundraising Pages

fundraising-page-list

List fundraising pages visible to the API key, 25 per page, with an optional OData filter.

Update Fundraising Page

fundraising-page-update

Change fields on a fundraising page. Only the fields you set are sent; nothing is removed unless you clear it.

Get List

list-get

Fetch one list by its Action Network id.

List Lists

list-list

List lists: a list: the report or email audience behind a mass email. Read-only.

Cancel Message Schedule

message-cancel-schedule

Cancel a scheduled message so it will not send at its scheduled time.

Create Message

message-create

Create a message through the API. Creating starts targeting at once, so the message sits in `calculating` until it returns to `draft`; poll Get Message. The vendor allows ONE create per 30 seconds and rejects faster ones with a rate-limit error.

Get Message

message-get

Fetch one message by its Action Network id.

List Messages

message-list

List messages visible to the API key, 25 per page, with an optional OData filter.

Schedule Message

message-schedule

Schedule a draft message to send at a future UTC time. It must have subject, body, from and reply-to, be in draft status, and target at least one person; wait for targeting to finish after creating it.

Send Message

message-send

Send a draft message to its targeted list NOW. It must have subject, body, from and reply-to, be in draft status, and target at least one person. This emails real people and cannot be undone once sent.

Stop Message Send

message-stop-send

Stop a message that is partway through sending. Anything already delivered stays delivered.

Update Message

message-update

Change fields on a message. Only the fields you set are sent; nothing is removed unless you clear it.

Get Outreach

outreach-get

Fetch one outreach by id, under its advocacy campaign or under the person. Give exactly one of the two.

List Outreaches

outreach-list

List outreaches: people who wrote or called a target. Scope by advocacy campaign or by person. Give exactly one of the two.

Record Outreach

outreach-record

Record that a person wrote or called a target on an advocacy campaign, creating or updating the person in the same call. Takes one target.

Get Person

person-get

Fetch one person by their Action Network id.

List People

person-list

List the people on the list tied to the API key, in every subscription status. 25 per page; the vendor omits total counts and does not order by newest.

Create or Update Person

person-signup

Create a person, or update the one matching the email or phone, and optionally tag them. Matching is by email address and phone number; a new person is subscribed to the key's list unless you pass a status.

Update Person

person-update

Change fields on a person by id. Only the fields you set are sent. Changing an email to one that already belongs to another person is silently ignored and the unchanged person comes back.

Create Petition

petition-create

Create a petition through the API. API-created petitions have no public page on actionnetwork.org, send no autoresponse and have no manage page; they appear in targeting once they have a signature.

Get Petition

petition-get

Fetch one petition by its Action Network id.

List Petitions

petition-list

List petitions visible to the API key, 25 per page, with an optional OData filter.

Update Petition

petition-update

Change fields on a petition. Only the fields you set are sent; nothing is removed unless you clear it.

Get Query

query-get

Fetch one query by its Action Network id.

List Queries

query-list

List queries: a saved targeting query. Read-only; ids go into Create Message targets.

Get Signature

signature-get

Fetch one signature by id, under its petition or under the person. Give exactly one of the two.

List Signatures

signature-list

List signatures: people who signed a petition. Scope by petition or by person. Give exactly one of the two.

Record Signature

signature-record

Record that a person signed a petition, creating or updating the person in the same call. A person signs a petition once; recording again replaces the earlier signature. Does not send an autoresponse unless asked.

Update Signature

signature-update

Change the comment on an existing petition signature.

Get Submission

submission-get

Fetch one submission by id, under its form or under the person. Give exactly one of the two.

List Submissions

submission-list

List submissions: people who submitted a form. Scope by form or by person. Give exactly one of the two.

Record Form Submission

submission-record

Record that a person submitted a form, creating or updating the person in the same call. Use tags and custom fields to carry what they submitted; a submission has no fields of its own.

Create Tag

tag-create

Create a tag by name. Names are unique: creating an existing name returns the existing tag. PUT and DELETE on tags are not allowed by the vendor. Group API keys only.

Get Tag

tag-get

Fetch one tag by its Action Network id. Group API keys only.

List Tags

tag-list

List the group's tags, 25 per page. Tags exist only for group API keys; a personal key is refused.

Tag Person

tagging-create

Put an existing tag on an existing person. A person carries a tag once; tagging again replaces the old tagging. To tag by name while creating or updating a person, use Create or Update Person instead.

Remove Tag From Person

tagging-delete

Delete a tagging, removing the tag from that person. Needs the tagging id (from List Taggings), not the person id. To untag by name, use Create or Update Person with Remove tags.

Get Tagging

tagging-get

Fetch one tagging (a person carrying a tag) by id.

List Taggings

tagging-list

List the taggings on a tag, one per tagged person, 25 per page. A tagging carries its own id (needed to remove the tag) but only a link to the person.

Get Wrapper

wrapper-get

Fetch one wrapper by its Action Network id.

List Wrappers

wrapper-list

List wrappers: an email wrapper (header and footer HTML) applied to mass emails. Read-only; ids go into Create Message.

A workflow step names the app and the action, and the editor fills in the connection when you pick one. This is the Step shape from the workflow spec, carrying Action Network's real ids.

{
  "manifestVersion": "2",
  "name": "actionnetwork-example",
  "steps": [
    {
      "id": "advocacy-campaign-create",
      "uses": {
        "app": "io.w6w.actionnetwork",
        "action": "advocacy-campaign-create",
        "connection": "conn_YOUR_CONNECTION_ID"
      },
      "with": {
        "originSystem": "<originSystem>",
        "title": "<title>"
      }
    }
  ]
}

Here are some of the things you can do

  • Create Advocacy Campaign

    perform
    advocacy-campaign-create
  • Get Advocacy Campaign

    read
    advocacy-campaign-get
  • List Advocacy Campaigns

    search
    advocacy-campaign-list
  • Update Advocacy Campaign

    perform
    advocacy-campaign-update
  • Get Attendance

    read
    attendance-get

+65 more actions available

Every app-specific value here is a blank you have to fill in. An app action is reached through the connection that authenticates it, so the address is a connection id, not the app id — and connections belong to your account, so a public page cannot know yours. Create one for Action Network, then fill in the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the parameters that action declares. The call itself is real — the shape is transcribed from the studio's own snippet builder, which prints the same kind of blanks — but nothing in it is specific to Action Network. The Workflow tab is where this app's real ids are.

Install
npm install @w6w/sdk
yarn add @w6w/sdk
pnpm add @w6w/sdk
deno add npm:@w6w/sdk
Code
import { W6wClient, isActionRun } from "@w6w/sdk";

// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();

const envelope = await client.run({
  urn: "conn_YOUR_CONNECTION_ID",
  action: "advocacy-campaign-create",
  payload: {
    originSystem: "<value>",
    title: "<value>",
    // name: "<value>",
    // description: "<value>",
    // browserUrl: "<value>",
    // tagList: "<value>",
    // type: "<value>",
    // targets: "<value>",
  },
});

if (isActionRun(envelope)) console.log(envelope.value);
Install the CLI
npm install -g @w6w/cli
CLI
w6w run conn_YOUR_CONNECTION_ID --action advocacy-campaign-create --payload '{"originSystem":"<value>","title":"<value>"}'

Give an AI agent Action Network — without giving it Action Network's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.

One tool call
{
  "name": "w6w_invoke",
  "arguments": {
    "ref": "app:io.w6w.actionnetwork#advocacy-campaign-create",
    "input": {
      "originSystem": "<originSystem>",
      "title": "<title>"
    }
  }
}

Every tool names its target with a single ref. The app: form above doesn't name a connection at all — the host resolves which of the caller's Action Network connections to sign with, and refuses rather than guesses when the answer is ambiguous.

What the agent gets

Credentials it can't read

The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.

A tool surface scoped to the caller

Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.

A durable workflow in one call

Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.

Health-aware discovery

Action Network's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.

The MCP surface is part of the hosted platform. Action Network itself is MIT, and the runtime that executes it is source-available (FSL).

Request MCP access

Health checks

Action Network declares its own checks, so its health is a property of the app rather than something the host guesses at.

service

Action Network platform status

dependency

API reachability

Unauthenticated GET of the public API entry point (/api/v2/). A 200 HAL document naming Action Network and linking osdi:people is the healthy answer; credential validity is the `auth:api-key` check's job.

quota

API request headroom