Skip to content

Response Format ​

All Cashfin Business API responses follow a consistent JSON structure for easy parsing and error handling.

Success Responses ​

Standard Success Response ​

json
{
  "success": true,
  "message": "Operation completed successfully",
  "data": {
    "_id": "507f1f77bcf86cd799439011",
    "title": "Premium Widget",
    "price": 1999.99
  }
}

List Response (with Pagination) ​

json
{
  "success": true,
  "data": [
    {
      "_id": "507f1f77bcf86cd799439011",
      "title": "Premium Widget",
      "price": 1999.99
    },
    {
      "_id": "507f191e810c19729de860ea",
      "title": "Standard Widget",
      "price": 999.99
    }
  ],
  "meta": {
    "total": 45,
    "page": 1,
    "limit": 10,
    "pages": 5
  }
}

Creation Response ​

json
{
  "success": true,
  "message": "Product created successfully",
  "data": {
    "_id": "507f1f77bcf86cd799439011",
    "title": "New Product",
    "sku": "PRD-001",
    "price": 1999.99,
    "stock": 100
  }
}

Update Response ​

json
{
  "success": true,
  "message": "Product updated successfully",
  "data": {
    "_id": "507f1f77bcf86cd799439011",
    "modified": 1
  }
}

Response Fields ​

Common Fields ​

FieldTypeDescription
successbooleanIndicates if the request was successful
messagestringHuman-readable status message
dataobject or arrayThe response payload
metaobjectPagination and metadata (for lists)

Resource Fields ​

Most resources include these standard fields:

FieldTypeDescription
_idstringUnique identifier (MongoDB ObjectID)
createdatstringISO 8601 creation timestamp
updatedatstringISO 8601 last update timestamp
activebooleanWhether the resource is active
sourceoriginstringOrigin of the resource (api, dashboard, etc.)

Error Responses ​

Error responses include additional fields for debugging:

json
{
  "success": false,
  "error": "Brief error description",
  "errors": {
    "field": "Field-specific error"
  },
  "message": "Detailed error message"
}

See Error Handling for complete error documentation.

Data Types in Responses ​

Timestamps ​

All timestamps are returned in ISO 8601 format (UTC):

json
{
  "createdat": "2024-01-15T10:30:00.000Z",
  "updatedat": "2024-01-16T14:45:00.000Z"
}

ObjectIDs ​

MongoDB ObjectIDs are returned as 24-character hex strings:

json
{
  "_id": "507f1f77bcf86cd799439011",
  "businessid": "507f191e810c19729de860ea"
}

Monetary Values ​

Currency amounts are returned as floating-point numbers:

json
{
  "price": 1999.99,
  "amount": 5000.0,
  "fees": 50.5
}

Currency

All monetary values are in the business's configured currency (usually KES for Kenyan Shillings).

Nested Objects ​

Related data may be included as nested objects:

json
{
  "_id": "507f1f77bcf86cd799439011",
  "title": "Premium Subscription",
  "customer": {
    "_id": "507f191e810c19729de860ea",
    "name": "John Doe",
    "email": "[email protected]"
  },
  "product": {
    "_id": "507f1f77bcf86cd799439012",
    "title": "Monthly Plan",
    "price": 999.0
  }
}

Arrays ​

Arrays contain collections of objects:

json
{
  "items": [
    {
      "itemid": "507f1f77bcf86cd799439011",
      "title": "Widget A",
      "quantity": 2,
      "rate": 500.0
    },
    {
      "itemid": "507f1f77bcf86cd799439012",
      "title": "Widget B",
      "quantity": 1,
      "rate": 750.0
    }
  ]
}

Pagination Metadata ​

List endpoints include pagination information in the meta object:

json
{
  "meta": {
    "total": 150,
    "page": 2,
    "limit": 10,
    "pages": 15
  }
}
FieldDescription
totalTotal number of records
pageCurrent page number
limitRecords per page
pagesTotal number of pages

Handling Responses ​

JavaScript/TypeScript ​

typescript
interface ApiResponse<T> {
  success: boolean;
  message?: string;
  data: T;
  meta?: {
    total: number;
    page: number;
    limit: number;
    pages: number;
  };
}

interface Product {
  _id: string;
  title: string;
  price: number;
  stock: number;
}

async function getProducts(): Promise<Product[]> {
  const response = await fetch(
    "https://api.cashfin.africa/business/product/list",
    {
      headers: { Authorization: API_KEY },
    }
  );

  const result: ApiResponse<Product[]> = await response.json();

  if (!result.success) {
    throw new Error("Failed to fetch products");
  }

  return result.data;
}

PHP ​

php
<?php
function getProducts(): array
{
    $response = file_get_contents(
        'https://api.cashfin.africa/business/product/list',
        false,
        stream_context_create([
            'http' => [
                'header' => "Authorization: {$apiKey}\r\n"
            ]
        ])
    );

    $result = json_decode($response, true);

    if (!$result['success']) {
        throw new Exception('Failed to fetch products');
    }

    return $result['data'];
}

Python ​

python
from typing import TypedDict, List

class Product(TypedDict):
    _id: str
    title: str
    price: float
    stock: int

def get_products() -> List[Product]:
    response = requests.get(
        'https://api.cashfin.africa/business/product/list',
        headers={'Authorization': API_KEY}
    )

    result = response.json()

    if not result['success']:
        raise Exception('Failed to fetch products')

    return result['data']

HTTP Status Codes ​

The API uses standard HTTP status codes:

CodeMeaningResponse Body
200Success{ "success": true, ... }
201Created{ "success": true, ... }
400Bad Request{ "success": false, "error": "..." }
401Unauthorized{ "success": false, "message": "..." }
404Not Found{ "success": false, "error": "..." }
429Rate Limited{ "success": false, "error": "...", "retry_after": 30 }
500Server Error{ "success": false, "error": "..." }

Cashfin Business API Documentation