Piknik.Spot REST API

REST API under https://piknik.spot/api covering participants (places), offerings and pack prices, service locations, marketplace listings, events and RSVPs, jobs, recipes, associations and place tours, CSA interests, spend challenges, delivery tasks, geocoding, the Local Food Score, OAuth 2.0 client management and an unauthenticated public place-summary endpoint for AI agents (max 5 results, 30 requests per minute). Described by a provider-hosted OpenAPI 3.0.3 document with 509 paths and 683 operations; the same document is served as YAML at /api/openapi. Authentication is an OAuth 2.0 bearer JWT or a pik_pat_ personal access token; browser sessions use a next-auth cookie.

Operations 683

Showing the first 250 of 683. The full set is in the contract, and via get_provider_operations.

GET /a2a GET /a2a
POST /a2a POST /a2a
GET /admin/agent-settings GET /admin/agent-settings
PUT /admin/agent-settings PUT /admin/agent-settings
POST /admin/announcements/cleanup POST /admin/announcements/cleanup
GET /admin/announcements/cleanup GET /admin/announcements/cleanup
POST /admin/associations/{id}/memberships/bulk POST /admin/associations/{id}/memberships/bulk
GET /admin/associations/{id}/memberships GET /admin/associations/{id}/memberships
DELETE /admin/associations/{id}/memberships DELETE /admin/associations/{id}/memberships
PATCH /admin/associations/{id}/memberships PATCH /admin/associations/{id}/memberships
GET /admin/associations/{id} GET /admin/associations/{id}
PUT /admin/associations/{id} PUT /admin/associations/{id}
DELETE /admin/associations/{id} DELETE /admin/associations/{id}
GET /admin/associations/{id}/surveys GET /admin/associations/{id}/surveys
POST /admin/associations/{id}/surveys POST /admin/associations/{id}/surveys
GET /admin/associations GET /admin/associations
POST /admin/associations POST /admin/associations
GET /admin/associations/verification-queue GET /admin/associations/verification-queue
PUT /admin/associations/verify/{membershipId} PUT /admin/associations/verify/{membershipId}
POST /admin/campaign-batch POST /api/admin/campaign-batch
GET /admin/campaign-status GET /admin/campaign-status
GET /admin/categories/{id} GET /admin/categories/{id}
PATCH /admin/categories/{id} PATCH /admin/categories/{id}
DELETE /admin/categories/{id} DELETE /admin/categories/{id}
POST /admin/categories/reorder POST /api/admin/categories/reorder
GET /admin/categories GET /admin/categories
POST /admin/categories POST /admin/categories
GET /admin/event-sources/{id} GET /admin/event-sources/{id}
PUT /admin/event-sources/{id} PUT /admin/event-sources/{id}
DELETE /admin/event-sources/{id} DELETE /admin/event-sources/{id}
GET /admin/event-sources GET /admin/event-sources
POST /admin/event-sources POST /admin/event-sources
POST /admin/events/recurrence POST /admin/events/recurrence
GET /admin/events/recurrence GET /admin/events/recurrence
DELETE /admin/fee-profiles/{id}/assignments/{assignmentId} DELETE /admin/fee-profiles/{id}/assignments/{assignmentId}
POST /admin/fee-profiles/{id}/assignments POST /admin/fee-profiles/{id}/assignments
PUT /admin/fee-profiles/{id} PUT /admin/fee-profiles/{id}
DELETE /admin/fee-profiles/{id} DELETE /admin/fee-profiles/{id}
GET /admin/fee-profiles GET /admin/fee-profiles
POST /admin/fee-profiles POST /admin/fee-profiles
POST /admin/for-towns-pdf POST /admin/for-towns-pdf
POST /admin/frost-dates/import POST /admin/frost-dates/import
GET /admin/frost-dates GET /admin/frost-dates
PUT /admin/games/{id} PUT /admin/games/{id}
GET /admin/games/{id} GET /admin/games/{id}
DELETE /admin/games/{id} DELETE /admin/games/{id}
GET /admin/games/place-interests GET /admin/games/place-interests
PATCH /admin/games/place-interests PATCH /admin/games/place-interests
POST /admin/games POST /admin/games
GET /admin/games GET /admin/games
POST /admin/geocode-missing POST /admin/geocode-missing
GET /admin/global-features GET /api/admin/global-features
POST /admin/global-features GET /api/admin/global-features
POST /admin/global-features/seed POST /api/admin/global-features/seed
POST /admin/grant-feature POST /api/admin/grant-feature
GET /admin/grant-feature POST /api/admin/grant-feature
GET /admin/missing-coords GET /admin/missing-coords
GET /admin/neighborhoods/discover-osm GET /admin/neighborhoods/discover-osm
PUT /admin/neighborhoods/waterloo-region/{id} PUT /admin/neighborhoods/waterloo-region/{id}
DELETE /admin/neighborhoods/waterloo-region/{id} DELETE /admin/neighborhoods/waterloo-region/{id}
POST /admin/neighborhoods/waterloo-region/rebuild POST /admin/neighborhoods/waterloo-region/rebuild
GET /admin/neighborhoods/waterloo-region GET /admin/neighborhoods/waterloo-region
POST /admin/neighborhoods/waterloo-region POST /admin/neighborhoods/waterloo-region
PUT /admin/neighborhoods/waterloo-region PUT /admin/neighborhoods/waterloo-region
GET /admin/neighborhoods/waterloo-region/samples GET /admin/neighborhoods/waterloo-region/samples
GET /admin/notifications GET /admin/notifications
GET /admin/osm-explorer/connections GET /admin/osm-explorer/connections
GET /admin/osm-explorer/ignored-names GET /admin/osm-explorer/ignored-names
POST /admin/osm-explorer/ignored-names POST /admin/osm-explorer/ignored-names
GET /admin/osm-explorer/local-food-score GET /admin/osm-explorer/local-food-score
GET /admin/osm-explorer/neighborhood-match GET /admin/osm-explorer/neighborhood-match
GET /admin/osm-explorer/reverse-geocode GET /admin/osm-explorer/reverse-geocode
GET /admin/osm-explorer GET /admin/osm-explorer
POST /admin/osm-explorer/simulate POST /admin/osm-explorer/simulate
POST /admin/participants/import POST /admin/participants/import
POST /admin/participants/notify POST /api/admin/participants/notify
GET /admin/participants GET /admin/participants
GET /admin/participants/template GET /admin/participants/template
POST /admin/participants/verify/generate-link POST /api/admin/participants/verify/generate-link
GET /admin/performance GET /admin/performance
POST /admin/places/google-places POST /admin/places/google-places
GET /admin/places/store-qr/{participantId}/pdf GET /admin/places/store-qr/{participantId}/pdf
GET /admin/places/store-qr GET /admin/places/store-qr
PUT /admin/places/store-qr PUT /admin/places/store-qr
POST /admin/planting-guides/import POST /admin/planting-guides/import
GET /admin/planting-guides GET /admin/planting-guides
GET /admin/products/{id} GET /admin/products/{id}
PATCH /admin/products/{id} PATCH /admin/products/{id}
DELETE /admin/products/{id} DELETE /admin/products/{id}
GET /admin/products GET /admin/products
POST /admin/products POST /admin/products
GET /admin/provenance-categories GET /api/admin/provenance-categories?days=30[&participantId=...]
GET /admin/provenance-reports/place-interest GET /api/admin/provenance-reports/place-interest?participantId=...&days=30
GET /admin/provenance-reports/producer-demand GET /api/admin/provenance-reports/producer-demand?producerId=...&days=30
GET /admin/provenance-reports/producer-leads GET /api/admin/provenance-reports/producer-leads?producerId=...&days=30
GET /admin/provenance-reports/regional-trend GET /api/admin/provenance-reports/regional-trend?days=90[®ion=...]
POST /admin/real-estate-pdf/bulk POST /admin/real-estate-pdf/bulk
GET /admin/real-estate-pdf/connectivity-audit GET /admin/real-estate-pdf/connectivity-audit
GET /admin/real-estate-pdf/cover-letter GET /admin/real-estate-pdf/cover-letter
GET /admin/recipes/db GET /admin/recipes/db
POST /admin/regional-score/apply-connection POST /admin/regional-score/apply-connection
GET /admin/regional-score/regions GET /admin/regional-score/regions
GET /admin/score-cache GET /admin/score-cache
POST /admin/score-cache POST /admin/score-cache
POST /admin/set-gps POST /admin/set-gps
GET /admin/settings Get admin settings
PATCH /admin/settings Get admin settings
PATCH /admin/sponsorships/{id} PATCH /admin/sponsorships/{id}
DELETE /admin/sponsorships/{id} DELETE /admin/sponsorships/{id}
GET /admin/sponsorships GET /admin/sponsorships
POST /admin/sponsorships POST /admin/sponsorships
GET /admin/stats GET /admin/stats
GET /admin/store-qr/default-layout GET /admin/store-qr/default-layout
PUT /admin/store-qr/default-layout PUT /admin/store-qr/default-layout
GET /admin/surveys/{id} GET /admin/surveys/{id}
PUT /admin/surveys/{id} PUT /admin/surveys/{id}
DELETE /admin/surveys/{id} DELETE /admin/surveys/{id}
GET /admin/surveys GET /admin/surveys
POST /admin/surveys POST /admin/surveys
GET /admin/tasks GET /admin/tasks
GET /admin/template GET /admin/template
PUT /admin/users/{id}/admin PUT /admin/users/{id}/admin
PUT /admin/users/{id}/email PUT /admin/users/{id}/email
GET /admin/users/admin-info GET /admin/users/admin-info
GET /admin/users GET /admin/users
GET /admin/users/search GET /api/admin/users/search?email=xxx
GET /admin/widget-access GET /api/admin/widget-access
POST /admin/widget-access GET /api/admin/widget-access
DELETE /admin/widget-access GET /api/admin/widget-access
GET /admin/widget-usage GET /api/admin/widget-usage
POST /agents/admin/ban_agent POST /agents/admin/ban_agent
GET /agents/association/{id}/card GET /agents/association/{id}/card
POST /agents/association/{id}/get_benefits POST /agents/association/{id}/get_benefits
GET /agents/association/{id}/get_benefits GET /agents/association/{id}/get_benefits
POST /agents/association/{id}/get_info POST /agents/association/{id}/get_info
GET /agents/association/{id}/get_info GET /agents/association/{id}/get_info
POST /agents/association/{id}/list_members POST /agents/association/{id}/list_members
GET /agents/association/{id}/list_members GET /agents/association/{id}/list_members
POST /agents/association/{id}/membership_info POST /agents/association/{id}/membership_info
GET /agents/association/{id}/membership_info GET /agents/association/{id}/membership_info
POST /agents/participant/{id}/add_offering POST /agents/participant/{id}/add_offering
GET /agents/participant/{id}/card GET /agents/participant/{id}/card
POST /agents/participant/{id}/challenge_status POST /agents/participant/{id}/challenge_status
POST /agents/participant/{id}/get_analytics POST /agents/participant/{id}/get_analytics
POST /agents/participant/{id}/get_associations POST /agents/participant/{id}/get_associations
POST /agents/participant/{id}/get_capabilities POST /agents/participant/{id}/get_capabilities
POST /agents/participant/{id}/get_events POST /agents/participant/{id}/get_events
POST /agents/participant/{id}/get_hours POST /agents/participant/{id}/get_hours
POST /agents/participant/{id}/get_messages POST /agents/participant/{id}/get_messages
POST /agents/participant/{id}/get_profile POST /agents/participant/{id}/get_profile
POST /agents/participant/{id}/get_resellers POST /agents/participant/{id}/get_resellers
POST /agents/participant/{id}/get_reviews POST /agents/participant/{id}/get_reviews
POST /agents/participant/{id}/get_suppliers POST /agents/participant/{id}/get_suppliers
POST /agents/participant/{id}/list_offerings POST /agents/participant/{id}/list_offerings
POST /agents/participant/{id}/send_inquiry POST /agents/participant/{id}/send_inquiry
POST /agents/participant/{id}/update_hours POST /agents/participant/{id}/update_hours
POST /agents/participant/{id}/update_offering POST /agents/participant/{id}/update_offering
POST /agents/participant/{id}/update_place POST /agents/participant/{id}/update_place
POST /agents/platform/approve_task POST /agents/platform/approve_task
GET /agents/platform/card GET /agents/platform/card
POST /agents/platform/claim_task POST /agents/platform/claim_task
POST /agents/platform/create_place POST /agents/platform/create_place
POST /agents/platform/discover_businesses POST /agents/platform/discover_businesses
POST /agents/platform/get_platform_info POST /agents/platform/get_platform_info
POST /agents/platform/get_task POST /agents/platform/get_task
POST /agents/platform/list_tasks POST /agents/platform/list_tasks
GET /agents/platform/rate_limit_status GET /agents/platform/rate_limit_status
POST /agents/platform/search_products POST /agents/platform/search_products
POST /agents/platform/submit_task_response POST /agents/platform/submit_task_response
POST /agents/platform/suggest_connection POST /agents/platform/suggest_connection
POST /agents/platform/suggest_place POST /agents/platform/suggest_place
POST /agents/platform/suggest_product POST /agents/platform/suggest_product
GET /agents/public/place-summary Thin public place summaries for AI agents.
GET /agents/registry GET /agents/registry
POST /agents/task-processor/process POST /agents/task-processor/process
POST /agents/tasks/create POST /agents/tasks/create
GET /agents/tasks/status/{taskId} GET /agents/tasks/status/{taskId}
GET /agritourism/campaigns/{id}/analytics GET /agritourism/campaigns/{id}/analytics
DELETE /agritourism/campaigns/{id}/locations/{participantId} DELETE /agritourism/campaigns/{id}/locations/{participantId}
POST /agritourism/campaigns/{id}/locations POST /agritourism/campaigns/{id}/locations
POST /agritourism/campaigns/{id}/opt-in POST /agritourism/campaigns/{id}/opt-in
GET /agritourism/campaigns/{id}/participant-stats GET /agritourism/campaigns/{id}/participant-stats
GET /agritourism/campaigns/{id} GET /agritourism/campaigns/{id}
PUT /agritourism/campaigns/{id} PUT /agritourism/campaigns/{id}
DELETE /agritourism/campaigns/{id} DELETE /agritourism/campaigns/{id}
GET /agritourism/campaigns/{id}/scanner/attendees GET /agritourism/campaigns/{id}/scanner/attendees
POST /agritourism/campaigns/{id}/scanner/bulk-reconcile POST /agritourism/campaigns/{id}/scanner/bulk-reconcile
POST /agritourism/campaigns/{id}/scanner/checkin POST /agritourism/campaigns/{id}/scanner/checkin
GET /agritourism/campaigns/{id}/scanner/context GET /agritourism/campaigns/{id}/scanner/context
GET /agritourism/campaigns/{id}/scanner/guest-list GET /agritourism/campaigns/{id}/scanner/guest-list
POST /agritourism/campaigns/{id}/scanner/lookup POST /agritourism/campaigns/{id}/scanner/lookup
GET /agritourism/campaigns/{id}/scanner/stats GET /agritourism/campaigns/{id}/scanner/stats
POST /agritourism/campaigns/{id}/scanner/undo-checkin POST /agritourism/campaigns/{id}/scanner/undo-checkin
POST /agritourism/campaigns/{id}/status POST /agritourism/campaigns/{id}/status
GET /agritourism/campaigns/{id}/stop-busyness GET /agritourism/campaigns/{id}/stop-busyness
PATCH /agritourism/campaigns/{id}/ticket-types/{ticketTypeId} PATCH /agritourism/campaigns/{id}/ticket-types/{ticketTypeId}
DELETE /agritourism/campaigns/{id}/ticket-types/{ticketTypeId} DELETE /agritourism/campaigns/{id}/ticket-types/{ticketTypeId}
POST /agritourism/campaigns/{id}/ticket-types POST /agritourism/campaigns/{id}/ticket-types
GET /agritourism/campaigns/all GET /agritourism/campaigns/all
POST /agritourism/campaigns/create POST /agritourism/campaigns/create
GET /agritourism/campaigns/joinable GET /agritourism/campaigns/joinable
GET /agritourism/campaigns/mine GET /agritourism/campaigns/mine
GET /agritourism/campaigns GET /agritourism/campaigns
POST /agritourism/checkout POST /agritourism/checkout
POST /agritourism/claim-free POST /agritourism/claim-free
GET /agritourism/fee-profiles GET /agritourism/fee-profiles
POST /agritourism/lookup POST /agritourism/lookup
GET /agritourism/my-associations GET /agritourism/my-associations
GET /agritourism/stripe-connect/dashboard GET /agritourism/stripe-connect/dashboard
POST /agritourism/stripe-connect POST /agritourism/stripe-connect
GET /agritourism/stripe-connect/status GET /agritourism/stripe-connect/status
PUT /agritourism/ticket-types/{id} PUT /agritourism/ticket-types/{id}
POST /agritourism/tickets/{id}/cancel POST /agritourism/tickets/{id}/cancel
GET /agritourism/tickets/{id}/download GET /agritourism/tickets/{id}/download
GET /agritourism/tickets/{id}/pass GET /agritourism/tickets/{id}/pass
GET /agritourism/tickets/{id} GET /agritourism/tickets/{id}
GET /agritourism/tickets GET /agritourism/tickets
POST /agritourism/validate POST /agritourism/validate
GET /analytics/entity/{entityType}/{entityId} GET /analytics/entity/{entityType}/{entityId}
POST /analytics/fallback POST /analytics/fallback
GET /analytics/fallback GET /analytics/fallback
GET /analytics/metrics GET /analytics/metrics
POST /analytics/track POST /analytics/track
PUT /associations/{id}/members/{membershipId} PUT /associations/{id}/members/{membershipId}
GET /associations/{id}/members GET /associations/{id}/members
PATCH /associations/{id}/place-tours/{tourId} PATCH /associations/{id}/place-tours/{tourId}
PUT /associations/{id}/place-tours/{tourId} PUT /associations/{id}/place-tours/{tourId}
GET /associations/{id}/place-tours GET /associations/{id}/place-tours
POST /associations/{id}/place-tours POST /associations/{id}/place-tours
GET /associations/{id}/spend-challenge/activity-map GET /associations/{id}/spend-challenge/activity-map
POST /associations/{id}/spend-challenge/campaigns/{campaignId}/open POST /associations/{id}/spend-challenge/campaigns/{campaignId}/open
GET /associations/{id}/spend-challenge/campaigns/{campaignId}/poster GET /associations/{id}/spend-challenge/campaigns/{campaignId}/poster
PATCH /associations/{id}/spend-challenge/campaigns/{campaignId} PATCH /associations/{id}/spend-challenge/campaigns/{campaignId}
GET /associations/{id}/spend-challenge/campaigns GET /associations/{id}/spend-challenge/campaigns
POST /associations/{id}/spend-challenge/campaigns POST /associations/{id}/spend-challenge/campaigns
GET /associations/{id}/spend-challenge/insights GET /associations/{id}/spend-challenge/insights
GET /associations/{id}/spend-challenge GET /associations/{id}/spend-challenge
PUT /associations/{id}/spend-challenge PUT /associations/{id}/spend-challenge
GET /associations/by-slug/{slug}/tours/{tourSlug} GET /associations/by-slug/{slug}/tours/{tourSlug}
GET /associations/by-slug/{slug}/tours GET /associations/by-slug/{slug}/tours
POST /auth/telegram/link POST /api/auth/telegram/link
POST /auth/telegram/register-chat POST /api/auth/telegram/register-chat
POST /auth/telegram/verify POST /api/auth/telegram/verify
GET /baskets/{id} link access via UUID)
PUT /baskets/{id} link access via UUID)
DELETE /baskets/{id} link access via UUID)
POST /baskets Create or upsert a basket
GET /baskets Create or upsert a basket
GET /browse-products GET /api/browse-products
POST /business/store-qr/apply-layout-all POST /business/store-qr/apply-layout-all

Documentation

Specifications

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/piknikspot-rest-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

piknik-spot-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Piknik.Spot API
  description: Piknik.Spot API with OAuth2 authentication, Model Context Protocol (MCP) support, and Agent-to-Agent (A2A) capabilities for AI-powered local food system interactions.
  version: 1.0.0
  contact:
    name: Piknik.Spot API Support
    url: https://piknik.spot
    email: info@piknik.spot
  license:
    name: Proprietary
    url: https://piknik.spot/terms
servers:
- url: https://piknik.spot/api
  description: Production Server


# --- truncated at 32 KB (643 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/piknik-spot/refs/heads/main/openapi/piknik-spot-openapi.yml