API Documentation

A read-only REST API over Repeater Nation's public data — repeaters, POTA parks and activations, clubs, events, and more. v1 — subject to change. Sign in (or create an account) to get a key — access requires a verified operator account and agreeing to the Developer API Terms.

Quickstart

Every request is: pick a resource, send your key, read paginated JSON back. Here's a full round trip against the repeaters resource.

curl -H "Authorization: Bearer rn_live_your_key_here" \
  "https://repeaternation.com/api/apps/6a6d787f8e808727b935dd09/functions/api-v1?resource=repeaters&pageSize=2"

Response:

{
  "data": [
    {
      "id": "66f1a2b3c4d5e6f7a8b9c0d1",
      "name": "Mount Wilson GMRS Repeater",
      "callsign": "WRXX123",
      "frequency": 462.675,
      "offset": 5,
      "tone": "141.3",
      "input_tone": "141.3",
      "mode": "Analog",
      "access": "Public",
      "coverage_radius": 45,
      "lat": 34.2257,
      "lng": -118.0632,
      "elevation": 1740,
      "owner": "WRXX123",
      "linked_system": "",
      "status": "Online",
      "verification": "Verified",
      "hidden": false,
      "rating": 4.7,
      "photo_url": "https://storage.googleapis.com/.../repeater-photo.jpg",
      "tag_ids": [
        "6702ab...",
        "6703cd..."
      ],
      "category_id": "6704ef...",
      "radio_service": "GMRS",
      "created_date": "2025-03-11T18:22:04.000Z",
      "updated_date": "2026-01-04T09:15:31.000Z"
    },
    { "...": "second record" }
  ],
  "count": 2,
  "skip": 0,
  "pageSize": 2,
  "total": 8471
}

GET requests read parameters from the query string (as above). POST requests read the same parameters from a JSON body instead — useful if a parameter would be awkward to URL-encode:

curl -X POST "https://repeaternation.com/api/apps/6a6d787f8e808727b935dd09/functions/api-v1" \
  -H "Authorization: Bearer rn_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"resource": "repeaters", "skip": 0, "pageSize": 50}'

Authentication

