agentsclimarketplace

Mom factura payments

Skill ithustle/momenu-skills/skills/mom-factura-payments

Agent Skills for Mom Factura Payment API — Angolan payments (MCX, E-kwanza, Bank Reference) for LLM agents

Install
npx -y skills add ithustle/momenu-skills --skill mom-factura-payments

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Integrate Mom Factura Payment API for Angolan payment methods (Multicaixa Express, Bank Reference). Use when implementing checkout flows, processing payments, generating SAFT-AO compliant invoices, or handling product-based billing with IVA tax.

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

5.7 KB, ~1.4k tokens by cl100k_base, as published. Nobody here has run it

Mom Factura Payments Integration

Process payments for Angolan payment methods with automatic SAFT-AO invoice generation.

Base URL: https://api.momenu.online

Authentication

All requests require the x-api-key header.

Content-Type: application/json
x-api-key: <MERCHANT_API_KEY>

Payment Methods

1. Multicaixa Express (MCX) - Immediate

POST /api/payment/mcx

Immediate payment. Creates order as PAID and generates invoice on success.

Required body:

  • paymentInfo.amount (number) - Kwanzas
  • paymentInfo.phoneNumber (string) - Format: 244XXXXXXXXX
  • instantWithdraw (boolean) - Must be true. Auto-payout (amount minus 2%) to the merchant's verified bank account on confirmation. See Instant Withdrawal.

Optional body:

  • products (array) - Items for detailed invoice
  • products[].id (string), products[].productName (string), products[].productPrice (number), products[].productQuantity (number)
  • products[].iva (number) - IVA rate 0-14, default 14
  • customer (object) - name (string), nif (string), phone (string)
  • simulateResult (string) - QA only: success, insufficient_balance, timeout, rejected, invalid_number

Example body:

{
  "paymentInfo": { "amount": 5000, "phoneNumber": "244923456789" },
  "instantWithdraw": true
}

Success (200):

{
  "success": true,
  "transactionId": "abc123...",
  "invoiceUrl": "https://invoice-momenu.toquemedia.net/invoices/..."
}

2. Bank Reference - Deferred

POST /api/payment/reference

Generates bank reference. Client pays via ATM or Internet Banking.

Required: paymentInfo.amount, instantWithdraw: true (see Instant Withdrawal) Optional: products, customer (same as MCX)

Success (200):

{
  "success": true,
  "operationId": "op-123...",
  "referenceNumber": "123456789",
  "entity": "12345",
  "dueDate": "2024-01-20"
}

Amount Validation

If both paymentInfo.amount and products are provided, they must match:

  • total = SUM(productPrice * productQuantity) for all products
  • Mismatch returns error AMOUNT_MISMATCH
  • Providing only one is valid (amount OR products)
  • Providing neither returns AMOUNT_MISMATCH

Webhook (Payment Confirmation)

Deferred Bank Reference payments are confirmed via webhook. Configure the webhook URL in your apiConfigs document.

When a payment is confirmed, the API sends two sequential events:

Event 1: payment.confirmed — Sent immediately after order status is updated to PAID:

{
  "event": "payment.confirmed",
  "merchantTransactionId": "abc123...",
  "ekwanzaTransactionId": "EKZ456...",
  "operationStatus": "1",
  "operationData": { ... }
}

Event 2: invoice.created — Sent after invoice PDF is generated and uploaded:

{
  "event": "invoice.created",
  "merchantTransactionId": "abc123...",
  "ekwanzaTransactionId": "EKZ456...",
  "operationStatus": "1",
  "operationData": { ... },
  "invoiceUrl": "https://invoice-momenu.toquemedia.net/invoices/..."
}

Non-paid events (operationStatus 3, 4, 5) are sent without the event field for backward compatibility.

operationStatus values: "1" Paid · "3" Cancelled/Expired · "4" Failed/Refused · "5" Error

Fallback (status endpoint):

Reference: GET /api/payment/reference/status/:operationId - Returns payment.status

When paid, both return invoiceUrl.

Instant Withdrawal

instantWithdraw is required and must be true on /api/payment/mcx and /api/payment/reference. The payment value — minus the 2% fee — is transferred automatically (via KWiK) to the merchant's verified bank account as soon as the payment is confirmed.

  • Applies to: Multicaixa Express (/api/payment/mcx) and Bank Reference (/api/payment/reference).
  • Requires a verified (approved) bank account for the merchant. Without it, the payment request is rejected.
  • The flag is read only from the order created at payment time — it cannot be forced later via the status/polling request.
  • Amounts above the per-withdrawal ceiling stay in the merchant balance for a manual withdrawal.

⚠️ Required (since 2026-06-22): requests to /api/payment/mcx and /api/payment/reference that omit instantWithdraw (or send false) are rejected with INSTANT_WITHDRAW_REQUIRED (HTTP 400). Always send "instantWithdraw": true.

Error Codes

CodeDescription
MISSING_API_KEYx-api-key header missing
INVALID_API_KEYKey invalid or inactive
DOMAIN_NOT_ALLOWEDOrigin not registered
INVALID_AMOUNTInvalid amount
AMOUNT_MISMATCHamount != SUM(products)
INSTANT_WITHDRAW_REQUIREDinstantWithdraw required and must be true (MCX/Reference)
MISSING_PHONEPhone required (MCX)
MISSING_RESTAURANT_IDMerchant not identified
RATE_LIMIT_EXCEEDED100 req/min exceeded
PAYMENT_RATE_LIMIT_EXCEEDED20 payment req/min exceeded
INTERNAL_ERRORServer error

Error format: { "success": false, "error": "message", "code": "ERROR_CODE" }

Fees

2% processing fee on all payments: feeAmount = totalAmount * 0.02

Notes

  • Phone format: 244XXXXXXXXX (12 digits)
  • IVA defaults to 14%. Use 0 for exempt.
  • Invoice PDFs hosted on CDN, returned as invoiceUrl
  • MCX is immediate; Reference is confirmed via webhook (status polling as fallback)

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.