{"openapi":"3.0.3","info":{"title":"PTSV4 API","description":"PTSV3-style webhook bin clone built with Bun, Elysia, and Cloudflare D1. Preferred capture route is /api/c/:bin_name. Root capture and /t/* routes remain deprecated compatibility aliases.","version":"1.0.0"},"servers":[{"url":"http://localhost:3000","description":"Bun local development"},{"url":"http://localhost:8787","description":"Wrangler local development"}],"security":[{"BinToken":[]}],"tags":[{"name":"Health","description":"Service health endpoints"},{"name":"Capture","description":"Webhook request capture endpoints"},{"name":"Read API","description":"Request inspection endpoints"},{"name":"Legacy","description":"PTSV legacy compatibility endpoints"},{"name":"Management","description":"Bin and token management endpoints"},{"name":"Deprecated","description":"Compatibility aliases kept for existing integrations"}],"components":{"securitySchemes":{"BinToken":{"type":"apiKey","in":"header","name":"x-bin-token","description":"Required to read from private bins."}},"schemas":{}},"paths":{"/health":{"get":{"operationId":"getHealth"}},"/":{"get":{"operationId":"getIndex"}},"/docs":{"get":{"operationId":"getDocs"}},"/pricing":{"get":{"operationId":"getPricing"}},"/new":{"get":{"operationId":"getNew"}},"/bins":{"post":{"operationId":"postBins"}},"/b/{bin_name}":{"get":{"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"getBByBin_name"}},"/b/{bin_name}/settings":{"get":{"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"getBByBin_nameSettings"}},"/b/{bin_name}/delete":{"post":{"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"postBByBin_nameDelete"}},"/b/{bin_name}/tokens":{"post":{"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"postBByBin_nameTokens"}},"/b/{bin_name}/tokens/{token_id}/revoke":{"post":{"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"postBByBin_nameTokensByToken_idRevoke"}},"/b/{bin_name}/requests/{request_id}":{"get":{"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}},{"name":"request_id","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"getBByBin_nameRequestsByRequest_id"}},"/b/{bin_name}/fragments/requests":{"get":{"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"getBByBin_nameFragmentsRequests"}},"/b/{bin_name}/fragments/requests/{request_id}":{"get":{"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}},{"name":"request_id","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"getBByBin_nameFragmentsRequestsByRequest_id"}},"/api/bins":{"post":{"tags":["Management"],"summary":"Create managed permanent bin","operationId":"postApiBins"}},"/api/bins/{bin_name}":{"get":{"tags":["Management"],"summary":"Get managed bin metadata","parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"getApiBinsByBin_name"},"delete":{"tags":["Management"],"summary":"Delete managed bin","parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"deleteApiBinsByBin_name"}},"/api/bins/{bin_name}/tokens":{"post":{"tags":["Management"],"summary":"Create private read token","parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"postApiBinsByBin_nameTokens"}},"/api/bins/{bin_name}/tokens/{token_id}":{"delete":{"tags":["Management"],"summary":"Revoke private read token","parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"deleteApiBinsByBin_nameTokensByToken_id"}},"/api/legacy/{bin_name}":{"get":{"tags":["Legacy"],"summary":"Get legacy metadata for a bin","deprecated":true,"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"getApiLegacyByBin_name"}},"/api/legacy/{bin_name}/post":{"get":{"tags":["Legacy"],"summary":"Get latest request through legacy alias","deprecated":true,"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"getApiLegacyByBin_namePost"}},"/api/legacy/{bin_name}/post/json":{"get":{"tags":["Legacy"],"summary":"Get latest request JSON through legacy alias","deprecated":true,"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"getApiLegacyByBin_namePostJson"}},"/t/{bin_name}":{"get":{"tags":["Deprecated"],"summary":"Deprecated /t alias metadata route","deprecated":true,"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"getTByBin_name"}},"/t/{bin_name}/post":{"get":{"tags":["Deprecated"],"summary":"Deprecated /t latest alias","deprecated":true,"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"getTByBin_namePost"}},"/t/{bin_name}/post/json":{"get":{"tags":["Deprecated"],"summary":"Deprecated /t latest JSON alias","deprecated":true,"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"getTByBin_namePostJson"}},"/api/c/{bin_name}":{"get":{"tags":["Capture"],"summary":"Capture request into a bin","parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"allApiCByBin_name"},"post":{"tags":["Capture"],"summary":"Capture request into a bin","parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"allApiCByBin_name"},"put":{"tags":["Capture"],"summary":"Capture request into a bin","parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"allApiCByBin_name"},"delete":{"tags":["Capture"],"summary":"Capture request into a bin","parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"allApiCByBin_name"},"patch":{"tags":["Capture"],"summary":"Capture request into a bin","parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"allApiCByBin_name"},"head":{"tags":["Capture"],"summary":"Capture request into a bin","parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"allApiCByBin_name"},"options":{"tags":["Capture"],"summary":"Capture request into a bin","parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"allApiCByBin_name"},"trace":{"tags":["Capture"],"summary":"Capture request into a bin","parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"allApiCByBin_name"}},"/api/{bin_name}/latest":{"get":{"tags":["Read API"],"summary":"Get latest captured request","parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"getApiByBin_nameLatest"}},"/api/{bin_name}/updates":{"get":{"tags":["Read API"],"summary":"Get captured requests after a request id","parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"getApiByBin_nameUpdates"}},"/api/{bin_name}/{request_id}":{"get":{"tags":["Read API"],"summary":"Get captured request by id","parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}},{"name":"request_id","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"getApiByBin_nameByRequest_id"}},"/{bin_name}":{"get":{"tags":["Deprecated"],"summary":"Deprecated root capture alias","deprecated":true,"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"allByBin_name"},"post":{"tags":["Deprecated"],"summary":"Deprecated root capture alias","deprecated":true,"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"allByBin_name"},"put":{"tags":["Deprecated"],"summary":"Deprecated root capture alias","deprecated":true,"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"allByBin_name"},"delete":{"tags":["Deprecated"],"summary":"Deprecated root capture alias","deprecated":true,"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"allByBin_name"},"patch":{"tags":["Deprecated"],"summary":"Deprecated root capture alias","deprecated":true,"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"allByBin_name"},"head":{"tags":["Deprecated"],"summary":"Deprecated root capture alias","deprecated":true,"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"allByBin_name"},"options":{"tags":["Deprecated"],"summary":"Deprecated root capture alias","deprecated":true,"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"allByBin_name"},"trace":{"tags":["Deprecated"],"summary":"Deprecated root capture alias","deprecated":true,"parameters":[{"name":"bin_name","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"allByBin_name"}}}}