Piknik.Spot · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Piknik.Spot OpenAPI

Generated 2026-09-19 (method: generated). Applies on top of openapi/piknik-spot-openapi.yml WITHOUT mutating it. Proposes a stable operationId for every one of the 683 operations (the source declares none), removes the localhost development server, links the agent surfaces the provider publishes, and documents the place-summary rate limit observed live. Parameter names for place-summary come from llms.txt and the live 400 body.

687 actions 686 updates 1 removal documentation extends openapi/piknik-spot-openapi.yml
Derived by API Evangelist Built from the contracts Piknik.Spot publishes. Piknik.Spot did not publish this file.
View Overlay File View on GitHub Overlay Specification

What the actions change

operationIdtermsOfServicex-llms-txtx-agent-cardx-mcp-endpointx-agent-ethicsx-oauth-authorization-serverx-oauth-protected-resource

Targets 686 · first 16 shown; the file carries all of them

$.servers
$.servers[?(@.url=='http://localhost:3000/api')]
$.info
$.paths['/a2a'].get
$.paths['/a2a'].post
$.paths['/admin/agent-settings'].get
$.paths['/admin/agent-settings'].put
$.paths['/admin/announcements/cleanup'].post
$.paths['/admin/announcements/cleanup'].get
$.paths['/admin/associations/{id}/memberships/bulk'].post
$.paths['/admin/associations/{id}/memberships'].get
$.paths['/admin/associations/{id}/memberships'].delete
$.paths['/admin/associations/{id}/memberships'].patch
$.paths['/admin/associations/{id}'].get
$.paths['/admin/associations/{id}'].put
$.paths['/admin/associations/{id}'].delete

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Piknik.Spot OpenAPI
  version: '2026-09-19'
  description: 'Generated 2026-09-19 (method: generated). Applies on top of openapi/piknik-spot-openapi.yml WITHOUT mutating
    it. Proposes a stable operationId for every one of the 683 operations (the source declares none), removes the localhost
    development server, links the agent surfaces the provider publishes, and documents the place-summary rate limit observed
    live. Parameter names for place-summary come from llms.txt and the live 400 body.'
extends: openapi/piknik-spot-openapi.yml
actions:
- target: $.servers
  description: Drop the http://localhost:3000/api development server from the consumer-facing view; the production server
    is the only one an agent can call.
  update: null
- target: $.servers[?(@.url=='http://localhost:3000/api')]
  description: Remove the development server entry.
  remove: true
- target: $.info
  description: Add the machine-discoverable agent surfaces the provider publishes but the spec omits.
  update:
    termsOfService: https://piknik.spot/terms-of-service
    x-llms-txt: https://piknik.spot/llms.txt
    x-agent-card: https://piknik.spot/.well-known/agent-card.json
    x-mcp-endpoint: https://piknik.spot/api/mcp
    x-agent-ethics: https://piknik.spot/.well-known/agent-ethics.md
    x-oauth-authorization-server: https://piknik.spot/.well-known/oauth-authorization-server
    x-oauth-protected-resource: https://piknik.spot/.well-known/oauth-protected-resource
- target: $.paths['/a2a'].get
  update:
    operationId: getA2a
- target: $.paths['/a2a'].post
  update:
    operationId: postA2a
- target: $.paths['/admin/agent-settings'].get
  update:
    operationId: getAdminAgentSettings
- target: $.paths['/admin/agent-settings'].put
  update:
    operationId: putAdminAgentSettings
- target: $.paths['/admin/announcements/cleanup'].post
  update:
    operationId: postAdminAnnouncementsCleanup
- target: $.paths['/admin/announcements/cleanup'].get
  update:
    operationId: getAdminAnnouncementsCleanup
- target: $.paths['/admin/associations/{id}/memberships/bulk'].post
  update:
    operationId: postAdminAssociationsIdMembershipsBulk
- target: $.paths['/admin/associations/{id}/memberships'].get
  update:
    operationId: getAdminAssociationsIdMemberships
- target: $.paths['/admin/associations/{id}/memberships'].delete
  update:
    operationId: deleteAdminAssociationsIdMemberships
- target: $.paths['/admin/associations/{id}/memberships'].patch
  update:
    operationId: patchAdminAssociationsIdMemberships
- target: $.paths['/admin/associations/{id}'].get
  update:
    operationId: getAdminAssociationsId
- target: $.paths['/admin/associations/{id}'].put
  update:
    operationId: putAdminAssociationsId
- target: $.paths['/admin/associations/{id}'].delete
  update:
    operationId: deleteAdminAssociationsId
- target: $.paths['/admin/associations/{id}/surveys'].get
  update:
    operationId: getAdminAssociationsIdSurveys
