Audience: This article is for all API enpoints that are available for accounts with a Business+ tier. Every endpoint below is authenticated with an API key and scoped to your company.
The company "De Vries Plumbing" in the documentation below is to our knowledge a fictional company.

Before you start

You will need to go to My Business once you are signed in and go to the "Team & Access" Tab to generate a API key. You can have up to 5 API keys, Each key has a life time of 6 months after creation.

Things worthy of note:

  • Base URL: https://selectedwithtrust.com
  • All paths are prefixed with: /api/v1/public
  • Auth header: X-API-Key: swt_xxxxxxxx…
  • Content type for writes: application/json
  • Downgraded tier: If you downgrade your subscription your API will stop working you will get a 403 TIER_REQUIRED

Env. Setings

You can export these values to use in your environment:

PowerShell

$BaseUrl = "https://selectedwithtrust.com"
$Headers = @{ "X-API-Key" = "swt_your_key_here" }

Bash

export SWT_BASE="https://selectedwithtrust.com"
export SWT_KEY="swt_your_key_here"

Python 3 (uses requests - pip install requests)

import requests

BASE = "https://selectedwithtrust.com"
KEY = "swt_your_key_here"
session = requests.Session()
session.headers.update({"X-API-Key": KEY})

Endpoint reference

Get the company name

GET /api/v1/public/businesses
Returns the business linked to your API key.

PowerShell

Invoke-RestMethod -Uri "$BaseUrl/api/v1/public/businesses" -Headers $Headers

Bash

curl -s "$SWT_BASE/api/v1/public/businesses" -H "X-API-Key: $SWT_KEY"

Python3

r = session.get(f"{BASE}/api/v1/public/businesses")
print(r.json())

Example Response

{
  "businesses": [
    {
      "id": "b0a1c2d3-e4f5-6789-abcd-ef0123456789",,
      "name": ""De Vries Plumbing",
      "type": "plumber",
      "city": "Amsterdam",
      "rating": 4.7,
      "reviewCount": 128,
      "isVerified": true,
      "subscriptionTier": "business_plus",
      "availabilityStatus": "open",
      "createdAt": "2025-01-14T10:00:00.000Z"
    }
  ],
  "pagination": { "page": 1, "limit": 1, "total": 1 }
}

Get company details:

GET /api/v1/public/businesses/{id}

Full profile including contact details and active services. The {id} must match your own business public_id (UUID) — requesting another business returns 403 SCOPE_VIOLATION.

Example response

{
  "business": {
    "id": "b0a1c2d3-e4f5-6789-abcd-ef0123456789",
    "name": "De Vries Plumbing",
    "type": "plumber",
    "email": "hello@devries.example",
    "phone": "+31 20 123 4567",
    "address": "Keizersgracht 100",
    "city": "Amsterdam",
    "stateProvince": "Noord-Holland",
    "postalCode": "1015 CW",
    "country": "Netherlands",
    "website": "https://devries.example",
    "description": "Family-run plumbing since 1998.",
    "rating": 4.7,
    "reviewCount": 128,
    "isVerified": true,
    "availabilityStatus": "open",
    "services": [
      {
        "id": "5e6f7a8b-9c0d-1e2f-3a4b-5c6d7e8f9a0b",
        "name": "Emergency call-out",
        "description": "24/7 leak response",
        "priceFrom": 95.0,
        "priceTo": 180.0,
        "priceUnit": "per visit"
      }
    ],
    "createdAt": "2025-01-14T10:00:00.000Z"
  }
}

List reviews for your company

GET /api/v1/public/businesses/{id}/reviews

Displaying these on your site without using the Selected With trust is in violation of our Terms and Services, this API endpoint if your your internal tooling only.

Approved reviews only, paginated. Same scope rule as above ({id} must be yours).

Query param Type Default Notes
page integer 1 Page number
limit integer 20 Max 50
sort string newest newest, oldest, highest, lowest

PowerShell

$q = @{ page = 1; limit = 20; sort = "highest" }
Invoke-RestMethod -Uri "$BaseUrl/api/v1/public/businesses/b0a1c2d3-e4f5-6789-abcd-ef0123456789/reviews" -Headers $Headers -Body $q

