{"openapi":"3.1.0","info":{"title":"Fondly Told preview API","version":"1","description":"Disposable test API. Receives photos from a test account, reports their resolution, and runs a $1 test order."},"servers":[{"url":"https://fondlytold.com"}],"security":[{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"}}},"paths":{"/v1/sessions":{"post":{"operationId":"createOrderCode","summary":"Get an order code when the person does not have one (no authentication needed)","security":[],"responses":{"201":{"description":"order_code to use as the bearer token"}}}},"/v1/media":{"post":{"operationId":"sendPhotoFiles","summary":"Upload every candidate photo in one request (multipart/form-data, up to 60 files; photo_N, date_N, kind_N, pick_N=1 for suggested). Returns book_url: one page where the person chooses, previews, changes and orders","parameters":[{"name":"run","in":"query","schema":{"type":"string"},"description":"Short label for this test run"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","additionalProperties":{"type":"string","format":"binary"}}}}},"responses":{"200":{"description":"Receipt with per-item analysis"}}}},"/v1/candidates":{"post":{"operationId":"sendCandidateThumbnails","summary":"Optional: send up to 60 small previews (thumb_N files, ref_N, date_N, pick_N=1 for suggested) and get a selection_url where the person chooses","parameters":[{"name":"run","in":"query","schema":{"type":"string"},"description":"Short label for this test run"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","additionalProperties":{"type":"string","format":"binary"}}}}},"responses":{"200":{"description":"Receipt with per-item analysis"}}}},"/v1/selection":{"get":{"operationId":"getSelection","summary":"Whether the person has finished choosing, and which refs they chose","parameters":[{"name":"book","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Receipt with per-item analysis"}}}},"/v1/manifest":{"post":{"operationId":"sendPhotoUrls","summary":"Send media URLs with captions and dates; the probe downloads and measures each one","parameters":[{"name":"run","in":"query","schema":{"type":"string"},"description":"Short label for this test run"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["items"],"properties":{"items":{"type":"array","maxItems":25,"items":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"},"caption":{"type":"string"},"taken_at":{"type":"string"},"kind":{"type":"string","enum":["post","carousel","reel","story"]}}}}}}}}},"responses":{"200":{"description":"Receipt with per-item analysis"}}}},"/v1/orders":{"post":{"operationId":"createTestOrder","summary":"Create a $1.00 test order (nothing ships)","parameters":[{"name":"run","in":"query","schema":{"type":"string"},"description":"Short label for this test run"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Receipt with per-item analysis"}}}},"/v1/orders/confirm":{"post":{"operationId":"payTestOrder","summary":"Pay the test order with a Stripe shared payment token","parameters":[{"name":"run","in":"query","schema":{"type":"string"},"description":"Short label for this test run"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["order_id","payment_data"],"properties":{"order_id":{"type":"string"},"payment_data":{"type":"object","required":["token","provider"],"properties":{"token":{"type":"string","description":"spt_…"},"provider":{"type":"string","enum":["stripe"]}}}}}}}},"responses":{"200":{"description":"Receipt with per-item analysis"}}}}}}