- target: $.paths['/admin/associations/{id}/surveys'].post
  update:
    operationId: postAdminAssociationsIdSurveys
- target: $.paths['/admin/associations'].get
  update:
    operationId: getAdminAssociations
- target: $.paths['/admin/associations'].post
  update:
    operationId: postAdminAssociations
- target: $.paths['/admin/associations/verification-queue'].get
  update:
    operationId: getAdminAssociationsVerificationQueue
- target: $.paths['/admin/associations/verify/{membershipId}'].put
  update:
    operationId: putAdminAssociationsVerifyMembershipId
- target: $.paths['/admin/campaign-batch'].post
  update:
    operationId: postAdminCampaignBatch
- target: $.paths['/admin/campaign-status'].get
  update:
    operationId: getAdminCampaignStatus
- target: $.paths['/admin/categories/{id}'].get
  update:
    operationId: getAdminCategoriesId
- target: $.paths['/admin/categories/{id}'].patch
  update:
    operationId: patchAdminCategoriesId
- target: $.paths['/admin/categories/{id}'].delete
  update:
    operationId: deleteAdminCategoriesId
- target: $.paths['/admin/categories/reorder'].post
  update:
    operationId: postAdminCategoriesReorder
- target: $.paths['/admin/categories'].get
  update:
    operationId: getAdminCategories
- target: $.paths['/admin/categories'].post
  update:
    operationId: postAdminCategories
- target: $.paths['/admin/event-sources/{id}'].get
  update:
    operationId: getAdminEventSourcesId
- target: $.paths['/admin/event-sources/{id}'].put
  update:
    operationId: putAdminEventSourcesId
- target: $.paths['/admin/event-sources/{id}'].delete
  update:
    operationId: deleteAdminEventSourcesId
- target: $.paths['/admin/event-sources'].get
  update:
    operationId: getAdminEventSources
- target: $.paths['/admin/event-sources'].post
  update:
    operationId: postAdminEventSources
- target: $.paths['/admin/events/recurrence'].post
  update:
    operationId: postAdminEventsRecurrence
- target: $.paths['/admin/events/recurrence'].get
  update:
    operationId: getAdminEventsRecurrence
- target: $.paths['/admin/fee-profiles/{id}/assignments/{assignmentId}'].delete
  update:
    operationId: deleteAdminFeeProfilesIdAssignmentsAssignmentId
- target: $.paths['/admin/fee-profiles/{id}/assignments'].post
  update:
    operationId: postAdminFeeProfilesIdAssignments
- target: $.paths['/admin/fee-profiles/{id}'].put
  update:
    operationId: putAdminFeeProfilesId
- target: $.paths['/admin/fee-profiles/{id}'].delete
  update:
    operationId: deleteAdminFeeProfilesId
- target: $.paths['/admin/fee-profiles'].get
  update:
    operationId: getAdminFeeProfiles
- target: $.paths['/admin/fee-profiles'].post
  update:
    operationId: postAdminFeeProfiles
- target: $.paths['/admin/for-towns-pdf'].post
  update:
    operationId: postAdminForTownsPdf
- target: $.paths['/admin/frost-dates/import'].post
  update:
    operationId: postAdminFrostDatesImport
- target: $.paths['/admin/frost-dates'].get
  update:
    operationId: getAdminFrostDates
- target: $.paths['/admin/games/{id}'].put
  update:
    operationId: putAdminGamesId
- target: $.paths['/admin/games/{id}'].get
  update:
    operationId: getAdminGamesId
- target: $.paths['/admin/games/{id}'].delete
  update:
    operationId: deleteAdminGamesId
- target: $.paths['/admin/games/place-interests'].get
  update:
    operationId: getAdminGamesPlaceInterests
- target: $.paths['/admin/games/place-interests'].patch
  update:
    operationId: patchAdminGamesPlaceInterests
- target: $.paths['/admin/games'].post
  update:
    operationId: postAdminGames
- target: $.paths['/admin/games'].get
  update:
    operationId: getAdminGames
- target: $.paths['/admin/geocode-missing'].post
  update:
    operationId: postAdminGeocodeMissing
- target: $.paths['/admin/global-features'].get
  update:
    operationId: getAdminGlobalFeatures
- target: $.paths['/admin/global-features'].post
  update:
    operationId: postAdminGlobalFeatures
- target: $.paths['/admin/global-features/seed'].post
  update:
    operationId: postAdminGlobalFeaturesSeed
- target: $.paths['/admin/grant-feature'].post
  update:
    operationId: postAdminGrantFeature
- target: $.paths['/admin/grant-feature'].get
  update:
    operationId: getAdminGrantFeature
- target: $.paths['/admin/missing-coords'].get
  update:
    operationId: getAdminMissingCoords
