{"openapi":"3.1.0","info":{"title":"FTIR.fun Partner API","description":"Partner-only API for spectral comparison, literature-backed peak explanation, material hypothesis verification, batch analysis, and image comparison. Results are screening candidates and analytical interpretations, not accredited laboratory certifications.","version":"1.0.0"},"servers":[{"url":"https://ftir.fun"}],"paths":{"/health":{"get":{"summary":"Health check","operationId":"getPartnerHealth","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Getpartnerhealth"}}}}}}},"/v1/partner/compare-peaks":{"post":{"summary":"Compare two FTIR peak lists","operationId":"partnerComparePeaks","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComparePeaksRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Partnercomparepeaks"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v1/partner/explain-peaks-from-paper":{"post":{"summary":"Extract FTIR peak assignments from a paper","operationId":"partnerExplainPeaksFromPaper","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExplainPeaksFromPaperRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Partnerexplainpeaksfrompaper"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v1/partner/verify-spectrum-against-paper":{"post":{"summary":"Verify a spectrum against a paper","operationId":"partnerVerifySpectrumAgainstPaper","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifySpectrumAgainstPaperRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Partnerverifyspectrumagainstpaper"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v1/partner/verify-material":{"post":{"summary":"Verify a material hypothesis","operationId":"partnerVerifyMaterial","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyMaterialRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Partnerverifymaterial"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v1/partner/batch-analyze":{"post":{"summary":"Submit a batch analysis","operationId":"partnerBatchAnalyze","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchAnalyzeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Partnerbatchanalyze"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v1/partner/batch-analyze/{batch_task_id}":{"get":{"summary":"Get batch analysis status","operationId":"partnerGetBatchAnalysisStatus","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"batch_task_id","in":"path","required":true,"schema":{"type":"string","title":"Batch Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Partnergetbatchanalysisstatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/partner/image-compare":{"post":{"summary":"Submit a spectrum image comparison","operationId":"partnerImageCompare","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageComparisonRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Partnerimagecompare"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v1/partner/image-compare/{task_id}":{"get":{"summary":"Get image comparison status","operationId":"partnerGetImageComparisonStatus","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Partnergetimagecomparisonstatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"BatchAnalyzeRequest":{"properties":{"samples":{"items":{"$ref":"#/components/schemas/BatchSample"},"type":"array","title":"Samples","description":"List of samples to analyze independently."},"top_k":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Top K","description":"Number of ranked matches per sample.","default":10},"tolerance_cm1":{"type":"integer","maximum":30.0,"minimum":1.0,"title":"Tolerance Cm1","description":"Peak-only search tolerance in cm^-1.","default":15}},"type":"object","required":["samples"],"title":"BatchAnalyzeRequest"},"BatchSample":{"properties":{"sample_id":{"type":"string","title":"Sample Id","description":"Caller-assigned sample identifier."},"file_base64":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Base64","description":"Base64-encoded FTIR spectrum file."},"peaks":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Peaks","description":"FTIR peak positions in cm^-1."},"filename":{"type":"string","title":"Filename","description":"Original filename when file_base64 is provided.","default":"spectrum.0"}},"type":"object","required":["sample_id"],"title":"BatchSample"},"ComparePeaksRequest":{"properties":{"peaks_a":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Peaks A","description":"Peak positions in cm^-1 for the first spectrum."},"peaks_b":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Peaks B","description":"Peak positions in cm^-1 for the reference."},"file_base64":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Base64","description":"Optional base64-encoded FTIR file to use as peaks_a."},"filename":{"type":"string","title":"Filename","description":"Original filename when file_base64 is provided.","default":"spectrum.0"},"tolerance_cm1":{"type":"integer","maximum":30.0,"minimum":1.0,"title":"Tolerance Cm1","description":"Peak matching tolerance in cm^-1.","default":10},"label_a":{"type":"string","title":"Label A","description":"Label for the first spectrum.","default":"my_spectrum"},"label_b":{"type":"string","title":"Label B","description":"Label for the reference.","default":"reference"}},"type":"object","title":"ComparePeaksRequest"},"ExplainPeaksFromPaperRequest":{"properties":{"doi":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Doi","description":"Paper DOI."},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Paper title (used if DOI is not provided)."},"peak_cm1":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Peak Cm1","description":"Optional specific peak positions to focus on."},"compound":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compound","description":"Optional compound name within the paper."}},"type":"object","title":"ExplainPeaksFromPaperRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ImageComparisonRequest":{"properties":{"user_file_base64":{"type":"string","title":"User File Base64","description":"Base64-encoded user FTIR spectrum file."},"user_filename":{"type":"string","title":"User Filename","description":"Original filename for the user file.","default":"spectrum.0"},"paper_image_base64":{"type":"string","title":"Paper Image Base64","description":"Base64-encoded paper FTIR screenshot (PNG/JPEG)."},"paper_doi":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Paper Doi","description":"Optional DOI of the paper."},"paper_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Paper Context","description":"Optional figure caption or context."},"tolerance_cm1":{"type":"integer","maximum":30.0,"minimum":1.0,"title":"Tolerance Cm1","description":"Peak matching tolerance in cm^-1.","default":10}},"type":"object","required":["user_file_base64","paper_image_base64"],"title":"ImageComparisonRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifyMaterialRequest":{"properties":{"material_name":{"type":"string","title":"Material Name","description":"Material name, CAS number, or spectrum number to verify against."},"file_base64":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Base64","description":"Base64-encoded FTIR spectrum file."},"peaks":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Peaks","description":"FTIR peak positions in cm^-1."},"filename":{"type":"string","title":"Filename","description":"Original filename when file_base64 is provided.","default":"spectrum.0"},"pass_threshold":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Pass Threshold","description":"Pass/fail threshold for the hypothesis score.","default":0.75},"top_k":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Top K","description":"Number of ranked library matches to inspect.","default":10},"tolerance_cm1":{"type":"integer","maximum":30.0,"minimum":1.0,"title":"Tolerance Cm1","description":"Peak-only search tolerance in cm^-1.","default":15}},"type":"object","required":["material_name"],"title":"VerifyMaterialRequest"},"VerifySpectrumAgainstPaperRequest":{"properties":{"doi":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Doi","description":"Paper DOI."},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Paper title (used if DOI is not provided)."},"file_base64":{"type":"string","title":"File Base64","description":"Base64-encoded FTIR spectrum file."},"filename":{"type":"string","title":"Filename","description":"Original filename for format detection.","default":"spectrum.0"},"compound":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compound","description":"Optional compound name within the paper."},"tolerance_cm1":{"type":"integer","maximum":30.0,"minimum":1.0,"title":"Tolerance Cm1","description":"Peak matching tolerance in cm^-1.","default":10}},"type":"object","required":["file_base64"],"title":"VerifySpectrumAgainstPaperRequest"}},"securitySchemes":{"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}}}}