# Crear un empleado

`POST https://api.fiscalisto.com/v1/employees`

Un empleado del emisor para sus recibos de nómina: RFC, CURP, NSS, salario diario, salario diario integrado y periodicidad. Lo que no mande tiene el valor usual (contrato indefinido, jornada diurna, quincenal, riesgo clase I). warnings dice lo que el SAT podría rechazar.

## Parámetros

| Nombre | Dónde | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `Idempotency-Key` | encabezado |  | Opcional (los SDK la mandan solos). Si la respuesta se pierde, repita la solicitud con el mismo valor durante 24 horas: contesta lo mismo, con idempotent-replayed: true, y no lo hace dos veces (ni crea, ni manda correos, ni cobra). |

## Cuerpo

| Campo | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `issuer` | string (iss_…) |  | Emisor (iss_…). Si la llave tiene un solo emisor o la cuenta tiene uno solo, puede omitirse. |
| `number` | string | sí | Número de empleado (NumEmpleado). (hasta 15 caracteres) |
| `name` | string | sí | Nombre completo del empleado, como en su constancia de situación fiscal. (hasta 300 caracteres) |
| `tax_id` | string | sí | RFC (Rfc), 12 caracteres una persona moral y 13 una física. |
| `curp` | string | sí | CURP, 18 caracteres. |
| `social_security_number` | string | sí | Número de seguridad social (NumSeguridadSocial), 11 dígitos. |
| `zip` | string | sí | Código postal del domicilio fiscal, 5 dígitos, como en la constancia de situación fiscal. El de un emisor es el lugar de expedición (LugarExpedicion) de sus comprobantes. |
| `email` | string o null |  | Correo del empleado, a donde van sus recibos con send_email. |
| `start_date` | string | sí | Fecha de inicio de la relación laboral (FechaInicioRelLaboral), AAAA-MM-DD. |
| `end_date` | string o null |  | Último día trabajado si ya no trabaja ahí, AAAA-MM-DD. |
| `daily_salary` | number | sí | Salario diario. |
| `integrated_daily_salary` | number | sí | Salario diario integrado (SalarioDiarioIntegrado): no menor al salario diario. |
| `contract_type` | `01`, `02`, `03`, `04`, `05`, `06`, `07`, `08` |  | Tipo de contrato (TipoContrato), c_TipoContrato. Por omisión 01, por tiempo indeterminado. |
| `workday_type` | string |  | Tipo de jornada (TipoJornada), c_TipoJornada. Por omisión 01, diurna. |
| `periodicity` | string |  | Periodicidad del pago (PeriodicidadPago): 02 semanal, 03 catorcenal, 04 quincenal (por omisión), 05 mensual. |
| `risk_class` | string |  | Clase de riesgo del puesto ante el IMSS (RiesgoPuesto), 1 a 5. Por omisión 1. |
| `state` | string | sí | Entidad federativa donde trabaja (ClaveEntFed): JAL, CMX, NLE… |
| `border_zone` | boolean |  | true si trabaja en la zona libre de la frontera norte (salario mínimo de frontera). |
| `unionized` | boolean |  | true si es sindicalizado (Sindicalizado). |
| `department` | string o null |  | Departamento (Departamento). |
| `position` | string o null |  | Puesto (Puesto). |

Ejemplo:

```json
{
  "number": "9",
  "name": "ANA GÓMEZ RUIZ",
  "tax_id": "GORA800101JK2",
  "curp": "GORA800101MDFMZN09",
  "social_security_number": "12345678903",
  "zip": "06000",
  "start_date": "2024-03-04",
  "daily_salary": 320,
  "integrated_daily_salary": 334.66,
  "periodicity": "02",
  "state": "CMX"
}
```

## Con el SDK de TypeScript

```ts
import { Fiscalisto } from "fiscalisto";

// La llave viene de FISCALISTO_API_KEY.
const fiscalisto = new Fiscalisto();

const employee = await fiscalisto.employees.create({
  number: "9",
  name: "ANA GÓMEZ RUIZ",
  tax_id: "GORA800101JK2",
  curp: "GORA800101MDFMZN09",
  social_security_number: "12345678903",
  zip: "06000",
  start_date: "2024-03-04",
  daily_salary: 320,
  integrated_daily_salary: 334.66,
  periodicity: "02",
  state: "CMX",
}, { idempotencyKey: "pedido-A-1042" });
```