- target: $.paths['/admin/neighborhoods/discover-osm'].get
  update:
    operationId: getAdminNeighborhoodsDiscoverOsm
- target: $.paths['/admin/neighborhoods/waterloo-region/{id}'].put
  update:
    operationId: putAdminNeighborhoodsWaterlooRegionId
- target: $.paths['/admin/neighborhoods/waterloo-region/{id}'].delete
  update:
    operationId: deleteAdminNeighborhoodsWaterlooRegionId
- target: $.paths['/admin/neighborhoods/waterloo-region/rebuild'].post
  update:
    operationId: postAdminNeighborhoodsWaterlooRegionRebuild
- target: $.paths['/admin/neighborhoods/waterloo-region'].get
  update:
    operationId: getAdminNeighborhoodsWaterlooRegion
- target: $.paths['/admin/neighborhoods/waterloo-region'].post
  update:
    operationId: postAdminNeighborhoodsWaterlooRegion
- target: $.paths['/admin/neighborhoods/waterloo-region'].put
  update:
    operationId: putAdminNeighborhoodsWaterlooRegion
- target: $.paths['/admin/neighborhoods/waterloo-region/samples'].get
  update:
    operationId: getAdminNeighborhoodsWaterlooRegionSamples
- target: $.paths['/admin/notifications'].get
  update:
    operationId: getAdminNotifications
- target: $.paths['/admin/osm-explorer/connections'].get
  update:
    operationId: getAdminOsmExplorerConnections
- target: $.paths['/admin/osm-explorer/ignored-names'].get
  update:
    operationId: getAdminOsmExplorerIgnoredNames
- target: $.paths['/admin/osm-explorer/ignored-names'].post
  update:
    operationId: postAdminOsmExplorerIgnoredNames
- target: $.paths['/admin/osm-explorer/local-food-score'].get
  update:
    operationId: getAdminOsmExplorerLocalFoodScore
- target: $.paths['/admin/osm-explorer/neighborhood-match'].get
  update:
    operationId: getAdminOsmExplorerNeighborhoodMatch
- target: $.paths['/admin/osm-explorer/reverse-geocode'].get
  update:
    operationId: getAdminOsmExplorerReverseGeocode
- target: $.paths['/admin/osm-explorer'].get
  update:
    operationId: getAdminOsmExplorer
- target: $.paths['/admin/osm-explorer/simulate'].post
  update:
    operationId: postAdminOsmExplorerSimulate
- target: $.paths['/admin/participants/import'].post
  update:
    operationId: postAdminParticipantsImport
- target: $.paths['/admin/participants/notify'].post
  update:
    operationId: postAdminParticipantsNotify
- target: $.paths['/admin/participants'].get
  update:
    operationId: getAdminParticipants
- target: $.paths['/admin/participants/template'].get
  update:
    operationId: getAdminParticipantsTemplate
- target: $.paths['/admin/participants/verify/generate-link'].post
  update:
    operationId: postAdminParticipantsVerifyGenerateLink
- target: $.paths['/admin/performance'].get
  update:
    operationId: getAdminPerformance
- target: $.paths['/admin/places/google-places'].post
  update:
    operationId: postAdminPlacesGooglePlaces
- target: $.paths['/admin/places/store-qr/{participantId}/pdf'].get
  update:
    operationId: getAdminPlacesStoreQrParticipantIdPdf
- target: $.paths['/admin/places/store-qr'].get
  update:
    operationId: getAdminPlacesStoreQr
- target: $.paths['/admin/places/store-qr'].put
  update:
    operationId: putAdminPlacesStoreQr
- target: $.paths['/admin/planting-guides/import'].post
  update:
    operationId: postAdminPlantingGuidesImport
- target: $.paths['/admin/planting-guides'].get
  update:
    operationId: getAdminPlantingGuides
- target: $.paths['/admin/products/{id}'].get
  update:
    operationId: getAdminProductsId
- target: $.paths['/admin/products/{id}'].patch
  update:
    operationId: patchAdminProductsId
- target: $.paths['/admin/products/{id}'].delete
  update:
    operationId: deleteAdminProductsId
- target: $.paths['/admin/products'].get
  update:
    operationId: getAdminProducts
- target: $.paths['/admin/products'].post
  update:
    operationId: postAdminProducts
- target: $.paths['/admin/provenance-categories'].get
  update:
    operationId: getAdminProvenanceCategories
- target: $.paths['/admin/provenance-reports/place-interest'].get
  update:
    operationId: getAdminProvenanceReportsPlaceInterest
- target: $.paths['/admin/provenance-reports/producer-demand'].get
  update:
    operationId: getAdminProvenanceReportsProducerDemand
