Documentação da API Mokapen

Autenticação

Todas as requisições da API exigem um access token Bearer. O jeito de obter o token depende do tipo de aplicativo (public ou private).

Header Bearer token

Inclua o access token em cada requisição da API:

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

App public — OAuth 2.0 authorization code

Os apps public usam o grant padrão OAuth 2.0 authorization code.

Pedido de autorização

Redirecione o usuário para o endpoint de autorização:

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

Parâmetros query:
  client_id      (obrigatório) Seu Client ID
  redirect_uri   (obrigatório) Deve coincidir com um redirect URL registrado
  response_type  (obrigatório) Deve ser "code"
  scope          (obrigatório) Scopes separados por espaço, ex. tasks.read tasks.write
  state          (obrigatório) Valor aleatório (mín. 16 caracteres) anti-CSRF
Na autorização o usuário escolhe a organização à qual conceder o acesso. O access token emitido fica vinculado a essa organização.

Exemplo de pedido de autorização (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);

Troque o código de autorização pelos tokens

Depois da aprovação, o Mokapen redireciona para o seu redirect_uri com o parâmetro code. Troque-o pelos 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

Exemplo de resposta do token

{
  "token_type": "Bearer",
  "expires_in": 31536000,
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9...",
  "refresh_token": "def50200...",
  "organization_id": 849,
  "organization_name": "Your Organization"
}
O campo organization_id na resposta reflete a organização escolhida pelo usuário na autorização. Use o mesmo ID nas URLs da API (veja Organizações).

Refresh token

Quando o access token expirar, peça um novo com o 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

Os apps private não precisam de redirect OAuth. No dashboard Developer, abra o aplicativo, vá em Credentials e clique em Generate Token.

O token é criado com o grant client_credentials e fica ligado à organização ativa na sessão. Guarde-o com segurança e não compartilhe em 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
Passe sempre organization_id ao pedir um token para apps private. O ID da organização é salvo no token e verificado nas chamadas seguintes da API.

Primeira requisição da 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);

Preciso de ajuda?