Bash

curl -s -G "$SWT_BASE/api/v1/public/businesses/b0a1c2d3-e4f5-6789-abcd-ef0123456789/reviews" \
  -H "X-API-Key: $SWT_KEY" \
  --data-urlencode "page=1" \
  --data-urlencode "limit=20" \
  --data-urlencode "sort=highest"

Python 3

r = session.get(
    f"{BASE}/api/v1/public/businesses/b0a1c2d3-e4f5-6789-abcd-ef0123456789/reviews",
    params={"page": 1, "limit": 20, "sort": "highest"},
)
print(r.json())

Example Response

{
  "reviews": [
    {
      "id": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
      "rating": 5,
      "title": "Fast and tidy",
      "comment": "Fixed a burst pipe within the hour.",
      "isVerified": true,
      "authorUsername": "marieke_a",
      "createdAt": "2026-05-30T14:21:00.000Z"
    }
  ],
  "pagination": { "page": 1, "limit": 20, "total": 128 }
}

List your job postings

GET /api/v1/public/jobs

Active job postings for your business, with optional filters.

Query param Type Default Notes
q string Matches title or description
city string Matches the posting location
type string Employment type, e.g. full-time
page integer 1 Page number
limit integer 20 Max 100

PowerShell

$q = @{ q = "engineer"; city = "Amsterdam"; type = "full-time"; limit = 50 }
Invoke-RestMethod -Uri "$BaseUrl/api/v1/public/jobs" -Headers $Headers -Body $q

Bash

curl -s -G "$SWT_BASE/api/v1/public/jobs" \
  -H "X-API-Key: $SWT_KEY" \
  --data-urlencode "q=engineer" \
  --data-urlencode "city=Amsterdam" \
  --data-urlencode "type=full-time" \
  --data-urlencode "limit=50"

Python 3

r = session.get(
    f"{BASE}/api/v1/public/jobs",
    params={"q": "engineer", "city": "Amsterdam", "type": "full-time", "limit": 50},
)
print(r.json())

Example response

{
  "jobs": [
    {
      "id": "9f8e7d6c-5b4a-3f2e-1d0c-9b8a7f6e5d4c",
      "title": "Senior Plumbing Engineer",
      "businessName": "De Vries Plumbing",
      "location": "Amsterdam",
      "employmentType": "full-time",
      "salaryMin": 42000,
      "salaryMax": 56000,
      "postedAt": "2026-06-01T08:00:00.000Z"
    }
  ],
  "pagination": { "page": 1, "limit": 50, "total": 1 }
}

Page-view analytics (last 30 days)

GET /api/v1/public/my/analytics

Total views, unique visitors and a per-day breakdown for the trailing 30 days.

PowerShell

Invoke-RestMethod -Uri "$BaseUrl/api/v1/public/my/analytics" -Headers $Headers

Bash

curl -s "$SWT_BASE/api/v1/public/my/analytics" -H "X-API-Key: $SWT_KEY"

Python 3

r = session.get(f"{BASE}/api/v1/public/my/analytics")
print(r.json())

Example response

{
  "totalViews": 1840,
  "uniqueVisitors": 1203,
  "dailyViews": [
    { "date": "2026-06-10", "views": 64, "unique": 51 },
    { "date": "2026-06-11", "views": 72, "unique": 58 }
  ]
}

Update your business profile

PUT /api/v1/public/my/profile

Partial update — send only the fields you want to change. Omitted fields are left untouched. Text fields are stripped of HTML server-side.

Field Type Max length Notes
name string 255
description string 3000
phone string 50
website string 255
address string 500
city string 100
postalCode string 20
country string 100
availabilityStatus string One of open, busy, full, closed

Copy-paste JSON body

{
  "name": "De Vries Plumbing",
  "description": "Family-run plumbing since 1998. Now offering bathroom installs.",
  "phone": "+31 20 123 4567",
  "website": "https://devries.example",
  "address": "Keizersgracht 100",
  "city": "Amsterdam",
  "postalCode": "1015 CW",
  "country": "Netherlands",
  "availabilityStatus": "open"
}

