Fac-360
S I R E

Read one period and everything that happened to it

The poll target the 202 names, and the place an operator answers 'how did this period get here'. history carries every transition with SUNAT's own code and message where there was one, because a responseCode is what tells somebody what to do and 'it failed' is not.

GET
/api/v2/sire/periods/{book}/{period}

The poll target the 202 names, and the place an operator answers 'how did this period get here'. history carries every transition with SUNAT's own code and message where there was one, because a responseCode is what tells somebody what to do and 'it failed' is not.

Authorization

bearerAuth
AuthorizationBearer <token>

Tenant-bound, scoped and expiring Apifact credential. Migrated legacy credentials are accepted only on deprecated v1 writes and tenant-scoped v2 read, poll and download routes. Each operation names the single scope it requires in x-required-scope; the scope array of the security requirement itself is empty because OpenAPI 3.0 requires it to be for a non-oauth2 scheme.

In: header

Path Parameters

book*string

Value in

  • "rvie"
  • "rce"
period*string
Match^[0-9]{4}(0[1-9]|1[0-2])$

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v2/sire/periods/rvie/string" \  -H "Authorization: Bearer apf_v2_tu_credencial"
{  "schemaVersion": "2.0",  "requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",  "book": "rvie",  "period": "string",  "status": "PENDING",  "ticket": "string",  "sunat": {    "code": "string",    "message": "string"  },  "updatedAt": "2019-08-24T14:15:22Z",  "history": [    {      "status": "string",      "detail": "string",      "at": "2019-08-24T14:15:22Z"    }  ]}

Open a period in the ledger, or return the one already open POST POST

Records that somebody intends to work on this month. IT SENDS NOTHING TO SUNAT, which is why it needs only sire:read — requiring sire:manage would make looking impossible without also holding the capability to close a period. Idempotent by the schema: one operation per (company, book, period), so a repeat returns the one that exists rather than starting a second. Reopening never resets a period that is already awaiting a ticket. A COMPANY IN BETA IS REFUSED with 409 SIRE_REQUIRES_PRODUCTION. SIRE only knows real RUCs and has no test environment: it is not that a beta company would fail, it is that there is nowhere for it to try. The refusal comes from the database, not from this route.

Download what SUNAT proposes for the period, and stop POST POST

The read half of the cycle, and a SEPARATE ROUTE from the write half rather than a flag on one route. SUNAT builds the proposal from what other people issued against this RUC — for RVIE, what this taxpayer issued — and downloading it changes nothing: it is harmless against a real RUC, which is why sire:read admits it. The difference between looking and committing must not live in a JSON field. The day somebody leaves that field set, a period is closed and there is no inverse operation. Same argument that made POST /api/v2/documents/validations a route and not a dry-run flag. Answers 202: a SUNAT round trip can take longer than a request, so the work is handed to a durable Workflow and the period is polled at statusPath.