Skip to main content

Authentication Setup

Pagamio uses Bearer token authentication for all API requests. Tokens are generated programmatically using your merchant credentials.

Authentication Method

All API requests must include an Authorization header with your Bearer token:

Authorization: Bearer <YOUR_BEARER_TOKEN>

Obtaining Your Credentials

Once your merchant/sub-merchant account is created, you will receive a welcome email from [email protected] containing your:

  • Username - Your merchant/sub-merchant username
  • Password - Your merchant/sub-merchant password
  • Portal Access - Portal access URL (sandbox/testing)

⚠️ Security Notice: Change your password after first login.

These credentials are used to generate Bearer tokens via the API.

Generating a Bearer Token

Token Endpoint

POST /api/v1/auth/token

Request

curl -X POST $BASE_URL/auth/token \
-H "Content-Type: application/json" \
-d '{
"username": "your_username",
"password": "your_password"
}'

Response

{
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expiresIn": 1800
}

Important Notes

  • Token Validity: Tokens are valid for 30 minutes (1800 seconds)
  • Token Refresh: You must generate a new token every 30 minutes
  • Automatic Refresh: Implement automatic token refresh in your application

Using Your Bearer Token

cURL Example

curl -X GET $BASE_URL/products/categories \
-H "Authorization: Bearer YOUR_BEARER_TOKEN"

JavaScript Example

const axios = require("axios");

// Function to get Bearer token
async function getToken(baseUrl) {
const response = await axios.post(`${baseUrl}/auth/token`, {
username: process.env.PAGAMIO_USERNAME,
password: process.env.PAGAMIO_PASSWORD,
});
return response.data.data.token;
}

// Use the token
const baseUrl = process.env.BASE_URL;
const token = await getToken(baseUrl);
const api = axios.create({
baseURL: baseUrl,
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
});

const response = await api.get("/products/categories");

Python Example

import requests
import os
from datetime import datetime, timedelta

class PagamioAuth:
def __init__(self, username, password, base_url):
self.username = username
self.password = password
self.base_url = base_url
self.token = None
self.token_expires = None

def get_token(self):
# Check if token is still valid
if self.token and self.token_expires and datetime.now() < self.token_expires:
return self.token

# Generate new token
response = requests.post(
f"{self.base_url}/auth/token",
json={"username": self.username, "password": self.password}
)
data = response.json()

self.token = data['data']['token']
self.token_expires = datetime.now() + timedelta(seconds=3600)
return self.token

def get_headers(self):
return {
'Authorization': f"Bearer {self.get_token()}",
'Content-Type': 'application/json'
}

# Usage
auth = PagamioAuth(
username=os.getenv('PAGAMIO_USERNAME'),
password=os.getenv('PAGAMIO_PASSWORD'),
base_url=os.getenv('BASE_URL')
)

response = requests.get(
f"{os.getenv('BASE_URL')}/products/categories",
headers=auth.get_headers()
)

Troubleshooting

401 Unauthorized - Token Generation

Cause: Invalid username or password

Solution:

  • Verify credentials are correct
  • Check that you're using the right environment (sandbox vs production)
  • Ensure your account is active
  • Contact support if credentials are not working

401 Unauthorized - API Request

Cause: Invalid, expired, or missing Bearer token

Solution:

  • Check that token hasn't expired (valid for 1 hour)
  • Verify Authorization header format: Authorization: Bearer <token>
  • Generate a new token
  • Implement automatic token refresh logic

403 Forbidden

Cause: Account lacks permissions or is not properly configured

Solution:

  • Verify account status is active
  • Confirm merchant account has been approved
  • Check that you have access to the requested resources
  • Contact support for permission issues

Token Expiration Handling

# Example: Test if token is expired
curl -X GET $BASE_URL/products/categories \
-H "Authorization: Bearer YOUR_TOKEN"

# If you get 401, generate a new token
curl -X POST $BASE_URL/auth/token \
-H "Content-Type: application/json" \
-d '{"username": "your_username", "password": "your_password"}'