## Con el SDK de Python

```python
from fiscalisto import Fiscalisto

# La llave viene de FISCALISTO_API_KEY.
fiscalisto = Fiscalisto()

employee = fiscalisto.employees.create({
    "number": "9",
    "name": "ANA GÓMEZ RUIZ",
    "tax_id": "GORA800101JK2",
    "curp": "GORA800101MDFMZN09",
    "social_security_number": "12345678903",
    "zip": "06000",
    "start_date": "2024-03-04",
    "daily_salary": 320,
    "integrated_daily_salary": 334.66,
    "periodicity": "02",
    "state": "CMX",
}, idempotency_key="pedido-A-1042")
```

## Con el SDK de PHP

```php
<?php

use Fiscalisto\Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
$fiscalisto = new Fiscalisto();

$employee = $fiscalisto->employees->create([
    'number' => '9',
    'name' => 'ANA GÓMEZ RUIZ',
    'tax_id' => 'GORA800101JK2',
    'curp' => 'GORA800101MDFMZN09',
    'social_security_number' => '12345678903',
    'zip' => '06000',
    'start_date' => '2024-03-04',
    'daily_salary' => 320,
    'integrated_daily_salary' => 334.66,
    'periodicity' => '02',
    'state' => 'CMX',
], ['idempotency_key' => 'pedido-A-1042']);
```

## Con el SDK de .NET

```csharp
using Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var employee = await fiscalisto.Employees.CreateAsync(new CreateEmployeeParams
{
    Number = "9",
    Name = "ANA GÓMEZ RUIZ",
    TaxId = "GORA800101JK2",
    Curp = "GORA800101MDFMZN09",
    SocialSecurityNumber = "12345678903",
    Zip = "06000",
    StartDate = "2024-03-04",
    DailySalary = 320,
    IntegratedDailySalary = 334.66m,
    Periodicity = "02",
    State = "CMX",
}, new RequestOptions { IdempotencyKey = "pedido-A-1042" });
```

## Con el SDK de Go

```go
package main

import (
	"context"
	"fmt"
	"log"

	fiscalisto "fiscalisto.com/go"
)

func main() {
	// La llave viene de FISCALISTO_API_KEY.
	client, err := fiscalisto.NewClient("")
	if err != nil {
		log.Fatal(err)
	}
	ctx := context.Background()

	employee, err := client.Employees.Create(ctx, &fiscalisto.CreateEmployeeParams{
		Number:                "9",
		Name:                  "ANA GÓMEZ RUIZ",
		TaxID:                 "GORA800101JK2",
		CURP:                  "GORA800101MDFMZN09",
		SocialSecurityNumber:  "12345678903",
		Zip:                   "06000",
		StartDate:             "2024-03-04",
		DailySalary:           320,
		IntegratedDailySalary: 334.66,
		Periodicity:           fiscalisto.String("02"),
		State:                 "CMX",
	}, fiscalisto.WithIdempotencyKey("pedido-A-1042"))
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(employee.ID)
}
```

## Con el SDK de Java

```java
import com.fiscalisto.FiscalistoClient;
import com.fiscalisto.RequestOptions;
import com.fiscalisto.model.CreateEmployeeParams;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var employee = fiscalisto.employees().create(new CreateEmployeeParams()
        .setNumber("9")
        .setName("ANA GÓMEZ RUIZ")
        .setTaxId("GORA800101JK2")
        .setCurp("GORA800101MDFMZN09")
        .setSocialSecurityNumber("12345678903")
        .setZip("06000")
        .setStartDate("2024-03-04")
        .setDailySalary(320)
        .setIntegratedDailySalary(334.66)
        .setPeriodicity("02")
        .setState("CMX"), RequestOptions.idempotencyKey("pedido-A-1042"));
System.out.println(employee.getId());
```

## Respuesta 201

Correcto.

Un objeto `Employee`:

