← Pulsevia · Full documentation

REST API v1

Base URL: https://pulsevia.app/api/v1

Authenticate with a Sanctum personal access token created under Settings → API tokens.

Authentication

Authorization: Bearer {token}
Accept: application/json

Rate limit: 120 requests / minute per token (or IP).

Scopes

ScopeAccess
campaigns:readList/view campaigns
campaigns:writeReserved for future writes
locations:readList locations
employees:readList employees
feedback:readList inbox feedback
feedback:writeSubmit feedback
analytics:readKPI overview
distribution:urlsGenerate tracked URLs

Endpoints

GET /campaigns

Paginated campaigns. Query: per_page.

GET /campaigns/{id}

Campaign by public id.

GET /locations · GET /employees

Paginated lists.

GET /feedback

Inbox list. Filters: status, priority, source, campaign, location, brand, from, to.

POST /feedback

{
  "campaign_slug": "zurich-stay",
  "answers": { "QUESTION_PUBLIC_ID": 9 },
  "source": "api",
  "customer": { "name": "Ada", "email": "ada@example.com" }
}

GET /analytics

Query: period (today|7d|30d|90d), filters.

POST /tracked-urls

{
  "campaign_slug": "zurich-stay",
  "source": "api",
  "employee": "optional-employee-public-id",
  "utm_source": "crm",
  "include_channel_pack": true
}

Response envelope

{
  "data": {},
  "meta": {
    "pagination": {
      "current_page": 1,
      "per_page": 25,
      "total": 10,
      "last_page": 1
    }
  }
}

curl

curl -H "Authorization: Bearer $TOKEN" -H "Accept: application/json" \
  https://pulsevia.app/api/v1/campaigns