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