Fac-360
Complaint book

Read the complaints filed against this company

Returns complaints newest first, with the consumer's contact details, which the public receipt deliberately withholds. Requires its own scope: a credential that FILES complaints must not thereby be able to enumerate everybody who ever complained, because these are the personal data of people who are not your users and never chose to be in this system. pendingOnly=true returns only what has not been answered, which is the query that matters — the fifteen working day clock runs on those. respondedAt is null until somebody answers, and there is no stored deadline anywhere: it is derived from submittedAt, so it cannot drift from a calendar or from an answer recorded through another door.

GET
/api/v2/complaints

Returns complaints newest first, with the consumer's contact details, which the public receipt deliberately withholds. Requires its own scope: a credential that FILES complaints must not thereby be able to enumerate everybody who ever complained, because these are the personal data of people who are not your users and never chose to be in this system. pendingOnly=true returns only what has not been answered, which is the query that matters — the fifteen working day clock runs on those. respondedAt is null until somebody answers, and there is no stored deadline anywhere: it is derived from submittedAt, so it cannot drift from a calendar or from an answer recorded through another door.

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

Query Parameters

limit?integer
Range1 <= value <= 200
Default50
pendingOnly?boolean
Defaultfalse

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v2/complaints" \  -H "Authorization: Bearer apf_v2_tu_credencial"
{  "schemaVersion": "2.0",  "requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",  "complaints": [    {      "trackingCode": "string",      "kind": "RECLAMO",      "consumer": {        "name": "string",        "email": "string",        "phone": "string"      },      "item": {        "kind": "PRODUCTO",        "description": "string"      },      "detail": "string",      "requested": "string",      "source": "PUBLIC",      "submittedAt": "2019-08-24T14:15:22Z",      "respondedAt": "2019-08-24T14:15:22Z"    }  ]}

Retire the live book and mint a new identifier POST POST

For the day an identifier ends up on a spam list. COMPARE AND SWAP: you name the book you believe is live, and if it is not, this answers 409 COMPLAINT_BOOK_ROTATION_STALE and changes nothing. That is what makes a retry safe — without it, a repeated rotation would retire the identifier you had just published and your form would answer 404 with nothing to explain it. The retirement and the mint happen together, so there is no instant in which the company has no door. Complaints already filed under the old identifier keep their place: they are that company's legal record and retirement is a state, never a deletion.

File a complaint with your own credential POST POST

The door for a client that has its own server: your form posts to you, you post here. Preferred over the credential-less public route whenever you can do it, because the tenant then comes from the credential like everything else in this API. It writes through the SAME implementation the public door uses, so the correlativo, the checks and the record are identical and only source differs — PUBLIC there, API here. NO Idempotency-Key, and this is the one route in v2 where a repeat can duplicate. It is accepted deliberately: a duplicate complaint burns no correlativo, reaches no SUNAT and creates no fiscal fact, and the public twin of this act is a browser that has no key to offer — two doors onto one book that de-duplicated differently would be worse than neither doing it. Refuses with 409 if the company has not minted its book yet.