| Campo | Tipo | Siempre viene | Descripción |
| --- | --- | --- | --- |
| `id` | string | sí | Identificador del objeto, con su prefijo (iss_, inv_, ret_, cus_, prd_, emp_, bat_, brn_, whs_, stm_, adj_, evt_, whe_). |
| `livemode` | boolean | sí | true en producción (llaves fk_live_), false en pruebas (fk_test_). Lo de pruebas no vale ante el SAT. |
| `object` | `"employee"` | sí | Qué tipo de objeto es («invoice», «customer»…). |
| `issuer` | string | sí | El emisor (iss_…). |
| `number` | string | sí | Número de empleado (NumEmpleado). |
| `name` | string | sí | Nombre completo del empleado. |
| `tax_id` | string | sí | RFC (Rfc), 12 caracteres una persona moral y 13 una física. |
| `curp` | string | sí | CURP, 18 caracteres. |
| `social_security_number` | string | sí | Número de seguridad social (NumSeguridadSocial), 11 dígitos. |
| `zip` | string | sí | Código postal del domicilio fiscal, 5 dígitos, como en la constancia de situación fiscal. El de un emisor es el lugar de expedición (LugarExpedicion) de sus comprobantes. |
| `email` | string o null | sí | Correo del empleado, a donde van sus recibos. |
| `start_date` | string | sí | Fecha de inicio de la relación laboral (FechaInicioRelLaboral), AAAA-MM-DD. |
| `end_date` | string o null | sí | Último día trabajado si ya no trabaja ahí, AAAA-MM-DD. |
| `daily_salary` | number | sí | Salario diario. |
| `integrated_daily_salary` | number | sí | Salario diario integrado (SalarioDiarioIntegrado): no menor al salario diario. |
| `contract_type` | string | sí | Tipo de contrato (TipoContrato), c_TipoContrato. Por omisión 01, por tiempo indeterminado. |
| `workday_type` | string | sí | Tipo de jornada (TipoJornada), c_TipoJornada. Por omisión 01, diurna. |
| `regime_type` | string | sí | Tipo de régimen (TipoRegimen): 02 sueldos y salarios. |
| `periodicity` | string | sí | Periodicidad del pago (PeriodicidadPago): 02 semanal, 03 catorcenal, 04 quincenal (por omisión), 05 mensual. |
| `risk_class` | string | sí | Clase de riesgo del puesto ante el IMSS (RiesgoPuesto), 1 a 5. Por omisión 1. |
| `state` | string | sí | Entidad federativa donde trabaja (ClaveEntFed): JAL, CMX, NLE… |
| `border_zone` | boolean | sí | true si trabaja en la zona libre de la frontera norte (salario mínimo de frontera). |
| `unionized` | boolean | sí | true si es sindicalizado (Sindicalizado). |
| `department` | string o null | sí | Departamento (Departamento). |
| `position` | string o null | sí | Puesto (Puesto). |
| `warnings` | arreglo de string | sí | Lo que el SAT podría observar de sus datos, antes de timbrar. |
| `created_at` | string (date-time) | sí | Cuándo se creó, ISO 8601 con la hora de la Ciudad de México (-06:00). |

```json
{
  "id": "emp_OufpKqnrvx9p3RxmD1RIDgEHzKYPYnYBlV",
  "object": "employee",
  "livemode": false,
  "issuer": "iss_OufpKqnrvx9p",
  "number": "9",
  "name": "ANA GÓMEZ RUIZ",
  "tax_id": "GORA800101JK2",
  "curp": "GORA800101MDFMZN09",
  "social_security_number": "12345678903",
  "zip": "06000",
  "email": null,
  "start_date": "2024-03-04",
  "end_date": null,
  "daily_salary": 320,
  "integrated_daily_salary": 334.66,
  "contract_type": "01",
  "workday_type": "01",
  "regime_type": "02",
  "periodicity": "02",
  "risk_class": "1",
  "state": "CMX",
  "border_zone": false,
  "unionized": false,
  "department": null,
  "position": null,
  "warnings": [],
  "created_at": "2026-10-20T09:02:11-06:00"
}
```

## Errores

Puede responder 400, 401, 403, 404, 429, 500 con el cuerpo de error de siempre; cada código está en https://fiscalisto.com/docs/api/errores.md.
