{"openapi":"3.1.0","info":{"title":"Creación de certificados de ARCA","description":"API para generar certificados de seguridad de ARCA","version":"0.1.0"},"paths":{"/api/v1/users/":{"post":{"tags":["Usuarios"],"summary":"Crear usuario","description":"Registra un usuario y envía la API key al correo electrónico informado.","operationId":"create_user_api_v1_users__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserBase"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/recover_api_key/":{"post":{"tags":["Usuarios"],"summary":"Recuperar API key","description":"Genera una nueva API key para el usuario y la envía por correo electrónico.","operationId":"recover_api_key_api_v1_users_recover_api_key__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserBase"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/keys/":{"post":{"tags":["Criptografía"],"summary":"Generar llave privada","description":"Genera una nueva llave privada RSA de 2048 bits.\n\nLa llave privada se devuelve como `string` en formato PEM codificado en Base64.","operationId":"create_private_key_api_v1_keys__post","parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","description":"Email del usuario registrado.","examples":["usuario@empresa.com"],"title":"Email"},"description":"Email del usuario registrado."},{"name":"api_key","in":"query","required":true,"schema":{"type":"string","description":"API key asociada al usuario.","examples":["m1_api_key_segura"],"title":"Api Key"},"description":"API key asociada al usuario."},{"name":"cuit_representante","in":"query","required":true,"schema":{"type":"integer","description":"CUIT del representante para registrar la operación.","examples":[20304050607],"title":"Cuit Representante"},"description":"CUIT del representante para registrar la operación."}],"responses":{"200":{"description":"Llave privada PEM codificada en Base64.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/csr/":{"post":{"tags":["Criptografía"],"summary":"Generar CSR","description":"Genera un CSR (Certificate Signing Request) a partir de una llave privada.\n\nLa llave privada debe enviarse como `string` PEM codificado en Base64.\nEl CSR se devuelve como `string` PEM codificado en Base64.","operationId":"create_csr_api_v1_csr__post","parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","description":"Email del usuario registrado.","examples":["usuario@empresa.com"],"title":"Email"},"description":"Email del usuario registrado."},{"name":"api_key","in":"query","required":true,"schema":{"type":"string","description":"API key asociada al usuario.","examples":["m1_api_key_segura"],"title":"Api Key"},"description":"API key asociada al usuario."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestCSR"}}}},"responses":{"200":{"description":"CSR PEM codificado en Base64.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CSRResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/token_sign/":{"post":{"tags":["WSAA"],"summary":"Obtener token y sign de WSAA","description":"Invoca WSAA para obtener un `LoginTicketResponse`.\n\n`certificado` y `llave_privada` deben enviarse como `string` en formato PEM codificado en Base64.\nEl campo `result` devuelve el XML de respuesta codificado en Base64.","operationId":"obtener_token_sign_api_v1_token_sign__post","parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","description":"Email del usuario registrado.","examples":["usuario@empresa.com"],"title":"Email"},"description":"Email del usuario registrado."},{"name":"api_key","in":"query","required":true,"schema":{"type":"string","description":"API key asociada al usuario.","examples":["m1_api_key_segura"],"title":"Api Key"},"description":"API key asociada al usuario."},{"name":"cuit_representante","in":"query","required":true,"schema":{"type":"integer","description":"CUIT del representante que firma la solicitud.","examples":[20304050607],"title":"Cuit Representante"},"description":"CUIT del representante que firma la solicitud."},{"name":"certificado","in":"query","required":true,"schema":{"type":"string","description":"Certificado X.509 en formato PEM codificado en Base64. Debe enviarse como string Base64, no como archivo.","examples":["LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCgouLi4KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo="],"title":"Certificado"},"description":"Certificado X.509 en formato PEM codificado en Base64. Debe enviarse como string Base64, no como archivo."},{"name":"llave_privada","in":"query","required":true,"schema":{"type":"string","description":"Llave privada en formato PEM codificada en Base64. Debe corresponder al certificado enviado.","examples":["LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCgouLi4KLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQo="],"title":"Llave Privada"},"description":"Llave privada en formato PEM codificada en Base64. Debe corresponder al certificado enviado."},{"name":"servicio_id","in":"query","required":true,"schema":{"type":"string","description":"Identificador del servicio AFIP/ARCA para el que se solicita el TA.","examples":["wsfe"],"title":"Servicio Id"},"description":"Identificador del servicio AFIP/ARCA para el que se solicita el TA."},{"name":"testing","in":"query","required":true,"schema":{"type":"boolean","description":"Si es `true`, usa el entorno de homologación de WSAA.","examples":[true],"title":"Testing"},"description":"Si es `true`, usa el entorno de homologación de WSAA."},{"name":"cn","in":"query","required":true,"schema":{"type":"string","description":"Common Name (CN) asociado al certificado.","examples":["mrbot"],"title":"Cn"},"description":"Common Name (CN) asociado al certificado."}],"responses":{"200":{"description":"Respuesta del WSAA en Base64 y su representación parseada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenSignResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"CSRResponse":{"properties":{"csr":{"type":"string","title":"Csr","description":"CSR generado en formato PEM codificado en Base64.","examples":["LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KLi4uCi0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo="]}},"type":"object","required":["csr"],"title":"CSRResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"PrivateKeyResponse":{"properties":{"private_key":{"type":"string","title":"Private Key","description":"Llave privada generada en formato PEM codificada en Base64.","examples":["LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCgouLi4KLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQo="]}},"type":"object","required":["private_key"],"title":"PrivateKeyResponse"},"RequestCSR":{"properties":{"private_key":{"type":"string","title":"Private Key","description":"Clave privada en formato PEM codificada en Base64. Debe enviarse como string Base64, no como archivo.","examples":["LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCgouLi4KLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQo="]},"cuit_representado":{"type":"integer","title":"Cuit Representado","description":"CUIT del representado para incluir en el CSR.","examples":[30987654320]},"cn":{"type":"string","title":"Cn","description":"Common Name (CN) que se utilizará en el CSR.","examples":["mrbot"]}},"type":"object","required":["private_key","cuit_representado","cn"],"title":"RequestCSR","example":{"cn":"mrbot","cuit_representado":30987654320,"private_key":"LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCgouLi4KLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQo="}},"TokenSignResponse":{"properties":{"result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result","description":"LoginTicketResponse devuelto por WSAA, serializado como XML y codificado en Base64.","examples":["PExvZ2luVGlja2V0UmVzcG9uc2U+Li4uPC9Mb2dpblRpY2tldFJlc3BvbnNlPg=="]},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Mensaje de error si la invocación al WSAA falla.","examples":[null]},"response_dict":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Response Dict","description":"Respuesta del WSAA parseada a JSON para facilitar su inspección.","examples":[{"loginTicketResponse":{"header":{"source":"cn=wsaa"}}}]}},"type":"object","title":"TokenSignResponse"},"UserBase":{"properties":{"mail":{"type":"string","format":"email","title":"Mail"}},"type":"object","required":["mail"],"title":"UserBase"},"UserResponse":{"properties":{"message":{"type":"string","title":"Message"},"data":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Data"}},"type":"object","required":["message"],"title":"UserResponse"},"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"}}},"tags":[{"name":"Usuarios","description":"Alta de usuarios y recuperación de credenciales de acceso."},{"name":"Criptografía","description":"Generación de llaves privadas y CSR. Los materiales criptográficos viajan como strings Base64."},{"name":"WSAA","description":"Obtención del LoginTicketResponse firmado para consumir servicios de ARCA/AFIP."}]}