---
title: "Obtener ajustes de nómina"
description: "Devuelve los ajustes de nómina: la zona de salario mínimo que confirmó el empleador (ausente hasta entonces: sin ella solo se calculan los empleados con su propia zona) junto con la que sugiere el código postal de la organización según su municipio (ausente cuando el catálogo de códigos postales del SAT no la define), el RiesgoPuesto y la ClaveEntFed de los empleados que no tienen los suyos, y el calendario de pago (día en que inicia la semana y fecha de referencia catorcenal)."
language: es-MX
canonical_url: "https://exac.mx/docs/api/documents/payroll/get-payroll-settings"
md_url: "https://exac.mx/docs/api/documents/payroll/get-payroll-settings.md"
---

# Obtener ajustes de nómina

Devuelve los ajustes de nómina: la zona de salario mínimo que confirmó el empleador (ausente hasta entonces: sin ella solo se calculan los empleados con su propia zona) junto con la que sugiere el código postal de la organización según su municipio (ausente cuando el catálogo de códigos postales del SAT no la define), el RiesgoPuesto y la ClaveEntFed de los empleados que no tienen los suyos, y el calendario de pago (día en que inicia la semana y fecha de referencia catorcenal).

## Solicitud

`GET /v1/payroll/settings`

- **Autorización:** Permiso requerido: `employees:read`.

- **Entornos:** Producción y prueba

- **Idempotencia:** No requerida

## Contrato canónico para máquinas

Este fragmento se genera desde la operación canónica y los contratos Zod que utiliza la ruta.