PowerShell

$body = @{
  description        = "Family-run plumbing since 1998. Now offering bathroom installs."
  availabilityStatus = "busy"
} | ConvertTo-Json

Invoke-RestMethod -Uri "$BaseUrl/api/v1/public/my/profile" -Method Put `
  -Headers $Headers -ContentType "application/json" -Body $body

Bash

curl -s -X PUT "$SWT_BASE/api/v1/public/my/profile" \
  -H "X-API-Key: $SWT_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "description": "Family-run plumbing since 1998. Now offering bathroom installs.",
        "availabilityStatus": "busy"
      }'

Python 3

r = session.put(
    f"{BASE}/api/v1/public/my/profile",
    json={
        "description": "Family-run plumbing since 1998. Now offering bathroom installs.",
        "availabilityStatus": "busy",
    },
)
print(r.json())

Example response

{
  "business": {
    "id": "b0a1c2d3-e4f5-6789-abcd-ef0123456789",
    "name": "De Vries Plumbing",
    "description": "Family-run plumbing since 1998. Now offering bathroom installs.",
    "phone": "+31 20 123 4567",
    "website": "https://devries.example",
    "address": "Keizersgracht 100",
    "city": "Amsterdam",
    "postalCode": "1015 CW",
    "country": "Netherlands",
    "availabilityStatus": "busy",
    "updatedAt": "2026-06-12T09:45:00.000Z"
  }
}

Get opening hours

GET /api/v1/public/my/hours

Returns one object per configured day. dayOfWeek is 1 = Monday … 7 = Sunday.

PowerShell

Invoke-RestMethod -Uri "$BaseUrl/api/v1/public/my/hours" -Headers $Headers

Bash

curl -s "$SWT_BASE/api/v1/public/my/hours" -H "X-API-Key: $SWT_KEY"

Python 3

r = session.get(f"{BASE}/api/v1/public/my/hours")
print(r.json())

Example response

{
  "hours": [
    { "dayOfWeek": 1, "isClosed": false, "openTime": "09:00", "closeTime": "17:30", "breakStart": "12:30", "breakEnd": "13:00" },
    { "dayOfWeek": 7, "isClosed": true,  "openTime": null,    "closeTime": null,    "breakStart": null,    "breakEnd": null }
  ]
}

Replace opening hours

PUT /api/v1/public/my/hours

Full replace. Send an array of 1–7 day objects; this overwrites all stored hours. For open days, openTime and closeTime are required in HH:MM 24-hour format. Breaks are optional. For isClosed: true days, leave the times null.

Copy-paste JSON body (a full Mon–Sun week)

{
  "hours": [
    { "dayOfWeek": 1, "isClosed": false, "openTime": "09:00", "closeTime": "17:30", "breakStart": "12:30", "breakEnd": "13:00" },
    { "dayOfWeek": 2, "isClosed": false, "openTime": "09:00", "closeTime": "17:30" },
    { "dayOfWeek": 3, "isClosed": false, "openTime": "09:00", "closeTime": "17:30" },
    { "dayOfWeek": 4, "isClosed": false, "openTime": "09:00", "closeTime": "20:00" },
    { "dayOfWeek": 5, "isClosed": false, "openTime": "09:00", "closeTime": "17:30" },
    { "dayOfWeek": 6, "isClosed": false, "openTime": "10:00", "closeTime": "14:00" },
    { "dayOfWeek": 7, "isClosed": true }
  ]
}

PowerShell

$body = @{
  hours = @(
    @{ dayOfWeek = 1; isClosed = $false; openTime = "09:00"; closeTime = "17:30" }
    @{ dayOfWeek = 6; isClosed = $false; openTime = "10:00"; closeTime = "14:00" }
    @{ dayOfWeek = 7; isClosed = $true }
  )
} | ConvertTo-Json -Depth 5

Invoke-RestMethod -Uri "$BaseUrl/api/v1/public/my/hours" -Method Put `
  -Headers $Headers -ContentType "application/json" -Body $body

Bash

