Intact API Documentation

Complete RESTful API for Certification Management System

Base URL: https://intact.webninjaafrica.com/api/v1
12
Modules
40
Sections
97
Endpoints
13
Code Examples

Getting Started

Overview

INFO / Public
API Overview
Complete REST API for Certification Management System

Parameters

TypeNameTypeRequiredDescriptionExample
Body api_name string No Name of the API Intact API
Body version string No API version 1.0.0

Responses

Status 200: API Information
{
    "name": "Intact API",
    "version": "1.0.0",
    "description": "Certification Management System",
    "base_url": "https:\/\/intact.webninjaafrica.com\/api\/v1"
}

Code Examples

curl -X GET "https://intact.webninjaafrica.com/api/v1/"
Simple API overview request

Base URL

INFO /base Public
Base URL Information
All endpoints are relative to the base URL

Parameters

TypeNameTypeRequiredDescriptionExample
Body base_url string No Base URL for all API calls https://intact.webninjaafrica.com/api/v1

Responses

Status 200: Base URL Info
{
    "base_url": "https:\/\/intact.webninjaafrica.com\/api\/v1",
    "documentation": "https:\/\/intact.webninjaafrica.com\/docs.php",
    "status": "active"
}

Code Examples

<?php
$base_url = "https://intact.webninjaafrica.com/api/v1";
$response = file_get_contents($base_url . "/tenants");
echo $response;
?>
PHP example using base URL
import requests
base_url = "https://intact.webninjaafrica.com/api/v1"
response = requests.get(f"{base_url}/tenants")
print(response.json())
Python example using base URL
const axios = require("axios");
const base_url = "https://intact.webninjaafrica.com/api/v1";
axios.get(`${base_url}/tenants`)
    .then(response => console.log(response.data));
Node.js example using base URL
curl -X GET "https://intact.webninjaafrica.com/api/v1/tenants"
cURL example using base URL

Response Format

INFO /response-format Public
Response Format
Standard API response structure for all endpoints

Parameters

TypeNameTypeRequiredDescriptionExample
Body success_response object No Example of successful response {"success":true,"data":{},"message":"Operation successful"}
Body error_response object No Example of error response {"success":false,"message":"Error description","status_code":400}
Body pagination_response object No Example of paginated response {"success":true,"data":[],"pagination":{"current_page":1,"per_page":20,"total":100,"total_pages":5}}

Responses

Status 200: Success Response Example
{
    "success": true,
    "data": {
        "id": "123",
        "name": "Example"
    },
    "message": "Operation successful"
}
Status 400: Error Response Example
{
    "success": false,
    "message": "Invalid input provided",
    "status_code": 400
}
Status 401: Unauthorized Response
{
    "success": false,
    "message": "Authentication required",
    "status_code": 401
}
Status 403: Forbidden Response
{
    "success": false,
    "message": "Insufficient permissions",
    "status_code": 403
}
Status 404: Not Found Response
{
    "success": false,
    "message": "Resource not found",
    "status_code": 404
}
Status 500: Server Error Response
{
    "success": false,
    "message": "Internal server error",
    "status_code": 500
}

Code Examples

<?php
$response = curl_exec($curl);
$data = json_decode($response, true);
if ($data["success"]) {
    echo "Success: " . json_encode($data["data"]);
} else {
    echo "Error: " . $data["message"];
}
?>
PHP example of handling API responses
import requests
response = requests.get(url)
data = response.json()
if data["success"]:
    print("Success: " + str(data["data"]))
else:
    print("Error: " + data["message"])
Python example of handling API responses
axios.get(url)
    .then(response => {
        if (response.data.success) {
            console.log("Success:", response.data.data);
        } else {
            console.log("Error:", response.data.message);
        }
    })
    .catch(error => console.log("Request failed:", error.message));
Node.js example of handling API responses
curl -X GET "https://intact.webninjaafrica.com/api/v1/tenants" | jq ".data"
cURL with jq for parsing JSON response

Error Handling

INFO /errors Public
Error Codes
Common HTTP status codes and error responses

Parameters

TypeNameTypeRequiredDescriptionExample
Body error_400 object No Bad Request - Invalid input {"code":400,"meaning":"Bad Request","solution":"Check your request parameters"}
Body error_401 object No Unauthorized - Missing or invalid token {"code":401,"meaning":"Unauthorized","solution":"Provide valid JWT token in Authorization header"}
Body error_403 object No Forbidden - Insufficient permissions {"code":403,"meaning":"Forbidden","solution":"Contact administrator for access"}
Body error_404 object No Not Found - Resource doesn't exist {"code":404,"meaning":"Not Found","solution":"Verify the resource ID or endpoint path"}
Body error_422 object No Validation Error - Data validation failed {"code":422,"meaning":"Unprocessable Entity","solution":"Check validation rules for required fields"}
Body error_429 object No Too Many Requests - Rate limit exceeded {"code":429,"meaning":"Too Many Requests","solution":"Wait before making more requests"}
Body error_500 object No Server Error - Internal server error {"code":500,"meaning":"Internal Server Error","solution":"Contact support with request details"}

