# Ver el año mes por mes

`GET https://api.fiscalisto.com/v1/sat_declarations/calendar`

Cada mes del ejercicio con sus obligaciones: presentada (con sus declaraciones), falta (venció y no la encontramos) o por presentar, con el día en que vence (el 17 del mes siguiente, o el día hábil siguiente, más los días por el sexto dígito del RFC). Se arma con lo que trajeron sus consultas; no usa timbres.

## Parámetros

| Nombre | Dónde | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `issuer` | consulta |  | El emisor (iss_…). Puede omitirse si la llave o la cuenta tienen uno solo. |
| `year` | consulta |  | El ejercicio, como 2026. Por omisión, el actual. |

## Con el SDK de TypeScript

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

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

const satDeclarationCalendar = await fiscalisto.satDeclarations.calendar();
```

## Con el SDK de Python

```python
from fiscalisto import Fiscalisto

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

sat_declaration_calendar = fiscalisto.sat_declarations.calendar()
```

## Con el SDK de PHP

```php
<?php

use Fiscalisto\Fiscalisto;

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

$satDeclarationCalendar = $fiscalisto->satDeclarations->calendar();
```

## Con el SDK de .NET

```csharp
using Fiscalisto;

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

var satDeclarationCalendar = await fiscalisto.SatDeclarations.CalendarAsync();
```

## 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()

	satDeclarationCalendar, err := client.SatDeclarations.Calendar(ctx, nil)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%+v\n", *satDeclarationCalendar)
}
```

## Con el SDK de Java

```java
import com.fiscalisto.FiscalistoClient;

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

var satDeclarationCalendar = fiscalisto.satDeclarations().calendar();
System.out.println(satDeclarationCalendar);
```

## Respuesta 200

Correcto.

Un objeto `SatDeclarationCalendar`:

| Campo | Tipo | Siempre viene | Descripción |
| --- | --- | --- | --- |
| `object` | `"sat_declaration_calendar"` | sí | Qué tipo de objeto es («invoice», «customer»…). |
| `livemode` | boolean | 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. |
| `year` | integer | sí | El ejercicio. (de -9007199254740991 a 9007199254740991) |
| `missing` | integer | sí | Cuántas obligaciones ya vencidas no encontramos presentadas en el SAT. (de -9007199254740991 a 9007199254740991) |
| `months` | arreglo de objeto | sí | Los 12 meses y, en persona moral, la anual (month null). Las obligaciones se deducen de lo que el emisor presenta: ISR e IVA cada mes desde el primero que presentó; una retención si la presentó en 2 de los 3 meses anteriores o antes y después. La opinión de cumplimiento del SAT es la que manda. |
| `months[].month` | integer o null | sí | El mes (1 a 12), o null para la anual. |
| `months[].due_on` | string | sí | El último día para presentarla (AAAA-MM-DD). |
| `months[].obligations` | arreglo de objeto | sí | Las obligaciones del mes. |
| `months[].obligations[].obligation` | `isr`, `vat`, `ieps`, `isr_salaries`, `isr_assimilated_salaries`, `isr_professional_services`, `isr_rent`, `vat_withholdings`, `other` o `"annual_return"` | sí | Qué obligación es (las de summary.obligations), o annual_return para la anual. |
| `months[].obligations[].status` | `filed`, `missing`, `due` | sí | filed (presentada), missing (venció y no la encontramos) o due (aún no vence). |
| `months[].obligations[].declarations` | arreglo de string | sí | Las declaraciones (dcl_…) que la presentaron, la normal y sus complementarias. |

```json
{
  "object": "sat_declaration_calendar",
  "livemode": false,
  "issuer": "iss_OufpKqnrvx9p",
  "year": 2026,
  "missing": 1,
  "months": [
    {
      "month": 8,
      "due_on": "2026-09-18",
      "obligations": [
        {
          "obligation": "isr",
          "status": "filed",
          "declarations": [
            "dcl_OufpKqnrvx9p1E"
          ]
        },
        {
          "obligation": "vat",
          "status": "filed",
          "declarations": [
            "dcl_OufpKqnrvx9p1E"
          ]
        },
        {
          "obligation": "isr_salaries",
          "status": "missing",
          "declarations": []
        }
      ]
    },
    {
      "month": 9,
      "due_on": "2026-10-19",
      "obligations": [
        {
          "obligation": "isr",
          "status": "filed",
          "declarations": [
            "dcl_OufpKqnrvx9p1F"
          ]
        },
        {
          "obligation": "vat",
          "status": "filed",
          "declarations": [
            "dcl_OufpKqnrvx9p1F"
          ]
        }
      ]
    },
    {
      "month": null,
      "due_on": "2027-03-31",
      "obligations": [
        {
          "obligation": "annual_return",
          "status": "due",
          "declarations": []
        }
      ]
    }
  ]
}
```

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