# Cambiar la contraseña de la empresa

`PUT /v1/companies/{companyRut}/password`

**Cambia la contraseña de la cuenta.**

**Acceso:** restringida. Requiere sesión, y sólo opera sobre el RUT de tu propia empresa: pedir otro RUT responde `403 FORBIDDEN`.

## OpenAPI

```json
{
  "openapi": "3.0.3",
  "info": {
    "title": "pymo Gateway API",
    "version": "1.0.0",
    "description": "API del gateway de facturación electrónica (CFE) de pymo. Los métodos y las rutas salen del código del servicio, así que la referencia refleja lo que la API hace hoy."
  },
  "servers": [
    {
      "url": "https://gatewaytest.pymo.uy",
      "description": "Homologación: emite contra la ePrueba de DGI. Es donde se integra."
    },
    {
      "url": "https://gateway.pymo.uy",
      "description": "Producción: los comprobantes son fiscales y no se pueden borrar."
    }
  ],
  "security": [
    {
      "sessionCookie": []
    }
  ],
  "paths": {
    "/v1/companies/{companyRut}/password": {
      "put": {
        "operationId": "put_v1_companies_companyRut_password",
        "summary": "Cambiar la contraseña de la empresa",
        "description": "**Cambia la contraseña de la cuenta.**\n\n**Acceso:** restringida. Requiere sesión, y sólo opera sobre el RUT de tu propia empresa: pedir otro RUT responde `403 FORBIDDEN`.",
        "tags": [
          "1 Autenticación"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/CompanyRut"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "password1": {
                    "type": "string",
                    "description": "New password"
                  },
                  "password2": {
                    "type": "string",
                    "description": "New password confirmation"
                  },
                  "email": {
                    "type": "string",
                    "description": "When sent, it is assigned as the session email of every branchOffice and the password is set for that single session."
                  }
                },
                "required": [
                  "password1",
                  "password2"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Éxito",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Respuesta"
                },
                "examples": {
                  "Exito": {
                    "value": {
                      "payload": {
                        "email": "cfes-219999990008@pymo.uy",
                        "branchOffices": [
                          "1"
                        ],
                        "previousEmails": [
                          "admin@mefactura.uy"
                        ],
                        "staleSessions": []
                      },
                      "message": {
                        "code": "PASSWORD_UPDATED",
                        "value": "Contraseña actualizada correctamente"
                      },
                      "status": "SUCCESS"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Error al listar",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RespuestaError"
                },
                "examples": {
                  "Error_al_listar": {
                    "value": {
                      "payload": {},
                      "message": {
                        "code": "UNAUTHORIZED",
                        "value": "Debe iniciar sesión."
                      },
                      "status": "FAIL"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "La sesión existe pero no alcanza este recurso (`FORBIDDEN`)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RespuestaError"
                },
                "examples": {
                  "Prohibido": {
                    "value": {
                      "payload": {},
                      "message": {
                        "code": "FORBIDDEN",
                        "value": "No tiene permisos para realizar esta acción."
                      },
                      "status": "FAIL"
                    }
                  }
                }
              }
            }
          }
        },
        "x-acceso": "restringida-por-rut"
      }
    }
  },
  "components": {
    "schemas": {
      "Respuesta": {
        "type": "object",
        "required": [
          "payload",
          "status"
        ],
        "description": "Envoltorio común a todas las respuestas. **`status` no se deduce del código HTTP**: hay al menos nueve lugares en el gateway que responden `HTTP 200` con `status: \"FAIL\"` (por ejemplo `CFE_NOT_FOUND` y `DGI_COMPANY_NOT_READY_YET`). Un cliente tiene que leer `status`, no el código.",
        "properties": {
          "payload": {
            "description": "Los datos de la respuesta. `{}` cuando el endpoint no devuelve nada.",
            "oneOf": [
              {
                "type": "object"
              },
              {
                "type": "array",
                "items": {}
              }
            ]
          },
          "message": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Mensaje"
              }
            ],
            "description": "Presente cuando la operación tiene algo que decir. Las lecturas simples responden sólo `payload` y `status`."
          },
          "status": {
            "$ref": "#/components/schemas/Estado"
          }
        }
      },
      "RespuestaError": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Respuesta"
          }
        ],
        "description": "El mismo envoltorio, con `status: \"FAIL\"` y `payload` normalmente vacío."
      },
      "Mensaje": {
        "type": "object",
        "required": [
          "code",
          "value"
        ],
        "description": "Código estable y su texto en español. **El código es el contrato, el texto no**: `value` sale de una tabla de traducciones y puede reescribirse sin aviso, así que un cliente ramifica por `code`.",
        "properties": {
          "code": {
            "type": "string",
            "example": "DGI_CFES_RECEIVE_SUCCESS"
          },
          "value": {
            "type": "string",
            "example": "Cfes recibidos correctamente."
          }
        }
      },
      "Estado": {
        "type": "string",
        "enum": [
          "SUCCESS",
          "FAIL"
        ],
        "description": "De las 82 claves de mensaje del gateway, 29 son `SUCCESS` y 53 `FAIL`. Es lo que hay que mirar para saber si la llamada funcionó."
      }
    },
    "securitySchemes": {
      "sessionCookie": {
        "type": "apiKey",
        "in": "cookie",
        "name": "connect.sid",
        "description": "Sesión por cookie de `POST /v1/login`, válida 1 hora. Ver [Autenticación](/autenticacion)."
      }
    },
    "parameters": {
      "CompanyRut": {
        "name": "companyRut",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string",
          "example": "219999990008",
          "default": "219999990008"
        },
        "example": "219999990008"
      }
    }
  }
}
```
