Guides
Code Examples
Integrate with CreditRisk endpoints using clear request and response examples.
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: Undefined array key "status" in /var/www/cr_api/pages/examples.php on line 224
Warning: Undefined array key "status" 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