- target: $.paths['/admin/provenance-reports/producer-leads'].get
  update:
    operationId: getAdminProvenanceReportsProducerLeads
- target: $.paths['/admin/provenance-reports/regional-trend'].get
  update:
    operationId: getAdminProvenanceReportsRegionalTrend
- target: $.paths['/admin/real-estate-pdf/bulk'].post
  update:
    operationId: postAdminRealEstatePdfBulk
- target: $.paths['/admin/real-estate-pdf/connectivity-audit'].get
  update:
    operationId: getAdminRealEstatePdfConnectivityAudit
- target: $.paths['/admin/real-estate-pdf/cover-letter'].get
  update:
    operationId: getAdminRealEstatePdfCoverLetter
- target: $.paths['/admin/recipes/db'].get
  update:
    operationId: getAdminRecipesDb
- target: $.paths['/admin/regional-score/apply-connection'].post
  update:
    operationId: postAdminRegionalScoreApplyConnection
- target: $.paths['/admin/regional-score/regions'].get
  update:
    operationId: getAdminRegionalScoreRegions
- target: $.paths['/admin/score-cache'].get
  update:
    operationId: getAdminScoreCache
- target: $.paths['/admin/score-cache'].post
  update:
    operationId: postAdminScoreCache
- target: $.paths['/admin/set-gps'].post
  update:
    operationId: postAdminSetGps
- target: $.paths['/admin/settings'].get
  update:
    operationId: getAdminSettings
- target: $.paths['/admin/settings'].patch
  update:
    operationId: patchAdminSettings
- target: $.paths['/admin/sponsorships/{id}'].patch
  update:
    operationId: patchAdminSponsorshipsId
- target: $.paths['/admin/sponsorships/{id}'].delete
  update:
    operationId: deleteAdminSponsorshipsId
- target: $.paths['/admin/sponsorships'].get
  update:
    operationId: getAdminSponsorships
- target: $.paths['/admin/sponsorships'].post
  update:
    operationId: postAdminSponsorships
- target: $.paths['/admin/stats'].get
  update:
    operationId: getAdminStats
- target: $.paths['/admin/store-qr/default-layout'].get
  update:
    operationId: getAdminStoreQrDefaultLayout
- target: $.paths['/admin/store-qr/default-layout'].put
  update:
    operationId: putAdminStoreQrDefaultLayout
- target: $.paths['/admin/surveys/{id}'].get
  update:
    operationId: getAdminSurveysId
- target: $.paths['/admin/surveys/{id}'].put
  update:
    operationId: putAdminSurveysId
- target: $.paths['/admin/surveys/{id}'].delete
  update:
    operationId: deleteAdminSurveysId
- target: $.paths['/admin/surveys'].get
  update:
    operationId: getAdminSurveys
- target: $.paths['/admin/surveys'].post
  update:
    operationId: postAdminSurveys
- target: $.paths['/admin/tasks'].get
  update:
    operationId: getAdminTasks
- target: $.paths['/admin/template'].get
  update:
    operationId: getAdminTemplate
- target: $.paths['/admin/users/{id}/admin'].put
  update:
    operationId: putAdminUsersIdAdmin
- target: $.paths['/admin/users/{id}/email'].put
  update:
    operationId: putAdminUsersIdEmail
- target: $.paths['/admin/users/admin-info'].get
  update:
    operationId: getAdminUsersAdminInfo
- target: $.paths['/admin/users'].get
  update:
    operationId: getAdminUsers
- target: $.paths['/admin/users/search'].get
  update:
    operationId: getAdminUsersSearch
- target: $.paths['/admin/widget-access'].get
  update:
    operationId: getAdminWidgetAccess
- target: $.paths['/admin/widget-access'].post
  update:
    operationId: postAdminWidgetAccess
- target: $.paths['/admin/widget-access'].delete
  update:
    operationId: deleteAdminWidgetAccess
- target: $.paths['/admin/widget-usage'].get
  update:
    operationId: getAdminWidgetUsage
- target: $.paths['/agents/admin/ban_agent'].post
  update:
    operationId: postAgentsAdminBan_agent
- target: $.paths['/agents/association/{id}/card'].get
  update:
    operationId: getAgentsAssociationIdCard
- target: $.paths['/agents/association/{id}/get_benefits'].post
  update:
    operationId: postAgentsAssociationIdGet_benefits
- target: $.paths['/agents/association/{id}/get_benefits'].get
  update:
    operationId: getAgentsAssociationIdGet_benefits
- target: $.paths['/agents/association/{id}/get_info'].post
  update:
    operationId: postAgentsAssociationIdGet_info
- target: $.paths['/agents/association/{id}/get_info'].get
  update:
    operationId: getAgentsAssociationIdGet_info
