{"openapi":"3.1.0","info":{"title":"MotoActa API","version":"0.1.0"},"servers":[{"url":"https://api.motoacta.app"}],"paths":{"/b/{qrCode}":{"get":{"summary":"Resolve QR code to public bike profile"}},"/b/{qrCode}/spotted":{"get":{"summary":"List public owner-approved Spotted events"},"post":{"summary":"Create a Spotted event when owner has opted in"}},"/bikes/{id}/public":{"get":{"summary":"Get public bike profile by ID"}},"/bikes":{"get":{"summary":"List current user's bikes"},"post":{"summary":"Create bike"}},"/bikes/{id}":{"get":{"summary":"Get full bike details"},"patch":{"summary":"Update bike metadata"}},"/bikes/{id}/qr":{"get":{"summary":"Get owner QR metadata and artwork URLs"}},"/bikes/{id}/qr.svg":{"get":{"summary":"Download owner QR code as SVG"}},"/bikes/{id}/qr.png":{"get":{"summary":"Download owner QR code as PNG"}},"/bikes/{id}/services":{"get":{"summary":"List service events"},"post":{"summary":"Log service event"}},"/bikes/{id}/services/{eventId}":{"get":{"summary":"Get service event"},"patch":{"summary":"Update service event"}},"/bikes/{id}/mileage":{"post":{"summary":"Log mileage update"}},"/bikes/{id}/crashes":{"post":{"summary":"Log crash event"}},"/bikes/{id}/reminders":{"get":{"summary":"List service reminders"}},"/uploads/presign":{"post":{"summary":"Create an upload URL for R2-backed photo upload"}},"/photos":{"post":{"summary":"Register uploaded photo metadata"}},"/products/physical-qr-kit":{"get":{"summary":"Get physical QR kit pricing and availability"}},"/auth/magic-link/request":{"post":{"summary":"Request a passwordless MotoActa sign-in link"}},"/auth/magic-link/verify":{"post":{"summary":"Exchange a magic-link token for a session bearer token"}},"/auth/register":{"post":{"summary":"Create a MotoActa email/password account"}},"/auth/login":{"post":{"summary":"Log in with email and password"}},"/auth/logout":{"post":{"summary":"Revoke the current session bearer token"}},"/auth/me":{"get":{"summary":"Get the current authenticated user"}},"/auth/password/forgot":{"post":{"summary":"Request a password reset email"}},"/auth/password/reset":{"post":{"summary":"Reset password with a reset token"}},"/auth/email/verify":{"post":{"summary":"Verify account email with a verification token"}},"/vin/decode":{"post":{"summary":"Decode and validate a VIN with NHTSA vPIC"}},"/bikes/{id}/vin":{"post":{"summary":"Validate and save a bike VIN"}},"/bikes/{id}/identity":{"get":{"summary":"Get bike VIN verification and attestation state"}},"/bikes/{id}/title-verification":{"post":{"summary":"Run NMVTIS title verification for a bike VIN"}},"/bikes/{id}/title-verifications":{"get":{"summary":"List stored title verification metadata"}},"/bikes/{id}/access-grants":{"get":{"summary":"List scoped access grants for a bike"},"post":{"summary":"Create a scoped, expiring bike access grant"}},"/bikes/{id}/access-grants/{grantId}":{"delete":{"summary":"Revoke a scoped bike access grant"}},"/bikes/{id}/privacy":{"patch":{"summary":"Update owner-controlled privacy and Spotted settings"}},"/bikes/{id}/spotted":{"get":{"summary":"List all owner-visible Spotted events for a bike"}},"/bikes/{id}/spotted/{eventId}":{"patch":{"summary":"Approve or reject a Spotted event"}},"/organizations":{"get":{"summary":"List current user's organizations"},"post":{"summary":"Create an organization"}},"/organizations/{id}/members":{"post":{"summary":"Add or update an organization member"}},"/organizations/{orgId}/bikes/{bikeId}/attestations":{"post":{"summary":"Create a bike identity attestation as a verified organization member"}},"/orders/physical-qr-kit":{"post":{"summary":"Create a PayPal order for a physical QR kit"}},"/orders":{"get":{"summary":"List current user's physical QR kit orders"}},"/orders/{id}":{"get":{"summary":"Get a physical QR kit order"}},"/orders/{id}/paypal/capture":{"post":{"summary":"Capture a PayPal payment for an order"}},"/webhooks/paypal":{"post":{"summary":"Receive PayPal billing webhooks"}},"/admin/orders":{"get":{"summary":"List all physical QR kit orders"}},"/admin/bikes/{id}/attestations":{"post":{"summary":"Create an admin bike identity attestation"}},"/admin/bikes/{id}/title-verification":{"post":{"summary":"Create manual NMVTIS title verification metadata"}},"/admin/orders/{id}/fulfillment":{"patch":{"summary":"Update physical QR kit fulfillment status"}},"/admin/bookkeeping/orders.csv":{"get":{"summary":"Export physical QR kit bookkeeping CSV"}}}}