# Cuenta, API key y frescura de los datos

Cualquier API key válida.

GET `/public/v1/me`

Cualquier API key válida · Cuenta

## Ejemplo de petición

**curl**

```sh
curl "https://api.posdata.so/public/v1/me" \
  -H "Authorization: Bearer $POSDATA_API_KEY"
```

**Node.js**

```js
const res = await fetch('https://api.posdata.so/public/v1/me', {
  headers: {
    Authorization: `Bearer ${process.env.POSDATA_API_KEY}`,
  },
});
const data = await res.json();
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message} (${data.error.request_id})`);
```

**Python**

```python
import os

import requests

res = requests.get(
    "https://api.posdata.so/public/v1/me",
    headers={
        "Authorization": f"Bearer {os.environ['POSDATA_API_KEY']}",
    },
    timeout=30,
)
data = res.json()
if not res.ok:
    raise RuntimeError(f"{data['error']['code']}: {data['error']['message']} ({data['error']['request_id']})")
```

**PHP**

```php
<?php
$ch = curl_init('https://api.posdata.so/public/v1/me');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . getenv('POSDATA_API_KEY'),
    ],
]);
$data = json_decode(curl_exec($ch), true);
if (curl_getinfo($ch, CURLINFO_RESPONSE_CODE) >= 400) {
    throw new RuntimeException("{$data['error']['code']}: {$data['error']['message']} ({$data['error']['request_id']})");
}
```

## Respuesta

`200` OK: un objeto [Account](https://developers.posdata.so/referencia/objetos/#obj-account).

| Campo                                   | Tipo                                                                            | Requerido | Descripción                                                                                                                                                                                                        |
| --------------------------------------- | ------------------------------------------------------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `object`                                | `"account"`                                                                     | Sí        | —                                                                                                                                                                                                                  |
| `id`                                    | string (uuid)                                                                   | Sí        | Id de la cuenta (tenant).                                                                                                                                                                                          |
| `business`                              | object \| null                                                                  | Sí        | —                                                                                                                                                                                                                  |
| `business.name`                         | string                                                                          | No        | —                                                                                                                                                                                                                  |
| `business.currency`                     | string                                                                          | No        | —                                                                                                                                                                                                                  |
| `plan`                                  | string                                                                          | Sí        | Valores: `free`, `plus`, `plus_nofe`, `pro`, `pro_nofe`.                                                                                                                                                           |
| `api_key`                               | object \| null                                                                  | Sí        | —                                                                                                                                                                                                                  |
| `api_key.id`                            | string (uuid)                                                                   | No        | —                                                                                                                                                                                                                  |
| `api_key.name`                          | string                                                                          | No        | —                                                                                                                                                                                                                  |
| `api_key.environment`                   | string                                                                          | No        | Valores: `live`, `test`.                                                                                                                                                                                           |
| `api_key.scopes`                        | arreglo de [Scope](https://developers.posdata.so/referencia/objetos/#obj-scope) | No        | —                                                                                                                                                                                                                  |
| `api_key.expires_at`                    | string (date-time) \| null                                                      | No        | —                                                                                                                                                                                                                  |
| `data_freshness`                        | object                                                                          | Sí        | La API lee lo que las cajas ya subieron. `last_sync_at` es el último cambio que cada caja subió de verdad (null si nunca subió nada): si una caja lleva horas sin subir, sus ventas recientes todavía no aparecen. |
| `data_freshness.last_device_sync_at`    | string (date-time) \| null                                                      | No        | —                                                                                                                                                                                                                  |
| `data_freshness.devices`                | arreglo de object                                                               | No        | —                                                                                                                                                                                                                  |
| `data_freshness.devices[].name`         | string \| null                                                                  | No        | —                                                                                                                                                                                                                  |
| `data_freshness.devices[].kind`         | string                                                                          | No        | Valores: `primary`, `satellite`, `kitchen`.                                                                                                                                                                        |
| `data_freshness.devices[].platform`     | string \| null                                                                  | No        | —                                                                                                                                                                                                                  |
| `data_freshness.devices[].last_sync_at` | string (date-time) \| null                                                      | No        | —                                                                                                                                                                                                                  |

```json
{
  "object": "account",
  "id": "3f1c2e8d-7a10-4d0b-9a57-0b6f2f0e5c1d",
  "business": {
    "name": "Café molido 500 g",
    "currency": "COP"
  },
  "plan": "free",
  "api_key": {
    "id": "3f1c2e8d-7a10-4d0b-9a57-0b6f2f0e5c1d",
    "name": "Café molido 500 g",
    "environment": "live",
    "scopes": [
      "products:read"
    ],
    "expires_at": "2026-09-28T15:04:05.000Z"
  },
  "data_freshness": {
    "last_device_sync_at": "2026-09-28T15:04:05.000Z",
    "devices": [
      {
        "name": "Café molido 500 g",
        "kind": "primary",
        "platform": "texto",
        "last_sync_at": "2026-09-28T15:04:05.000Z"
      }
    ]
  }
}
```

## Errores

Todo error responde con un objeto [Error](https://developers.posdata.so/referencia/objetos/#obj-error) y un `request_id`. Ramifica por `error.code`, nunca por el mensaje.

### 400Petición inválida (VALIDATION_ERROR, INVALID_JSON, INVALID_CURSOR).

**Respuesta 400**

Cuerpo: un objeto [Error](https://developers.posdata.so/referencia/objetos/#obj-error). Qué significa cada código y qué hacer: [Errores](https://developers.posdata.so/errores/).

VALIDATION_ERRORINVALID_JSONINVALID_CURSOR

### 401Sin API key válida (UNAUTHENTICATED, INVALID_API_KEY, API_KEY_REVOKED, API_KEY_EXPIRED, API_KEY_WRONG_ENVIRONMENT, ACCOUNT_INACTIVE).

**Respuesta 401**

Cuerpo: un objeto [Error](https://developers.posdata.so/referencia/objetos/#obj-error). Qué significa cada código y qué hacer: [Errores](https://developers.posdata.so/errores/).

UNAUTHENTICATEDINVALID_API_KEYAPI_KEY_REVOKEDAPI_KEY_EXPIREDAPI_KEY_WRONG_ENVIRONMENTACCOUNT_INACTIVE

### 403Sin permiso (PLAN_REQUIRED, INSUFFICIENT_SCOPE, BROWSER_REQUESTS_NOT_ALLOWED).

**Respuesta 403**

Cuerpo: un objeto [Error](https://developers.posdata.so/referencia/objetos/#obj-error). Qué significa cada código y qué hacer: [Errores](https://developers.posdata.so/errores/).

PLAN_REQUIREDINSUFFICIENT_SCOPEBROWSER_REQUESTS_NOT_ALLOWED

### 429Límite de peticiones (RATE_LIMITED). Respeta Retry-After.

**Respuesta 429**

Cuerpo: un objeto [Error](https://developers.posdata.so/referencia/objetos/#obj-error). Qué significa cada código y qué hacer: [Errores](https://developers.posdata.so/errores/).

RATE_LIMITED

### 500Error interno (INTERNAL_ERROR). Reintenta y comparte el request_id si persiste.

**Respuesta 500**

Cuerpo: un objeto [Error](https://developers.posdata.so/referencia/objetos/#obj-error). Qué significa cada código y qué hacer: [Errores](https://developers.posdata.so/errores/).

INTERNAL_ERROR

---

Fuente: https://developers.posdata.so/referencia/operations/getme/ · Índice para agentes: https://developers.posdata.so/llms.txt