- target: $.paths['/agents/association/{id}/list_members'].post
  update:
    operationId: postAgentsAssociationIdList_members
- target: $.paths['/agents/association/{id}/list_members'].get
  update:
    operationId: getAgentsAssociationIdList_members
- target: $.paths['/agents/association/{id}/membership_info'].post
  update:
    operationId: postAgentsAssociationIdMembership_info
- target: $.paths['/agents/association/{id}/membership_info'].get
  update:
    operationId: getAgentsAssociationIdMembership_info
- target: $.paths['/agents/participant/{id}/add_offering'].post
  update:
    operationId: postAgentsParticipantIdAdd_offering
- target: $.paths['/agents/participant/{id}/card'].get
  update:
    operationId: getAgentsParticipantIdCard
- target: $.paths['/agents/participant/{id}/challenge_status'].post
  update:
    operationId: postAgentsParticipantIdChallenge_status
- target: $.paths['/agents/participant/{id}/get_analytics'].post
  update:
    operationId: postAgentsParticipantIdGet_analytics
- target: $.paths['/agents/participant/{id}/get_associations'].post
  update:
    operationId: postAgentsParticipantIdGet_associations
- target: $.paths['/agents/participant/{id}/get_capabilities'].post
  update:
    operationId: postAgentsParticipantIdGet_capabilities
- target: $.paths['/agents/participant/{id}/get_events'].post
  update:
    operationId: postAgentsParticipantIdGet_events
- target: $.paths['/agents/participant/{id}/get_hours'].post
  update:
    operationId: postAgentsParticipantIdGet_hours
- target: $.paths['/agents/participant/{id}/get_messages'].post
  update:
    operationId: postAgentsParticipantIdGet_messages
- target: $.paths['/agents/participant/{id}/get_profile'].post
  update:
    operationId: postAgentsParticipantIdGet_profile
- target: $.paths['/agents/participant/{id}/get_resellers'].post
  update:
    operationId: postAgentsParticipantIdGet_resellers
- target: $.paths['/agents/participant/{id}/get_reviews'].post
  update:
    operationId: postAgentsParticipantIdGet_reviews
- target: $.paths['/agents/participant/{id}/get_suppliers'].post
  update:
    operationId: postAgentsParticipantIdGet_suppliers
- target: $.paths['/agents/participant/{id}/list_offerings'].post
  update:
    operationId: postAgentsParticipantIdList_offerings
- target: $.paths['/agents/participant/{id}/send_inquiry'].post
  update:
    operationId: postAgentsParticipantIdSend_inquiry
- target: $.paths['/agents/participant/{id}/update_hours'].post
  update:
    operationId: postAgentsParticipantIdUpdate_hours
- target: $.paths['/agents/participant/{id}/update_offering'].post
  update:
    operationId: postAgentsParticipantIdUpdate_offering
- target: $.paths['/agents/participant/{id}/update_place'].post
  update:
    operationId: postAgentsParticipantIdUpdate_place
- target: $.paths['/agents/platform/approve_task'].post
  update:
    operationId: postAgentsPlatformApprove_task
- target: $.paths['/agents/platform/card'].get
  update:
    operationId: getAgentsPlatformCard
- target: $.paths['/agents/platform/claim_task'].post
  update:
    operationId: postAgentsPlatformClaim_task
- target: $.paths['/agents/platform/create_place'].post
  update:
    operationId: postAgentsPlatformCreate_place
- target: $.paths['/agents/platform/discover_businesses'].post
  update:
    operationId: postAgentsPlatformDiscover_businesses
- target: $.paths['/agents/platform/get_platform_info'].post
  update:
    operationId: postAgentsPlatformGet_platform_info
- target: $.paths['/agents/platform/get_task'].post
  update:
    operationId: postAgentsPlatformGet_task
- target: $.paths['/agents/platform/list_tasks'].post
  update:
    operationId: postAgentsPlatformList_tasks
- target: $.paths['/agents/platform/rate_limit_status'].get
  update:
    operationId: getAgentsPlatformRate_limit_status
- target: $.paths['/agents/platform/search_products'].post
  update:
    operationId: postAgentsPlatformSearch_products
- target: $.paths['/agents/platform/submit_task_response'].post
  update:
    operationId: postAgentsPlatformSubmit_task_response
- target: $.paths['/agents/platform/suggest_connection'].post
  update:
    operationId: postAgentsPlatformSuggest_connection
- target: $.paths['/agents/platform/suggest_place'].post
  update:
    operationId: postAgentsPlatformSuggest_place
- target: $.paths['/agents/platform/suggest_product'].post
  update:
    operationId: postAgentsPlatformSuggest_product
- target: $.paths['/agents/public/place-summary'].get
  update:
    operationId: getAgentsPublicPlaceSummary
