Appearance
Financier API v1
This reference documents the Financier API v1 integration.
Base URL
text
Sandbox: https://sandbox.swapenergies/api/v1
Production: https://portal.swapenergies/api/v1The API is JSON-only. Use the base URL for the environment you are working with.
Authentication
POST /login is public. Every other route requires an access token:
http
Authorization: Bearer <access-token>
Accept: application/jsonCommon query parameters
Collection endpoints that paginate accept these optional query parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | 1 | Page number. |
per_page | integer | 15 | Number of records per page. |
Paginated responses include the named collection key, such as riders, engines, or transactions, together with pagination metadata.
Endpoint summary
| Method | Path | Auth | Description |
|---|---|---|---|
POST | /login | No | Authenticate a financier. |
GET | /riders | Yes | List riders. |
POST | /rider/create | Yes | Create a rider. |
GET | /rider/{rider} | Yes | Retrieve a rider. |
PUT | /rider/{rider}/update | Yes | Update a rider. |
DELETE | /rider/{rider}/delete | Yes | Delete a rider. |
PATCH | /rider/{rider}/suspend | Yes | Suspend a rider. |
PATCH | /rider/{rider}/resume | Yes | Resume a rider. |
GET | /engines | Yes | List engines. |
GET | /engine/{engine} | Yes | Retrieve an engine. |
GET | /codes | Yes | List codes. |
GET | /claims | Yes | List claims. |
GET | /claim/{claim} | Yes | Retrieve a claim. |
GET | /claim/{claim}/code | Yes | Retrieve a claim's code. |
GET | /claim/{claim}/transaction | Yes | Retrieve a claim's transaction. |
GET | /credits | Yes | List credits. |
POST | /credit/create | Yes | Create a credit. |
POST | /credit/preview | Yes | Preview a credit. |
GET | /credit/{credit} | Yes | Retrieve a credit. |
PUT | /credit/{credit}/update | Yes | Update a credit. |
DELETE | /credit/{credit}/delete | Yes | Delete a credit. |
GET | /credit/{credit}/payments | Yes | List payments for a credit. |
GET | /credit/{credit}/transactions | Yes | List transactions for a credit. |
GET | /transactions | Yes | List transactions. |
POST | /upload | Yes | Upload a file. |
Authentication
Login
http
POST /login
Content-Type: application/json
Accept: application/jsonRequest body:
| Field | Type | Required | Description |
|---|---|---|---|
client_id | string | Yes | Integration client identifier issued to your organisation. |
client_secret | string | Yes | Integration secret issued to your organisation. |
Example:
json
{
"client_id": "<your-client-id>",
"client_secret": "<your-client-secret>"
}Successful response:
json
{
"token": "<access-token>",
"expires_at": 1793270400
}expires_at is a Unix timestamp for token expiry. Invalid credentials return a validation error.
Riders
Rider route parameters use the rider identifier returned by the API.
List riders
http
GET /riders?page=1&per_page=15Response envelope: { "riders": [...] } with pagination metadata.
Create a rider
http
POST /rider/create
Content-Type: application/jsonRequired fields are firstname, lastname, phone, address, state, country, earnings, identification, ownership, passport, and signature. Optional fields are email and bvn.
| Field | Type | Rules |
|---|---|---|
firstname | string | Required; letters, dashes, and underscores. |
lastname | string | Required; letters, dashes, and underscores. |
email | string | Optional; valid email and unique among riders. |
phone | string | Required; Nigerian phone format and unique. |
address | string | Required. |
state | string | Required. |
country | string | Required. |
bvn | string | Optional; unique 11-digit value. |
earnings | number | Required; minimum 0. |
identification | URL | Required. |
ownership | URL | Required. |
passport | URL | Required. |
signature | URL | Required. |
Response envelope: { "rider": { ... } }.
Retrieve a rider
http
GET /rider/{rider}Response envelope: { "rider": { ... } }.
Update a rider
http
PUT /rider/{rider}/update
Content-Type: application/jsonThe request uses the same fields as creation except email is not accepted by the active update rules, and document URLs are optional and nullable. firstname, lastname, phone, address, state, country, and earnings remain required. bvn is optional and must be a unique 11-digit value.
Response envelope: { "rider": { ... } }.
Delete a rider
http
DELETE /rider/{rider}/deleteSuccessful response:
json
{ "message": "Rider deleted successfully" }Suspend or resume a rider
http
PATCH /rider/{rider}/suspend
PATCH /rider/{rider}/resumeSuccessful responses contain a message and the updated rider resource. The messages are Rider suspended successfully and Rider resumed successfully.
Engines
List engines
http
GET /engines?page=1&per_page=15Response envelope: { "engines": [...] } with pagination metadata.
Retrieve an engine
http
GET /engine/{engine}Response envelope: { "engine": { ... } }.
An engine resource includes its identifier, model, URL, serial number, status, allocation status, activation date, related financier, related rider, related stock, and timestamps.
Codes
List codes
http
GET /codes?page=1&per_page=15Response envelope: { "codes": [...] } with pagination metadata. Each code includes its id, value, claims_remaining, related order and claim when loaded, rider name, validation timestamp, and timestamps.
Claims
List claims
http
GET /claims?page=1&per_page=15Response envelope: { "claims": [...] } with pagination metadata.
Claim detail and related lookups
http
GET /claim/{claim}
GET /claim/{claim}/code
GET /claim/{claim}/transactionThese endpoints provide claim details and related lookups.
Credits
List credits
http
GET /creditsResponse envelope: { "credits": [...] }. This endpoint currently returns all credits and does not apply pagination parameters.
Create a credit
http
POST /credit/create
Content-Type: application/jsonRequest body:
| Field | Type | Required | Description |
|---|---|---|---|
rider | integer | Yes | Existing rider ID. |
total_amount | number | Yes | Credit amount; minimum 0. |
number_of_repayments | integer | Yes | Minimum 1. |
repayment_per_swap | number | Yes | Repayment amount per swap; minimum 0. |
Response envelope: { "credit": { ... } }.
Preview a credit
http
POST /credit/preview
Content-Type: application/jsonThe preview endpoint accepts the same credit inputs as the create endpoint and returns a preview response without creating a credit.
Retrieve, update, or delete a credit
http
GET /credit/{credit}
PUT /credit/{credit}/update
DELETE /credit/{credit}/deleteThe update body uses the same four fields and validation rules as credit creation.
The detail and update responses use { "credit": { ... } }. A successful delete returns { "message": "Credit deleted successfully." }.
A credit resource includes rider details, amount and repayment fields, paid and skipped sequences, remaining balance, credit type, agreement media, repayment history, activation/completion times, and timestamps.
List credit payments
http
GET /credit/{credit}/paymentsResponse envelope: { "payments": [...] }.
List credit transactions
http
GET /credit/{credit}/transactions?page=1&per_page=15Response envelope: { "transactions": [...] } with pagination metadata.
Transactions
List transactions
http
GET /transactions?page=1&per_page=15Response envelope: { "transactions": [...] } with pagination metadata. A transaction resource includes id, reference, pid, platform, description, amount, transactable, agent, verification and success flags, status, type, and timestamps.
File uploads
Upload a file
http
POST /upload
Content-Type: multipart/form-dataForm field:
| Field | Type | Required | Description |
|---|---|---|---|
file | file | Yes | File to upload. |
Successful response:
json
{
"message": "File uploaded successfully.",
"file": "<file-reference>"
}Error responses
Validation failures normally return HTTP 422:
json
{
"message": "The given data was invalid.",
"errors": {
"field": ["The field is required."]
}
}Unauthenticated requests to protected endpoints require a valid bearer token. Requests for unknown resource identifiers return a not-found response.