Skip to content

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/v1

The 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/json

Common query parameters ​

Collection endpoints that paginate accept these optional query parameters:

ParameterTypeDefaultDescription
pageinteger1Page number.
per_pageinteger15Number of records per page.

Paginated responses include the named collection key, such as riders, engines, or transactions, together with pagination metadata.

Endpoint summary ​

MethodPathAuthDescription
POST/loginNoAuthenticate a financier.
GET/ridersYesList riders.
POST/rider/createYesCreate a rider.
GET/rider/{rider}YesRetrieve a rider.
PUT/rider/{rider}/updateYesUpdate a rider.
DELETE/rider/{rider}/deleteYesDelete a rider.
PATCH/rider/{rider}/suspendYesSuspend a rider.
PATCH/rider/{rider}/resumeYesResume a rider.
GET/enginesYesList engines.
GET/engine/{engine}YesRetrieve an engine.
GET/codesYesList codes.
GET/claimsYesList claims.
GET/claim/{claim}YesRetrieve a claim.
GET/claim/{claim}/codeYesRetrieve a claim's code.
GET/claim/{claim}/transactionYesRetrieve a claim's transaction.
GET/creditsYesList credits.
POST/credit/createYesCreate a credit.
POST/credit/previewYesPreview a credit.
GET/credit/{credit}YesRetrieve a credit.
PUT/credit/{credit}/updateYesUpdate a credit.
DELETE/credit/{credit}/deleteYesDelete a credit.
GET/credit/{credit}/paymentsYesList payments for a credit.
GET/credit/{credit}/transactionsYesList transactions for a credit.
GET/transactionsYesList transactions.
POST/uploadYesUpload a file.

Authentication ​

Login ​

http
POST /login
Content-Type: application/json
Accept: application/json

Request body:

FieldTypeRequiredDescription
client_idstringYesIntegration client identifier issued to your organisation.
client_secretstringYesIntegration 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=15

Response envelope: { "riders": [...] } with pagination metadata.

Create a rider ​

http
POST /rider/create
Content-Type: application/json

Required fields are firstname, lastname, phone, address, state, country, earnings, identification, ownership, passport, and signature. Optional fields are email and bvn.

FieldTypeRules
firstnamestringRequired; letters, dashes, and underscores.
lastnamestringRequired; letters, dashes, and underscores.
emailstringOptional; valid email and unique among riders.
phonestringRequired; Nigerian phone format and unique.
addressstringRequired.
statestringRequired.
countrystringRequired.
bvnstringOptional; unique 11-digit value.
earningsnumberRequired; minimum 0.
identificationURLRequired.
ownershipURLRequired.
passportURLRequired.
signatureURLRequired.

Response envelope: { "rider": { ... } }.

Retrieve a rider ​

http
GET /rider/{rider}

Response envelope: { "rider": { ... } }.

Update a rider ​

http
PUT /rider/{rider}/update
Content-Type: application/json

The 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}/delete

Successful response:

json
{ "message": "Rider deleted successfully" }

Suspend or resume a rider ​

http
PATCH /rider/{rider}/suspend
PATCH /rider/{rider}/resume

Successful 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=15

Response 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=15

Response 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=15

Response envelope: { "claims": [...] } with pagination metadata.

http
GET /claim/{claim}
GET /claim/{claim}/code
GET /claim/{claim}/transaction

These endpoints provide claim details and related lookups.

Credits ​

List credits ​

http
GET /credits

Response envelope: { "credits": [...] }. This endpoint currently returns all credits and does not apply pagination parameters.

Create a credit ​

http
POST /credit/create
Content-Type: application/json

Request body:

FieldTypeRequiredDescription
riderintegerYesExisting rider ID.
total_amountnumberYesCredit amount; minimum 0.
number_of_repaymentsintegerYesMinimum 1.
repayment_per_swapnumberYesRepayment amount per swap; minimum 0.

Response envelope: { "credit": { ... } }.

Preview a credit ​

http
POST /credit/preview
Content-Type: application/json

The 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}/delete

The 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}/payments

Response envelope: { "payments": [...] }.

List credit transactions ​

http
GET /credit/{credit}/transactions?page=1&per_page=15

Response envelope: { "transactions": [...] } with pagination metadata.

Transactions ​

List transactions ​

http
GET /transactions?page=1&per_page=15

Response 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-data

Form field:

FieldTypeRequiredDescription
filefileYesFile 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.