- target: $.paths['/agents/registry'].get
  update:
    operationId: getAgentsRegistry
- target: $.paths['/agents/task-processor/process'].post
  update:
    operationId: postAgentsTaskProcessorProcess
- target: $.paths['/agents/tasks/create'].post
  update:
    operationId: postAgentsTasksCreate
- target: $.paths['/agents/tasks/status/{taskId}'].get
  update:
    operationId: getAgentsTasksStatusTaskId
- target: $.paths['/agritourism/campaigns/{id}/analytics'].get
  update:
    operationId: getAgritourismCampaignsIdAnalytics
- target: $.paths['/agritourism/campaigns/{id}/locations/{participantId}'].delete
  update:
    operationId: deleteAgritourismCampaignsIdLocationsParticipantId
- target: $.paths['/agritourism/campaigns/{id}/locations'].post
  update:
    operationId: postAgritourismCampaignsIdLocations
- target: $.paths['/agritourism/campaigns/{id}/opt-in'].post
  update:
    operationId: postAgritourismCampaignsIdOptIn
- target: $.paths['/agritourism/campaigns/{id}/participant-stats'].get
  update:
    operationId: getAgritourismCampaignsIdParticipantStats
- target: $.paths['/agritourism/campaigns/{id}'].get
  update:
    operationId: getAgritourismCampaignsId
- target: $.paths['/agritourism/campaigns/{id}'].put
  update:
    operationId: putAgritourismCampaignsId
- target: $.paths['/agritourism/campaigns/{id}'].delete
  update:
    operationId: deleteAgritourismCampaignsId
- target: $.paths['/agritourism/campaigns/{id}/scanner/attendees'].get
  update:
    operationId: getAgritourismCampaignsIdScannerAttendees
- target: $.paths['/agritourism/campaigns/{id}/scanner/bulk-reconcile'].post
  update:
    operationId: postAgritourismCampaignsIdScannerBulkReconcile
- target: $.paths['/agritourism/campaigns/{id}/scanner/checkin'].post
  update:
    operationId: postAgritourismCampaignsIdScannerCheckin
- target: $.paths['/agritourism/campaigns/{id}/scanner/context'].get
  update:
    operationId: getAgritourismCampaignsIdScannerContext
- target: $.paths['/agritourism/campaigns/{id}/scanner/guest-list'].get
  update:
    operationId: getAgritourismCampaignsIdScannerGuestList
- target: $.paths['/agritourism/campaigns/{id}/scanner/lookup'].post
  update:
    operationId: postAgritourismCampaignsIdScannerLookup
- target: $.paths['/agritourism/campaigns/{id}/scanner/stats'].get
  update:
    operationId: getAgritourismCampaignsIdScannerStats
- target: $.paths['/agritourism/campaigns/{id}/scanner/undo-checkin'].post
  update:
    operationId: postAgritourismCampaignsIdScannerUndoCheckin
- target: $.paths['/agritourism/campaigns/{id}/status'].post
  update:
    operationId: postAgritourismCampaignsIdStatus
- target: $.paths['/agritourism/campaigns/{id}/stop-busyness'].get
  update:
    operationId: getAgritourismCampaignsIdStopBusyness
- target: $.paths['/agritourism/campaigns/{id}/ticket-types/{ticketTypeId}'].patch
  update:
    operationId: patchAgritourismCampaignsIdTicketTypesTicketTypeId
- target: $.paths['/agritourism/campaigns/{id}/ticket-types/{ticketTypeId}'].delete
  update:
    operationId: deleteAgritourismCampaignsIdTicketTypesTicketTypeId
- target: $.paths['/agritourism/campaigns/{id}/ticket-types'].post
  update:
    operationId: postAgritourismCampaignsIdTicketTypes
- target: $.paths['/agritourism/campaigns/all'].get
  update:
    operationId: getAgritourismCampaignsAll
- target: $.paths['/agritourism/campaigns/create'].post
  update:
    operationId: postAgritourismCampaignsCreate
- target: $.paths['/agritourism/campaigns/joinable'].get
  update:
    operationId: getAgritourismCampaignsJoinable
- target: $.paths['/agritourism/campaigns/mine'].get
  update:
    operationId: getAgritourismCampaignsMine
- target: $.paths['/agritourism/campaigns'].get
  update:
    operationId: getAgritourismCampaigns
- target: $.paths['/agritourism/checkout'].post
  update:
    operationId: postAgritourismCheckout
- target: $.paths['/agritourism/claim-free'].post
  update:
    operationId: postAgritourismClaimFree
- target: $.paths['/agritourism/fee-profiles'].get
  update:
    operationId: getAgritourismFeeProfiles
- target: $.paths['/agritourism/lookup'].post
  update:
    operationId: postAgritourismLookup
