# Crear un reloj de prueba

`POST https://api.fiscalisto.com/v1/issuers/{id}/test_clock`

Le da a un emisor de pruebas su propia hora, congelada en frozen_time (ahora, si no la manda): sus facturas recurrentes, cotizaciones, cuentas por cobrar y tickets cuentan los días con ella, y nada de eso corre solo hasta que usted lo adelanta. Para ver en segundos lo que pasa en meses. Solo emisores de prueba; uno por emisor.

## Parámetros

| Nombre | Dónde | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `id` | ruta | sí | El id del objeto. |
| `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 |
| --- | --- | --- | --- |
| `frozen_time` | string |  | Dónde empieza el reloj; si no la manda, ahora. |

Ejemplo:

```json
{
  "frozen_time": "2026-10-25T09:00:00-06:00"
}
```

## Con el SDK de TypeScript

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

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

const testClock = await fiscalisto.testClocks.create("clk_0q1Vmmw52sbD", { frozen_time: "2026-10-25T09:00:00-06:00" }, { idempotencyKey: "pedido-A-1042" });
```

## Con el SDK de Python

```python
from fiscalisto import Fiscalisto

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

test_clock = fiscalisto.test_clocks.create("clk_0q1Vmmw52sbD", {"frozen_time": "2026-10-25T09:00:00-06:00"}, 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();

$testClock = $fiscalisto->testClocks->create('clk_0q1Vmmw52sbD', ['frozen_time' => '2026-10-25T09:00:00-06:00'], ['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 testClock = await fiscalisto.TestClocks.CreateAsync("clk_0q1Vmmw52sbD", new CreateTestClockParams
{
    FrozenTime = "2026-10-25T09:00:00-06:00",
}, 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()

	testClock, err := client.TestClocks.Create(ctx, "clk_0q1Vmmw52sbD", &fiscalisto.CreateTestClockParams{
		FrozenTime: fiscalisto.String("2026-10-25T09:00:00-06:00"),
	}, fiscalisto.WithIdempotencyKey("pedido-A-1042"))
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(testClock.ID)
}
```

## Con el SDK de Java

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

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

var testClock = fiscalisto.testClocks().create("clk_0q1Vmmw52sbD", new CreateTestClockParams().setFrozenTime("2026-10-25T09:00:00-06:00"), RequestOptions.idempotencyKey("pedido-A-1042"));
System.out.println(testClock.getId());
```

## Respuesta 201

Correcto.

Un objeto `TestClock`:

| Campo | Tipo | Siempre viene | Descripción |
| --- | --- | --- | --- |
| `id` | string | sí | clk_ y la clave del emisor. |
| `object` | `"test_clock"` | sí | Qué tipo de objeto es («invoice», «customer»…). |
| `livemode` | `false` | sí | true en producción (llaves fk_live_), false en pruebas (fk_test_). Lo de pruebas no vale ante el SAT. |
| `issuer` | string | sí | El emisor de pruebas que vive en esta hora. |
| `frozen_time` | string (date-time) | sí | La hora del reloj: el «hoy» del emisor para sus facturas recurrentes, cotizaciones, cuentas por cobrar y tickets. |
| `status` | `ready`, `advancing` | sí | advancing mientras una solicitud lo adelanta; ready en cualquier otro momento. |
| `created_at` | string (date-time) o null | sí | Cuándo se creó, ISO 8601 con la hora de la Ciudad de México (-06:00). |
| `advanced` | objeto |  | Al adelantarlo: lo que se hizo en el camino. |
| `advanced.recurring_invoices` | integer | sí | Facturas recurrentes timbradas en el camino. (de -9007199254740991 a 9007199254740991) |
| `advanced.quotes_expired` | integer | sí | Cotizaciones que vencieron en el camino. (de -9007199254740991 a 9007199254740991) |
| `advanced.global_invoices` | integer | sí | Facturas globales de tickets timbradas en el camino. (de -9007199254740991 a 9007199254740991) |
| `stopped_early` | boolean |  | true si se detuvo antes de requested_time porque ya timbró 25 comprobantes en esta solicitud: adelántelo otra vez para seguir. |
| `requested_time` | string (date-time) |  | A dónde se pidió adelantarlo (con stopped_early). |
| `deleted` | boolean |  | Siempre true. |

```json
{
  "id": "clk_0q1Vmmw52sbD",
  "object": "test_clock",
  "livemode": false,
  "issuer": "iss_0q1Vmmw52sbD",
  "frozen_time": "2026-12-01T09:00:00-06:00",
  "status": "ready",
  "created_at": "2026-10-25T09:40:00-06:00",
  "advanced": {
    "recurring_invoices": 2,
    "quotes_expired": 1,
    "global_invoices": 1
  }
}
```

## 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.
