{
  "info": {
    "name": "WalkLists API v1.0.0",
    "description": "The WalkLists public API. Read and write the contacts, lists, campaigns and\ndoor-level activity behind your field operation, so WalkLists can sit inside\nyour existing stack instead of beside it.\n\n## Authentication\n\nEvery request needs an API key. Send it either way:\n\n- Header: `Authorization: Bearer wl_live_...`  *(preferred)*\n- Query parameter: `?api_key=wl_live_...`  *(for tools that cannot set headers — spreadsheets, some no-code builders)*\n\nCreate and rotate keys at **Account → API keys**. The key is shown once, at\n\nSet `base_url` and `api_key` in the collection variables before running anything.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{api_key}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "base_url",
      "value": "https://walklists.com/api/v1",
      "type": "string"
    },
    {
      "key": "api_key",
      "value": "wl_live_replace_me",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "Account",
      "description": "Verify a key and read the plan it resolves to.",
      "item": [
        {
          "name": "Verify a key",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/me",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "me"
              ],
              "query": [],
              "variable": []
            },
            "description": "Returns the organization and plan a key resolves to. Use it as a\nconnection test — it is the endpoint integrations call to validate\ncredentials before doing anything else.\n"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Contacts",
      "description": "The people and doors in your organization.",
      "item": [
        {
          "name": "List contacts",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/contacts",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "",
                  "disabled": true,
                  "description": "1-based page number."
                },
                {
                  "key": "per_page",
                  "value": "",
                  "disabled": true,
                  "description": "Items per page."
                },
                {
                  "key": "updated_since",
                  "value": "",
                  "disabled": true,
                  "description": "Only records changed at or after this instant (ISO 8601). The reliable\nway to poll for changes — unlike page offsets, it is not disturbed by\ninserts or deletes between calls.\n"
                },
                {
                  "key": "sort",
                  "value": "",
                  "disabled": true,
                  "description": "Sort order. Prefix with `-` for descending, e.g. `sort=-created_at`.\n\nThe default is ascending `updated_at`, which is what you want when\nwalking a change feed with `updated_since`. Use `-created_at` when you\nwant the newest records first — that is the order a poller needs, since\nit reads only the first page.\n"
                },
                {
                  "key": "list_id",
                  "value": "",
                  "disabled": true,
                  "description": "Only contacts belonging to this list."
                },
                {
                  "key": "q",
                  "value": "",
                  "disabled": true,
                  "description": "Free-text match on name, email, phone or address."
                }
              ],
              "variable": []
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Create a contact",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/contacts",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts"
              ],
              "query": [],
              "variable": []
            },
            "description": "Requires the `write` scope.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"first_name\": \"string\",\n  \"last_name\": \"string\",\n  \"email\": \"jane@example.com\",\n  \"phone\": \"string\",\n  \"mobile_phone\": \"string\",\n  \"address\": \"string\",\n  \"address_2\": \"string\",\n  \"city\": \"string\",\n  \"state\": \"string\",\n  \"zip\": \"string\",\n  \"country\": \"string\",\n  \"status\": \"string\",\n  \"source\": \"string\",\n  \"homeowner\": true,\n  \"notes\": \"string\",\n  \"tags\": []\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Get a contact",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/contacts/:id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Replace with a real id"
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Update a contact",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/contacts/:id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "contacts",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Replace with a real id"
                }
              ]
            },
            "description": "Requires the `write` scope. Only the fields you send are changed.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"first_name\": \"string\",\n  \"last_name\": \"string\",\n  \"email\": \"jane@example.com\",\n  \"phone\": \"string\",\n  \"mobile_phone\": \"string\",\n  \"address\": \"string\",\n  \"address_2\": \"string\",\n  \"city\": \"string\",\n  \"state\": \"string\",\n  \"zip\": \"string\",\n  \"country\": \"string\",\n  \"status\": \"string\",\n  \"source\": \"string\",\n  \"homeowner\": true,\n  \"notes\": \"string\",\n  \"tags\": []\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Lists",
      "description": "Imported or filtered groups of contacts.",
      "item": [
        {
          "name": "List contact lists",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/lists",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "lists"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "",
                  "disabled": true,
                  "description": "1-based page number."
                },
                {
                  "key": "per_page",
                  "value": "",
                  "disabled": true,
                  "description": "Items per page."
                },
                {
                  "key": "sort",
                  "value": "",
                  "disabled": true,
                  "description": "Sort order. Prefix with `-` for descending, e.g. `sort=-created_at`.\n\nThe default is ascending `updated_at`, which is what you want when\nwalking a change feed with `updated_since`. Use `-created_at` when you\nwant the newest records first — that is the order a poller needs, since\nit reads only the first page.\n"
                }
              ],
              "variable": []
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Get a list",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/lists/:id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "lists",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Replace with a real id"
                }
              ]
            },
            "description": ""
          },
          "response": []
        }
      ]
    },
    {
      "name": "Campaigns",
      "description": "Field campaigns that organise the work.",
      "item": [
        {
          "name": "List campaigns",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/campaigns",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "campaigns"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "",
                  "disabled": true,
                  "description": "1-based page number."
                },
                {
                  "key": "per_page",
                  "value": "",
                  "disabled": true,
                  "description": "Items per page."
                },
                {
                  "key": "sort",
                  "value": "",
                  "disabled": true,
                  "description": "Sort order. Prefix with `-` for descending, e.g. `sort=-created_at`.\n\nThe default is ascending `updated_at`, which is what you want when\nwalking a change feed with `updated_since`. Use `-created_at` when you\nwant the newest records first — that is the order a poller needs, since\nit reads only the first page.\n"
                },
                {
                  "key": "status",
                  "value": "",
                  "disabled": true,
                  "description": ""
                }
              ],
              "variable": []
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Get a campaign",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/campaigns/:id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "campaigns",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Replace with a real id"
                }
              ]
            },
            "description": ""
          },
          "response": []
        }
      ]
    },
    {
      "name": "Activity",
      "description": "Door-level results — knocks, dispositions, notes.",
      "item": [
        {
          "name": "List door activity",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/activity",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "activity"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "",
                  "disabled": true,
                  "description": "1-based page number."
                },
                {
                  "key": "per_page",
                  "value": "",
                  "disabled": true,
                  "description": "Items per page."
                },
                {
                  "key": "updated_since",
                  "value": "",
                  "disabled": true,
                  "description": "Only records changed at or after this instant (ISO 8601). The reliable\nway to poll for changes — unlike page offsets, it is not disturbed by\ninserts or deletes between calls.\n"
                },
                {
                  "key": "sort",
                  "value": "",
                  "disabled": true,
                  "description": "Sort order. Prefix with `-` for descending, e.g. `sort=-created_at`.\n\nThe default is ascending `updated_at`, which is what you want when\nwalking a change feed with `updated_since`. Use `-created_at` when you\nwant the newest records first — that is the order a poller needs, since\nit reads only the first page.\n"
                },
                {
                  "key": "campaign_id",
                  "value": "",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "contact_ref",
                  "value": "",
                  "disabled": true,
                  "description": "Filter to one door, using the contact_ref returned on an activity."
                },
                {
                  "key": "disposition",
                  "value": "",
                  "disabled": true,
                  "description": ""
                }
              ],
              "variable": []
            },
            "description": "Knocks, dispositions and notes recorded in the field, newest first.\nThis is the endpoint most integrations poll: filter on `updated_since`\nto push new results into a CRM.\n"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Hooks",
      "description": "REST-hook subscriptions. Subscribe a URL to an event and we POST to it as\nthe event happens, instead of you polling for changes.\n",
      "item": [
        {
          "name": "Subscribe to an event",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/hooks",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "hooks"
              ],
              "query": [],
              "variable": []
            },
            "description": "Register a URL to receive one event type as it happens. This is what\npowers the WalkLists Zapier app, and it is available to any plan with\nthe `read` scope — a subscription only ever sends data out.\n\nSubscribing is idempotent for a given URL and event: calling it again\nreturns the existing subscription rather than creating a second one, so\na retried request cannot make your endpoint fire twice per event.\n\nThe delivered body is the same signed envelope documented under\nWebhooks. If your endpoint answers `410 Gone`, we treat the\nsubscription as cancelled and remove it.\n",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"string\",\n  \"event\": \"string\",\n  \"external_id\": \"string\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Unsubscribe",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/hooks/:id",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "hooks",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Replace with a real id"
                }
              ]
            },
            "description": "Remove a subscription. Succeeds whether or not it still exists, so\ntearing down twice is safe.\n\nOnly subscriptions created through this endpoint can be removed here.\nWebhooks you created in the WalkLists dashboard are managed there.\n"
          },
          "response": []
        }
      ]
    }
  ]
}