Responses

Status 200: Error Codes List
{
    "success": true,
    "error_codes": [
        400,
        401,
        403,
        404,
        422,
        429,
        500
    ],
    "common_errors": {
        "400": "Bad Request",
        "401": "Unauthorized",
        "403": "Forbidden",
        "404": "Not Found",
        "422": "Validation Error",
        "429": "Too Many Requests",
        "500": "Internal Server Error"
    }
}

Code Examples

<?php
function handleApiResponse($response) {
    $data = json_decode($response, true);
    switch(http_response_code()) {
        case 400:
            echo "Bad Request: " . $data["message"];
            break;
        case 401:
            echo "Authentication required. Please login.";
            break;
        case 403:
            echo "Access denied. Insufficient permissions.";
            break;
        case 404:
            echo "Resource not found.";
            break;
        case 422:
            echo "Validation failed: " . json_encode($data["errors"]);
            break;
        case 429:
            echo "Rate limit exceeded. Please wait.";
            break;
        case 500:
            echo "Server error. Please try again later.";
            break;
        default:
            echo "Unknown error: " . $data["message"];
    }
}
?>
PHP error handling example
import requests
def handle_response(response):
    if response.status_code == 200:
        return response.json()["data"]
    elif response.status_code == 400:
        print("Bad Request: " + response.json()["message"])
    elif response.status_code == 401:
        print("Authentication required. Please login.")
    elif response.status_code == 403:
        print("Access denied. Insufficient permissions.")
    elif response.status_code == 404:
        print("Resource not found.")
    elif response.status_code == 422:
        print("Validation failed: " + str(response.json()["errors"]))
    elif response.status_code == 429:
        print("Rate limit exceeded. Please wait.")
    elif response.status_code == 500:
        print("Server error. Please try again later.")
    return None

response = requests.get(url, headers=headers)
data = handle_response(response)
Python error handling example
const axios = require("axios");

async function makeRequest(url, headers) {
    try {
        const response = await axios.get(url, { headers });
        return response.data.data;
    } catch (error) {
        if (error.response) {
            switch (error.response.status) {
                case 400:
                    console.log("Bad Request: " + error.response.data.message);
                    break;
                case 401:
                    console.log("Authentication required. Please login.");
                    break;
                case 403:
                    console.log("Access denied. Insufficient permissions.");
                    break;
                case 404:
                    console.log("Resource not found.");
                    break;
                case 422:
                    console.log("Validation failed: " + JSON.stringify(error.response.data.errors));
                    break;
                case 429:
                    console.log("Rate limit exceeded. Please wait.");
                    break;
                case 500:
                    console.log("Server error. Please try again later.");
                    break;
                default:
                    console.log("Error: " + error.response.data.message);
            }
        } else {
            console.log("Request failed: " + error.message);
        }
        return null;
    }
}
Node.js error handling example
# Check HTTP status code
curl -w "\nHTTP Status: %{http_code}\n" -X GET "https://intact.webninjaafrica.com/api/v1/endpoint"

# With error handling
response=$(curl -s -w "\n%{http_code}" -X GET "https://intact.webninjaafrica.com/api/v1/endpoint")
http_code=$(echo "$response" | tail -n1)
body=$(echo "$response" | sed "$ d")

if [ $http_code -eq 200 ]; then
    echo "Success: $body"
else
    echo "Error $http_code: $body"
fi
cURL error handling example

Authentication

Login

POST /auth/login Public
User Login
Authenticate user and get JWT token

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Logout

POST /auth/logout Auth Required
User Logout
Invalidate user session

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Password Management

POST /auth/change-password Auth Required
Change Password
Change user password

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}
POST /auth/forgot-password Public
Forgot Password
Request password reset

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}
POST /auth/reset-password Public
Reset Password
Reset password with token

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Token Management

POST /auth/refresh Auth Required
Refresh Token
Get new access token

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}
GET /auth/me Auth Required
Get Current User
Get authenticated user info

Response Example

{
    "success": true,
    "data": {...}
}

Core System

Tenants

GET /tenants Auth Required
List Tenants
Get paginated list of tenants

Response Example

{
    "success": true,
    "data": {...}
}
GET /tenants/{id} Auth Required
Get Tenant
Get tenant by ID

Response Example

{
    "success": true,
    "data": {...}
}
POST /tenants Auth Required
Create Tenant
Create a new tenant

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}
PUT /tenants/{id} Auth Required
Update Tenant
Update existing tenant

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}
DELETE /tenants/{id} Auth Required
Delete Tenant
Soft delete tenant