Every request needs an API key, sent as a Bearer token (or the x-api-key header as a fallback, for clients that can't easily set a custom Authorization scheme):

curl -H "Authorization: Bearer rn_live_..." \
  "https://repeaternation.com/api/apps/6a6d787f8e808727b935dd09/functions/api-v1?resource=repeaters"

# or, equivalently:
curl -H "x-api-key: rn_live_..." \
  "https://repeaternation.com/api/apps/6a6d787f8e808727b935dd09/functions/api-v1?resource=repeaters"

Keys look like rn_live_ followed by 64 hex characters. Generate one from your profile's API Access panel — you'll need a verified operator account and to agree to the Developer API Terms once. The raw key is shown exactly once, at creation — only its hash is stored server-side, so if you lose it, revoke it and create a new one; there's no way to retrieve it again.

A missing, malformed, unknown, or revoked key returns 401. Revoking a key (from your profile, or by an admin) takes effect on its very next request — there's no caching or grace period. You can have up to 5 active keys at a time; all keys currently carry a single scope, read:public.

Pagination

Every resource takes skip and pageSize query params (or JSON body fields on POST). pageSize is capped at 200 and defaults to 50. Responses always include the full shape:

{
  "data": [ /* array of records, length <= pageSize */ ],
  "count": 50,      // records actually returned in this page (== data.length)
  "skip": 0,        // the skip value you sent (or the default, 0)
  "pageSize": 50,   // the pageSize actually applied, after clamping to [1, 200]
  "total": 1234     // total records available across all pages, for this resource + your access
}

To page through everything: start at skip=0, keep adding pageSize to skip, and stop once skip >= total (which returns an empty data array, not an error). total can shift between requests as records are added — it's a snapshot at request time, not a locked cursor.

Filtering & sorting

v1 has no query-side filtering or custom sorting. Each resource is returned in one fixed sort order (documented per resource below) and you page through the whole public set with skip/pageSize — there's no filter, q, sort, or field- selection parameter. If you need e.g. "repeaters near me" or "events after a date," pull the pages you need and filter/sort client-side. This is a real v1 limitation, not an oversight — query-side filtering is on the list for a future version.

Rate limits

Standard keys: 60 requests/minute. Elevated keys (granted by an admin on request, for higher-volume integrations): 300/minute. Limits are per-key, on a fixed 60-second window (not a rolling average) — a burst that empties your budget mid-window recovers fully at the next window boundary. Every response carries rate-limit headers, success or error:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1717000000   # unix seconds when the current window resets

Exceeding the limit returns 429 with a Retry-After header (seconds until the window resets). Separately, repeated invalid-key attempts from the same IP address are throttled before they even reach key lookup — if you're testing key validity, use a key you know is correct rather than brute-forcing.

Errors

All errors return JSON with an error field, and an appropriate HTTP status:

StatusMeaning
400Unknown resource, or a malformed parameter. The error message for an unknown resource lists every valid resource key.
401Missing, malformed, unknown, or revoked API key.
429Rate limit exceeded (or, before key lookup, too many failed attempts from your IP).
500Something went wrong on our end. Safe to retry with backoff.
{ "error": "Unknown resource \"repeter\". Available: repeaters, pota-parks, pota-activations, ..." }

Versioning

This is v1 and it's new — endpoint shapes, field lists, and error messages may change without a version bump while the API is young. Once it stabilizes, breaking changes will move to a new version path rather than changing v1 out from under existing integrations. If you're building something that matters, reach out via Contact and we'll give you a heads-up before anything changes.

Resources

Every resource is fetched the same way — set resource to one of the keys below. All 12 are read-only in v1.

Repeaters — repeaters

The GMRS/HAM repeater directory.

Sort order: Highest rated first (rating, descending). Fixed — not configurable.

  • Repeaters marked hidden by an admin are excluded entirely.
  • When access is "Closed", tone and input_tone are omitted from the response (the owner controls who sees those).
curl -H "Authorization: Bearer rn_live_..." \
  "https://repeaternation.com/api/apps/6a6d787f8e808727b935dd09/functions/api-v1?resource=repeaters&pageSize=50"
Fields & example record
FieldTypeNotes
idstringUnique record ID.
namestringRepeater name.
callsignstringCallsign of the licensed repeater.
frequencynumberOutput frequency in MHz.
offsetnumberTransmit offset in MHz.
tonestringOutput (TX) CTCSS Hz or DCS code prefixed with D. Omitted for Closed repeaters.
input_tonestringInput (RX) tone. Omitted for Closed repeaters.
mode"Analog" | "Digital" | "Mixed"
access"Public" | "Closed"
coverage_radiusnumberApproximate coverage radius, miles.
latnumber
lngnumber
elevationnumberSite elevation, feet.
ownerstringCallsign of the repeater operator.
linked_systemstringLinked system name, if part of one.
status"Online" | "Offline" | "Maintenance"
verification"Verified" | "Pending" | "Needs Review" | "Rejected"
hiddenbooleanAlways false — hidden repeaters never appear in this list.
ratingnumberCommunity rating, 0–5.
photo_urlstring
tag_idsstring[]IDs of records from the tags resource.
category_idstringID of a record from the categories resource.
radio_service"GMRS" | "HAM"
created_datestring (ISO date-time)When the record was created.
updated_datestring (ISO date-time)When the record was last modified.

Example record (one entry from data):

{
  "id": "66f1a2b3c4d5e6f7a8b9c0d1",
  "name": "Mount Wilson GMRS Repeater",
  "callsign": "WRXX123",
  "frequency": 462.675,
  "offset": 5,
  "tone": "141.3",
  "input_tone": "141.3",
  "mode": "Analog",
  "access": "Public",
  "coverage_radius": 45,
  "lat": 34.2257,
  "lng": -118.0632,
  "elevation": 1740,
  "owner": "WRXX123",
  "linked_system": "",
  "status": "Online",
  "verification": "Verified",
  "hidden": false,
  "rating": 4.7,
  "photo_url": "https://storage.googleapis.com/.../repeater-photo.jpg",
  "tag_ids": [
    "6702ab...",
    "6703cd..."
  ],
  "category_id": "6704ef...",
  "radio_service": "GMRS",
  "created_date": "2025-03-11T18:22:04.000Z",
  "updated_date": "2026-01-04T09:15:31.000Z"
}

POTA parks — pota-parks

Parks On The Air park references — official POTA database entries plus admin-approved community submissions.

Sort order: Most recently updated first (updated_date, descending). Fixed.

  • Only parks with verification_status "approved" are returned — pending/rejected/under-review community submissions are excluded.
curl -H "Authorization: Bearer rn_live_..." \
  "https://repeaternation.com/api/apps/6a6d787f8e808727b935dd09/functions/api-v1?resource=pota-parks&pageSize=50"
Fields & example record
FieldTypeNotes
idstring
namestringOfficial park name.
park_numberstringOfficial POTA reference, e.g. US-4157.
park_typestringe.g. "State Park", "National Forest", "Wildlife Area" — see the source for the full enum.
locationstringGeneral location description.
citystring
statestring
countystring
addressstring
latnumber
lngnumber
descriptionstring
websitestringOfficial park website.
pota_urlstringe.g. https://pota.app/#/park/US-4157
supporting_infostringExtra info from a community submission.
photo_urlsstring[]
search_keywordsstringConcatenated searchable text.
source"official" | "community"
verification_status"approved"Always "approved" — everything else is filtered out before you see it.
pota_status"active" | "inactive"Whether the park is still active in the official POTA program.
submitted_by_namestringSet only for community submissions.
submitted_atstring (ISO date-time)
last_synced_datestring (ISO date-time)Last time this park was touched by a sync from the official POTA database.
activation_countnumberCached lifetime activation count.
last_activation_datestring (ISO date-time)
favorites_countnumber
created_datestring (ISO date-time)When the record was created.
updated_datestring (ISO date-time)When the record was last modified.

Example record (one entry from data):

{
  "id": "65a1...",
  "name": "Griffith Park",
  "park_number": "US-1622",
  "park_type": "Recreation Area",
  "location": "Los Angeles, CA",
  "city": "Los Angeles",
  "state": "CA",
  "county": "Los Angeles",
  "address": "4730 Crystal Springs Dr, Los Angeles, CA 90027",
  "lat": 34.1365,
  "lng": -118.2942,
  "description": "Large urban park with several activation-friendly trailheads.",
  "website": "https://www.laparks.org/griffithpark",
  "pota_url": "https://pota.app/#/park/US-1622",
  "supporting_info": "",
  "photo_urls": [],
  "search_keywords": "griffith park los angeles ca us-1622",
  "source": "official",
  "verification_status": "approved",
  "pota_status": "active",
  "submitted_by_name": "",
  "submitted_at": null,
  "last_synced_date": "2026-09-01T06:00:00.000Z",
  "activation_count": 128,
  "last_activation_date": "2026-09-20T15:04:00.000Z",
  "favorites_count": 37,
  "created_date": "2024-06-02T00:00:00.000Z",
  "updated_date": "2026-09-01T06:00:00.000Z"
}

POTA activations — pota-activations

Scheduled, active, and completed park activations.

Sort order: Most recently created first (created_date, descending). Fixed.

  • Only activations the operator marked public are returned. Private (invite-only) activations never appear here, at any pageSize.
curl -H "Authorization: Bearer rn_live_..." \
  "https://repeaternation.com/api/apps/6a6d787f8e808727b935dd09/functions/api-v1?resource=pota-activations&pageSize=50"
Fields & example record
FieldTypeNotes
idstring
event_idstringLinked record from the events resource, when published.
park_idstringLinked record from the pota-parks resource.
park_namestringSnapshot of the park name at scheduling time.
park_numberstring
park_locationstring
latnumber
lngnumber
scheduled_datestring (ISO date-time)
end_datestring (ISO date-time)Optional planned end time.
radio_service"GMRS" | "HAM"
bandstringHAM band, when radio_service is HAM.
frequencynumberCurrent operating frequency, MHz.
activation_logstringJSON-encoded array of in-activation events (frequency changes, etc).
channelstringGMRS channel number/label.
mode"Simplex" | "Repeater"
repeater_idstringLinked record from the repeaters resource, when mode is Repeater.
notesstring
status"Upcoming" | "Active" | "Completed" | "Cancelled"
club_idstringBlank for a personal (non-club) activation.
club_namestring
operator_namestring
operator_callsignstring
co_host_namesstring[]Display names of co-hosting operators (their user IDs are not exposed).
is_publicbooleanAlways true.
contacts_countnumberTotal logged contacts.
roster_membersstringJSON-encoded array of planned operators.
started_atstring (ISO date-time)
ended_atstring (ISO date-time)
created_datestring (ISO date-time)When the record was created.
updated_datestring (ISO date-time)When the record was last modified.

Example record (one entry from data):

{
  "id": "66b2...",
  "event_id": "",
  "park_id": "65a1...",
  "park_name": "Griffith Park",
  "park_number": "US-1622",
  "park_location": "Los Angeles, CA",
  "lat": 34.1365,
  "lng": -118.2942,
  "scheduled_date": "2026-10-04T15:00:00.000Z",
  "end_date": "2026-10-04T20:00:00.000Z",
  "radio_service": "GMRS",
  "band": "",
  "frequency": 462.675,
  "activation_log": "[]",
  "channel": "20",
  "mode": "Simplex",
  "repeater_id": "",
  "notes": "Two operators, morning start.",
  "status": "Upcoming",
  "club_id": "",
  "club_name": "",
  "operator_name": "Alex Rivera",
  "operator_callsign": "WRXX123",
  "co_host_names": [
    "Jordan T."
  ],
  "is_public": true,
  "contacts_count": 0,
  "roster_members": "[]",
  "started_at": null,
  "ended_at": null,
  "created_date": "2026-09-15T12:00:00.000Z",
  "updated_date": "2026-09-15T12:00:00.000Z"
}

Clubs — clubs

GMRS/HAM clubs registered on the platform.

Sort order: Alphabetical by name. Fixed.

curl -H "Authorization: Bearer rn_live_..." \
  "https://repeaternation.com/api/apps/6a6d787f8e808727b935dd09/functions/api-v1?resource=clubs&pageSize=50"
Fields & example record
FieldTypeNotes
idstring
namestring
callsignstringClub callsign, if any.
creator_callsignstring
descriptionstring
fee_period"One-time" | "Monthly" | "Annual"
membership_feenumber
gamification_enabledbooleanWhether net check-in streaks/achievements are tracked.
leaderboard_enabledboolean
net_schedule"none" | "weekly" | "monthly"
latnumber
lngnumber
locationstring
members_countnumber
officersstring
photo_urlstring
qualifying_checkin_typesstringJSON-encoded array, e.g. ["standard","late","guest","mobile"].
radio_services("GMRS" | "HAM")[]
stripe_charges_enabledbooleanWhether the club can accept paid membership via Stripe.
created_datestring (ISO date-time)When the record was created.
updated_datestring (ISO date-time)When the record was last modified.

Example record (one entry from data):

{
  "id": "64c3...",
  "name": "Angeles Crest GMRS Club",
  "callsign": "WRAB123",
  "creator_callsign": "WRAB123",
  "description": "Weekly net covering the San Gabriel Mountains repeater network.",
  "fee_period": "Annual",
  "membership_fee": 20,
  "gamification_enabled": true,
  "leaderboard_enabled": true,
  "net_schedule": "weekly",
  "lat": 34.24,
  "lng": -118.06,
  "location": "Los Angeles, CA",
  "members_count": 214,
  "officers": "WRAB123, WRAC456",
  "photo_url": "",
  "qualifying_checkin_types": "[\"standard\",\"late\",\"guest\",\"mobile\"]",
  "radio_services": [
    "GMRS"
  ],
  "stripe_charges_enabled": true,
  "created_date": "2023-11-02T00:00:00.000Z",
  "updated_date": "2026-08-30T00:00:00.000Z"
}

Club pages — club-pages

Info/rules/announcement/FAQ pages published by clubs.

Sort order: Most recently updated first (updated_date, descending). Fixed.

curl -H "Authorization: Bearer rn_live_..." \
  "https://repeaternation.com/api/apps/6a6d787f8e808727b935dd09/functions/api-v1?resource=club-pages&pageSize=50"
Fields & example record
FieldTypeNotes
idstring
club_idstringLinked record from the clubs resource.
titlestring
bodystringMarkdown body.
page_type"Info" | "Rules" | "Announcement" | "FAQ" | "Resources" | "Discussion"
author_callsignstring
author_namestring
image_urlsstring[]
created_datestring (ISO date-time)When the record was created.
updated_datestring (ISO date-time)When the record was last modified.

Example record (one entry from data):

{
  "id": "64d4...",
  "club_id": "64c3...",
  "title": "Weekly Net Guidelines",
  "body": "## Net format\n\n1. Check-ins by callsign\n2. Traffic\n3. Announcements",
  "page_type": "Rules",
  "author_callsign": "WRAB123",
  "author_name": "Alex Rivera",
  "image_urls": [],
  "created_date": "2024-01-10T00:00:00.000Z",
  "updated_date": "2026-06-01T00:00:00.000Z"
}

Events — events

Community events, nets, and gatherings shown on the public calendar.

Sort order: By event date, ascending (soonest first). Fixed.

curl -H "Authorization: Bearer rn_live_..." \
  "https://repeaternation.com/api/apps/6a6d787f8e808727b935dd09/functions/api-v1?resource=events&pageSize=50"
Fields & example record
FieldTypeNotes
idstring
titlestring
descriptionstring
typestringEvent type name — matches a name in the event-types resource.
image_urlstring
datestring (ISO date-time)
locationstring
latnumber
lngnumber
organizerstring
club_idstringBlank for a community-wide (non-club) event.
source_typestringe.g. "pota_activation" or "net_control" when auto-created from another feature.
source_idstringID of the originating POTA activation or Net Control session.
created_datestring (ISO date-time)When the record was created.
updated_datestring (ISO date-time)When the record was last modified.

Example record (one entry from data):

{
  "id": "65e5...",
  "title": "Fall Foliage POTA Activation",
  "description": "Joint club activation at Griffith Park.",
  "type": "Activation",
  "image_url": "",
  "date": "2026-10-04T15:00:00.000Z",
  "location": "Griffith Park, Los Angeles, CA",
  "lat": 34.1365,
  "lng": -118.2942,
  "organizer": "Angeles Crest GMRS Club",
  "club_id": "64c3...",
  "source_type": "pota_activation",
  "source_id": "66b2...",
  "created_date": "2026-09-15T12:00:00.000Z",
  "updated_date": "2026-09-15T12:00:00.000Z"
}

Event types — event-types

The catalog of event type labels/colors used by the events resource.

Sort order: Alphabetical by name. Fixed.

  • Disabled types remain visible here (they can still appear on existing events) but cannot be assigned to new ones in the app.
curl -H "Authorization: Bearer rn_live_..." \
  "https://repeaternation.com/api/apps/6a6d787f8e808727b935dd09/functions/api-v1?resource=event-types&pageSize=50"
Fields & example record
FieldTypeNotes
idstring
namestring
colorstringTailwind class pair used for the badge/card color.
enabledboolean
display_ordernumber
created_datestring (ISO date-time)When the record was created.
updated_datestring (ISO date-time)When the record was last modified.

Example record (one entry from data):

{
  "id": "6600a...",
  "name": "Activation",
  "color": "bg-amber-100 text-amber-700",
  "enabled": true,
  "display_order": 2,
  "created_date": "2023-05-01T00:00:00.000Z",
  "updated_date": "2023-05-01T00:00:00.000Z"
}

Categories — categories

The category catalog used across repeaters and other directory content.

Sort order: Alphabetical by name. Fixed.

curl -H "Authorization: Bearer rn_live_..." \
  "https://repeaternation.com/api/apps/6a6d787f8e808727b935dd09/functions/api-v1?resource=categories&pageSize=50"
Fields & example record
FieldTypeNotes
idstring
namestringNormalized lowercase name.
display_namestringOriginal-cased name.
descriptionstring
iconstringlucide-react icon name.
colorstringHex accent color.
enabledboolean
display_ordernumber
created_datestring (ISO date-time)When the record was created.
updated_datestring (ISO date-time)When the record was last modified.

Example record (one entry from data):

{
  "id": "6704ef...",
  "name": "emergency",
  "display_name": "Emergency",
  "description": "Emergency and public-service repeaters.",
  "icon": "siren",
  "color": "#ef4444",
  "enabled": true,
  "display_order": 1,
  "created_date": "2023-05-01T00:00:00.000Z",
  "updated_date": "2023-05-01T00:00:00.000Z"
}

Tags — tags

The tag catalog used across repeaters and other directory content.

Sort order: Alphabetical by name. Fixed.

curl -H "Authorization: Bearer rn_live_..." \
  "https://repeaternation.com/api/apps/6a6d787f8e808727b935dd09/functions/api-v1?resource=tags&pageSize=50"
Fields & example record
FieldTypeNotes
idstring
namestringNormalized lowercase name.
display_namestringOriginal-cased name.
colorstringHex accent color.
enabledboolean
descriptionstring
created_datestring (ISO date-time)When the record was created.
updated_datestring (ISO date-time)When the record was last modified.

Example record (one entry from data):

{
  "id": "6702ab...",
  "name": "linked",
  "display_name": "Linked",
  "color": "#f59e0b",
  "enabled": true,
  "description": "Part of a linked repeater system.",
  "created_date": "2023-05-01T00:00:00.000Z",
  "updated_date": "2023-05-01T00:00:00.000Z"
}

Badges — badges

The achievement badge catalog members can earn.

Sort order: Alphabetical by name. Fixed.

  • Badges with is_secret: true are excluded entirely until a member has earned them, at which point they still are not exposed by this public resource (this endpoint only lists the catalog, never who has earned what).
curl -H "Authorization: Bearer rn_live_..." \
  "https://repeaternation.com/api/apps/6a6d787f8e808727b935dd09/functions/api-v1?resource=badges&pageSize=50"
Fields & example record
FieldTypeNotes
idstring
namestring
descriptionstring
iconstringEmoji text or lucide-react icon name, depending on icon_type.
icon_type"emoji" | "icon" | "image"
image_urlstringUsed when icon_type is "image".
category"Activity" | "Contribution" | "Achievement" | "Social" | "Special" | "License"
rarity"Common" | "Uncommon" | "Rare" | "Epic" | "Legendary" | "Mythic"
colorstringHex accent color.
display_ordernumber
enabledboolean
is_secretbooleanAlways false — secret badges are filtered out.
requirement_typestringThe metric used to auto-evaluate this badge (long enum — see the app for the full list).
requirement_amountnumber
requirement_period"all_time" | "daily" | "weekly" | "monthly" | "yearly"
requirement_labelstringHuman-readable description of how it’s earned.
award_method"automatic" | "manual" | "both"
created_datestring (ISO date-time)When the record was created.
updated_datestring (ISO date-time)When the record was last modified.

Example record (one entry from data):

{
  "id": "6701cd...",
  "name": "Trail Blazer",
  "description": "Activate 10 different POTA parks.",
  "icon": "🥾",
  "icon_type": "emoji",
  "image_url": "",
  "category": "Activity",
  "rarity": "Rare",
  "color": "#f59e0b",
  "display_order": 12,
  "enabled": true,
  "is_secret": false,
  "requirement_type": "unique_repeaters",
  "requirement_amount": 10,
  "requirement_period": "all_time",
  "requirement_label": "Activate 10 different POTA parks.",
  "award_method": "automatic",
  "created_date": "2023-05-01T00:00:00.000Z",
  "updated_date": "2023-05-01T00:00:00.000Z"
}

Net control sessions — net-control-sessions

Scheduled and past organized nets.

Sort order: By scheduled date, descending (most recent/upcoming first). Fixed.

  • Only sessions marked public are returned — private nets never appear here, at any pageSize.
  • This resource uses an allowlist rather than a blocklist, so it returns fewer fields than the underlying record has — operational fields like scripts, roster details, and host user IDs are never exposed.
  • latitude/longitude are rounded to 2 decimal places (~1km precision) rather than the exact operating position.
curl -H "Authorization: Bearer rn_live_..." \
  "https://repeaternation.com/api/apps/6a6d787f8e808727b935dd09/functions/api-v1?resource=net-control-sessions&pageSize=50"
Fields & example record
FieldTypeNotes
idstring
namestring
descriptionstring
net_type"Regular" | "Weekly" | "Community" | "Training" | "Special Event" | "Emergency" | "Other"
radio_service"GMRS" | "HAM"
bandstring
frequencynumberMHz.
mode"Simplex" | "Repeater"
channelstring
repeater_namestring
tonestring
scheduled_datestring (ISO date-time)
start_timestring
end_timestring
locationstring
latitudenumberRounded to ~1km precision.
longitudenumberRounded to ~1km precision.
recurring"none" | "daily" | "weekly" | "monthly"
status"scheduled" | "active" | "ended" | "cancelled"
operator_namestring
operator_callsignstring
club_namestring
total_checkinsnumber
started_atstring (ISO date-time)
ended_atstring (ISO date-time)
duration_minutesnumber
created_datestring (ISO date-time)When the record was created.
updated_datestring (ISO date-time)When the record was last modified.

Example record (one entry from data):

{
  "id": "6612ab...",
  "name": "Tuesday Night GMRS Net",
  "description": "Weekly community check-in net.",
  "net_type": "Weekly",
  "radio_service": "GMRS",
  "band": "",
  "frequency": 462.675,
  "mode": "Repeater",
  "channel": "20",
  "repeater_name": "Mount Wilson GMRS Repeater",
  "tone": "141.3",
  "scheduled_date": "2026-10-07T02:00:00.000Z",
  "start_time": "19:00",
  "end_time": "20:00",
  "location": "Los Angeles, CA",
  "latitude": 34.23,
  "longitude": -118.06,
  "recurring": "weekly",
  "status": "scheduled",
  "operator_name": "Alex Rivera",
  "operator_callsign": "WRXX123",
  "club_name": "Angeles Crest GMRS Club",
  "total_checkins": 0,
  "started_at": null,
  "ended_at": null,
  "duration_minutes": 0
}

Marketplace listings — marketplace-listings

Buy/sell/trade listings for radio gear.

Sort order: Most recently created first (created_date, descending). Fixed.

curl -H "Authorization: Bearer rn_live_..." \
  "https://repeaternation.com/api/apps/6a6d787f8e808727b935dd09/functions/api-v1?resource=marketplace-listings&pageSize=50"
Fields & example record
FieldTypeNotes
idstring
titlestring
descriptionstring
listing_type"For Sale" | "Wanted" | "Trade" | "Free"
category"Radios" | "Antennas" | "Repeaters" | "Accessories" | "Parts" | "Cables" | "Power" | "Other"
condition"New" | "Like New" | "Good" | "Used" | "For Parts"
pricenumber
locationstring
image_urlsstring[]
seller_namestring
seller_callsignstring
status"Active" | "Sold" | "Closed"
report_countnumberNumber of user reports against this listing.
description_notestringOptional admin-added note shown alongside the listing.
created_datestring (ISO date-time)When the record was created.
updated_datestring (ISO date-time)When the record was last modified.

Example record (one entry from data):

{
  "id": "6650cd...",
  "title": "Motorola CP200d GMRS HT, like new",
  "description": "Barely used, includes charger and belt clip.",
  "listing_type": "For Sale",
  "category": "Radios",
  "condition": "Like New",
  "price": 150,
  "location": "Denver, CO",
  "image_urls": [
    "https://storage.googleapis.com/.../listing1.jpg"
  ],
  "seller_name": "Jordan T.",
  "seller_callsign": "WRAC456",
  "status": "Active",
  "report_count": 0,
  "description_note": "",
  "created_date": "2026-09-20T14:00:00.000Z",
  "updated_date": "2026-09-20T14:00:00.000Z"
}