- target: $.paths['/agritourism/my-associations'].get
  update:
    operationId: getAgritourismMyAssociations
- target: $.paths['/agritourism/stripe-connect/dashboard'].get
  update:
    operationId: getAgritourismStripeConnectDashboard
- target: $.paths['/agritourism/stripe-connect'].post
  update:
    operationId: postAgritourismStripeConnect
- target: $.paths['/agritourism/stripe-connect/status'].get
  update:
    operationId: getAgritourismStripeConnectStatus
- target: $.paths['/agritourism/ticket-types/{id}'].put
  update:
    operationId: putAgritourismTicketTypesId
- target: $.paths['/agritourism/tickets/{id}/cancel'].post
  update:
    operationId: postAgritourismTicketsIdCancel
- target: $.paths['/agritourism/tickets/{id}/download'].get
  update:
    operationId: getAgritourismTicketsIdDownload
- target: $.paths['/agritourism/tickets/{id}/pass'].get
  update:
    operationId: getAgritourismTicketsIdPass
- target: $.paths['/agritourism/tickets/{id}'].get
  update:
    operationId: getAgritourismTicketsId
- target: $.paths['/agritourism/tickets'].get
  update:
    operationId: getAgritourismTickets
- target: $.paths['/agritourism/validate'].post
  update:
    operationId: postAgritourismValidate
- target: $.paths['/analytics/entity/{entityType}/{entityId}'].get
  update:
    operationId: getAnalyticsEntityEntityTypeEntityId
- target: $.paths['/analytics/fallback'].post
  update:
    operationId: postAnalyticsFallback
- target: $.paths['/analytics/fallback'].get
  update:
    operationId: getAnalyticsFallback
- target: $.paths['/analytics/metrics'].get
  update:
    operationId: getAnalyticsMetrics
- target: $.paths['/analytics/track'].post
  update:
    operationId: postAnalyticsTrack
- target: $.paths['/associations/{id}/members/{membershipId}'].put
  update:
    operationId: putAssociationsIdMembersMembershipId
- target: $.paths['/associations/{id}/members'].get
  update:
    operationId: getAssociationsIdMembers
- target: $.paths['/associations/{id}/place-tours/{tourId}'].patch
  update:
    operationId: patchAssociationsIdPlaceToursTourId
- target: $.paths['/associations/{id}/place-tours/{tourId}'].put
  update:
    operationId: putAssociationsIdPlaceToursTourId
- target: $.paths['/associations/{id}/place-tours'].get
  update:
    operationId: getAssociationsIdPlaceTours
- target: $.paths['/associations/{id}/place-tours'].post
  update:
    operationId: postAssociationsIdPlaceTours
- target: $.paths['/associations/{id}/spend-challenge/activity-map'].get
  update:
    operationId: getAssociationsIdSpendChallengeActivityMap
- target: $.paths['/associations/{id}/spend-challenge/campaigns/{campaignId}/open'].post
  update:
    operationId: postAssociationsIdSpendChallengeCampaignsCampaignIdOpen
- target: $.paths['/associations/{id}/spend-challenge/campaigns/{campaignId}/poster'].get
  update:
    operationId: getAssociationsIdSpendChallengeCampaignsCampaignIdPoster
- target: $.paths['/associations/{id}/spend-challenge/campaigns/{campaignId}'].patch
  update:
    operationId: patchAssociationsIdSpendChallengeCampaignsCampaignId
- target: $.paths['/associations/{id}/spend-challenge/campaigns'].get
  update:
    operationId: getAssociationsIdSpendChallengeCampaigns
- target: $.paths['/associations/{id}/spend-challenge/campaigns'].post
  update:
    operationId: postAssociationsIdSpendChallengeCampaigns
- target: $.paths['/associations/{id}/spend-challenge/insights'].get
  update:
    operationId: getAssociationsIdSpendChallengeInsights
- target: $.paths['/associations/{id}/spend-challenge'].get
  update:
    operationId: getAssociationsIdSpendChallenge
- target: $.paths['/associations/{id}/spend-challenge'].put
  update:
    operationId: putAssociationsIdSpendChallenge
- target: $.paths['/associations/by-slug/{slug}/tours/{tourSlug}'].get
  update:
    operationId: getAssociationsBySlugSlugToursTourSlug
- target: $.paths['/associations/by-slug/{slug}/tours'].get
  update:
    operationId: getAssociationsBySlugSlugTours
- target: $.paths['/auth/telegram/link'].post
  update:
    operationId: postAuthTelegramLink
- target: $.paths['/auth/telegram/register-chat'].post
  update:
    operationId: postAuthTelegramRegisterChat