```json
{
  "method": "GET",
  "path": "/v1/payroll/settings",
  "operation": {
    "operationId": "getPayrollSettings",
    "tags": [
      "Payroll"
    ],
    "summary": "Obtener ajustes de nómina",
    "description": "Devuelve los ajustes de nómina: la zona de salario mínimo que confirmó el empleador (ausente hasta entonces: sin ella solo se calculan los empleados con su propia zona) junto con la que sugiere el código postal de la organización según su municipio (ausente cuando el catálogo de códigos postales del SAT no la define), el RiesgoPuesto y la ClaveEntFed de los empleados que no tienen los suyos, y el calendario de pago (día en que inicia la semana y fecha de referencia catorcenal).",
    "security": [
      {
        "bearerAuth": []
      }
    ],
    "responses": {
      "200": {
        "description": "Operación completada.",
        "headers": {
          "Request-Id": {
            "$ref": "#/components/headers/RequestId"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "data": {
                  "$ref": "#/components/schemas/PayrollSettings"
                }
              },
              "required": [
                "data"
              ],
              "additionalProperties": false
            },
            "example": {
              "data": {
                "minimumWageZone": "general",
                "defaultRiskClass": "1",
                "defaultStateCode": "SIN",
                "weeklyStartsOn": 1,
                "suggestedMinimumWageZone": "general"
              }
            }
          }
        }
      },
      "400": {
        "description": "Solicitud inválida.\n\n`validation_error`",
        "headers": {
          "Request-Id": {
            "$ref": "#/components/headers/RequestId"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "401": {
        "description": "Credencial inválida o ausente.\n\n`unauthenticated`",
        "headers": {
          "Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "WWW-Authenticate": {
            "$ref": "#/components/headers/WWWAuthenticate"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "402": {
        "description": "Saldo prepagado insuficiente o requisito de facturación pendiente.\n\n`payment_required`",
        "headers": {
          "Request-Id": {
            "$ref": "#/components/headers/RequestId"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "403": {
        "description": "La credencial no incluye el permiso `employees:read`.\n\n`forbidden`",
        "headers": {
          "Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "WWW-Authenticate": {
            "$ref": "#/components/headers/WWWAuthenticate"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "404": {
        "description": "Recurso no encontrado.\n\n`not_found`",
        "headers": {
          "Request-Id": {
            "$ref": "#/components/headers/RequestId"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "405": {
        "description": "Método no permitido.\n\n`method_not_allowed`",
        "headers": {
          "Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "Allow": {
            "$ref": "#/components/headers/Allow"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "409": {
        "description": "Conflicto de estado, entorno o idempotencia. Usa error.code para decidir cómo recuperarte.\n\nCódigos posibles: `conflict`, `idempotency_conflict`, `operation_in_progress`, `recovery_required`, `migration_required`.",
        "headers": {
          "Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "Retry-After": {
            "$ref": "#/components/headers/RetryAfter"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "429": {
        "description": "Demasiadas solicitudes.\n\n`rate_limited`",
        "headers": {
          "Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "Retry-After": {
            "$ref": "#/components/headers/RetryAfter"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "500": {
        "description": "Error interno del servidor.\n\n`internal`",
        "headers": {
          "Request-Id": {
            "$ref": "#/components/headers/RequestId"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "503": {
        "description": "Servicio temporalmente no disponible.\n\n`provider_unavailable`",
        "headers": {
          "Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "Retry-After": {
            "$ref": "#/components/headers/RetryAfter"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      }
    },
    "x-exac-environments": [
      "production",
      "sandbox"
    ]
  },
  "components": {
    "schemas": {
      "ApiError": {
        "type": "object",
        "properties": {
          "error": {
            "$ref": "#/components/schemas/ProgrammaticError"
          }
        },
        "required": [
          "error"
        ],
        "additionalProperties": false
      },
      "ProgrammaticError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "enum": [
              "validation_error",
              "unauthenticated",
              "forbidden",
              "payment_required",
              "not_found",
              "method_not_allowed",
              "conflict",
              "idempotency_conflict",
              "operation_in_progress",
              "recovery_required",
              "migration_required",
              "rate_limited",
              "provider_unavailable",
              "internal"
            ],
            "description": "Acción recomendada por código:\n\n- `validation_error` — Corrige la solicitud usando error.message y, cuando existan, los paths y códigos de details.issues.\n- `unauthenticated` — Proporciona una API key o un token de acceso OAuth válido.\n- `forbidden` — Usa una credencial con el permiso requerido.\n- `payment_required` — Si details.reason = api_wallet_insufficient, agrega saldo prepagado de API/MCP mediante details.topUpUrl; balanceMinor indica el saldo en centavos. En otros casos revisa el requisito de facturación. Reintenta solo después de resolverlo.\n- `not_found` — Verifica el identificador del recurso dentro de la organización.\n- `method_not_allowed` — Usa el método HTTP documentado.\n- `conflict` — Actualiza el recurso y resuelve su estado actual.\n- `idempotency_conflict` — Usa otra clave de idempotencia para una solicitud modificada.\n- `operation_in_progress` — Espera el tiempo de Retry-After y repite la misma solicitud.\n- `recovery_required` — No reintentes automáticamente ni cambies la clave de idempotencia. Consulta details.document.documentRef cuando exista, verifica el resultado y contacta a soporte con Request-Id si continúa incierto.\n- `migration_required` — Contacta a soporte para completar la migración histórica; no vuelvas a emitir el documento.\n- `rate_limited` — Espera el tiempo de Retry-After antes de reintentar.\n- `provider_unavailable` — Reintenta solo cuando la respuesta marque la falla como reintentable.\n- `internal` — Una respuesta fallida no demuestra que una escritura no tuvo efectos. Reintenta una lectura después de una espera; una escritura solo con su clave de idempotencia original y la solicitud sin cambios. Contacta a soporte con Request-Id si persiste."
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "properties": {
              "document": {
                "type": "object",
                "properties": {
                  "documentRef": {
                    "$ref": "#/components/schemas/DocumentRef"
                  },
                  "editable": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "documentRef",
                  "editable"
                ],
                "additionalProperties": false
              },
              "issues": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "path": {
                      "type": "array",
                      "items": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "number"
                          }
                        ]
                      }
                    },
                    "message": {
                      "type": "string"
                    },
                    "code": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "path",
                    "message"
                  ],
                  "additionalProperties": false
                }
              },
              "retryable": {
                "type": "boolean"
              },
              "retryAfterSeconds": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "reason": {
                "type": "string"
              },
              "balanceMinor": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "topUpUrl": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "status": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "code",
          "message",
          "status"
        ],
        "additionalProperties": false
      },
      "DocumentRef": {
        "type": "string",
        "pattern": "^(invoice|withholding|sales_receipt|declaration|tax_compliance_opinion|sales_receipt_refund):.+$"
      },
      "PayrollSettings": {
        "type": "object",
        "properties": {
          "minimumWageZone": {
            "type": "string",
            "enum": [
              "general",
              "northBorder"
            ],
            "description": "Minimum wage zone the employer confirmed; unset, employees without their own zone are not calculated."
          },
          "defaultRiskClass": {
            "type": "string"
          },
          "defaultStateCode": {
            "type": "string"
          },
          "weeklyStartsOn": {
            "type": "integer",
            "minimum": 0,
            "maximum": 6,
            "description": "Weekday weekly periods start on, 0 = Sunday; Monday when unset."
          },
          "biweeklyAnchorStart": {
            "type": "string",
            "allOf": [
              {
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
              },
              {
                "pattern": "^(19|20)"
              }
            ],
            "description": "First day of any catorcenal period."
          },
          "suggestedMinimumWageZone": {
            "description": "Read-only. The zone the postal code suggests, when the SAT's catalog settles it; not a confirmation.",
            "type": "string",
            "enum": [
              "general",
              "northBorder"
            ]
          }
        },
        "additionalProperties": false
      }
    }
  }
}
```

[OpenAPI 3.1](/openapi.json)

## Herramientas MCP equivalentes

- [`get_payroll`](/docs/mcp/tools/get_payroll.md)

Documentación completa: https://exac.mx/docs.md
Índice para agentes: https://exac.mx/docs/llms.txt
