Documentación de la API Mokapen

Autenticación

Todas las solicitudes de la API requieren un access token Bearer. La forma de obtener el token depende del tipo de aplicación (public o private).

Header Bearer token

Incluye el access token en cada solicitud de la API:

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9...
Accept: application/json

App public — OAuth 2.0 authorization code

Las apps public usan el grant estándar OAuth 2.0 authorization code.

Solicitud de autorización

Redirige al usuario al endpoint de autorización:

GET https://mokapen.com/oauth/authorize

Parámetros query:
  client_id      (obligatorio) Tu Client ID
  redirect_uri   (obligatorio) Debe coincidir con un redirect URL registrado
  response_type  (obligatorio) Debe ser "code"
  scope          (obligatorio) Scopes separados por espacio, ej. tasks.read tasks.write
  state          (obligatorio) Valor aleatorio (mín. 16 caracteres) anti-CSRF
Durante la autorización el usuario selecciona la organización a la que conceder el acceso. El access token emitido queda vinculado a esa organización.

Ejemplo de solicitud de autorización (PHP)

$params = [
    'client_id'     => 'YOUR_CLIENT_ID',
    'redirect_uri'  => 'https://example.com/oauth/callback',
    'response_type' => 'code',
    'scope'         => 'tasks.read tasks.write',
    'state'         => bin2hex(random_bytes(8)),
];

$url = 'https://mokapen.com/oauth/authorize?' . http_build_query($params);
header('Location: ' . $url);

Cambia el código de autorización por los tokens

Después de la aprobación, Mokapen redirige a tu redirect_uri con el parámetro code. Cámbialo por los tokens:

POST https://mokapen.com/oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
&client_id=YOUR_CLIENT_ID
&client_secret=YOUR_CLIENT_SECRET
&redirect_uri=https://example.com/oauth/callback
&code=AUTHORIZATION_CODE_FROM_CALLBACK

Ejemplo de respuesta del token

{
  "token_type": "Bearer",
  "expires_in": 31536000,
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9...",
  "refresh_token": "def50200...",
  "organization_id": 849,
  "organization_name": "Your Organization"
}
El campo organization_id en la respuesta refleja la organización elegida por el usuario en la autorización. Usa el mismo ID en las URLs de la API (ver Organizaciones).

Refresh token

Cuando el access token expire, pide uno nuevo con el refresh token:

POST https://mokapen.com/oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token
&client_id=YOUR_CLIENT_ID
&client_secret=YOUR_CLIENT_SECRET
&refresh_token=YOUR_REFRESH_TOKEN

App private — Client credentials

Las apps private no requieren redirect OAuth. En el dashboard Developer, abre la aplicación, ve a Credentials y haz clic en Generate Token.

El token se crea con el grant client_credentials y queda ligado a la organización activa en la sesión. Guárdalo de forma segura y no lo compartas en público.

POST https://mokapen.com/oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_id=YOUR_CLIENT_ID
&client_secret=YOUR_CLIENT_SECRET
&scope=tasks.read tasks.write contacts.read
&organization_id=849
Pasa siempre organization_id al pedir un token para apps private. El ID de la organización se guarda en el token y se verifica en las llamadas siguientes de la API.

Primera solicitud de la API

$url = 'https://mokapen.com/api/v1/849/contacts';
$token = 'YOUR_ACCESS_TOKEN';

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $token,
        'Accept: application/json',
    ],
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

¿Necesitas ayuda?