- target: $.paths['/auth/telegram/verify'].post
  update:
    operationId: postAuthTelegramVerify
- target: $.paths['/baskets/{id}'].get
  update:
    operationId: getBasketsId
- target: $.paths['/baskets/{id}'].put
  update:
    operationId: putBasketsId
- target: $.paths['/baskets/{id}'].delete
  update:
    operationId: deleteBasketsId
- target: $.paths['/baskets'].post
  update:
    operationId: postBaskets
- target: $.paths['/baskets'].get
  update:
    operationId: getBaskets
- target: $.paths['/browse-products'].get
  update:
    operationId: getBrowseProducts
- target: $.paths['/business/store-qr/apply-layout-all'].post
  update:
    operationId: postBusinessStoreQrApplyLayoutAll
- target: $.paths['/business/store-qr/regenerate-token'].post
  update:
    operationId: postBusinessStoreQrRegenerateToken
- target: $.paths['/business/store-qr'].get
  update:
    operationId: getBusinessStoreQr
- target: $.paths['/business/store-qr'].put
  update:
    operationId: putBusinessStoreQr
- target: $.paths['/business/store-qr/track'].post
  update:
    operationId: postBusinessStoreQrTrack
- target: $.paths['/business/surveys/{id}'].get
  update:
    operationId: getBusinessSurveysId
- target: $.paths['/business/surveys/{id}'].put
  update:
    operationId: putBusinessSurveysId
- target: $.paths['/business/surveys/{id}'].delete
  update:
    operationId: deleteBusinessSurveysId
- target: $.paths['/business/surveys'].get
  update:
    operationId: getBusinessSurveys
- target: $.paths['/business/surveys'].post
  update:
    operationId: postBusinessSurveys
- target: $.paths['/categories'].get
  update:
    operationId: getCategories
- target: $.paths['/community/insights'].get
  update:
    operationId: getCommunityInsights
- target: $.paths['/community/members'].get
  update:
    operationId: getCommunityMembers
- target: $.paths['/community-food-score-pdf'].get
  update:
    operationId: getCommunityFoodScorePdf
- target: $.paths['/config/client'].get
  update:
    operationId: getConfigClient
- target: $.paths['/connections/{id}'].post
  update:
    operationId: postConnectionsId
- target: $.paths['/connections/{id}'].put
  update:
    operationId: putConnectionsId
- target: $.paths['/connections/{id}'].delete
  update:
    operationId: deleteConnectionsId
- target: $.paths['/connections'].get
  update:
    operationId: getConnections
- target: $.paths['/connections'].post
  update:
    operationId: postConnections
- target: $.paths['/connections/status'].get
  update:
    operationId: getConnectionsStatus
- target: $.paths['/contact'].post
  update:
    operationId: postContact
- target: $.paths['/cron/ontario-weekly-snapshot'].post
  update:
    operationId: postCronOntarioWeeklySnapshot
- target: $.paths['/cuisines'].get
  update:
    operationId: getCuisines
- target: $.paths['/debug/features'].get
  update:
    operationId: getDebugFeatures
- target: $.paths['/dev/chat'].get
  update:
    operationId: getDevChat
- target: $.paths['/dev/chat'].post
  update:
    operationId: postDevChat
- target: $.paths['/dev/login'].post
  update:
    operationId: postDevLogin
- target: $.paths['/dev/users'].get
  update:
    operationId: getDevUsers
- target: $.paths['/discussions/categories/{slug}/jobs'].get
  update:
    operationId: getDiscussionsCategoriesSlugJobs
- target: $.paths['/discussions/categories'].get
  update:
    operationId: getDiscussionsCategories
- target: $.paths['/discussions/locations'].get
  update:
    operationId: getDiscussionsLocations
- target: $.paths['/discussions/posts/{id}/replies'].post
  update:
    operationId: postDiscussionsPostsIdReplies
- target: $.paths['/discussions/posts/{id}'].get
  update:
    operationId: getDiscussionsPostsId
- target: $.paths['/discussions/posts'].get
  update:
    operationId: getDiscussionsPosts
- target: $.paths['/discussions/posts'].post
  update:
    operationId: postDiscussionsPosts
- target: $.paths['/discussions/subscriptions'].get
  update:
    operationId: getDiscussionsSubscriptions


# --- truncated at 32 KB (72 KB total) ---
# Full source: https://artifacts.apis.io/piknik-spot/overlays/piknik-spot-openapi-overlay.yaml

Work with this as data

Every overlay 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 openapi overlays

4 MCP tools reach this
  • find_overlaysBrowse and filter every overlay in the catalog.
  • 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 overlay
curl "https://apis.io/api/v1/overlays/piknik-spot-openapi-overlay"
All openapi overlays
curl "https://apis.io/api/v1/overlays?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.