Fac-360
Companies

The complaints filed against this company, and the book's own identifier

ADMIN and above, and the floor is higher than it looks for a read: this returns the personal data of THIRD PARTIES — consumers who are not this platform's users and never chose to be in it. It is the same floor the machine surface's complaints:read scope carries, so a person's role and a credential's scope cannot disagree about who may see a consumer's address. It runs on DB_RUNTIME and not on the console connection. apifact_console holds SELECT on exactly two tables and no DML anywhere, so it cannot read complaints.* and must not learn to; what it can do is prove which company this session is entitled to, which is exactly what auth.bind_console_company is for. The book's own identifier comes back with the list, because the person reading this screen is usually the person who has to put it on the company's website. requiresTurnstile says whether that form is expected to send a humanity token. A refusal is 403 CONSOLE_ROLE_INSUFFICIENT and never 401: the session is alive and only the role is short, and a 401 would send somebody to a login screen that cannot fix it.

GET
/console/v1/companies/{companyId}/complaints

ADMIN and above, and the floor is higher than it looks for a read: this returns the personal data of THIRD PARTIES — consumers who are not this platform's users and never chose to be in it. It is the same floor the machine surface's complaints:read scope carries, so a person's role and a credential's scope cannot disagree about who may see a consumer's address.

It runs on DB_RUNTIME and not on the console connection. apifact_console holds SELECT on exactly two tables and no DML anywhere, so it cannot read complaints.* and must not learn to; what it can do is prove which company this session is entitled to, which is exactly what auth.bind_console_company is for.

The book's own identifier comes back with the list, because the person reading this screen is usually the person who has to put it on the company's website. requiresTurnstile says whether that form is expected to send a humanity token.

A refusal is 403 CONSOLE_ROLE_INSUFFICIENT and never 401: the session is alive and only the role is short, and a 401 would send somebody to a login screen that cannot fix it.

Authorization

consoleSession
__Host-apf_console<token>

Set by POST /console/v1/sessions. HttpOnly, Secure, SameSite=Strict, Path=/, __Host- prefixed. It is never readable by JavaScript and there is no header alternative: accepting both carriers would let an attacker choose the weaker one.

In: cookie

Path Parameters

companyId*string
Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/console/v1/companies/497f6eca-6276-4993-bfeb-53cbbbba6f08/complaints" \  -H "Authorization: Bearer apf_v2_tu_credencial"
{  "schemaVersion": "console.1",  "requestId": "d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6",  "book": {    "bookId": "710266f4-0087-48f9-97e1-4b13ac48f353",    "intakeUrl": "string",    "requiresTurnstile": true  },  "complaints": [    {      "trackingCode": "string",      "kind": "RECLAMO",      "consumerName": "string",      "consumerEmail": "string",      "consumerPhone": "string",      "itemDescription": "string",      "detail": "string",      "requested": "string",      "source": "PUBLIC",      "submittedAt": "2019-08-24T14:15:22Z",      "respondedAt": "2019-08-24T14:15:22Z",      "responseBody": "string"    }  ]}