{"openapi":"3.1.0","info":{"title":"FlexOrch API","description":"KVKK/GDPR-compliant document processing and dataset export API.","version":"1.0.0"},"paths":{"/system/health":{"get":{"tags":["System"],"summary":"Health check — database and LLM status","operationId":"health_check_system_health_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"tags":["System"],"summary":"Health check — database and LLM status","operationId":"health_check_system_health_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/system/billing/open-period/{tenant_id}":{"post":{"tags":["System","Admin"],"summary":"Ay başı: billing period aç ve plan credits ver","operationId":"admin_open_billing_period_system_billing_open_period__tenant_id__post","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"integer","title":"Tenant Id"}},{"name":"X-Internal-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Internal-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/system/billing/close-period/{tenant_id}":{"post":{"tags":["System","Admin"],"summary":"Ay sonu: kullanılmayan credits expire et, period kapat","operationId":"admin_close_billing_period_system_billing_close_period__tenant_id__post","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"integer","title":"Tenant Id"}},{"name":"X-Internal-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Internal-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/system/admin/storage/cleanup":{"post":{"tags":["System","Admin"],"summary":"Plan TTL'i dolan dataset export dosyalarını sil","operationId":"admin_storage_cleanup_system_admin_storage_cleanup_post","parameters":[{"name":"X-Internal-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Internal-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/system/billing/cycle":{"post":{"tags":["System","Admin"],"summary":"Aylık billing döngüsü — açık period'ları kapat, yenilerini aç","operationId":"admin_billing_cycle_system_billing_cycle_post","parameters":[{"name":"X-Internal-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Internal-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/system/admin/tenants/{tenant_id}/data-export":{"get":{"tags":["System","Admin"],"summary":"Admin — tenant verilerini ZIP olarak indir (KVKK Madde 11)","operationId":"admin_data_export_system_admin_tenants__tenant_id__data_export_get","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"integer","title":"Tenant Id"}},{"name":"X-Internal-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Internal-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/system/admin/oss-metrics/fetch":{"post":{"tags":["System","Admin"],"summary":"PyPI/npm/GitHub metriklerini çek ve DB'ye kaydet","operationId":"admin_oss_metrics_fetch_system_admin_oss_metrics_fetch_post","parameters":[{"name":"X-Internal-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Internal-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/system/admin/oss-metrics":{"get":{"tags":["System","Admin"],"summary":"OSS büyüme metriklerini getir (snapshot + trend)","operationId":"admin_oss_metrics_get_system_admin_oss_metrics_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(7d|30d|90d)$","default":"30d","title":"Period"}},{"name":"X-Internal-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Internal-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/system/admin/quality/cross-validate":{"post":{"tags":["System","Admin"],"summary":"Cross-validation delta — deterministik vs LLM extractor karşılaştırması","description":"Verilen pipeline_execution'ı hem deterministik (key_value/tabular) hem LLM (entity)\nextractor ile yeniden işler. Delta >%20 → cross_validation_flag: true.\n\nSonuç execution.result_meta['cross_validation'] alanına yazılır.\nPeriyodik admin denetimi veya nightly job için tasarlanmıştır;\nnormal pipeline akışına entegre edilmez.","operationId":"admin_cross_validate_system_admin_quality_cross_validate_post","parameters":[{"name":"X-Internal-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Internal-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrossValidateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/system/admin/quality/flagged":{"get":{"tags":["System","Admin"],"summary":"Cross-validation flag'li execution listesi","description":"delta >%20 olan ve cross_validation_flag=true işaretli execution'ları döndürür.","operationId":"admin_quality_flagged_system_admin_quality_flagged_get","parameters":[{"name":"tenant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Belirli tenant filtresi (opsiyonel)","title":"Tenant Id"},"description":"Belirli tenant filtresi (opsiyonel)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"X-Internal-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Internal-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/system/admin/quality/pii-precision":{"post":{"tags":["System","Admin"],"summary":"Tek execution için PII precision / over-masking analizi","description":"Verilen execution'ın `result_meta.pii_type_summary` alanı üzerinden\ndetector bazında over-masking oranı hesaplar.\nOver-masking oranı = (masked - expected) / masked. Eşik >%15 → flag.\n**X-Internal-Token auth.**","operationId":"admin_pii_precision_system_admin_quality_pii_precision_post","parameters":[{"name":"X-Internal-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Internal-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PiiPrecisionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/system/admin/quality/pii-precision/report":{"get":{"tags":["System","Admin"],"summary":"Platform geneli detector bazlı PII precision raporu","description":"Son `limit` tamamlanmış execution üzerinde detector (email, phone_tr, tckn…) bazında\nmaskeleme istatistiklerini döndürür. Ground truth olmadan over-masking oranı\nhesaplanamaz; benchmark entegrasyonu için `run_benchmark.py` kullanın.\n**X-Internal-Token auth.**","operationId":"admin_pii_precision_report_system_admin_quality_pii_precision_report_get","parameters":[{"name":"tenant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tenant Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":500,"title":"Limit"}},{"name":"X-Internal-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Internal-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/signup":{"post":{"tags":["Auth"],"summary":"Create a new account","description":"Creates a tenant, workspace, user, and email verification token.\nA verification email is sent. After verifying, create an API key via POST /v1/me/api-keys.\n\n```bash\ncurl -X POST https://api.flexorch.com/v1/auth/signup \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"email\": \"you@company.com\", \"password\": \"securepass123\"}'\n```","operationId":"signup_v1_auth_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/login":{"post":{"tags":["Auth"],"summary":"Login with email and password","description":"Returns a short-lived JWT access token (15 min) and a long-lived refresh token (30 days).\nUse `Authorization: Bearer <access_token>` on subsequent requests.\n5 consecutive failures from the same IP trigger a 5-minute block.","operationId":"login_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/refresh":{"post":{"tags":["Auth"],"summary":"Rotate refresh token","description":"Exchanges a valid refresh token for a new access token and rotated refresh token. The old refresh token is immediately revoked.","operationId":"refresh_v1_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/logout":{"post":{"tags":["Auth"],"summary":"Revoke refresh token","description":"Revokes the provided refresh token. The short-lived access token expires naturally (15 min).","operationId":"logout_v1_auth_logout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/verify-email":{"post":{"tags":["Auth"],"summary":"Activate account via email token","description":"Verifies the token sent to the user's email address. The tenant becomes active after this call.","operationId":"verify_email_v1_auth_verify_email_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyEmailRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/resend-verification":{"post":{"tags":["Auth"],"summary":"Resend verification email","description":"Sends a new verification email. Rate-limited to one request per 60 seconds.","operationId":"resend_verification_v1_auth_resend_verification_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResendVerificationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/forgot-password":{"post":{"tags":["Auth"],"summary":"Request password reset email","description":"Sends a password reset link. Always returns success to avoid leaking whether the email is registered.","operationId":"forgot_password_v1_auth_forgot_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/reset-password":{"post":{"tags":["Auth"],"summary":"Set new password with reset token","description":"Validates the reset token and updates the password. The token is single-use and valid for 1 hour.","operationId":"reset_password_v1_auth_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/data-process/preview":{"post":{"tags":["Data Process"],"summary":"Process a file and return structured JSON preview","description":"Upload a file (CSV, PDF, DOCX, TXT, XLSX…), run the full extraction and privacy pipeline,\nand return a structured JSON preview.\n\n**Curl example:**\n```bash\ncurl -X POST https://api.flexorch.io/v1/data-process/preview \\\n  -H \"X-API-KEY: dfx_your_key\" \\\n  -F \"file=@invoice.pdf\" \\\n  -F \"masked=false\"\n```\n\nSet `masked=true` to receive PII-masked output instead of raw extracted data.","operationId":"preview_data_process_v1_data_process_preview_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"masked","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Masked"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_preview_data_process_v1_data_process_preview_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/data-process/export/csv":{"post":{"tags":["Data Process"],"summary":"Process a file and download structured CSV output","description":"Upload a file, run the full extraction pipeline, and download the result as a CSV file.\n\n**Curl example:**\n```bash\ncurl -X POST https://api.flexorch.io/v1/data-process/export/csv \\\n  -H \"X-API-KEY: dfx_your_key\" \\\n  -F \"file=@report.xlsx\" \\\n  -o output.csv\n```","operationId":"export_data_process_csv_v1_data_process_export_csv_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"masked","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Masked"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_export_data_process_csv_v1_data_process_export_csv_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/data-process/async":{"post":{"tags":["Data Process"],"summary":"Process files asynchronously — upload or pull from S3","description":"**Mode 1 — File upload:** one or more files via multipart.\n**Mode 2 — S3 source:** JSON form field `source` with `connector_id` + `keys`.\nExactly one mode must be used.\n\nUse `GET /v1/jobs/{job_id}` to poll status (`queued → running → completed | failed`).\n\n**Curl — file upload:**\n```bash\ncurl -X POST https://api.flexorch.io/v1/data-process/async \\\n  -H \"X-API-KEY: dfx_your_key\" \\\n  -F \"files=@invoice.pdf\"\n```\n\n**Curl — S3 source:**\n```bash\ncurl -X POST https://api.flexorch.io/v1/data-process/async \\\n  -H \"X-API-KEY: dfx_your_key\" \\\n  -F 'source={\"connector_id\": 1, \"keys\": [\"invoices/jan.pdf\", \"invoices/feb.pdf\"]}'\n```\n\nPartial accept: invalid files/keys appear in `rejected`, valid ones are queued.","operationId":"async_data_process_v1_data_process_async_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_async_data_process_v1_data_process_async_post"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/documents":{"get":{"tags":["Documents"],"summary":"List uploaded documents","operationId":"get_documents_v1_documents_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/documents/{document_id}":{"get":{"tags":["Documents"],"summary":"Get document detail","operationId":"get_document_by_id_v1_documents__document_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/documents/{document_id}/reprocess":{"post":{"tags":["Documents"],"summary":"Reprocess an existing document","description":"Queue a new processing job for an already-uploaded document.\n\nReturns immediately with a `job_id` — poll `/v1/jobs/{job_id}` for status.\n\n**Note:** Only works for locally-stored files. S3-sourced documents return 400.\n\n```bash\ncurl -X POST https://api.flexorch.com/v1/documents/7/reprocess \\\n  -H \"X-API-KEY: dfx_your_key\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{}'\n```","operationId":"reprocess_document_endpoint_v1_documents__document_id__reprocess_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ReprocessRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/executions":{"get":{"tags":["Executions"],"summary":"List pipeline executions","operationId":"get_executions_v1_executions_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/executions/{execution_id}":{"get":{"tags":["Executions"],"summary":"Get execution detail","operationId":"get_execution_by_id_v1_executions__execution_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"execution_id","in":"path","required":true,"schema":{"type":"integer","title":"Execution Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs":{"get":{"tags":["Jobs"],"summary":"List jobs","operationId":"get_jobs_v1_jobs_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"job_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by type: `data_process` or `dataset_build`","title":"Job Type"},"description":"Filter by type: `data_process` or `dataset_build`"},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/stuck":{"get":{"tags":["Jobs"],"summary":"List potentially stuck jobs (running or queued beyond threshold)","description":"Returns jobs that have been in `running` or `queued` state longer than the given thresholds.\n\nUseful for ops troubleshooting — stuck jobs may indicate a crash or unhandled exception\nthat left the job without a terminal status update.\n\n**Curl example:**\n```bash\ncurl \"https://api.flexorch.io/v1/jobs/stuck?running_threshold_minutes=15\" \\\n  -H \"X-API-KEY: dfx_your_key\"\n```","operationId":"get_stuck_jobs_v1_jobs_stuck_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"running_threshold_minutes","in":"query","required":false,"schema":{"type":"integer","maximum":1440,"minimum":1,"description":"Minutes before a running job is considered stuck","default":15,"title":"Running Threshold Minutes"},"description":"Minutes before a running job is considered stuck"},{"name":"queued_threshold_minutes","in":"query","required":false,"schema":{"type":"integer","maximum":1440,"minimum":1,"description":"Minutes before a queued job is considered stuck","default":30,"title":"Queued Threshold Minutes"},"description":"Minutes before a queued job is considered stuck"},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/{job_id}":{"get":{"tags":["Jobs"],"summary":"Get job status and result","description":"Poll a job by its id to track progress and retrieve results.\n\n**Curl example:**\n```bash\ncurl https://api.flexorch.io/v1/jobs/42 \\\n  -H \"X-API-KEY: dfx_your_key\"\n```\n\n`status` values: `queued` → `running` → `success` | `failed`\n\nFor `dataset_build` jobs, `dataset_summary` is populated on success.\nFor `data_process` jobs, `processing_summary` is populated on success.","operationId":"get_job_by_id_v1_jobs__job_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/{job_id}/feedback":{"post":{"tags":["Jobs"],"summary":"Submit feedback for a job result","operationId":"post_job_feedback_v1_jobs__job_id__feedback_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Jobs"],"summary":"Get feedback for a job","operationId":"get_job_feedback_v1_jobs__job_id__feedback_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/usage/history":{"get":{"tags":["Usage"],"summary":"Get daily usage history","description":"Returns a daily series of credits consumed and completed jobs for the requested period.","operationId":"get_usage_history_route_v1_usage_history_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"enum":["7d","30d","90d"],"type":"string","default":"30d","title":"Period"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/usage/quality-trend":{"get":{"tags":["Usage"],"summary":"Get daily pipeline quality trend","description":"Returns a daily quality score series for the requested period.\n\nEach entry includes avg_quality_score (0.0–1.0), grade_distribution (A/B/C/D),\navg_field_fill_rate (structured documents only), and job_count.\n\n```bash\ncurl \"https://api.flexorch.com/v1/usage/quality-trend?period=30d\" \\\n  -H \"X-API-KEY: dfx_your_key\"\n```","operationId":"get_quality_trend_route_v1_usage_quality_trend_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"enum":["7d","30d","90d"],"type":"string","default":"30d","title":"Period"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/usage":{"get":{"tags":["Usage"],"summary":"Get current month usage summary","operationId":"get_usage_v1_usage_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/usage/rate-limits":{"get":{"tags":["Usage"],"summary":"Get current rate limit status","description":"Returns the plan-based rate limit configuration and current window usage.\nDoes **not** consume a request slot.\n\n```bash\ncurl https://api.flexorch.com/v1/usage/rate-limits -H \"X-API-KEY: dfx_your_key\"\n```","operationId":"get_rate_limits_v1_usage_rate_limits_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/datasets/build-from-execution/{execution_id}":{"post":{"tags":["Datasets"],"summary":"Build a dataset from a completed execution","description":"Trigger a non-blocking dataset build from a completed pipeline execution.\nReturns immediately with a `job_id` — poll `/v1/jobs/{job_id}` for status.\n\n**Curl example:**\n```bash\ncurl -X POST https://api.flexorch.io/v1/datasets/build-from-execution/17 \\\n  -H \"X-API-KEY: dfx_your_key\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\": \"customer-q1\", \"force_rebuild\": false}'\n```\n\nOn success, the job's `dataset_summary` contains the built dataset id and slug.","operationId":"build_dataset_v1_datasets_build_from_execution__execution_id__post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"execution_id","in":"path","required":true,"schema":{"type":"integer","title":"Execution Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DatasetBuildRequest"},{"type":"null"}],"title":"Payload"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/datasets":{"get":{"tags":["Datasets"],"summary":"List datasets","operationId":"get_datasets_v1_datasets_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Page Size"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status: `ready`, `building`, `failed`","title":"Status"},"description":"Filter by status: `ready`, `building`, `failed`"},{"name":"source_execution_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Source Execution Id"}},{"name":"source_document_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Source Document Id"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search by name or slug","title":"Q"},"description":"Search by name or slug"},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/datasets/{dataset_id}":{"get":{"tags":["Datasets"],"summary":"Get dataset detail","operationId":"get_dataset_v1_datasets__dataset_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"integer","title":"Dataset Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/datasets/{dataset_id}/rows":{"get":{"tags":["Datasets"],"summary":"Preview dataset rows","operationId":"get_dataset_rows_v1_datasets__dataset_id__rows_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"integer","title":"Dataset Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Page Size"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Full-text search within rows","title":"Q"},"description":"Full-text search within rows"},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/datasets/{dataset_id}/profile":{"get":{"tags":["Datasets"],"summary":"Get dataset quality and privacy profile","description":"Aggregate quality and privacy summary for a ready dataset.\n\nReturns grade distribution, average quality score, PII findings count,\nmasked/clean record breakdown, and available export formats.\n\n**Curl example:**\n```bash\ncurl https://api.flexorch.io/v1/datasets/7/profile \\\n  -H \"X-API-KEY: dfx_your_key\"\n```","operationId":"get_dataset_profile_v1_datasets__dataset_id__profile_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"integer","title":"Dataset Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/datasets/{dataset_id}/compliance-report":{"get":{"tags":["Datasets"],"summary":"KVKK Madde 10 compliance report","description":"KVKK Madde 10 uyumlu işleme şeffaflık raporu.\n\nVeri kategorileri, PII dökümü, maskeleme durumu, saklama süresi ve kalite skoru içerir.\nJSON (varsayılan) veya `?format=pdf` (WeasyPrint gerekli, yoksa 501 döner).\n\n**Curl example:**\n```bash\ncurl https://api.flexorch.io/v1/datasets/7/compliance-report \\\n  -H \"X-API-KEY: dfx_your_key\"\n```","operationId":"get_compliance_report_v1_datasets__dataset_id__compliance_report_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"integer","title":"Dataset Id"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: `json` or `pdf`","default":"json","title":"Format"},"description":"Response format: `json` or `pdf`"},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/datasets/{dataset_id}/export/{fmt}":{"get":{"tags":["Datasets"],"summary":"Download dataset as file","description":"Download a built dataset in the requested format.\n\nSupported formats: `json`, `jsonl`, `csv`, `parquet`, `md`, `xml`\n\n**Curl example:**\n```bash\ncurl https://api.flexorch.io/v1/datasets/7/export/jsonl \\\n  -H \"X-API-KEY: dfx_your_key\" \\\n  -o dataset.jsonl\n```","operationId":"export_dataset_v1_datasets__dataset_id__export__fmt__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"integer","title":"Dataset Id"}},{"name":"fmt","in":"path","required":true,"schema":{"type":"string","title":"Fmt"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/datasets/{dataset_id}/index":{"post":{"tags":["Datasets"],"summary":"Index dataset for semantic search (Pro+)","description":"Start background pgvector indexing for a ready dataset. Pro+ plan required.\n\nThe endpoint returns immediately with `status: indexing`.\nPoll `GET /v1/datasets/{id}/index/status` to track progress.\n\n**Curl example:**\n```bash\ncurl -X POST https://api.flexorch.com/v1/datasets/7/index \\\n  -H \"X-API-KEY: dfx_your_key\"\n```","operationId":"index_dataset_v1_datasets__dataset_id__index_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"integer","title":"Dataset Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/datasets/{dataset_id}/index/status":{"get":{"tags":["Datasets"],"summary":"Get semantic index status (Pro+)","description":"Returns current pgvector index status for a dataset.\n\n`status` values: `not_indexed` | `indexing` | `ready` | `failed`\n\n**Curl example:**\n```bash\ncurl https://api.flexorch.com/v1/datasets/7/index/status \\\n  -H \"X-API-KEY: dfx_your_key\"\n```","operationId":"get_dataset_index_status_v1_datasets__dataset_id__index_status_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"integer","title":"Dataset Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/datasets/{dataset_id}/export-s3":{"post":{"tags":["Datasets"],"summary":"Push dataset export to S3","description":"Push a built dataset export file directly to an S3 connector.\n\n**Curl example:**\n```bash\ncurl -X POST https://api.flexorch.com/v1/datasets/7/export-s3 \\\n  -H \"X-API-KEY: dfx_your_key\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"format\": \"jsonl\", \"connector_id\": 1, \"prefix\": \"exports/\"}'\n```\n\nReturns `{s3_key, size_bytes}` on success.","operationId":"export_dataset_to_s3_v1_datasets__dataset_id__export_s3_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"integer","title":"Dataset Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3ExportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/connectors":{"post":{"tags":["Connectors"],"summary":"Register a connector","description":"Register an external storage connector. Credentials are encrypted at rest (AES-256)\nand never returned in API responses.\n\n**Supported types:** `s3`, `gcs`, `azure_blob`\n\n```bash\ncurl -X POST https://api.flexorch.com/v1/connectors \\\n  -H \"X-API-KEY: dfx_your_key\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"type\": \"s3\",\n    \"name\": \"Production Bucket\",\n    \"config\": {\n      \"bucket\": \"my-data-bucket\",\n      \"region\": \"eu-central-1\",\n      \"access_key_id\": \"AKIAIOSFODNN7EXAMPLE\",\n      \"secret_access_key\": \"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY\"\n    }\n  }'\n```","operationId":"create_connector_v1_connectors_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectorCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Connectors"],"summary":"List connectors","operationId":"list_connectors_v1_connectors_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/connectors/{connector_id}":{"get":{"tags":["Connectors"],"summary":"Get connector detail","operationId":"get_connector_v1_connectors__connector_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"connector_id","in":"path","required":true,"schema":{"type":"integer","title":"Connector Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Connectors"],"summary":"Delete a connector","operationId":"delete_connector_v1_connectors__connector_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"connector_id","in":"path","required":true,"schema":{"type":"integer","title":"Connector Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/connectors/{connector_id}/test":{"post":{"tags":["Connectors"],"summary":"Test connector connectivity","description":"Initiates a real connection to verify credentials and bucket access.\nResult is logged in `connector_logs`.\n\n```bash\ncurl -X POST https://api.flexorch.com/v1/connectors/1/test \\\n  -H \"X-API-KEY: dfx_your_key\"\n```\n\nSuccess: `{\"success\": true, \"latency_ms\": 142, \"error\": null}`\nFailure: `{\"success\": false, \"latency_ms\": null, \"error\": \"NoSuchBucket: ...\"}`","operationId":"test_connector_v1_connectors__connector_id__test_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"connector_id","in":"path","required":true,"schema":{"type":"integer","title":"Connector Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/connectors/{connector_id}/schedules":{"post":{"tags":["Schedules"],"summary":"Create a sync schedule","operationId":"create_schedule_v1_connectors__connector_id__schedules_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"connector_id","in":"path","required":true,"schema":{"type":"integer","title":"Connector Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateScheduleRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Schedules"],"summary":"List sync schedules for a connector","operationId":"list_schedules_v1_connectors__connector_id__schedules_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"connector_id","in":"path","required":true,"schema":{"type":"integer","title":"Connector Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/connectors/{connector_id}/schedules/{schedule_id}":{"delete":{"tags":["Schedules"],"summary":"Delete (deactivate) a sync schedule","operationId":"delete_schedule_v1_connectors__connector_id__schedules__schedule_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"connector_id","in":"path","required":true,"schema":{"type":"integer","title":"Connector Id"}},{"name":"schedule_id","in":"path","required":true,"schema":{"type":"integer","title":"Schedule Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/connectors/{connector_id}/schedules/{schedule_id}/trigger":{"post":{"tags":["Schedules"],"summary":"Manually trigger a schedule run immediately","operationId":"trigger_schedule_v1_connectors__connector_id__schedules__schedule_id__trigger_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"connector_id","in":"path","required":true,"schema":{"type":"integer","title":"Connector Id"}},{"name":"schedule_id","in":"path","required":true,"schema":{"type":"integer","title":"Schedule Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/connectors/{connector_id}/schedules/{schedule_id}/logs":{"get":{"tags":["Schedules"],"summary":"Get recent sync logs for a schedule","operationId":"get_sync_logs_v1_connectors__connector_id__schedules__schedule_id__logs_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"connector_id","in":"path","required":true,"schema":{"type":"integer","title":"Connector Id"}},{"name":"schedule_id","in":"path","required":true,"schema":{"type":"integer","title":"Schedule Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks":{"post":{"tags":["Webhooks"],"summary":"Register a webhook endpoint","description":"Register a URL to receive webhook events. Returns the signing secret — store it securely,\nit will not be shown again.\n\n**Supported events:** `['dataset.ready', 'job.completed', 'job.failed', 'quota.warning']`\n\n**Signature verification:** Each delivery includes `X-FlexOrch-Signature: sha256=<hmac>`.\nCompute `HMAC-SHA256(secret, raw_body)` and compare to verify authenticity.\n\n```bash\ncurl -X POST https://api.flexorch.com/v1/webhooks \\\n  -H \"X-API-KEY: dfx_your_key\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"url\": \"https://your-app.com/hook\", \"events\": [\"job.completed\", \"job.failed\"]}'\n```","operationId":"create_webhook_v1_webhooks_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Webhooks"],"summary":"List registered webhooks","operationId":"list_webhooks_v1_webhooks_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/{webhook_id}":{"delete":{"tags":["Webhooks"],"summary":"Deactivate a webhook","operationId":"delete_webhook_v1_webhooks__webhook_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"integer","title":"Webhook Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/me/api-keys":{"get":{"tags":["Me"],"summary":"List Api Keys","operationId":"list_api_keys_v1_me_api_keys_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/APIKeyItem"},"title":"Response List Api Keys V1 Me Api Keys Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Me"],"summary":"Create Api Key","operationId":"create_api_key_v1_me_api_keys_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/me/api-keys/{key_id}":{"delete":{"tags":["Me"],"summary":"Revoke Api Key","operationId":"revoke_api_key_v1_me_api_keys__key_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/me/data-export":{"get":{"tags":["Me"],"summary":"KVKK Madde 11 — kişisel verilerimi indir","description":"Tenant'a ait tüm verileri ZIP olarak indirir (KVKK Madde 11).\n\nZIP içeriği: tenant.csv, users.csv, api_keys.csv, documents.csv,\npipeline_executions.csv, datasets.csv, jobs.csv, dataset_files/\n\n**Curl example:**\n```bash\ncurl https://api.flexorch.io/v1/me/data-export \\\n  -H \"X-API-KEY: dfx_your_key\" \\\n  -o my_data.zip\n```","operationId":"download_data_export_v1_me_data_export_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/search":{"post":{"tags":["Search"],"summary":"Search over datasets — semantic | structured | hybrid (Pro+) | auto","description":"Belge kayıtlarında ve indexed chunk'larda arama yapar.\n\n**mode=auto (varsayılan):** doc_type'a göre otomatik backend seçimi.\n  - `invoice`, `bank_statement`, `purchase_order` → structured (tüm planlar)\n  - `contract`, `report`, `hr_policy` → semantic (Pro+); Pro+ değilse structured'a düşer\n\n**mode=structured:** output_records JSON üzerinde metin eşleştirme. Plan gate yok.\n\n**mode=semantic:** pgvector cosine similarity. Pro+ gerekir.\n\n**mode=hybrid:** BM25 (ts_vector) + semantic + RRF birleştirme. Pro+ gerekir.\n  - `alpha=null` → RRF (rank bazlı, önerilen)\n  - `alpha=0.0–1.0` → ağırlıklı skor birleştirme (0=BM25 odaklı, 1=semantic odaklı)","operationId":"search_v1_search_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/billing/checkout":{"post":{"tags":["Billing"],"summary":"Create Lemon Squeezy checkout session","operationId":"create_checkout_session_v1_billing_checkout_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/tenants":{"get":{"tags":["Admin"],"summary":"Admin — tenant listesi","operationId":"list_tenants_v1_admin_tenants_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/tenants/{tenant_id}":{"put":{"tags":["Admin"],"summary":"Admin — tenant plan veya active durumu güncelle","operationId":"update_tenant_v1_admin_tenants__tenant_id__put","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"integer","title":"Tenant Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTenantUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/analytics/quality":{"get":{"tags":["Admin"],"summary":"Admin — pipeline sağlığı metrikleri","description":"Platform genelinde proxy kalite sinyalleri. Her üç metrik, mevcut veritabanı üzerinden hesaplanır.\n\n- **reprocess_rate**: yeniden işleme oranı — ilk sonuçtan memnuniyetsizlik sinyali\n- **export_rate**: dataset dışa aktarma oranı — değer teslimi sinyali\n- **rebuild_rate**: dataset yeniden build oranı — iterasyon sinyali","operationId":"get_quality_analytics_v1_admin_analytics_quality_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/analytics/feedback":{"get":{"tags":["Admin"],"summary":"Admin — job feedback özeti","operationId":"get_feedback_summary_v1_admin_analytics_feedback_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/team/invite":{"post":{"tags":["Team"],"summary":"Invite Member","operationId":"invite_member_v1_team_invite_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteMemberRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/team/accept":{"post":{"tags":["Team"],"summary":"Accept Invite","description":"Accept a pending invite by token. The caller must be authenticated (JWT).","operationId":"accept_invite_v1_team_accept_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInviteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamMemberResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/team/members":{"get":{"tags":["Team"],"summary":"Get Members","operationId":"get_members_v1_team_members_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TeamMemberResponse"},"title":"Response Get Members V1 Team Members Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/team/members/{user_id}":{"delete":{"tags":["Team"],"summary":"Remove Member","operationId":"remove_member_v1_team_members__user_id__delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/team/members/{user_id}/role":{"patch":{"tags":["Team"],"summary":"Update Member Role","operationId":"update_member_role_v1_team_members__user_id__role_patch","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRoleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamMemberResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/team/invites/{invite_id}":{"delete":{"tags":["Team"],"summary":"Revoke Invite","operationId":"revoke_invite_v1_team_invites__invite_id__delete","parameters":[{"name":"invite_id","in":"path","required":true,"schema":{"type":"integer","title":"Invite Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/settings/llm-config":{"post":{"tags":["Settings"],"summary":"Save Llm Config","operationId":"save_llm_config_v1_settings_llm_config_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMConfigRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Settings"],"summary":"Get Llm Config Endpoint","operationId":"get_llm_config_endpoint_v1_settings_llm_config_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Settings"],"summary":"Delete Llm Config Endpoint","operationId":"delete_llm_config_endpoint_v1_settings_llm_config_delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/settings/llm-config/test":{"post":{"tags":["Settings"],"summary":"Test Llm Config Endpoint","description":"Test the saved LLM config with a minimal prompt. Returns latency + success.","operationId":"test_llm_config_endpoint_v1_settings_llm_config_test_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/settings/embedding-config":{"post":{"tags":["Settings"],"summary":"Save Embedding Config","description":"Save BYO embedding config.\nWARNING: Changing embedding model invalidates all existing semantic search indexes.\nRe-indexing must be triggered manually after saving.","operationId":"save_embedding_config_v1_settings_embedding_config_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbeddingConfigRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Settings"],"summary":"Get Embedding Config Endpoint","operationId":"get_embedding_config_endpoint_v1_settings_embedding_config_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Settings"],"summary":"Delete Embedding Config Endpoint","operationId":"delete_embedding_config_endpoint_v1_settings_embedding_config_delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/settings/fine-tuning":{"post":{"tags":["Settings"],"summary":"Start Fine Tuning","description":"Start a fine-tuning job. Enterprise plan + openai BYO key required.\nCosts 50 credits. Dataset must have ≥10 records.","operationId":"start_fine_tuning_v1_settings_fine_tuning_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FineTuneStartRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Settings"],"summary":"List Fine Tuning Jobs","description":"List all fine-tuning jobs for this tenant (newest first).","operationId":"list_fine_tuning_jobs_v1_settings_fine_tuning_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/settings/fine-tuning/{job_id}":{"get":{"tags":["Settings"],"summary":"Get Fine Tuning Job","description":"Get (and sync) fine-tuning job status from OpenAI.","operationId":"get_fine_tuning_job_v1_settings_fine_tuning__job_id__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Settings"],"summary":"Cancel Fine Tuning Job","description":"Cancel a running fine-tuning job. Cannot cancel terminal-state jobs.","operationId":"cancel_fine_tuning_job_v1_settings_fine_tuning__job_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/compliance/record":{"get":{"tags":["Compliance"],"summary":"Gdpr Article30 Record","description":"GDPR Article 30 — Record of Processing Activities (ROPA).\n\nReturns the tenant's processing activity record including:\n- Processing activity catalog\n- Detected data categories from execution history\n- Applicable regulations\n- Retention schedule and technical measures","operationId":"gdpr_article30_record_v1_compliance_record_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/audit/export":{"get":{"tags":["Compliance"],"summary":"Audit Log Export","description":"NIS2 Directive — Security audit log export.\n\nReturns authentication events, rate limit violations, and abuse blocks\nfor this tenant. Suitable for regulatory reporting under NIS2 Art. 23.\nFormats: json (default) | csv.","operationId":"audit_log_export_v1_audit_export_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"fmt","in":"query","required":false,"schema":{"type":"string","description":"json | csv","default":"json","title":"Fmt"},"description":"json | csv"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":500,"title":"Limit"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 datetime — e.g. 2026-06-01T00:00:00Z","title":"Since"},"description":"ISO 8601 datetime — e.g. 2026-06-01T00:00:00Z"},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"APIKeyItem":{"properties":{"id":{"type":"integer","title":"Id"},"key_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key Prefix"},"active":{"type":"boolean","title":"Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","key_prefix","active","created_at"],"title":"APIKeyItem"},"AcceptInviteRequest":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"AcceptInviteRequest"},"AdminTenantUpdate":{"properties":{"plan":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan"},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Active"}},"type":"object","title":"AdminTenantUpdate"},"AutoExportConfig":{"properties":{"connector_id":{"type":"integer","title":"Connector Id"},"format":{"type":"string","title":"Format"},"prefix":{"type":"string","title":"Prefix","default":"exports/"}},"type":"object","required":["connector_id","format"],"title":"AutoExportConfig"},"Body_async_data_process_v1_data_process_async_post":{"properties":{"files":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Files"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},"type":"object","title":"Body_async_data_process_v1_data_process_async_post"},"Body_export_data_process_csv_v1_data_process_export_csv_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_export_data_process_csv_v1_data_process_export_csv_post"},"Body_preview_data_process_v1_data_process_preview_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_preview_data_process_v1_data_process_preview_post"},"CheckoutRequest":{"properties":{"plan":{"type":"string","title":"Plan"}},"type":"object","required":["plan"],"title":"CheckoutRequest"},"ConnectorCreateRequest":{"properties":{"type":{"type":"string","title":"Type"},"name":{"type":"string","title":"Name"},"config":{"additionalProperties":true,"type":"object","title":"Config"}},"type":"object","required":["type","name","config"],"title":"ConnectorCreateRequest"},"CreateAPIKeyResponse":{"properties":{"id":{"type":"integer","title":"Id"},"key_prefix":{"type":"string","title":"Key Prefix"},"raw_key":{"type":"string","title":"Raw Key"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","key_prefix","raw_key","created_at"],"title":"CreateAPIKeyResponse"},"CreateScheduleRequest":{"properties":{"cron_expression":{"type":"string","title":"Cron Expression"},"prefix_filter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prefix Filter"}},"type":"object","required":["cron_expression"],"title":"CreateScheduleRequest"},"CrossValidateRequest":{"properties":{"execution_id":{"type":"integer","title":"Execution Id","description":"Karşılaştırılacak pipeline_execution.id"}},"type":"object","required":["execution_id"],"title":"CrossValidateRequest"},"DatasetBuildRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description"},"slug":{"anyOf":[{"type":"string","maxLength":220},{"type":"null"}],"title":"Slug"},"force_rebuild":{"type":"boolean","title":"Force Rebuild","default":false},"replace_existing":{"type":"boolean","title":"Replace Existing","default":false}},"type":"object","title":"DatasetBuildRequest"},"EmbeddingConfigRequest":{"properties":{"provider":{"type":"string","title":"Provider","description":"openai | custom"},"model_name":{"type":"string","maxLength":200,"minLength":1,"title":"Model Name"},"api_key":{"type":"string","minLength":1,"title":"Api Key"},"endpoint":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Endpoint"}},"type":"object","required":["provider","model_name","api_key"],"title":"EmbeddingConfigRequest"},"FeedbackRequest":{"properties":{"rating":{"type":"string","title":"Rating"},"issue":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issue"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["rating"],"title":"FeedbackRequest"},"FineTuneStartRequest":{"properties":{"dataset_id":{"type":"integer","title":"Dataset Id"},"base_model":{"type":"string","title":"Base Model","description":"gpt-3.5-turbo | gpt-4o-mini | gpt-4o-2024-08-06","default":"gpt-3.5-turbo"}},"type":"object","required":["dataset_id"],"title":"FineTuneStartRequest"},"ForgotPasswordRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ForgotPasswordRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InviteMemberRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"role":{"type":"string","enum":["owner","admin","member","viewer"],"title":"Role","default":"member"}},"type":"object","required":["email"],"title":"InviteMemberRequest"},"InviteResponse":{"properties":{"id":{"type":"integer","title":"Id"},"invited_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invited Email"},"role":{"type":"string","title":"Role"},"invited_at":{"type":"string","format":"date-time","title":"Invited At"}},"type":"object","required":["id","invited_email","role","invited_at"],"title":"InviteResponse"},"LLMConfigRequest":{"properties":{"provider":{"type":"string","title":"Provider","description":"openai | anthropic | azure_openai | custom"},"model_name":{"type":"string","maxLength":200,"minLength":1,"title":"Model Name"},"api_key":{"type":"string","minLength":1,"title":"Api Key"},"endpoint":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Endpoint"}},"type":"object","required":["provider","model_name","api_key"],"title":"LLMConfigRequest"},"LoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"LoginRequest"},"LogoutRequest":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"LogoutRequest"},"PiiPrecisionRequest":{"properties":{"execution_id":{"type":"integer","title":"Execution Id","description":"Analiz edilecek pipeline_execution.id"}},"type":"object","required":["execution_id"],"title":"PiiPrecisionRequest"},"RefreshRequest":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"RefreshRequest"},"ReprocessRequest":{"properties":{"pipeline_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pipeline Config"}},"type":"object","title":"ReprocessRequest"},"ResendVerificationRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ResendVerificationRequest"},"ResetPasswordRequest":{"properties":{"token":{"type":"string","title":"Token"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["token","new_password"],"title":"ResetPasswordRequest"},"S3ExportRequest":{"properties":{"format":{"type":"string","title":"Format"},"connector_id":{"type":"integer","title":"Connector Id"},"prefix":{"type":"string","title":"Prefix","default":"exports/"}},"type":"object","required":["format","connector_id"],"title":"S3ExportRequest"},"SearchFilters":{"properties":{"document_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Type"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"pii_masked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Pii Masked"},"quality_grade":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quality Grade"}},"type":"object","title":"SearchFilters"},"SearchRequest":{"properties":{"query":{"type":"string","maxLength":1000,"minLength":1,"title":"Query"},"top_k":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Top K","default":10},"mode":{"type":"string","enum":["semantic","structured","auto","hybrid"],"title":"Mode","default":"auto"},"alpha":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Alpha"},"filters":{"anyOf":[{"$ref":"#/components/schemas/SearchFilters"},{"type":"null"}]}},"type":"object","required":["query"],"title":"SearchRequest"},"SignupRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"SignupRequest"},"TeamMemberResponse":{"properties":{"id":{"type":"integer","title":"Id"},"user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Id"},"role":{"type":"string","title":"Role"},"invited_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invited Email"},"invited_at":{"type":"string","format":"date-time","title":"Invited At"},"accepted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Accepted At"}},"type":"object","required":["id","user_id","role","invited_email","invited_at","accepted_at"],"title":"TeamMemberResponse"},"UpdateRoleRequest":{"properties":{"role":{"type":"string","enum":["owner","admin","member","viewer"],"title":"Role"}},"type":"object","required":["role"],"title":"UpdateRoleRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifyEmailRequest":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"VerifyEmailRequest"},"WebhookCreateRequest":{"properties":{"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url"},"events":{"items":{"type":"string"},"type":"array","title":"Events"},"auto_export":{"anyOf":[{"$ref":"#/components/schemas/AutoExportConfig"},{"type":"null"}]}},"type":"object","required":["url","events"],"title":"WebhookCreateRequest"}},"securitySchemes":{"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-KEY"}}}}