Code Examples
Complete code examples for integrating with the CreditRisk API in different programming languages.
Complete Authentication Flow
class CreditRiskAPI {
constructor(apiToken) {
this.apiToken = apiToken;
this.baseURL = 'https://api.creditrisk.co.za/api';
this.accessToken = localStorage.getItem('access_token');
this.refreshToken = localStorage.getItem('refresh_token');
}
async request(endpoint, options = {}) {
const url = `${this.baseURL}${endpoint}?api_token=${this.apiToken}`;
const config = {
headers: {
'Content-Type': 'application/json',
...options.headers
},
...options
};
if (this.accessToken && options.requiresAuth) {
config.headers.Authorization = `Bearer ${this.accessToken}`;
}
try {
let response = await fetch(url, config);
// If unauthorized, try to refresh token
if (response.status === 401 && this.refreshToken) {
const refreshed = await this.refreshAccessToken();
if (refreshed) {
config.headers.Authorization = `Bearer ${this.accessToken}`;
response = await fetch(url, config);
}
}
return await response.json();
} catch (error) {
throw new Error(`API request failed: ${error.message}`);
}
}
async login(username, password) {
const result = await this.request('/auth', {
method: 'POST',
body: JSON.stringify({ username, password })
});
if (result.status === 'success') {
this.accessToken = result.access_token;
this.refreshToken = result.refresh_token;
localStorage.setItem('access_token', this.accessToken);
localStorage.setItem('refresh_token', this.refreshToken);
}
return result;
}
async refreshAccessToken() {
try {
const result = await this.request('/refresh', {
method: 'POST',
body: JSON.stringify({ refresh_token: this.refreshToken })
});
if (result.status === 'success') {
this.accessToken = result.access_token;
localStorage.setItem('access_token', this.accessToken);
return true;
}
} catch (error) {
// Refresh failed, redirect to login
this.logout();
}
return false;
}
async logout() {
if (this.accessToken) {
await this.request('/logout', {
method: 'POST',
requiresAuth: true,
body: JSON.stringify({ access_token: this.accessToken })
});
}
this.accessToken = null;
this.refreshToken = null;
localStorage.removeItem('access_token');
localStorage.removeItem('refresh_token');
}
async sendApplicationInvite(inviteData) {
return await this.request('/send_application_invite', {
method: 'POST',
requiresAuth: true,
body: JSON.stringify(inviteData)
});
}
}
// Usage
const api = new CreditRiskAPI('your-api-token-here');
// Login
api.login('user@example.com', 'password123')
.then(result => {
if (result.status === 'success') {
console.log('Logged in successfully');
// Send invite
return api.sendApplicationInvite({
email: 'customer@example.com',
company_name: 'ABC Corp',
contact_name: 'John Doe'
});
}
})
.then(result => {
console.log('Invite sent:', result);
})
.catch(error => {
console.error('Error:', error);
});
Warning: session_start(): Session cannot be started after headers have already been sent in /var/www/cr_api/pages/examples.php on line 170
Warning: Trying to access array offset on null in /var/www/cr_api/pages/examples.php on line 224
Warning: Trying to access array offset on null in /var/www/cr_api/pages/examples.php on line 275
import requests
import json
class CreditRiskAPI:
def __init__(self, api_token):
self.api_token = api_token
self.base_url = 'https://api.creditrisk.co.za/api'
self.access_token = None
self.refresh_token = None
self.session = requests.Session()
def _make_request(self, endpoint, data=None, method='GET', requires_auth=False):
url = f"{self.base_url}{endpoint}?api_token={self.api_token}"
headers = {'Content-Type': 'application/json'}
if requires_auth and self.access_token:
headers['Authorization'] = f'Bearer {self.access_token}'
try:
if method == 'POST':
response = self.session.post(url, json=data, headers=headers)
else:
response = self.session.get(url, headers=headers)
# Handle token refresh
if response.status_code == 401 and requires_auth and self.refresh_token:
if self.refresh_access_token():
# Retry request with new token
return self._make_request(endpoint, data, method, requires_auth)
return response.json()
except requests.exceptions.RequestException as e:
raise Exception(f"API request failed: {str(e)}")
def login(self, username, password):
result = self._make_request('/auth', {
'username': username,
'password': password
}, 'POST')
if result.get('status') == 'success':
self.access_token = result['access_token']
self.refresh_token = result['refresh_token']
return result
def refresh_access_token(self):
if not self.refresh_token:
return False
try:
result = self._make_request('/refresh', {
'refresh_token': self.refresh_token
}, 'POST')
if result.get('status') == 'success':
self.access_token = result['access_token']
return True
except:
# Refresh failed, clear tokens
self.logout()
return False
def logout(self):
if self.access_token:
try:
self._make_request('/logout', {
'access_token': self.access_token
}, 'POST', requires_auth=True)
except:
pass # Ignore logout errors
self.access_token = None
self.refresh_token = None
def send_application_invite(self, invite_data):
return self._make_request('/send_application_invite',
invite_data, 'POST', requires_auth=True)
# Usage
api = CreditRiskAPI('your-api-token-here')
# Login
login_result = api.login('user@example.com', 'password123')
if login_result.get('status') == 'success':
print("Logged in successfully")
# Send invite
invite_result = api.send_application_invite({
'email': 'customer@example.com',
'company_name': 'ABC Corp',
'contact_name': 'John Doe'
})
print("Invite result:", invite_result)
else:
print("Login failed:", login_result.get('message'))
Error Handling Best Practices
Common Errors
- 401 Unauthorized: Token expired or invalid
- 400 Bad Request: Invalid input data
- 429 Too Many Requests: Rate limit exceeded
- 500 Server Error: Internal server issue
Best Practices
- Implement automatic token refresh
- Use secure token storage
- Handle network timeouts gracefully
- Log API responses for debugging