curl -s -X PUT "$SWT_BASE/api/v1/public/my/hours" \
  -H "X-API-Key: $SWT_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "hours": [
          { "dayOfWeek": 1, "isClosed": false, "openTime": "09:00", "closeTime": "17:30" },
          { "dayOfWeek": 6, "isClosed": false, "openTime": "10:00", "closeTime": "14:00" },
          { "dayOfWeek": 7, "isClosed": true }
        ]
      }'

Python 3

r = session.put(
    f"{BASE}/api/v1/public/my/hours",
    json={
        "hours": [
            {"dayOfWeek": 1, "isClosed": False, "openTime": "09:00", "closeTime": "17:30"},
            {"dayOfWeek": 6, "isClosed": False, "openTime": "10:00", "closeTime": "14:00"},
            {"dayOfWeek": 7, "isClosed": True},
        ]
    },
)
print(r.json())

Send batch review invitations

POST /api/v1/public/my/review-invitations

Emails up to 50 customers a one-time review link. Rate limited to 5 requests per hour per key. Each invitee needs an email; name is optional. Invalid emails are skipped and reported in the errors array rather than failing the whole batch.

Copy-paste JSON body

{
  "invitees": [
    { "email": "customer1@example.com", "name": "Anna Bakker" },
    { "email": "customer2@example.com", "name": "Tom de Jong" },
    { "email": "customer3@example.com" }
  ]
}

PowerShell

$body = @{
  invitees = @(
    @{ email = "customer1@example.com"; name = "Anna Bakker" }
    @{ email = "customer2@example.com"; name = "Tom de Jong" }
  )
} | ConvertTo-Json -Depth 5

Invoke-RestMethod -Uri "$BaseUrl/api/v1/public/my/review-invitations" -Method Post `
  -Headers $Headers -ContentType "application/json" -Body $body

Bash

curl -s -X POST "$SWT_BASE/api/v1/public/my/review-invitations" \
  -H "X-API-Key: $SWT_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "invitees": [
          { "email": "customer1@example.com", "name": "Anna Bakker" },
          { "email": "customer2@example.com", "name": "Tom de Jong" }
        ]
      }'

Python 3

r = session.post(
    f"{BASE}/api/v1/public/my/review-invitations",
    json={
        "invitees": [
            {"email": "customer1@example.com", "name": "Anna Bakker"},
            {"email": "customer2@example.com", "name": "Tom de Jong"},
        ]
    },
)
print(r.json())

Example response

{
  "sent": 2,
  "errors": [
    { "email": "not-an-email", "reason": "Invalid email address" }
  ]
}

Errors

All errors are JSON with an error message and, where useful, a machine-readable code.

HTTP code Meaning
401 MISSING_API_KEY No X-API-Key header, or it doesn't start with swt_
401 INVALID_API_KEY Key is unknown, revoked, or older than 6 months
403 TIER_REQUIRED The business is not on the Business+ tier
403 SCOPE_VIOLATION You requested a business id that isn't yours
404 RESOURCE_NOT_FOUND The business exists but isn't approved/visible
400 Validation error — the error message says what to fix
429 Rate limit exceeded (see X-RateLimit-Limit response header)

Example error

{ "error": "API access requires a Business+ subscription", "code": "TIER_REQUIRED" }

A robust client checks the status code before parsing:

r = session.get(f"{BASE}/api/v1/public/my/analytics")
if r.status_code == 200:
    data = r.json()
else:
    err = r.json()
    print(f"[{r.status_code}] {err.get('code', '')}: {err['error']}")

Quick reference

Method Path Purpose
GET /api/v1/public/businesses Your business summary
GET /api/v1/public/businesses/{id} Full profile + services
GET /api/v1/public/businesses/{id}/reviews Approved reviews (paginated)
GET /api/v1/public/jobs Your job postings (filterable)
GET /api/v1/public/my/analytics 30-day page views
PUT /api/v1/public/my/profile Update company details
GET /api/v1/public/my/hours Read opening hours
PUT /api/v1/public/my/hours Replace opening hours
POST /api/v1/public/my/review-invitations Batch review invites (≤50, 5/hr)

Every endpoint is authenticated with X-API-Key, scoped to one business, and returns JSON. Happy building.