{"openapi":"3.1.0","info":{"title":"Odus Partner API","summary":"API para intake y seguimiento de producción dental para partners de OdusLab.","description":"Odus Partner API valida solicitudes de producción dental para partners, las persiste como sistema de registro y las sincroniza con los workflows internos de Odus.","version":"1.0.0","x-logo":{"url":"https://oduslab.com/favicon.ico","altText":"OdusLab","backgroundColor":"#111a2f"},"contact":{"name":"OdusLab","url":"https://oduslab.com"}},"paths":{"/v1/health":{"get":{"tags":["Salud"],"summary":"Revisar estado","operationId":"health_check_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/v1/production-requests":{"post":{"tags":["Solicitudes de producción"],"summary":"Crear una solicitud de producción","operationId":"create_production_request_v1_production_requests_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductionRequestCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestSummaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/production-requests/{request_id}":{"get":{"tags":["Solicitudes de producción"],"summary":"Consultar una solicitud de producción","operationId":"get_production_request_v1_production_requests__request_id__get","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestSummaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Solicitudes de producción"],"summary":"Actualizar una solicitud mutable","operationId":"patch_production_request_v1_production_requests__request_id__patch","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductionRequestPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestSummaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Solicitudes de producción"],"summary":"Cancelar una solicitud de producción","operationId":"delete_production_request_v1_production_requests__request_id__delete","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestSummaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/production-requests/{request_id}/events":{"get":{"tags":["Solicitudes de producción"],"summary":"Listar eventos de la solicitud","operationId":"list_request_events_v1_production_requests__request_id__events_get","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RequestEventResponse"},"title":"Response List Request Events V1 Production Requests  Request Id  Events Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AddressPayload":{"properties":{"name":{"type":"string","title":"Name"},"street":{"type":"string","title":"Street"},"exterior_number":{"type":"string","title":"Exterior Number"},"interior_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Interior Number"},"postal_code":{"type":"string","title":"Postal Code"},"neighborhood":{"type":"string","title":"Neighborhood"},"municipality":{"type":"string","title":"Municipality"},"state":{"type":"string","title":"State"},"country":{"type":"string","title":"Country","default":"Mexico"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["name","street","exterior_number","postal_code","neighborhood","municipality","state"],"title":"AddressPayload"},"DoctorPayload":{"properties":{"doctor_id":{"type":"string","title":"Doctor Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"}},"type":"object","required":["doctor_id"],"title":"DoctorPayload"},"FulfillmentPayload":{"properties":{"model_type":{"type":"string","title":"Model Type"},"scan_file_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan File Url"},"pickup_address":{"anyOf":[{"$ref":"#/components/schemas/AddressPayload"},{"type":"null"}]},"delivery_address":{"$ref":"#/components/schemas/AddressPayload"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["model_type","delivery_address"],"title":"FulfillmentPayload"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status"},"service":{"type":"string","title":"Service"}},"type":"object","required":["status","service"],"title":"HealthResponse"},"PartnerResponse":{"properties":{"partner_id":{"type":"string","title":"Partner Id"},"partner_name":{"type":"string","title":"Partner Name"}},"type":"object","required":["partner_id","partner_name"],"title":"PartnerResponse"},"PatientPayload":{"properties":{"name":{"type":"string","title":"Name"},"gender":{"type":"string","title":"Gender"},"age":{"type":"integer","maximum":120.0,"minimum":0.0,"title":"Age"}},"type":"object","required":["name","gender","age"],"title":"PatientPayload"},"ProductionRequestCreate":{"properties":{"partner_request_id":{"type":"string","title":"Partner Request Id"},"order_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Reference"},"customer_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Reference"},"requester":{"$ref":"#/components/schemas/RequesterPayload"},"doctor":{"$ref":"#/components/schemas/DoctorPayload"},"patient":{"$ref":"#/components/schemas/PatientPayload"},"fulfillment":{"$ref":"#/components/schemas/FulfillmentPayload"},"units":{"items":{"$ref":"#/components/schemas/UnitPayload"},"type":"array","title":"Units"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"callback_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callback Url"}},"type":"object","required":["partner_request_id","doctor","patient","fulfillment","units"],"title":"ProductionRequestCreate"},"ProductionRequestPatch":{"properties":{"partner_request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partner Request Id"},"order_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Reference"},"customer_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Reference"},"requester":{"anyOf":[{"$ref":"#/components/schemas/RequesterPayload"},{"type":"null"}]},"doctor":{"anyOf":[{"$ref":"#/components/schemas/DoctorPayload"},{"type":"null"}]},"patient":{"anyOf":[{"$ref":"#/components/schemas/PatientPayload"},{"type":"null"}]},"fulfillment":{"anyOf":[{"$ref":"#/components/schemas/FulfillmentPayload"},{"type":"null"}]},"units":{"anyOf":[{"items":{"$ref":"#/components/schemas/UnitPayload"},"type":"array"},{"type":"null"}],"title":"Units"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"callback_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callback Url"}},"type":"object","title":"ProductionRequestPatch"},"RequestEventResponse":{"properties":{"event_id":{"type":"integer","title":"Event Id"},"event_type":{"type":"string","title":"Event Type"},"status":{"type":"string","title":"Status"},"sync_status":{"type":"string","title":"Sync Status"},"created_at":{"type":"string","title":"Created At"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"}},"type":"object","required":["event_id","event_type","status","sync_status","created_at","payload"],"title":"RequestEventResponse"},"RequestSummaryResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"partner":{"$ref":"#/components/schemas/PartnerResponse"},"partner_request_id":{"type":"string","title":"Partner Request Id"},"order_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Reference"},"customer_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Reference"},"requester":{"$ref":"#/components/schemas/RequesterPayload"},"doctor":{"$ref":"#/components/schemas/DoctorPayload"},"patient":{"$ref":"#/components/schemas/PatientPayload"},"fulfillment":{"$ref":"#/components/schemas/FulfillmentPayload"},"units":{"items":{"$ref":"#/components/schemas/UnitResponse"},"type":"array","title":"Units"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"callback_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callback Url"},"status":{"type":"string","title":"Status"},"sync_status":{"type":"string","title":"Sync Status"},"external_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Reference"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"cancelled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancelled At"}},"type":"object","required":["request_id","partner","partner_request_id","requester","doctor","patient","fulfillment","units","metadata","status","sync_status","created_at","updated_at"],"title":"RequestSummaryResponse"},"RequesterPayload":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"}},"type":"object","title":"RequesterPayload"},"UnitPayload":{"properties":{"piece_type":{"type":"string","title":"Piece Type"},"piece_subtype":{"type":"string","title":"Piece Subtype"},"teeth":{"items":{"type":"string"},"type":"array","title":"Teeth"},"material":{"type":"string","title":"Material"},"shade":{"type":"string","title":"Shade"},"quantity":{"type":"integer","minimum":1.0,"title":"Quantity","default":1},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"}},"type":"object","required":["piece_type","piece_subtype","teeth","material","shade"],"title":"UnitPayload"},"UnitResponse":{"properties":{"piece_type":{"type":"string","title":"Piece Type"},"piece_subtype":{"type":"string","title":"Piece Subtype"},"teeth":{"items":{"type":"string"},"type":"array","title":"Teeth"},"material":{"type":"string","title":"Material"},"shade":{"type":"string","title":"Shade"},"quantity":{"type":"integer","minimum":1.0,"title":"Quantity","default":1},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"unit_id":{"type":"string","title":"Unit Id"},"unit_index":{"type":"integer","title":"Unit Index"}},"type":"object","required":["piece_type","piece_subtype","teeth","material","shade","unit_id","unit_index"],"title":"UnitResponse"},"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"}}}}