# Request deposit Endpoint: POST /deposits Version: v1 Security: bearerAuth ## Header parameters: - `Content-Digest` (string) SHA-256 or SHA-512 hash of the request body. - `Signature` (string) Signature of the request according to RFC-9421. - `Signature-Input` (string) Signature-Input according to RFC-9421. - `Accept-Signature` (string) Expected signature algorithm of the response according to RFC-9421. - `Accept-Digest` (string) Expected digest algorithm of the response according to RFC-9421. ## Request fields (application/json): - `depositId` (string, required) A UUIDv4 based ID specified by you, that uniquely identifies the deposit. Example: "" - `amount` (string, required) The amount to be collected (deposit) or disbursed (payout or refund). Amount must follow below requirements or the request will be rejected: * Between zero and two decimal places can be supplied, depending on what the specific MMO supports. Learn about all [MMO supported decimal places](https://docs.transaction-monitor.io/using_the_api#correspondents). * The minimum and maximum amount depends on the limits of the specific MMO. You can find them from the [Active Configuration](#/paths/~1active-conf/get) endpoint. * Leading zeroes are not permitted except where the value is less than 1. For any value less than one, one and only one leading zero must be supplied. * Trailing zeroes are permitted. Valid examples: 5, 5.0, 5.00, 5.5, 5.55, 5555555, 0.5 Not valid examples: 5., 5.555, 5555555555555555555, .5, -5.5, 00.5, 00.00, 00001.32 Example: "15" - `currency` (string, required) The currency in which the amount is specified. Format must be the ISO 4217 three character currency code in upper case. Read more from [Wikipedia](https://en.wikipedia.org/wiki/ISO_4217#Active_codes). You can find all the supported currencies that the specific correspondent supports [from here](https://docs.transaction-monitor.io/using_the_api#correspondents). The [active configuration](#/paths/~1active-conf/get) endpoint provides the list of correspondents configured for your account together with the currencies. Example: "ZMW" - `country` (string) The country in which the MMO operates. Format is ISO 3166-1 alpha-3, three character country code in upper case. Read more from [Wikipedia](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3#Officially_assigned_code_elements). Example: "ZMB" - `correspondent` (string, required) The correspondent code refers to the specific MMO that the specified phone number (MSISDN) has an active mobile money wallet with. You can find all the supported correspondents [listed here](https://docs.transaction-monitor.io/using_the_api#correspondents). The [active configuration](#/paths/~1active-conf/get) endpoint provides the list of correspondents configured for your account. You can use the [predict correspondent](#/paths/~1v1~1predict-correspondent/post) enpoint to predict the correct correspondent to use based on the phone number (MSISDN). Example: "MTN_MOMO_ZMB" - `payer` (object, required) The phone number (MSISDN) of the recipient or payer must be specified as the value of the address. - `payer.type` (string, required) The type of financial address. At the moment, only MSISDN is supported as the financial address. Enum: "MSISDN" - `payer.address` (object, required) - `payer.address.value` (string, required) The phone number (MSISDN) of the payer or recipient. The format is described in [Wikipedia](https://en.wikipedia.org/wiki/MSISDN). MSISDN validation has following rules: * Only digits without whitespaces or any other separators or prefixes like '+'. * Should not start with zero. * Country code is mandatory. * Should not exceed or be less than the valid length of specified country. Valid examples for Zambia: 260763456789 Not valid examples for Zambia: +260763456789, 260 763 456789, 260-7634-56789, 0260763456789, 2607634567, 260763456789543, 999558708954, 37255870895 Example: "260763456789" - `customerTimestamp` (string, required) The timestamp of when the deposit was created in the Blu Penguin platform. Format defined by 'date-time' in RFC3339 section 5.6 from [IETF](https://tools.ietf.org/html/rfc3339#section-5.6) Example: "2020-02-21T17:32:28Z" - `statementDescription` (string, required) Short description for the transaction. Depending on the specific MMO performing the transaction this message may be visible to the customer in the SMS receipt or within their transaction history. Must be between 4 and 22 alphanumeric characters. Example: "Note of 4 to 22 chars" - `preAuthorisationCode` (string) For MMOs (correspondents) that use a preauthorisation code instead of a PIN prompt for authorising the deposit. - `metadata` (array) A list of metadata that you can attach to the payment for providing additional context about the payment. For example, adding orderId to indicate for which order this payment was for or customerId to know which customer this payment pertains to. Metadata will not be visible to the customer that is party to this payment. It will be visible in the Blu Penguin Dashboard on the payment details page and in your financial statements as a JSON object to support automated reconciliation. It is also possible to search for recent payments in the Blu Penguin Dashboard using global search based on the values of metadata. Up to 10 metadata fields can be attached to a payment. Example: [{"fieldName":"orderId","fieldValue":"ORD-123456789"},{"fieldName":"customerId","fieldValue":"customer@email.com","isPII":true}] - `metadata.fieldName` (string, required) The name of the metadata that you are attaching to the payment. For example orderId. Example: "orderId" - `metadata.fieldValue` (string, required) The value for this metadata field. For example ORD-123456789. Example: "ORD-123456789" - `metadata.isPII` (boolean) Indicates whether the field contains personally identifiable information. Used for enabling compliance with GDPR or other relevant data privacy laws. Example: true ## Response 200 fields (application/json): - `depositId` (string, required) The depositId of the deposit transaction. Example: "f4401bd2-1568-4140-bf2d-eb77d2b2b639" - `status` (string, required) The initiation status of the Deposit: * ACCEPTED - The deposit request has been accepted by Blu Penguin for processing. * REJECTED - The deposit request has been rejected. See rejectionReason for details * DUPLICATE_IGNORED - This deposit request is a duplicate and will be ignored. Enum: "ACCEPTED", "REJECTED", "DUPLICATE_IGNORED" - `created` (string) The timestamp of when the deposit was created in the Blu Penguin platform. Format defined by 'date-time' in RFC3339 section 5.6 from [IETF](https://tools.ietf.org/html/rfc3339#section-5.6) Example: "2020-02-21T17:32:29Z" - `rejectionReason` (object) - `rejectionReason.rejectionCode` (string) Possible deposit rejection codes: * INVALID_PAYER_FORMAT - The payer address (phone number) is invalid. * INVALID_CORRESPONDENT - The specified correspondent is not supported. * INVALID_AMOUNT - The specified amount is not supported. * AMOUNT_TOO_SMALL - The specified amount is smaller than the minimum allowed by the MMO specified as the correspondent. * AMOUNT_TOO_LARGE - The specified amount is larger than the maximum allowed by the MMO specified as the correspondent. * INVALID_CURRENCY - The specified currency is not supported for the MMO specified as the correspondent. * INVALID_COUNTRY - The specified country is not supported for this MMO specified as the correspondent. * PARAMETER_INVALID - One or more parameters are invalid. * INVALID_INPUT - We were unable to parse the payload of the request. * DEPOSITS_NOT_ALLOWED - Deposits are not allowed for the merchant or the MMO specified as the correspondent. * CORRESPONDENT_TEMPORARILY_UNAVAILABLE - The MMO specified as the correspondent is currently experiencing an outage and processing of payments has been temporarily halted. Please refer to our [Status Page](https://status.transaction-monitor.io) for live information about MMO availability. Enum: "INVALID_PAYER_FORMAT", "INVALID_CORRESPONDENT", "INVALID_AMOUNT", "AMOUNT_TOO_SMALL", "AMOUNT_TOO_LARGE", "INVALID_CURRENCY", "INVALID_COUNTRY", "PARAMETER_INVALID", "INVALID_INPUT", "DEPOSITS_NOT_ALLOWED", "CORRESPONDENT_TEMPORARILY_UNAVAILABLE" - `rejectionReason.rejectionMessage` (string) Additional optional rejection message Example: "You don't have access to this correspondent" ## Response 400 fields (application/json): - `errorId` (string, required) A unique error ID in the Blu Penguin platform. Example: "63743264-7292-11ea-bc55-0242ac130003" - `errorCode` (integer, required) Blu Penguin internal error code. Example: 1 - `errorMessage` (string, required) Error message. Example: "Internal error" ## Response 401 fields (application/json): - `errorId` (string, required) A unique error ID in the Blu Penguin platform. Example: "63743264-7292-11ea-bc55-0242ac130003" - `errorCode` (integer, required) Blu Penguin internal error code. Example: 1 - `errorMessage` (string, required) Error message. Example: "Internal error" ## Response 403 fields (application/json): - `errorId` (string, required) A unique error ID in the Blu Penguin platform. Example: "63743264-7292-11ea-bc55-0242ac130003" - `errorCode` (integer, required) Blu Penguin internal error code. Example: 1 - `errorMessage` (string, required) Error message. Example: "Internal error" ## Response 500 fields (application/json): - `errorId` (string, required) A unique error ID in the Blu Penguin platform. Example: "63743264-7292-11ea-bc55-0242ac130003" - `errorCode` (integer, required) Blu Penguin internal error code. Example: 1 - `errorMessage` (string, required) Error message. Example: "Internal error"