openapi: 3.0.3
info:
title: 'ClicPay API Documentation'
description: 'API ClicPay v2 - M-Pesa, e-Mola, NetShop e autenticação'
version: 1.0.0
servers:
-
url: 'https://clicpay.co.mz'
tags:
-
name: 'Transações M-Pesa'
description: ''
-
name: 'Transações eMola'
description: ''
-
name: 'Transações Mkesh'
description: ''
-
name: 'Transações NetShop'
description: ''
-
name: 'Estado de Transações'
description: ''
-
name: Carteiras
description: ''
-
name: Autenticação
description: ''
-
name: 'Carteiras e Subcarteiras'
description: ''
-
name: 'Transações M-Pesa — B2C via Split'
description: ''
-
name: 'Transações Mkesh — B2C via Split'
description: ''
-
name: 'Transações eMola — B2C via Split'
description: ''
-
name: 'Transações — Split Collect'
description: ''
components:
securitySchemes:
default:
type: http
scheme: bearer
description: 'Para testar a API, insira seu token Bearer no campo "Authorize". Você pode obter um token através do endpoint de autenticação da API.'
security:
-
default: []
paths:
'/api/v2/wallets/{wallet_id}/c2b/mpesa':
post:
summary: ''
operationId: postApiV2WalletsWallet_idC2bMpesa
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Transação iniciada com sucesso'
clicpay_reference: CPAYMPSESC2BABCDE12345
status: pending
transaction_id: 789
split_summary:
direct: []
collect: []
properties:
message:
type: string
example: 'Transação iniciada com sucesso'
clicpay_reference:
type: string
example: CPAYMPSESC2BABCDE12345
status:
type: string
example: pending
transaction_id:
type: integer
example: 789
split_summary:
type: object
properties:
direct:
type: array
example: []
collect:
type: array
example: []
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
422:
description: ''
content:
application/json:
schema:
type: object
example:
errors:
splits.0.wallet_split_id:
- 'O split não pertence a esta carteira ou não é dynamic_load.'
properties:
errors:
type: object
properties:
splits.0.wallet_split_id:
type: array
example:
- 'O split não pertence a esta carteira ou não é dynamic_load.'
items:
type: string
tags:
- 'Transações M-Pesa'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
msisdn:
type: string
description: 'MSISDN do pagador.'
example: '841234567'
amount:
type: number
description: 'Valor total a cobrar (1–150 000 MZN).'
example: 1000.0
reference_description:
type: string
description: 'Descrição visível ao pagador (3–32 caracteres).'
example: 'Pagamento de serviços'
internal_notes:
type: string
description: 'optional Notas internas (máx. 255 caracteres).'
example: 'Pedido #9001'
splits:
type: array
description: 'optional Alocações dinâmicas para sub-carteiras do tipo dynamic_load desta carteira. Opcional — omitir mantém o comportamento normal.'
example:
- architecto
items:
type: string
required:
- msisdn
- amount
- reference_description
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
-
in: path
name: wallet
description: 'ID da carteira M-Pesa.'
example: 12
required: true
schema:
type: integer
'/api/v2/wallets/{wallet_id}/c2b/mpesa/direct':
post:
summary: ''
operationId: postApiV2WalletsWallet_idC2bMpesaDirect
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Transação iniciada com sucesso'
clicpay_reference: CPAYMPSESC2BABCDE12345
status: pending
transaction_id: 789
split_summary:
direct: []
collect: []
properties:
message:
type: string
example: 'Transação iniciada com sucesso'
clicpay_reference:
type: string
example: CPAYMPSESC2BABCDE12345
status:
type: string
example: pending
transaction_id:
type: integer
example: 789
split_summary:
type: object
properties:
direct:
type: array
example: []
collect:
type: array
example: []
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
422:
description: ''
content:
application/json:
schema:
type: object
example:
errors:
splits.0.value_type:
- 'O campo value_type deve ser percentage ou amount.'
properties:
errors:
type: object
properties:
splits.0.value_type:
type: array
example:
- 'O campo value_type deve ser percentage ou amount.'
items:
type: string
tags:
- 'Transações M-Pesa'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
msisdn:
type: string
description: 'MSISDN do pagador.'
example: '841234567'
amount:
type: number
description: 'Valor total a cobrar (1–150 000 MZN).'
example: 1000.0
reference_description:
type: string
description: 'Descrição visível ao pagador (3–32 caracteres).'
example: 'Pagamento de serviços'
internal_notes:
type: string
description: 'optional Notas internas (máx. 255 caracteres).'
example: 'Pedido #9001'
splits:
type: array
description: 'optional Alocações dinâmicas para sub-carteiras do tipo dynamic_load desta carteira. Opcional — omitir mantém o comportamento normal.'
example:
- architecto
items:
type: string
required:
- msisdn
- amount
- reference_description
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
-
in: path
name: wallet
description: 'ID da carteira M-Pesa.'
example: 12
required: true
schema:
type: integer
'/api/v2/wallets/{wallet_id}/b2c/mpesa':
post:
summary: ''
operationId: postApiV2WalletsWallet_idB2cMpesa
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Transação iniciada com sucesso'
clicpay_reference: CP123456789
status: pending
transaction_id: 124
properties:
message:
type: string
example: 'Transação iniciada com sucesso'
clicpay_reference:
type: string
example: CP123456789
description: 'Referência única da transação'
status:
type: string
example: pending
description: 'Status atual (pending/successful/failed)'
transaction_id:
type: integer
example: 124
description: 'ID interno da transação'
400:
description: ''
content:
application/json:
schema:
type: object
example:
errors:
msisdn:
- 'Número de telefone inválido'
amount:
- 'Valor deve ser entre 1 e 50000'
properties:
errors:
type: object
properties:
msisdn:
type: array
example:
- 'Número de telefone inválido'
items:
type: string
amount:
type: array
example:
- 'Valor deve ser entre 1 e 50000'
items:
type: string
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
403:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Acesso negado à carteira'
properties:
message:
type: string
example: 'Acesso negado à carteira'
tags:
- 'Transações M-Pesa'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
msisdn:
type: string
description: 'Número de telefone'
example: '841234567'
amount:
type: number
description: 'Valor da transação (1-50000)'
example: 500.0
reference_description:
type: string
description: 'Descrição da referência (3-32 caracteres)'
example: 'Compra online'
internal_notes:
type: string
description: 'optional Notas internas (máx 255 caracteres)'
example: 'Pedido #12345'
required:
- msisdn
- amount
- reference_description
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
'/api/v2/wallets/{wallet_id}/c2b/emola':
post:
summary: ''
operationId: postApiV2WalletsWallet_idC2bEmola
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Transação iniciada com sucesso'
clicpay_reference: CPAYEMOLAC2BABCDE12345
status: pending
transaction_id: 789
provider_reference: null
provider_response_code: '0'
split_summary:
direct:
-
wallet_split_id: 42
mode: b2c_direct
allocated: 300.0
recipients:
-
msisdn: '841234567'
amount: 300.0
collect:
-
wallet_split_id: 43
mode: wallet_collect
allocated: 200.0
properties:
message:
type: string
example: 'Transação iniciada com sucesso'
clicpay_reference:
type: string
example: CPAYEMOLAC2BABCDE12345
description: 'Referência única da transação ClicPay.'
status:
type: string
example: pending
description: 'Estado actual: `pending` | `successful` | `failed`.'
transaction_id:
type: integer
example: 789
provider_reference:
type: string
example: null
nullable: true
provider_response_code:
type: string
example: '0'
split_summary:
type: object
properties:
direct:
type: array
example:
-
wallet_split_id: 42
mode: b2c_direct
allocated: 300
recipients:
-
msisdn: '841234567'
amount: 300
items:
type: object
properties:
wallet_split_id:
type: integer
example: 42
mode:
type: string
example: b2c_direct
allocated:
type: number
example: 300.0
recipients:
type: array
example:
-
msisdn: '841234567'
amount: 300
items:
type: object
properties:
msisdn:
type: string
example: '841234567'
amount:
type: number
example: 300.0
collect:
type: array
example:
-
wallet_split_id: 43
mode: wallet_collect
allocated: 200
items:
type: object
properties:
wallet_split_id:
type: integer
example: 43
mode:
type: string
example: wallet_collect
allocated:
type: number
example: 200.0
description: 'Presente quando splits[] foi enviado. `direct` lista B2C imediatos; `collect` lista acumulações. Splits ignorados (inactivos, limite atingido) não aparecem.'
400:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Erro do provedor'
clicpay_reference: CPAY...
status: failed
properties:
message:
type: string
example: 'Erro do provedor'
clicpay_reference:
type: string
example: CPAY...
description: 'Referência única da transação ClicPay.'
status:
type: string
example: failed
description: 'Estado actual: `pending` | `successful` | `failed`.'
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
403:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Sem acesso à carteira ou carteira inactiva.'
properties:
message:
type: string
example: 'Sem acesso à carteira ou carteira inactiva.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
errors:
splits.0.wallet_split_id:
- 'O split não pertence a esta carteira ou não é dynamic_load.'
properties:
errors:
type: object
properties:
splits.0.wallet_split_id:
type: array
example:
- 'O split não pertence a esta carteira ou não é dynamic_load.'
items:
type: string
tags:
- 'Transações eMola'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
msisdn:
type: string
description: 'MSISDN do pagador.'
example: '841234567'
amount:
type: number
description: 'Valor total a cobrar (1–150 000 MZN).'
example: 1000.0
reference_description:
type: string
description: 'Descrição visível ao pagador (3–32 caracteres).'
example: 'Pagamento de serviços'
internal_notes:
type: string
description: 'optional Notas internas (máx. 255 caracteres).'
example: 'Pedido #9001'
splits:
type: array
description: 'optional Alocações dinâmicas para sub-carteiras do tipo dynamic_load desta carteira. Opcional — omitir mantém o comportamento normal.'
example:
- architecto
items:
type: string
required:
- msisdn
- amount
- reference_description
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
-
in: path
name: wallet
description: 'ID da carteira eMola.'
example: 12
required: true
schema:
type: integer
'/api/v2/wallets/{wallet_id}/c2b/emola/direct':
post:
summary: ''
operationId: postApiV2WalletsWallet_idC2bEmolaDirect
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Transação iniciada com sucesso'
clicpay_reference: CPAYEMOLAC2BABCDE12345
status: pending
transaction_id: 789
split_summary:
direct: []
collect: []
properties:
message:
type: string
example: 'Transação iniciada com sucesso'
clicpay_reference:
type: string
example: CPAYEMOLAC2BABCDE12345
status:
type: string
example: pending
transaction_id:
type: integer
example: 789
split_summary:
type: object
properties:
direct:
type: array
example: []
collect:
type: array
example: []
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
422:
description: ''
content:
application/json:
schema:
type: object
example:
errors:
splits.0.value_type:
- 'O campo value_type deve ser percentage ou amount.'
properties:
errors:
type: object
properties:
splits.0.value_type:
type: array
example:
- 'O campo value_type deve ser percentage ou amount.'
items:
type: string
tags:
- 'Transações eMola'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
msisdn:
type: string
description: 'MSISDN do pagador.'
example: '841234567'
amount:
type: number
description: 'Valor total a cobrar (1–150 000 MZN).'
example: 1000.0
reference_description:
type: string
description: 'Descrição visível ao pagador (3–32 caracteres).'
example: 'Pagamento de serviços'
internal_notes:
type: string
description: 'optional Notas internas (máx. 255 caracteres).'
example: 'Pedido #9001'
splits:
type: array
description: 'optional Alocações dinâmicas para sub-carteiras do tipo dynamic_load desta carteira. Opcional — omitir mantém o comportamento normal.'
example:
- architecto
items:
type: string
required:
- msisdn
- amount
- reference_description
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
-
in: path
name: wallet
description: 'ID da carteira eMola.'
example: 12
required: true
schema:
type: integer
'/api/v2/wallets/{wallet_id}/b2c/emola':
post:
summary: ''
operationId: postApiV2WalletsWallet_idB2cEmola
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Transação iniciada com sucesso'
clicpay_reference: CP123456789
status: pending
transaction_id: 123
properties:
message:
type: string
example: 'Transação iniciada com sucesso'
clicpay_reference:
type: string
example: CP123456789
description: 'Referência única da transação'
status:
type: string
example: pending
description: 'Status atual (pending/successful/failed)'
transaction_id:
type: integer
example: 123
description: 'ID interno da transação'
400:
description: ''
content:
application/json:
schema:
type: object
example:
errors:
msisdn:
- 'Número de telefone inválido'
amount:
- 'Valor deve ser entre 1 e 50000'
properties:
errors:
type: object
properties:
msisdn:
type: array
example:
- 'Número de telefone inválido'
items:
type: string
amount:
type: array
example:
- 'Valor deve ser entre 1 e 50000'
items:
type: string
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
403:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Acesso negado à carteira'
properties:
message:
type: string
example: 'Acesso negado à carteira'
tags:
- 'Transações eMola'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
msisdn:
type: string
description: 'Número de telefone'
example: '841234567'
amount:
type: number
description: 'Valor da transação (1-50000)'
example: 1000.0
reference_description:
type: string
description: 'Descrição da referência (3-32 caracteres)'
example: 'Pagamento de serviços'
internal_notes:
type: string
description: 'optional Notas internas (máx 255 caracteres)'
example: 'Pagamento mensal'
required:
- msisdn
- amount
- reference_description
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
'/api/v2/wallets/{wallet_id}/c2b/mkesh':
post:
summary: ''
operationId: postApiV2WalletsWallet_idC2bMkesh
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Transação iniciada com sucesso'
clicpay_reference: CPAYKMESHC2BABCDE12345
status: pending
transaction_id: 789
split_summary:
direct: []
collect: []
properties:
message:
type: string
example: 'Transação iniciada com sucesso'
clicpay_reference:
type: string
example: CPAYKMESHC2BABCDE12345
status:
type: string
example: pending
transaction_id:
type: integer
example: 789
split_summary:
type: object
properties:
direct:
type: array
example: []
collect:
type: array
example: []
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
422:
description: ''
content:
application/json:
schema:
type: object
example:
errors:
splits.0.wallet_split_id:
- 'O split não pertence a esta carteira ou não é dynamic_load.'
properties:
errors:
type: object
properties:
splits.0.wallet_split_id:
type: array
example:
- 'O split não pertence a esta carteira ou não é dynamic_load.'
items:
type: string
tags:
- 'Transações Mkesh'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
msisdn:
type: string
description: 'MSISDN do pagador.'
example: '841234567'
amount:
type: number
description: 'Valor total a cobrar (1–150 000 MZN).'
example: 1000.0
reference_description:
type: string
description: 'Descrição visível ao pagador (3–32 caracteres).'
example: 'Pagamento de serviços'
internal_notes:
type: string
description: 'optional Notas internas (máx. 255 caracteres).'
example: 'Pedido #9001'
splits:
type: array
description: 'optional Alocações dinâmicas para sub-carteiras do tipo dynamic_load desta carteira. Opcional — omitir mantém o comportamento normal.'
example:
- architecto
items:
type: string
required:
- msisdn
- amount
- reference_description
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
-
in: path
name: wallet
description: 'ID da carteira Mkesh.'
example: 12
required: true
schema:
type: integer
'/api/v2/wallets/{wallet_id}/c2b/mkesh/direct':
post:
summary: ''
operationId: postApiV2WalletsWallet_idC2bMkeshDirect
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Transação iniciada com sucesso'
clicpay_reference: CPAYKMESHC2BABCDE12345
status: pending
transaction_id: 789
split_summary:
direct: []
collect: []
properties:
message:
type: string
example: 'Transação iniciada com sucesso'
clicpay_reference:
type: string
example: CPAYKMESHC2BABCDE12345
status:
type: string
example: pending
transaction_id:
type: integer
example: 789
split_summary:
type: object
properties:
direct:
type: array
example: []
collect:
type: array
example: []
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
422:
description: ''
content:
application/json:
schema:
type: object
example:
errors:
splits.0.value_type:
- 'O campo value_type deve ser percentage ou amount.'
properties:
errors:
type: object
properties:
splits.0.value_type:
type: array
example:
- 'O campo value_type deve ser percentage ou amount.'
items:
type: string
tags:
- 'Transações Mkesh'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
msisdn:
type: string
description: 'MSISDN do pagador.'
example: '841234567'
amount:
type: number
description: 'Valor total a cobrar (1–150 000 MZN).'
example: 1000.0
reference_description:
type: string
description: 'Descrição visível ao pagador (3–32 caracteres).'
example: 'Pagamento de serviços'
internal_notes:
type: string
description: 'optional Notas internas (máx. 255 caracteres).'
example: 'Pedido #9001'
splits:
type: array
description: 'optional Alocações dinâmicas para sub-carteiras do tipo dynamic_load desta carteira. Opcional — omitir mantém o comportamento normal.'
example:
- architecto
items:
type: string
required:
- msisdn
- amount
- reference_description
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
-
in: path
name: wallet
description: 'ID da carteira Mkesh.'
example: 12
required: true
schema:
type: integer
'/api/v2/wallets/{wallet_id}/b2c/mkesh':
post:
summary: ''
operationId: postApiV2WalletsWallet_idB2cMkesh
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Transação iniciada com sucesso'
clicpay_reference: CP123456789
status: pending
transaction_id: 124
properties:
message:
type: string
example: 'Transação iniciada com sucesso'
clicpay_reference:
type: string
example: CP123456789
description: 'Referência única da transação'
status:
type: string
example: pending
description: 'Status atual (pending/successful/failed)'
transaction_id:
type: integer
example: 124
description: 'ID interno da transação'
400:
description: ''
content:
application/json:
schema:
type: object
example:
errors:
msisdn:
- 'Número de telefone inválido'
amount:
- 'Valor deve ser entre 1 e 50000'
properties:
errors:
type: object
properties:
msisdn:
type: array
example:
- 'Número de telefone inválido'
items:
type: string
amount:
type: array
example:
- 'Valor deve ser entre 1 e 50000'
items:
type: string
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
403:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Acesso negado à carteira'
properties:
message:
type: string
example: 'Acesso negado à carteira'
tags:
- 'Transações Mkesh'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
msisdn:
type: string
description: 'Número de telefone'
example: '841234567'
amount:
type: number
description: 'Valor da transação (1-50000)'
example: 500.0
reference_description:
type: string
description: 'Descrição da referência (3-32 caracteres)'
example: 'Compra online'
internal_notes:
type: string
description: 'optional Notas internas (máx 255 caracteres)'
example: 'Pedido #12345'
required:
- msisdn
- amount
- reference_description
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
'/api/v2/wallets/{wallet_id}/card-payment':
post:
summary: ''
operationId: postApiV2WalletsWallet_idCardPayment
description: ''
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Sessão criada.'
clicpay_reference: '123456789'
status: pending
provider_reference: '123456789'
provider_response_code: '200'
provider_status_text: Pending
initiated_at: '2023-01-01T00:00:00Z'
completed_at: null
transaction_id: 123
checkout_url: 'https://netshop.example.com/checkout/abc123'
session_id: abc123
success_indicator: indicator123
properties:
message:
type: string
example: 'Sessão criada.'
description: 'Mensagem descritiva do status'
clicpay_reference:
type: string
example: '123456789'
description: 'Referência única da transação'
status:
type: string
example: pending
description: 'Status atual (pending/successful/failed)'
provider_reference:
type: string
example: '123456789'
description: 'Referência do provedor de pagamento'
provider_response_code:
type: string
example: '200'
description: 'Código de resposta do provedor'
provider_status_text:
type: string
example: Pending
description: 'Descrição do status do provedor'
initiated_at:
type: string
example: '2023-01-01T00:00:00Z'
description: 'Data e hora de início da transação (ISO 8601)'
completed_at:
type: string
example: null
description: 'Data e hora de conclusão da transação (ISO 8601)'
transaction_id:
type: integer
example: 123
description: 'ID interno da transação'
checkout_url:
type: string
example: 'https://netshop.example.com/checkout/abc123'
description: 'URL do checkout NetShop'
session_id:
type: string
example: abc123
description: 'ID da sessão NetShop'
success_indicator:
type: string
example: indicator123
description: 'Indicador de sucesso da sessão NetShop'
400:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Erro ao criar a sessão.'
clicpay_reference: '123456789'
status: failed
transaction_id: 123
provider_response_code: '400'
properties:
message:
type: string
example: 'Erro ao criar a sessão.'
description: 'Mensagem descritiva do status'
clicpay_reference:
type: string
example: '123456789'
description: 'Referência única da transação'
status:
type: string
example: failed
description: 'Status atual (pending/successful/failed)'
transaction_id:
type: integer
example: 123
description: 'ID interno da transação'
provider_response_code:
type: string
example: '400'
description: 'Código de resposta do provedor'
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
description: 'Mensagem descritiva do status'
403:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Acesso negado à carteira'
properties:
message:
type: string
example: 'Acesso negado à carteira'
description: 'Mensagem descritiva do status'
422:
description: ''
content:
application/json:
schema:
type: object
example:
errors:
amount:
- 'O campo valor é obrigatório.'
reference_description:
- 'O campo descrição da referência é obrigatório.'
properties:
errors:
type: object
properties:
amount:
type: array
example:
- 'O campo valor é obrigatório.'
items:
type: string
reference_description:
type: array
example:
- 'O campo descrição da referência é obrigatório.'
items:
type: string
tags:
- 'Transações NetShop'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
amount:
type: number
description: 'Valor do pagamento'
example: 1500.0
reference_description:
type: string
description: 'Descrição da referência (máx 100 caracteres)'
example: 'Pagamento de fatura'
first_name:
type: string
description: 'optional Primeiro nome do pagador'
example: João
nullable: true
last_name:
type: string
description: 'optional Último nome do pagador'
example: Silva
nullable: true
email:
type: string
description: 'optional Email do pagador'
example: QYvHk@example.com
nullable: true
phone:
type: string
description: 'optional Telefone do pagador'
example: '84 123 4567'
nullable: true
callback_url:
type: url
description: 'optional URL de retorno'
example: 'https://example.com/callback'
nullable: true
required:
- amount
- reference_description
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
-
in: path
name: wallet
description: 'ID da carteira NetShop'
example: 1234
required: true
schema:
type: integer
'/api/v2/transactions/{clicpay_reference}/status':
get:
summary: ''
operationId: getApiV2TransactionsClicpay_referenceStatus
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
clicpay_reference: CP123456789
status: successful
amount: 1000.0
message: 'Transação concluída com sucesso'
properties:
clicpay_reference:
type: string
example: CP123456789
description: 'Referência da transação'
status:
type: string
example: successful
description: 'Status atual (pending/successful/failed/cancelled)'
amount:
type: number
example: 1000.0
description: 'Valor da transação'
message:
type: string
example: 'Transação concluída com sucesso'
description: 'Mensagem descritiva do status'
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
description: 'Mensagem descritiva do status'
404:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Transação não encontrada'
properties:
message:
type: string
example: 'Transação não encontrada'
description: 'Mensagem descritiva do status'
tags:
- 'Estado de Transações'
parameters:
-
in: path
name: clicpay_reference
description: 'Referência ClicPay da transação.'
example: CP123456789
required: true
schema:
type: string
/api/v2/me/wallets:
get:
summary: ''
operationId: getApiV2MeWallets
description: ''
parameters:
-
in: query
name: payment_method_id
description: 'optional Filtrar por método de pagamento'
example: 1
required: false
schema:
type: integer
description: 'optional Filtrar por método de pagamento'
example: 1
-
in: query
name: is_active
description: 'optional Filtrar por status ativo'
example: true
required: false
schema:
type: boolean
description: 'optional Filtrar por status ativo'
example: true
-
in: query
name: environment
description: 'optional Filtrar por ambiente (sandbox/production)'
example: production
required: false
schema:
type: string
description: 'optional Filtrar por ambiente (sandbox/production)'
example: production
-
in: query
name: include
description: 'optional Incluir relacionamentos (ex: paymentMethod)'
example: paymentMethod
required: false
schema:
type: string
description: 'optional Incluir relacionamentos (ex: paymentMethod)'
example: paymentMethod
-
in: query
name: sort_by
description: 'optional Ordenar por campo (id, name, balance, created_at)'
example: created_at
required: false
schema:
type: string
description: 'optional Ordenar por campo (id, name, balance, created_at)'
example: created_at
-
in: query
name: sort_order
description: 'optional Ordem da ordenação (asc, desc)'
example: desc
required: false
schema:
type: string
description: 'optional Ordem da ordenação (asc, desc)'
example: desc
-
in: query
name: per_page
description: 'optional Itens por página (padrão: 10)'
example: 20
required: false
schema:
type: integer
description: 'optional Itens por página (padrão: 10)'
example: 20
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: 1
name: 'Minha Carteira'
balance: 1000.0
payment_method:
id: 1
name: eMola
slug: emola
links:
first: ...
last: ...
prev: null
next: null
meta:
current_page: 1
from: 1
last_page: 1
per_page: 20
to: 1
total: 1
properties:
data:
type: array
example:
-
id: 1
name: 'Minha Carteira'
balance: 1000
payment_method:
id: 1
name: eMola
slug: emola
description: 'Lista de carteiras'
items:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Minha Carteira'
balance:
type: number
example: 1000.0
payment_method:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: eMola
slug:
type: string
example: emola
links:
type: object
properties:
first:
type: string
example: ...
last:
type: string
example: ...
prev:
type: string
example: null
nullable: true
next:
type: string
example: null
nullable: true
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: integer
example: 1
last_page:
type: integer
example: 1
per_page:
type: integer
example: 20
to:
type: integer
example: 1
total:
type: integer
example: 1
tags:
- Carteiras
/api/user:
get:
summary: 'Obter utilizador autenticado'
operationId: obterUtilizadorAutenticado
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Autenticação
/api/me/token:
get:
summary: 'Obter token de acesso'
operationId: obterTokenDeAcesso
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Autenticação
/api/v2/wallets:
get:
summary: "Listar carteiras do parceiro.\n\nDevolve as carteiras a que o utilizador autenticado tem acesso\n(carteiras pessoais + carteiras das organizações em que é membro)."
operationId: listarCarteirasDoParceiroDevolveAsCarteirasAQueOUtilizadorAutenticadoTemAcessocarteirasPessoais+CarteirasDasOrganizaesEmQueMembro
description: ''
parameters:
-
in: query
name: 'filter[is_active]'
description: 'Filtra por estado activo.'
example: true
required: false
schema:
type: boolean
description: 'Filtra por estado activo.'
example: true
-
in: query
name: 'filter[payment_method_id]'
description: 'ID do método de pagamento.'
example: 1
required: false
schema:
type: integer
description: 'ID do método de pagamento.'
example: 1
-
in: query
name: 'filter[environment]'
description: '`production` ou `sandbox`.'
example: production
required: false
schema:
type: string
description: '`production` ou `sandbox`.'
example: production
-
in: query
name: 'filter[search]'
description: 'Pesquisa parcial no nome.'
example: minha
required: false
schema:
type: string
description: 'Pesquisa parcial no nome.'
example: minha
-
in: query
name: sort
description: 'Ordenação (`created_at`, `-created_at`, `name`, `-name`).'
example: '-created_at'
required: false
schema:
type: string
description: 'Ordenação (`created_at`, `-created_at`, `name`, `-name`).'
example: '-created_at'
-
in: query
name: per_page
description: 'Itens por página (1-100).'
example: 20
required: false
schema:
type: integer
description: 'Itens por página (1-100).'
example: 20
-
in: query
name: page
description: 'Número da página.'
example: 1
required: false
schema:
type: integer
description: 'Número da página.'
example: 1
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: 123
name: 'Carteira Mpesa Principal'
environment: production
is_active: true
allow_c2b: true
allow_b2c: true
currency: MZN
payment_method:
id: 1
name: Mpesa
slug: mpesa
owner:
type: organization
id: 5
name: 'Acme Lda'
balance:
available: '1500.00'
accumulated: '2000.00'
commission:
c2b_percentage: '1.5000'
b2c_percentage: '1.0000'
created_at: '2026-01-15T10:30:00+00:00'
updated_at: '2026-06-01T08:12:33+00:00'
meta:
pagination:
type: offset
per_page: 20
count: 1
current_page: 1
last_page: 1
from: 1
to: 1
total: 1
properties:
data:
type: array
example:
-
id: 123
name: 'Carteira Mpesa Principal'
environment: production
is_active: true
allow_c2b: true
allow_b2c: true
currency: MZN
payment_method:
id: 1
name: Mpesa
slug: mpesa
owner:
type: organization
id: 5
name: 'Acme Lda'
balance:
available: '1500.00'
accumulated: '2000.00'
commission:
c2b_percentage: '1.5000'
b2c_percentage: '1.0000'
created_at: '2026-01-15T10:30:00+00:00'
updated_at: '2026-06-01T08:12:33+00:00'
items:
type: object
properties:
id:
type: integer
example: 123
name:
type: string
example: 'Carteira Mpesa Principal'
environment:
type: string
example: production
is_active:
type: boolean
example: true
allow_c2b:
type: boolean
example: true
allow_b2c:
type: boolean
example: true
currency:
type: string
example: MZN
payment_method:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Mpesa
slug:
type: string
example: mpesa
owner:
type: object
properties:
type:
type: string
example: organization
id:
type: integer
example: 5
name:
type: string
example: 'Acme Lda'
balance:
type: object
properties:
available:
type: string
example: '1500.00'
accumulated:
type: string
example: '2000.00'
commission:
type: object
properties:
c2b_percentage:
type: string
example: '1.5000'
b2c_percentage:
type: string
example: '1.0000'
created_at:
type: string
example: '2026-01-15T10:30:00+00:00'
updated_at:
type: string
example: '2026-06-01T08:12:33+00:00'
meta:
type: object
properties:
pagination:
type: object
properties:
type:
type: string
example: offset
per_page:
type: integer
example: 20
count:
type: integer
example: 1
current_page:
type: integer
example: 1
last_page:
type: integer
example: 1
from:
type: integer
example: 1
to:
type: integer
example: 1
total:
type: integer
example: 1
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
422:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Sort inválido.'
errors:
sort:
- 'Ordenação inválida...'
properties:
message:
type: string
example: 'Sort inválido.'
errors:
type: object
properties:
sort:
type: array
example:
- 'Ordenação inválida...'
items:
type: string
tags:
- 'Carteiras e Subcarteiras'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
filter:
type: object
description: ''
example: null
properties:
is_active:
type: boolean
description: ''
example: false
payment_method_id:
type: integer
description: 'The id of an existing record in the payment_methods table.'
example: 16
environment:
type: string
description: ''
example: sandbox
enum:
- production
- sandbox
search:
type: string
description: 'Must not be greater than 100 characters.'
example: 'n'
sort:
type: string
description: ''
example: '-name'
enum:
- created_at
- '-created_at'
- name
- '-name'
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 7
page:
type: integer
description: 'Must be at least 1.'
example: 66
'/api/v2/wallets/{id}':
get:
summary: 'Detalhe de uma carteira.'
operationId: detalheDeUmaCarteira
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 123
name: 'Carteira Mpesa Principal'
environment: production
is_active: true
allow_c2b: true
allow_b2c: true
currency: MZN
payment_method:
id: 1
name: Mpesa
slug: mpesa
owner:
type: organization
id: 5
name: 'Acme Lda'
balance:
available: '1500.00'
accumulated: '2000.00'
commission:
c2b_percentage: '1.5000'
b2c_percentage: '1.0000'
created_at: '2026-01-15T10:30:00+00:00'
updated_at: '2026-06-01T08:12:33+00:00'
properties:
data:
type: object
properties:
id:
type: integer
example: 123
name:
type: string
example: 'Carteira Mpesa Principal'
environment:
type: string
example: production
is_active:
type: boolean
example: true
allow_c2b:
type: boolean
example: true
allow_b2c:
type: boolean
example: true
currency:
type: string
example: MZN
payment_method:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Mpesa
slug:
type: string
example: mpesa
owner:
type: object
properties:
type:
type: string
example: organization
id:
type: integer
example: 5
name:
type: string
example: 'Acme Lda'
balance:
type: object
properties:
available:
type: string
example: '1500.00'
accumulated:
type: string
example: '2000.00'
commission:
type: object
properties:
c2b_percentage:
type: string
example: '1.5000'
b2c_percentage:
type: string
example: '1.0000'
created_at:
type: string
example: '2026-01-15T10:30:00+00:00'
updated_at:
type: string
example: '2026-06-01T08:12:33+00:00'
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
403:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'This action is unauthorized.'
properties:
message:
type: string
example: 'This action is unauthorized.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'No query results for model [App\Models\Wallet].'
properties:
message:
type: string
example: 'No query results for model [App\Models\Wallet].'
tags:
- 'Carteiras e Subcarteiras'
parameters:
-
in: path
name: id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
-
in: path
name: wallet
description: 'ID da carteira.'
example: 123
required: true
schema:
type: integer
'/api/v2/wallets/{wallet_id}/balance':
get:
summary: "Saldo de uma carteira.\n\nEndpoint dedicado e leve. Resposta é cacheada por 60 segundos por\ncarteira — ideal para dashboards e polling de reconciliação."
operationId: saldoDeUmaCarteiraEndpointDedicadoELeveRespostaCacheadaPor60SegundosPorCarteiraIdealParaDashboardsEPollingDeReconciliao
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
wallet_id: 123
currency: MZN
available: '1500.00'
accumulated: '2000.00'
debits: '500.00'
computed_at: '2026-06-03T15:42:11+00:00'
properties:
data:
type: object
properties:
wallet_id:
type: integer
example: 123
currency:
type: string
example: MZN
available:
type: string
example: '1500.00'
accumulated:
type: string
example: '2000.00'
debits:
type: string
example: '500.00'
computed_at:
type: string
example: '2026-06-03T15:42:11+00:00'
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
403:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'This action is unauthorized.'
properties:
message:
type: string
example: 'This action is unauthorized.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'No query results for model [App\Models\Wallet].'
properties:
message:
type: string
example: 'No query results for model [App\Models\Wallet].'
tags:
- 'Carteiras e Subcarteiras'
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
-
in: path
name: wallet
description: 'ID da carteira.'
example: 123
required: true
schema:
type: integer
'/api/v2/wallets/{wallet_id}/splits':
get:
summary: 'Listar subcarteiras (splits) de uma carteira.'
operationId: listarSubcarteirassplitsDeUmaCarteira
description: ''
parameters:
-
in: query
name: 'filter[is_active]'
description: 'Filtra por estado.'
example: true
required: false
schema:
type: boolean
description: 'Filtra por estado.'
example: true
-
in: query
name: 'filter[split_mode]'
description: 'Filtra por modo (`wallet_collect`, `b2c_direct`, `dynamic_load`).'
example: wallet_collect
required: false
schema:
type: string
description: 'Filtra por modo (`wallet_collect`, `b2c_direct`, `dynamic_load`).'
example: wallet_collect
-
in: query
name: 'filter[search]'
description: 'Pesquisa parcial no nome.'
example: split-a
required: false
schema:
type: string
description: 'Pesquisa parcial no nome.'
example: split-a
-
in: query
name: sort
description: 'Ordenação (`created_at`, `-created_at`, `name`, `-name`).'
example: '-created_at'
required: false
schema:
type: string
description: 'Ordenação (`created_at`, `-created_at`, `name`, `-name`).'
example: '-created_at'
-
in: query
name: per_page
description: 'Itens por página (1-100).'
example: 20
required: false
schema:
type: integer
description: 'Itens por página (1-100).'
example: 20
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: 100001
name: 'Split Marketing'
wallet_id: 123
environment: production
is_active: true
allow_b2c: true
currency: MZN
split_mode: wallet_collect
split_value_type: percentage
split_value: '30.0000'
advanced_enabled: false
max_amount: null
balance:
available: '750.00'
accumulated: '900.00'
debits: '150.00'
created_at: '2026-02-10T09:00:00+00:00'
updated_at: '2026-06-01T08:12:33+00:00'
meta:
pagination:
type: offset
per_page: 20
count: 1
current_page: 1
last_page: 1
from: 1
to: 1
total: 1
properties:
data:
type: array
example:
-
id: 100001
name: 'Split Marketing'
wallet_id: 123
environment: production
is_active: true
allow_b2c: true
currency: MZN
split_mode: wallet_collect
split_value_type: percentage
split_value: '30.0000'
advanced_enabled: false
max_amount: null
balance:
available: '750.00'
accumulated: '900.00'
debits: '150.00'
created_at: '2026-02-10T09:00:00+00:00'
updated_at: '2026-06-01T08:12:33+00:00'
items:
type: object
properties:
id:
type: integer
example: 100001
name:
type: string
example: 'Split Marketing'
wallet_id:
type: integer
example: 123
environment:
type: string
example: production
is_active:
type: boolean
example: true
allow_b2c:
type: boolean
example: true
currency:
type: string
example: MZN
split_mode:
type: string
example: wallet_collect
split_value_type:
type: string
example: percentage
split_value:
type: string
example: '30.0000'
advanced_enabled:
type: boolean
example: false
max_amount:
type: string
example: null
nullable: true
balance:
type: object
properties:
available:
type: string
example: '750.00'
accumulated:
type: string
example: '900.00'
debits:
type: string
example: '150.00'
created_at:
type: string
example: '2026-02-10T09:00:00+00:00'
updated_at:
type: string
example: '2026-06-01T08:12:33+00:00'
meta:
type: object
properties:
pagination:
type: object
properties:
type:
type: string
example: offset
per_page:
type: integer
example: 20
count:
type: integer
example: 1
current_page:
type: integer
example: 1
last_page:
type: integer
example: 1
from:
type: integer
example: 1
to:
type: integer
example: 1
total:
type: integer
example: 1
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
403:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'This action is unauthorized.'
properties:
message:
type: string
example: 'This action is unauthorized.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'No query results for model [App\Models\Wallet].'
properties:
message:
type: string
example: 'No query results for model [App\Models\Wallet].'
tags:
- 'Carteiras e Subcarteiras'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
filter:
type: object
description: ''
example: null
properties:
is_active:
type: boolean
description: ''
example: true
split_mode:
type: string
description: ''
example: wallet_collect
enum:
- wallet_collect
- b2c_direct
- dynamic_load
search:
type: string
description: 'Must not be greater than 100 characters.'
example: b
sort:
type: string
description: ''
example: '-created_at'
enum:
- created_at
- '-created_at'
- name
- '-name'
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 22
page:
type: integer
description: 'Must be at least 1.'
example: 67
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
-
in: path
name: wallet
description: 'ID da carteira mãe.'
example: 123
required: true
schema:
type: integer
'/api/v2/wallets/{wallet_id}/splits/{walletSplit_id}':
get:
summary: 'Detalhe de uma subcarteira.'
operationId: detalheDeUmaSubcarteira
description: ''
parameters: []
responses:
200:
description: Sucesso
content:
application/json:
schema:
type: object
example:
data:
id: 100001
name: 'Split Marketing'
wallet_id: 123
environment: production
is_active: true
allow_b2c: true
currency: MZN
split_mode: wallet_collect
split_value_type: percentage
split_value: '30.0000'
advanced_enabled: false
max_amount: null
balance:
available: '750.00'
accumulated: '900.00'
debits: '150.00'
created_at: '2026-02-10T09:00:00+00:00'
updated_at: '2026-06-01T08:12:33+00:00'
properties:
data:
type: object
properties:
id:
type: integer
example: 100001
name:
type: string
example: 'Split Marketing'
wallet_id:
type: integer
example: 123
environment:
type: string
example: production
is_active:
type: boolean
example: true
allow_b2c:
type: boolean
example: true
currency:
type: string
example: MZN
split_mode:
type: string
example: wallet_collect
split_value_type:
type: string
example: percentage
split_value:
type: string
example: '30.0000'
advanced_enabled:
type: boolean
example: false
max_amount:
type: string
example: null
nullable: true
balance:
type: object
properties:
available:
type: string
example: '750.00'
accumulated:
type: string
example: '900.00'
debits:
type: string
example: '150.00'
created_at:
type: string
example: '2026-02-10T09:00:00+00:00'
updated_at:
type: string
example: '2026-06-01T08:12:33+00:00'
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
403:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'This action is unauthorized.'
properties:
message:
type: string
example: 'This action is unauthorized.'
404:
description: 'Split não pertence à carteira indicada'
content:
application/json:
schema:
type: object
example:
message: 'No query results for model [App\Models\WalletSplit].'
properties:
message:
type: string
example: 'No query results for model [App\Models\WalletSplit].'
tags:
- 'Carteiras e Subcarteiras'
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
-
in: path
name: walletSplit_id
description: 'The ID of the walletSplit.'
example: 100000
required: true
schema:
type: integer
-
in: path
name: wallet
description: 'ID da carteira mãe.'
example: 123
required: true
schema:
type: integer
-
in: path
name: walletSplit
description: 'ID da subcarteira.'
example: 100001
required: true
schema:
type: integer
'/api/v2/wallets/{wallet_id}/splits/{walletSplit_id}/balance':
get:
summary: "Saldo de uma subcarteira.\n\nResposta cacheada por 60 segundos por subcarteira. Inclui\n`max_amount` e `remaining_capacity` quando a subcarteira tem cap\nconfigurado."
operationId: saldoDeUmaSubcarteiraRespostaCacheadaPor60SegundosPorSubcarteiraIncluimaxAmountEremainingCapacityQuandoASubcarteiraTemCapConfigurado
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
wallet_split_id: 100001
wallet_id: 123
currency: MZN
available: '750.00'
accumulated: '900.00'
debits: '150.00'
max_amount: '5000.00'
remaining_capacity: '4100.00'
computed_at: '2026-06-03T15:42:11+00:00'
properties:
data:
type: object
properties:
wallet_split_id:
type: integer
example: 100001
wallet_id:
type: integer
example: 123
currency:
type: string
example: MZN
available:
type: string
example: '750.00'
accumulated:
type: string
example: '900.00'
debits:
type: string
example: '150.00'
max_amount:
type: string
example: '5000.00'
remaining_capacity:
type: string
example: '4100.00'
computed_at:
type: string
example: '2026-06-03T15:42:11+00:00'
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
403:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'This action is unauthorized.'
properties:
message:
type: string
example: 'This action is unauthorized.'
tags:
- 'Carteiras e Subcarteiras'
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
-
in: path
name: walletSplit_id
description: 'The ID of the walletSplit.'
example: 100000
required: true
schema:
type: integer
-
in: path
name: wallet
description: 'ID da carteira mãe.'
example: 123
required: true
schema:
type: integer
-
in: path
name: walletSplit
description: 'ID da subcarteira.'
example: 100001
required: true
schema:
type: integer
/api/v2/transactions:
get:
summary: "Histórico cross-wallet de transacções.\n\nDevolve todas as transacções das carteiras a que o parceiro tem acesso."
operationId: histricoCrossWalletDeTransacesDevolveTodasAsTransacesDasCarteirasAQueOParceiroTemAcesso
description: ''
parameters:
-
in: query
name: 'filter[wallet_id]'
description: 'Restringe a uma carteira.'
example: 123
required: false
schema:
type: integer
description: 'Restringe a uma carteira.'
example: 123
-
in: query
name: 'filter[date_from]'
description: 'Data inicial.'
example: '2026-01-01'
required: false
schema:
type: string
description: 'Data inicial.'
example: '2026-01-01'
-
in: query
name: 'filter[date_to]'
description: 'Data final.'
example: '2026-06-30'
required: false
schema:
type: string
description: 'Data final.'
example: '2026-06-30'
-
in: query
name: 'filter[status]'
description: Estado.
example: SUCCESSFUL
required: false
schema:
type: string
description: Estado.
example: SUCCESSFUL
-
in: query
name: 'filter[type]'
description: 'Tipo de operação.'
example: C2B
required: false
schema:
type: string
description: 'Tipo de operação.'
example: C2B
-
in: query
name: 'filter[provider]'
description: 'Slug do método de pagamento.'
example: mpesa
required: false
schema:
type: string
description: 'Slug do método de pagamento.'
example: mpesa
-
in: query
name: 'filter[clicpay_reference]'
description: string.
example: CPAYEMOLAC2B...
required: false
schema:
type: string
description: string.
example: CPAYEMOLAC2B...
-
in: query
name: 'filter[provider_reference]'
description: string.
example: PROV-12345
required: false
schema:
type: string
description: string.
example: PROV-12345
-
in: query
name: sort
description: string.
example: '-created_at'
required: false
schema:
type: string
description: string.
example: '-created_at'
-
in: query
name: paginator
description: '`cursor` ou `offset`.'
example: cursor
required: false
schema:
type: string
description: '`cursor` ou `offset`.'
example: cursor
-
in: query
name: per_page
description: 1-100.
example: 50
required: false
schema:
type: integer
description: 1-100.
example: 50
responses:
200:
description: 'Mesmo shape de /wallets/{wallet}/transactions'
content:
application/json:
schema:
type: object
example:
data: []
meta:
pagination:
type: cursor
per_page: 50
count: 0
next_cursor: null
prev_cursor: null
has_more: false
properties:
data:
type: array
example: []
meta:
type: object
properties:
pagination:
type: object
properties:
type:
type: string
example: cursor
per_page:
type: integer
example: 50
count:
type: integer
example: 0
next_cursor:
type: string
example: null
nullable: true
prev_cursor:
type: string
example: null
nullable: true
has_more:
type: boolean
example: false
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
422:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Filter inválido.'
errors:
filter.status.0:
- ...
properties:
message:
type: string
example: 'Filter inválido.'
errors:
type: object
properties:
filter.status.0:
type: array
example:
- ...
items:
type: string
tags:
- 'Carteiras e Subcarteiras'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
filter:
type: object
description: ''
example: null
properties:
date_from:
type: string
description: 'Must be a valid date.'
example: '2026-06-28T03:06:24'
date_to:
type: string
description: 'Must be a valid date. Must be a date after or equal to filter.date_from.'
example: '2052-07-21'
status:
type: array
description: ''
example:
- FAILED
items:
type: string
enum:
- PENDING
- PROCESSING
- SUCCESSFUL
- FAILED
- CANCELLED
- REFUNDED
- PARTIALLY_REFUNDED
- REJECTED
- AWAITING_ACTION
type:
type: array
description: ''
example:
- SUBSCRIPTION_PAYMENT
items:
type: string
enum:
- C2B
- B2C
- DEPOSIT
- WITHDRAWAL
- WITHDRAWAL_SPLIT
- TRANSFER_IN
- TRANSFER_OUT
- SUBSCRIPTION_PAYMENT
provider:
type: string
description: 'The slug of an existing record in the payment_methods table.'
example: architecto
clicpay_reference:
type: string
description: 'Must not be greater than 64 characters.'
example: 'n'
provider_reference:
type: string
description: 'Must not be greater than 128 characters.'
example: g
wallet_id:
type: integer
description: ''
example: 16
sort:
type: string
description: ''
example: completed_at
enum:
- created_at
- '-created_at'
- completed_at
- '-completed_at'
- amount
- '-amount'
paginator:
type: string
description: ''
example: cursor
enum:
- cursor
- offset
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 22
page:
type: integer
description: 'Must be at least 1.'
example: 67
cursor:
type: string
description: ''
example: architecto
'/api/v2/wallets/{wallet_id}/transactions':
get:
summary: 'Histórico de transacções de uma carteira.'
operationId: histricoDeTransacesDeUmaCarteira
description: ''
parameters:
-
in: query
name: 'filter[date_from]'
description: 'Data inicial (YYYY-MM-DD ou ISO8601).'
example: '2026-01-01'
required: false
schema:
type: string
description: 'Data inicial (YYYY-MM-DD ou ISO8601).'
example: '2026-01-01'
-
in: query
name: 'filter[date_to]'
description: 'Data final.'
example: '2026-06-30'
required: false
schema:
type: string
description: 'Data final.'
example: '2026-06-30'
-
in: query
name: 'filter[status]'
description: 'Estado (ou múltiplos via `filter[status][]=`).'
example: SUCCESSFUL
required: false
schema:
type: string
description: 'Estado (ou múltiplos via `filter[status][]=`).'
example: SUCCESSFUL
-
in: query
name: 'filter[type]'
description: 'Tipo de operação.'
example: C2B
required: false
schema:
type: string
description: 'Tipo de operação.'
example: C2B
-
in: query
name: 'filter[provider]'
description: 'Slug do método de pagamento.'
example: mpesa
required: false
schema:
type: string
description: 'Slug do método de pagamento.'
example: mpesa
-
in: query
name: 'filter[clicpay_reference]'
description: 'Referência ClicPay (match exacto).'
example: CPAYEMOLAC2B...
required: false
schema:
type: string
description: 'Referência ClicPay (match exacto).'
example: CPAYEMOLAC2B...
-
in: query
name: 'filter[provider_reference]'
description: 'Referência do provedor.'
example: PROV-12345
required: false
schema:
type: string
description: 'Referência do provedor.'
example: PROV-12345
-
in: query
name: sort
description: Ordenação.
example: '-created_at'
required: false
schema:
type: string
description: Ordenação.
example: '-created_at'
-
in: query
name: paginator
description: '`cursor` (default) ou `offset`.'
example: cursor
required: false
schema:
type: string
description: '`cursor` (default) ou `offset`.'
example: cursor
-
in: query
name: per_page
description: 1-100.
example: 50
required: false
schema:
type: integer
description: 1-100.
example: 50
-
in: query
name: cursor
description: 'Cursor opaco devolvido em `meta.pagination.next_cursor`.'
example: architecto
required: false
schema:
type: string
description: 'Cursor opaco devolvido em `meta.pagination.next_cursor`.'
example: architecto
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: 9876
clicpay_reference: CPAYEMOLAC2BABCDE12345
provider_reference: EMOLA-99887
type: C2B
status: SUCCESSFUL
currency: MZN
amount: '500.00'
received_amount: '493.50'
customer_msisdn: '+258841234567'
description: 'Pagamento de Serviço'
wallet:
id: 123
name: 'Mpesa Principal'
payment_method:
name: Mpesa
slug: mpesa
wallet_split: null
initiated_at: '2026-06-03T15:01:00+00:00'
completed_at: '2026-06-03T15:01:18+00:00'
created_at: '2026-06-03T15:01:00+00:00'
meta:
pagination:
type: cursor
per_page: 50
count: 1
next_cursor: null
prev_cursor: null
has_more: false
properties:
data:
type: array
example:
-
id: 9876
clicpay_reference: CPAYEMOLAC2BABCDE12345
provider_reference: EMOLA-99887
type: C2B
status: SUCCESSFUL
currency: MZN
amount: '500.00'
received_amount: '493.50'
customer_msisdn: '+258841234567'
description: 'Pagamento de Serviço'
wallet:
id: 123
name: 'Mpesa Principal'
payment_method:
name: Mpesa
slug: mpesa
wallet_split: null
initiated_at: '2026-06-03T15:01:00+00:00'
completed_at: '2026-06-03T15:01:18+00:00'
created_at: '2026-06-03T15:01:00+00:00'
items:
type: object
properties:
id:
type: integer
example: 9876
clicpay_reference:
type: string
example: CPAYEMOLAC2BABCDE12345
provider_reference:
type: string
example: EMOLA-99887
type:
type: string
example: C2B
status:
type: string
example: SUCCESSFUL
currency:
type: string
example: MZN
amount:
type: string
example: '500.00'
received_amount:
type: string
example: '493.50'
customer_msisdn:
type: string
example: '+258841234567'
description:
type: string
example: 'Pagamento de Serviço'
wallet:
type: object
properties:
id:
type: integer
example: 123
name:
type: string
example: 'Mpesa Principal'
payment_method:
type: object
properties:
name:
type: string
example: Mpesa
slug:
type: string
example: mpesa
wallet_split:
type: string
example: null
nullable: true
initiated_at:
type: string
example: '2026-06-03T15:01:00+00:00'
completed_at:
type: string
example: '2026-06-03T15:01:18+00:00'
created_at:
type: string
example: '2026-06-03T15:01:00+00:00'
meta:
type: object
properties:
pagination:
type: object
properties:
type:
type: string
example: cursor
per_page:
type: integer
example: 50
count:
type: integer
example: 1
next_cursor:
type: string
example: null
nullable: true
prev_cursor:
type: string
example: null
nullable: true
has_more:
type: boolean
example: false
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
403:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'This action is unauthorized.'
properties:
message:
type: string
example: 'This action is unauthorized.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Sort inválido.'
errors:
sort:
- ...
properties:
message:
type: string
example: 'Sort inválido.'
errors:
type: object
properties:
sort:
type: array
example:
- ...
items:
type: string
tags:
- 'Carteiras e Subcarteiras'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
filter:
type: object
description: ''
example: null
properties:
date_from:
type: string
description: 'Must be a valid date.'
example: '2026-06-28T03:06:24'
date_to:
type: string
description: 'Must be a valid date. Must be a date after or equal to filter.date_from.'
example: '2052-07-21'
status:
type: array
description: ''
example:
- PROCESSING
items:
type: string
enum:
- PENDING
- PROCESSING
- SUCCESSFUL
- FAILED
- CANCELLED
- REFUNDED
- PARTIALLY_REFUNDED
- REJECTED
- AWAITING_ACTION
type:
type: array
description: ''
example:
- DEPOSIT
items:
type: string
enum:
- C2B
- B2C
- DEPOSIT
- WITHDRAWAL
- WITHDRAWAL_SPLIT
- TRANSFER_IN
- TRANSFER_OUT
- SUBSCRIPTION_PAYMENT
provider:
type: string
description: 'The slug of an existing record in the payment_methods table.'
example: architecto
clicpay_reference:
type: string
description: 'Must not be greater than 64 characters.'
example: 'n'
provider_reference:
type: string
description: 'Must not be greater than 128 characters.'
example: g
wallet_id:
type: integer
description: ''
example: 16
sort:
type: string
description: ''
example: '-amount'
enum:
- created_at
- '-created_at'
- completed_at
- '-completed_at'
- amount
- '-amount'
paginator:
type: string
description: ''
example: cursor
enum:
- cursor
- offset
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 22
page:
type: integer
description: 'Must be at least 1.'
example: 67
cursor:
type: string
description: ''
example: architecto
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
-
in: path
name: wallet
description: 'ID da carteira.'
example: 123
required: true
schema:
type: integer
'/api/v2/wallets/{wallet_id}/splits/{walletSplit_id}/transactions':
get:
summary: 'Histórico de transacções de uma subcarteira.'
operationId: histricoDeTransacesDeUmaSubcarteira
description: ''
parameters:
-
in: query
name: 'filter[date_from]'
description: 'Data inicial.'
example: '2026-01-01'
required: false
schema:
type: string
description: 'Data inicial.'
example: '2026-01-01'
-
in: query
name: 'filter[date_to]'
description: 'Data final.'
example: '2026-06-30'
required: false
schema:
type: string
description: 'Data final.'
example: '2026-06-30'
-
in: query
name: 'filter[status]'
description: Estado.
example: SUCCESSFUL
required: false
schema:
type: string
description: Estado.
example: SUCCESSFUL
-
in: query
name: 'filter[type]'
description: Tipo.
example: C2B
required: false
schema:
type: string
description: Tipo.
example: C2B
-
in: query
name: 'filter[provider]'
description: Slug.
example: mpesa
required: false
schema:
type: string
description: Slug.
example: mpesa
-
in: query
name: paginator
description: '`cursor` ou `offset`.'
example: cursor
required: false
schema:
type: string
description: '`cursor` ou `offset`.'
example: cursor
-
in: query
name: per_page
description: 1-100.
example: 50
required: false
schema:
type: integer
description: 1-100.
example: 50
responses:
200:
description: 'Mesmo shape de /wallets/{wallet}/transactions'
content:
application/json:
schema:
type: object
example:
data: []
meta:
pagination:
type: cursor
per_page: 50
count: 0
next_cursor: null
prev_cursor: null
has_more: false
properties:
data:
type: array
example: []
meta:
type: object
properties:
pagination:
type: object
properties:
type:
type: string
example: cursor
per_page:
type: integer
example: 50
count:
type: integer
example: 0
next_cursor:
type: string
example: null
nullable: true
prev_cursor:
type: string
example: null
nullable: true
has_more:
type: boolean
example: false
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
403:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'This action is unauthorized.'
properties:
message:
type: string
example: 'This action is unauthorized.'
404:
description: 'Split não pertence à carteira indicada'
content:
application/json:
schema:
type: object
example:
message: 'No query results for model [App\Models\WalletSplit].'
properties:
message:
type: string
example: 'No query results for model [App\Models\WalletSplit].'
tags:
- 'Carteiras e Subcarteiras'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
filter:
type: object
description: ''
example: null
properties:
date_from:
type: string
description: 'Must be a valid date.'
example: '2026-06-28T03:06:24'
date_to:
type: string
description: 'Must be a valid date. Must be a date after or equal to filter.date_from.'
example: '2052-07-21'
status:
type: array
description: ''
example:
- PENDING
items:
type: string
enum:
- PENDING
- PROCESSING
- SUCCESSFUL
- FAILED
- CANCELLED
- REFUNDED
- PARTIALLY_REFUNDED
- REJECTED
- AWAITING_ACTION
type:
type: array
description: ''
example:
- DEPOSIT
items:
type: string
enum:
- C2B
- B2C
- DEPOSIT
- WITHDRAWAL
- WITHDRAWAL_SPLIT
- TRANSFER_IN
- TRANSFER_OUT
- SUBSCRIPTION_PAYMENT
provider:
type: string
description: 'The slug of an existing record in the payment_methods table.'
example: architecto
clicpay_reference:
type: string
description: 'Must not be greater than 64 characters.'
example: 'n'
provider_reference:
type: string
description: 'Must not be greater than 128 characters.'
example: g
wallet_id:
type: integer
description: ''
example: 16
sort:
type: string
description: ''
example: amount
enum:
- created_at
- '-created_at'
- completed_at
- '-completed_at'
- amount
- '-amount'
paginator:
type: string
description: ''
example: offset
enum:
- cursor
- offset
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 22
page:
type: integer
description: 'Must be at least 1.'
example: 67
cursor:
type: string
description: ''
example: architecto
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
-
in: path
name: walletSplit_id
description: 'The ID of the walletSplit.'
example: 100000
required: true
schema:
type: integer
-
in: path
name: wallet
description: 'ID da carteira mãe.'
example: 123
required: true
schema:
type: integer
-
in: path
name: walletSplit
description: 'ID da subcarteira.'
example: 100001
required: true
schema:
type: integer
'/api/v2/wallets/{wallet_id}/splits/{walletSplit_id}/b2c/mpesa':
post:
summary: ''
operationId: postApiV2WalletsWallet_idSplitsWalletSplit_idB2cMpesa
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Transação iniciada com sucesso'
clicpay_reference: CPAYMPESAB2CABCDE12345
status: pending
transaction_id: 790
wallet_split_id: 7
properties:
message:
type: string
example: 'Transação iniciada com sucesso'
clicpay_reference:
type: string
example: CPAYMPESAB2CABCDE12345
status:
type: string
example: pending
transaction_id:
type: integer
example: 790
wallet_split_id:
type: integer
example: 7
403:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Este split não tem permissão para realizar transações B2C.'
properties:
message:
type: string
example: 'Este split não tem permissão para realizar transações B2C.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Saldo insuficiente no split.'
properties:
message:
type: string
example: 'Saldo insuficiente no split.'
tags:
- 'Transações M-Pesa — B2C via Split'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
msisdn:
type: string
description: 'Número do destinatário.'
example: '841234567'
amount:
type: number
description: 'Valor a enviar (1–50000 MZN).'
example: 500.0
reference_description:
type: string
description: 'Descrição (3–32 caracteres).'
example: 'Pagamento parceiro'
internal_notes:
type: string
description: 'optional Notas internas (máx 255).'
example: 'Split B2C mensal'
required:
- msisdn
- amount
- reference_description
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
-
in: path
name: walletSplit_id
description: 'The ID of the walletSplit.'
example: 100000
required: true
schema:
type: integer
-
in: path
name: wallet
description: 'ID da carteira M-Pesa mãe.'
example: 123456
required: true
schema:
type: integer
-
in: path
name: walletSplit
description: 'ID do WalletSplit.'
example: 7
required: true
schema:
type: integer
'/api/v2/wallets/{wallet_id}/splits/{walletSplit_id}/b2c/mkesh':
post:
summary: ''
operationId: postApiV2WalletsWallet_idSplitsWalletSplit_idB2cMkesh
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Transação iniciada com sucesso'
clicpay_reference: CPAYMKESHB2CABCDE12345
status: pending
transaction_id: 791
wallet_split_id: 7
properties:
message:
type: string
example: 'Transação iniciada com sucesso'
clicpay_reference:
type: string
example: CPAYMKESHB2CABCDE12345
status:
type: string
example: pending
transaction_id:
type: integer
example: 791
wallet_split_id:
type: integer
example: 7
403:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Este split não tem permissão para realizar transações B2C.'
properties:
message:
type: string
example: 'Este split não tem permissão para realizar transações B2C.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Saldo insuficiente no split.'
properties:
message:
type: string
example: 'Saldo insuficiente no split.'
tags:
- 'Transações Mkesh — B2C via Split'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
msisdn:
type: string
description: 'Número do destinatário.'
example: '841234567'
amount:
type: number
description: 'Valor a enviar (1–50000 MZN).'
example: 500.0
reference_description:
type: string
description: 'Descrição (3–32 caracteres).'
example: 'Pagamento parceiro'
internal_notes:
type: string
description: 'optional Notas internas (máx 255).'
example: 'Split B2C mensal'
required:
- msisdn
- amount
- reference_description
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
-
in: path
name: walletSplit_id
description: 'The ID of the walletSplit.'
example: 100000
required: true
schema:
type: integer
-
in: path
name: wallet
description: 'ID da carteira Mkesh mãe.'
example: 123456
required: true
schema:
type: integer
-
in: path
name: walletSplit
description: 'ID do WalletSplit.'
example: 7
required: true
schema:
type: integer
'/api/v2/wallets/{wallet_id}/splits/{walletSplit_id}/b2c/emola':
post:
summary: ''
operationId: postApiV2WalletsWallet_idSplitsWalletSplit_idB2cEmola
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Transação iniciada com sucesso'
clicpay_reference: CPAYEMOLAB2CABCDE12345
status: pending
transaction_id: 789
wallet_split_id: 7
properties:
message:
type: string
example: 'Transação iniciada com sucesso'
clicpay_reference:
type: string
example: CPAYEMOLAB2CABCDE12345
status:
type: string
example: pending
transaction_id:
type: integer
example: 789
wallet_split_id:
type: integer
example: 7
403:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Este split não tem permissão para realizar transações B2C.'
properties:
message:
type: string
example: 'Este split não tem permissão para realizar transações B2C.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Saldo insuficiente no split.'
needed: 530.0
available: 200.0
missing: 330.0
wallet_split_id: 7
properties:
message:
type: string
example: 'Saldo insuficiente no split.'
needed:
type: number
example: 530.0
available:
type: number
example: 200.0
missing:
type: number
example: 330.0
wallet_split_id:
type: integer
example: 7
tags:
- 'Transações eMola — B2C via Split'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
msisdn:
type: string
description: 'Número do destinatário.'
example: '841234567'
amount:
type: number
description: 'Valor a enviar (1–50000 MZN).'
example: 500.0
reference_description:
type: string
description: 'Descrição (3–32 caracteres).'
example: 'Pagamento parceiro'
internal_notes:
type: string
description: 'optional Notas internas (máx 255).'
example: 'Split B2C mensal'
required:
- msisdn
- amount
- reference_description
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
-
in: path
name: walletSplit_id
description: 'The ID of the walletSplit.'
example: 100000
required: true
schema:
type: integer
-
in: path
name: wallet
description: 'ID da carteira eMola mãe.'
example: 123456
required: true
schema:
type: integer
-
in: path
name: walletSplit
description: 'ID do WalletSplit.'
example: 7
required: true
schema:
type: integer
'/api/v2/wallets/{wallet_id}/split/collect':
post:
summary: ''
operationId: postApiV2WalletsWallet_idSplitCollect
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Transação iniciada com sucesso'
clicpay_reference: CPAY...
status: pending
transaction_id: 789
split_summary:
direct: []
collect: []
properties:
message:
type: string
example: 'Transação iniciada com sucesso'
clicpay_reference:
type: string
example: CPAY...
status:
type: string
example: pending
transaction_id:
type: integer
example: 789
split_summary:
type: object
properties:
direct:
type: array
example: []
collect:
type: array
example: []
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
422:
description: ''
content:
application/json:
schema:
type: object
example:
errors:
splits.0.wallet_split_id:
- 'O split não pertence a esta carteira ou não é dynamic_load.'
properties:
errors:
type: object
properties:
splits.0.wallet_split_id:
type: array
example:
- 'O split não pertence a esta carteira ou não é dynamic_load.'
items:
type: string
tags:
- 'Transações — Split Collect'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
msisdn:
type: string
description: 'MSISDN do pagador.'
example: '841234567'
amount:
type: number
description: 'Valor total a cobrar (1–150 000 MZN).'
example: 1000.0
reference_description:
type: string
description: 'Descrição visível ao pagador (3–32 caracteres).'
example: 'Pagamento de serviços'
internal_notes:
type: string
description: 'optional Notas internas (máx. 255 caracteres).'
example: 'Pedido #9001'
splits:
type: array
description: 'optional Alocações dinâmicas adicionais para sub-carteiras do tipo dynamic_load. Combinam com os splits estáticos da carteira — os splits estáticos processam primeiro, os dinâmicos processam com o que sobrar.'
example:
- architecto
items:
type: string
required:
- msisdn
- amount
- reference_description
parameters:
-
in: path
name: wallet_id
description: 'The ID of the wallet.'
example: 107219
required: true
schema:
type: integer
-
in: path
name: wallet
description: 'ID da carteira mãe.'
example: 12
required: true
schema:
type: integer