A API IMaliWay é organizada em torno de REST. Aceita corpos de pedido em JSON, devolve respostas em JSON e utiliza códigos de resposta HTTP padrão. Integre pagamentos M-Pesa, e-Mola, mKesh e iMali na sua aplicação em minutos.
Métodos de Pagamento Disponíveis
M-Pesa
e-Mola
mKesh
iMali
Fluxos de Pagamento
01
Push Payment
Cria uma transação e envia notificação push ao cliente para confirmar.
02
Pay-By-Link
Gera link e envia SMS. Cliente escolhe método ao clicar.
03
QR Code
Gera QR Code dinâmico para pagamento com conta iMali.
Autenticação
A IMaliWay utiliza encriptação RSA-ES-PKCS1 para gerar uma chave privada a partir do api_key e publicKey fornecidos pela Paytek. Este token deve ser enviado em cada pedido.
1
Receber credenciais da Paytek
Após registo como parceiro, a Paytek fornece api_key e publicKey para o ambiente Sandbox.
2
Gerar a privateKey
Encripte o api_key com RSA-ES-PKCS1 usando a publicKey para obter a privateKey.
3
Incluir em cada pedido
Envie Authorization: Bearer {privateKey} e X-Client-ID em todos os headers.
Nunca exponha a privateKey em código do lado do cliente. Gere-a sempre no servidor.
Headers obrigatórios em todos os pedidos
HeaderValor
AuthorizationBearer <privateKey>
X-Client-ID<your_client_id>
Content-Typeapplication/json
Acceptapplication/json
Códigos de Resposta
A API usa códigos no estilo HTTP para indicar sucesso ou falha.
Sucesso
200Success
201Success — Created
Erros
400partner_transaction_id com menos de 12 caracteres
401Pagamento não aceite / transação expirada
402Valor inválido (negativo ou zero)
404Cliente/loja/conta inválida
405Método não permitido
406partner_transaction_id já em uso
407Saldo insuficiente
408Conta/loja bloqueada
409Valor não disponível
422Pedido mal formatado
500Token inválido
501Limite KYC do cliente atingido
502Limite KYC da loja atingido
Push Payment
POST/payments
Cria uma transação de pagamento Push (C2B) para qualquer método disponível no gateway: M-Pesa, e-Mola, mKesh ou conta digital iMali. O cliente recebe uma notificação push no seu telemóvel para confirmar o pagamento.
Parâmetros
Parâmetro
Tipo
Estado
Descrição
client_account_number
string
obrigatório
Número de telefone da carteira (M-Pesa: 84xxxxxxx) ou conta iMali (9 dígitos)
amount
decimal
obrigatório
Valor a pagar. Mínimo 10 MT. Ex: 1000.00
store_account_number
string
obrigatório
Número da conta iMali da loja (conta STORE, 9 dígitos)
partner_transaction_id
string
obrigatório
ID único da transação gerado pelo parceiro. Exatamente 12 caracteres alfanuméricos. Ex: MPS25KLHLIKA
payment_method
enum mpesa | emola | mkesh | imali
obrigatório
Método de pagamento em minúsculas
payment_type
enum push
fixo
Fixo: "push"
transaction_type
enum C2B
fixo
Fixo: "C2B"
expiration_datetime
string
opcional
Data/hora de expiração. Formato: Y-m-d H:i:s. Padrão: 2 minutos
Gera um link de pagamento e envia via SMS para o cliente. O link redireciona para a página web do gateway, onde o cliente escolhe o método de pagamento. Suporta tipos DIRECT, RECURRING e DONATION.
Parâmetros
Parâmetro
Tipo
Estado
Descrição
title
string
obrigatório
Título do link de pagamento
short_description
string
obrigatório
Descrição breve do link
amount
decimal
obrigatório
Valor a pagar
type
enum DIRECT | RECURRING | DONATION
obrigatório
Tipo de link
store_account_number
string
obrigatório
Número da conta STORE iMali
customer_link_id
string
obrigatório
ID personalizado do link (deve ser único)
send_to_phone
string
obrigatório
Número de telefone para enviar o link via SMS
partner_transaction_id
string
obrigatório
ID único da transação. Exatamente 12 caracteres
payment_method
enum imali
fixo
Fixo: "imali"
payment_type
enum link
fixo
Fixo: "link"
transaction_type
enum C2B
fixo
Fixo: "C2B"
expiration_datetime
string
opcional
Data/hora de expiração. Formato: Y-m-d H:i:s
thumbnail_image
string
opcional
URL da imagem associada ao link
payment_frequence
enum DAILY | WEEKLY | MONTHLY | YEARLY
opcional
Frequência de pagamento (apenas RECURRING)
curl -X POST 'https://paytek-africa.net:11901/api/parts/imaliway/v2/payments' \
-H 'Authorization: Bearer {privateKey}' \
-H 'X-Client-ID: {client_id}' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
--data '{"title":"Pagamento de Serviços","short_description":"PAY BY LINK","amount":"500.00","type":"DIRECT","store_account_number":"290000001","customer_link_id":"LINK_PARTNER_001","send_to_phone":"846002000","partner_transaction_id":"SJM5LYOVU5GJ","payment_method":"imali","payment_type":"link","transaction_type":"C2B"}'
Gera um QR Code dinâmico para pagamento com conta iMali. DYNAMIC_TERMINAL: valor variável, validade de 2 minutos (sem título/descrição). DYNAMIC_TICKET: valor fixo, expiração e título/descrição obrigatórios, sem refresh.
Parâmetros
Parâmetro
Tipo
Estado
Descrição
store_account_number
string
obrigatório
Número da conta STORE iMali
amount
decimal
obrigatório
Valor a pagar
partner_transaction_id
string
obrigatório
ID único da transação. Exatamente 12 caracteres
payment_method
enum imali
fixo
Fixo: "imali"
payment_type
enum qrcode
fixo
Fixo: "qrcode"
qrcode_type
enum DYNAMIC_TERMINAL | DYNAMIC_TICKET
obrigatório
DYNAMIC_TERMINAL: valor variável, 2 min. DYNAMIC_TICKET: valor fixo, requer expiração/título/descrição
transaction_type
enum C2B
fixo
Fixo: "C2B"
title
string
opcional
Título (obrigatório para DYNAMIC_TICKET)
description
string
opcional
Descrição (obrigatório para DYNAMIC_TICKET)
expiration_datetime
string
opcional
Data/hora de expiração (obrigatório para DYNAMIC_TICKET)
Verifica o estado de uma transação gerada via Push, Link ou QR Code. Para Push/Link usar partner_transaction_id. Para QR Code usar qrcode_token. Retorna PENDING, SUCCESS, FAILED ou EXPIRED.
Atualiza a validade de um QR Code DYNAMIC_TERMINAL expirado. Estende a validade por mais 2 minutos e altera o status para PENDING. Não disponível para DYNAMIC_TICKET.
Verifica as taxas que serão cobradas numa transferência B2C antes de a executar. Retorna fee, total e nome mascarado do destinatário. No ambiente Sandbox, masked_name retorna "Indisponível".
Parâmetros
Parâmetro
Tipo
Estado
Descrição
client_account_number
string
obrigatório
Número de telefone ou conta iMali do destinatário
amount
decimal
obrigatório
Valor a transferir (decimal, ex: 100.00)
store_account_number
string
obrigatório
Número da conta BUSINESS (não Store) de onde sai o dinheiro
Executa uma transferência B2C (Business-to-Customer). Utiliza os mesmos parâmetros do método B2C Check. A conta store_account_number deve ser a conta BUSINESS (não Store).
Webhooks permitem que o sistema notifique automaticamente a sua aplicação sempre que ocorrer um evento importante, como a confirmação de um pagamento. Elimina a necessidade de polling constante.
A adesão ao webhook é feita automaticamente no acto da parceria. O parceiro deve fornecer uma callback_url e receberá uma webhook_secret para validação.