Response Example

{
    "success": true,
    "data": {...}
}

Users

GET /users Auth Required
List Users
Get paginated list of users

Response Example

{
    "success": true,
    "data": {...}
}
GET /users/{id} Auth Required
Get User
Get user by ID

Response Example

{
    "success": true,
    "data": {...}
}
POST /users Auth Required
Create User
Create a new user

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}
PUT /users/{id} Auth Required
Update User
Update existing user

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}
DELETE /users/{id} Auth Required
Delete User
Soft delete user

Response Example

{
    "success": true,
    "data": {...}
}

Roles

GET /roles Auth Required
List Roles
Get paginated list of roles

Response Example

{
    "success": true,
    "data": {...}
}
GET /roles/{id} Auth Required
Get Role
Get role by ID

Response Example

{
    "success": true,
    "data": {...}
}
POST /roles Auth Required
Create Role
Create a new role

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}
PUT /roles/{id} Auth Required
Update Role
Update existing role

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}
DELETE /roles/{id} Auth Required
Delete Role
Delete role

Response Example

{
    "success": true,
    "data": {...}
}

Permissions

GET /permissions Auth Required
List Permissions
Get all permissions

Response Example

{
    "success": true,
    "data": {...}
}
GET /permissions/{id} Auth Required
Get Permission
Get permission by ID

Response Example

{
    "success": true,
    "data": {...}
}

Audit Logs

GET /audit-logs Auth Required
List Audit Logs
Get audit trail records

Response Example

{
    "success": true,
    "data": {...}
}
GET /audit-logs/{id} Auth Required
Get Audit Log
Get audit log by ID

Response Example

{
    "success": true,
    "data": {...}
}

Documents

GET /documents Auth Required
List Documents
Get paginated list of documents

Response Example

{
    "success": true,
    "data": {...}
}
GET /documents/{id} Auth Required
Get Document
Get document by ID

Response Example

{
    "success": true,
    "data": {...}
}
POST /documents Auth Required
Upload Document
Upload a new document

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

System Settings

GET /settings Auth Required
Get Settings
Get system settings

Response Example

{
    "success": true,
    "data": {...}
}
PUT /settings Auth Required
Update Settings
Update system settings

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Client Management

Clients

GET /clients Auth Required
List Clients
Get paginated list of clients

Response Example

{
    "success": true,
    "data": {...}
}
GET /clients/{id} Auth Required
Get Client
Get client by ID

Response Example

{
    "success": true,
    "data": {...}
}
POST /clients Auth Required
Create Client
Create a new client

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Contacts

GET /client-contacts Auth Required
List Contacts
Get client contacts

Response Example

{
    "success": true,
    "data": {...}
}
POST /client-contacts Auth Required
Create Contact
Add client contact

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Sites

GET /client-sites Auth Required
List Sites
Get client sites

Response Example

{
    "success": true,
    "data": {...}
}
POST /client-sites Auth Required
Create Site
Add client site

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Applications

GET /applications Auth Required
List Applications
Get certification applications

Response Example

{
    "success": true,
    "data": {...}
}
POST /applications Auth Required
Create Application
Submit certification application

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Quotations

GET /quotations Auth Required
List Quotations
Get quotations

Response Example

{
    "success": true,
    "data": {...}
}
POST /quotations Auth Required
Create Quotation
Generate quotation

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Contracts

GET /contracts Auth Required
List Contracts
Get contracts

Response Example

{
    "success": true,
    "data": {...}
}
POST /contracts Auth Required
Create Contract
Create contract from quotation

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Standards & Accreditation

Accreditations

GET /accreditations Auth Required
List Accreditations
Get accreditations

Response Example

{
    "success": true,
    "data": {...}
}
POST /accreditations Auth Required
Create Accreditation
Add accreditation

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Standards

GET /standards Auth Required
List Standards
Get ISO standards

Response Example

{
    "success": true,
    "data": {...}
}
POST /standards Auth Required
Create Standard
Add new standard

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Clauses

GET /standard-clauses Auth Required
List Clauses
Get standard clauses

Response Example

{
    "success": true,
    "data": {...}
}
POST /standard-clauses Auth Required
Create Clause
Add clause to standard

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Audit Management

Audit Schedules

GET /audit-schedules Auth Required
List Audits
Get audit schedules

Response Example

{
    "success": true,
    "data": {...}
}
POST /audit-schedules Auth Required
Create Audit
Schedule new audit

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}
POST /audit-schedules/{id}/start Auth Required
Start Audit
Begin audit

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}
POST /audit-schedules/{id}/complete Auth Required
Complete Audit
Finish audit

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Audit Teams

GET /audit-teams Auth Required
List Teams
Get audit team members

Response Example

{
    "success": true,
    "data": {...}
}
POST /audit-teams Auth Required
Assign Auditor
Add auditor to team

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Audit Checklists

GET /audit-checklists Auth Required
List Checklists
Get audit checklist items

Response Example

{
    "success": true,
    "data": {...}
}
PUT /audit-checklists/{id} Auth Required
Update Checklist
Update checklist item

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Audit Evidence

GET /audit-evidence Auth Required
List Evidence
Get audit evidence

Response Example

{
    "success": true,
    "data": {...}
}
POST /audit-evidence Auth Required
Add Evidence
Add evidence document

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Non-Conformity Management

Non-Conformities

GET /non-conformities Auth Required
List NCs
Get non-conformities

Response Example

{
    "success": true,
    "data": {...}
}
POST /non-conformities Auth Required
Create NC
Add non-conformity

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}
POST /non-conformities/{id}/close Auth Required
Close NC
Close non-conformity

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Corrective Actions

GET /corrective-actions Auth Required
List Actions
Get corrective actions

Response Example

{
    "success": true,
    "data": {...}
}
POST /corrective-actions Auth Required
Create Action
Add corrective action

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}
POST /corrective-actions/{id}/verify Auth Required
Verify Action
Verify completion

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Certificate Management

Certificates

GET /certificates Auth Required
List Certificates
Get all certificates

Response Example

{
    "success": true,
    "data": {...}
}
POST /certificates Auth Required
Issue Certificate
Issue new certificate

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}
POST /certificates/{id}/suspend Auth Required
Suspend Certificate
Suspend certificate

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}
POST /certificates/{id}/reinstate Auth Required
Reinstate Certificate
Reinstate suspended certificate

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}
POST /certificates/{id}/withdraw Auth Required
Withdraw Certificate
Withdraw certificate

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Verification

GET /certificates/verify/{number} Public
Verify Certificate
Public certificate verification

Response Example

{
    "success": true,
    "data": {...}
}

History

GET /certificate-history Auth Required
List History
Get certificate history

Response Example

{
    "success": true,
    "data": {...}
}

Financial Management

Invoices

GET /invoices Auth Required
List Invoices
Get invoices

Response Example

{
    "success": true,
    "data": {...}
}
POST /invoices Auth Required
Create Invoice
Generate invoice

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}
POST /invoices/{id}/mark-paid Auth Required
Mark Paid
Mark invoice as paid

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Payments

GET /payments Auth Required
List Payments
Get payment records

Response Example

{
    "success": true,
    "data": {...}
}
POST /payments Auth Required
Record Payment
Record payment received

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Quality Management

Complaints

GET /complaints Auth Required
List Complaints
Get complaints

Response Example

{
    "success": true,
    "data": {...}
}
POST /complaints Auth Required
Create Complaint
Submit complaint

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}
POST /complaints/{id}/resolve Auth Required
Resolve Complaint
Mark complaint resolved

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Training & Competency

Training Records

GET /training-records Auth Required
List Training
Get training records

Response Example

{
    "success": true,
    "data": {...}
}
POST /training-records Auth Required
Add Training
Add training record

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Auditor Competencies

GET /auditor-competencies Auth Required
List Competencies
Get auditor competencies

Response Example

{
    "success": true,
    "data": {...}
}
POST /auditor-competencies Auth Required
Add Competency
Add auditor competency

Request Body Example

{
        "example": "value"
    }

Response Example

{
    "success": true,
    "data": {...}
}

Dashboard & Reports

Dashboard

GET /dashboard/stats Auth Required
Dashboard Stats
Get dashboard statistics

Response Example

{
    "success": true,
    "data": {...}
}
GET /dashboard/recent-activities Auth Required
Recent Activities
Get recent activities

Response Example

{
    "success": true,
    "data": {...}
}
GET /dashboard/upcoming-audits Auth Required
Upcoming Audits
Get upcoming audits

Response Example

{
    "success": true,
    "data": {...}
}
GET /dashboard/expiring-certificates Auth Required
Expiring Certificates
Get expiring certificates

Response Example

{
    "success": true,
    "data": {...}
}

Reports

GET /reports/audit-summary Auth Required
Audit Summary
Get audit summary report

Response Example

{
    "success": true,
    "data": {...}
}
GET /reports/certificate-expiry Auth Required
Certificate Expiry
Get certificate expiry report

Response Example

{
    "success": true,
    "data": {...}
}
GET /reports/financial Auth Required
Financial Report
Get financial report

Response Example

{
    "success": true,
    "data": {...}
}
GET /reports/non-conformities Auth Required
NC Report
Get non-conformity report

Response Example

{
    "success": true,
    "data": {...}
}