{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"4b325080-0b2a-4e0c-ae05-cc2e868b12aa","name":"HaitiPay Acceptor API - (Agent / Merchant)","description":"**The HaitiPay platform** is designed to support several types of transactions and payment applications. HaitiPay allows any phone to be used as for electronic transactions, such as bill payment, money transfers to others, point of sale purchases, etc. The HaitiPay platform offers the following features to users:purchase goods and services at their favorite local stores. Unbanked merchants will be able to accept payments and formalize their business transactions.  \n\n**HaitiPay electronic wallet:** Anyone with a mobile phone can easily and securely: store, send and spend money using the HaitiPay electronic wallet. The funds are placed in the wallet in different ways, by recharging in cash of the counter at agent locations, by wallet to wallet transfers, by disbursement of wages or by linking it to a bank account. The HaitiPay wallet can be used to pay bills, shop in stores on the web, or transfer money to other users.\n\n> 💡 Follow instructions below to request access to this workspace and test the HaitiPay API.\n\n#  Acceptor API Description #\nIn the HaitiPay ecosystem, acceptors are defined as entities accepting electronic money. This can be either an agent receiving electronic money against cash in an Over The Counter (OTC) cash-in  transaction, or a merchant providing goods and services against electronic money from clients. This API exposes methods to search clients, accounts, to authorize and post various transactions such as: Cash-in, Cash-out, Payment, Paybill, or Reversal of transaction.\n\n# A MOBILE-CENTRIC BANKING PLATFORM\n\n### THE MOBILE\n\n> HaitiPay uses an omni-channel platform, built to be fundamentally inclusive, while remaining `independent from telecom` operator channels.End-users can activate their wallets/accounts with any phone, even with a feature phone that only handles audio, IVR, SMS and USSD. They can also use the HaitiPay mobile wallet app (IOS or Android), as well as a responsive web portal.HaitiPay agents and merchants can use a wide range of devices from an entry level Android smartphone to Mobiwire and Ingenico terminals.\nHaitiPay uses enablers to integrate and manage channels supplied by third parties.\n\n### COMPANION CARD\n\n> A `companion card` can be issued for the HaitiPay end-user, linked to his wallet/account. This allows the end-user to pay in MasterCard and VISA networks.#### \n\n## DIGITAL FINANCIAL SERVICES\n\n**The HaitiPay platform** is designed to support several types of transactions and payment applications. HaitiPay allows any phone to be used as for electronic transactions, such as bill payment, money transfers to others, point of sale purchases. Here is a list of Digital Financial Services that can be delivered with the HaitiPay Platform:\n\n**UNIVERSAL MOBILE PHONE** \n ![](https://paper-attachments.dropbox.com/s_49ED6FB24CD8D267294A2C87BEAA57320D554EDC44C2CF475C7395FBC14CA423_1596168453742_tel_wallet.png)               | \n\n**WALLET/ACCOUNT** : The end-user’s mobile phone number is his wallet/account number.  The wallet can be used with a feature phone, using IVR or USSD or with the smartphone app Haiwhich can be downloaded onto any Android or IOS device. The end-user then has easy access to his balance and transaction history. The wallet/account is mutli-currency. To create a wallet/account, clients are onboarded by an agent, with KYC tools.|| ![](https://paper-attachments.dropbox.com/s_49ED6FB24CD8D267294A2C87BEAA57320D554EDC44C2CF475C7395FBC14CA423_1596168474365_Cash-in_Cash_out.png)   | \n\n**OTC CASH-IN & CASH-OUT** : The end-user can visit an agent, representing the bank in the field, to securely perform a cash-in or a cash-out, crediting or debiting his wallet/account. || ![](https://paper-attachments.dropbox.com/s_49ED6FB24CD8D267294A2C87BEAA57320D554EDC44C2CF475C7395FBC14CA423_1596168483633_Bill_Voucher.png)       | \n\n**BILL PAYMENT/VOUCHERS** : The end-user can pay his bills securely and conveniently on his feature phone or mobile wallet app, or by paying with cash at a point of service. The HaitiPay platform connects to the partner’s billing back-office to verify reference numbers and authorize transactions. For this service it is possible to use IVR, app or USSD channels , as well as the responsive web portal. || ![](https://paper-attachments.dropbox.com/s_49ED6FB24CD8D267294A2C87BEAA57320D554EDC44C2CF475C7395FBC14CA423_1596168493639_airtime_topUp.png)      | \n\n**AIR TIME TOP-UP** : The end-user can top-up his airtime by using his feature phone, with IVR or USSD, or with his smartphone, through the web portal or with the HaitiPay mobile wallet. The end-user can also visit an agent to perform this service. || ![](https://paper-attachments.dropbox.com/s_49ED6FB24CD8D267294A2C87BEAA57320D554EDC44C2CF475C7395FBC14CA423_1596168502176_P2P_TP.png)             |\n\n**P2P TRANSFERS** : End-users can send money in many different ways, be it over the counter with an agent or directly from their feature phone or mobile wallet app. It is also possible to use IVR, USSD, app and web channels for transfers without the assistance of an agent. When receiving cash from another individual, the recipient can choose to leave it on his wallet/account.  || ![](https://paper-attachments.dropbox.com/s_49ED6FB24CD8D267294A2C87BEAA57320D554EDC44C2CF475C7395FBC14CA423_1596168511220_Savings_TP.png)         | \n\n**SAVINGS** : Real-time transactions are transforming the end-user’s behavior around saving. He can credit a savings account as soon as he receives money (salary, pension, transfer). This flexibility, with the balances of his different accounts, gives him the opportunity to organize and manage hhiser savings in a completely new way. || ![](https://paper-attachments.dropbox.com/s_49ED6FB24CD8D267294A2C87BEAA57320D554EDC44C2CF475C7395FBC14CA423_1596168533518_Loans_TP.png)           | \n\n**LOANS** : Real-time technology and wide scale mobile phone deployment will transform the loan distribution process. With new forms of scoring and risk management, end-users will be able to obtain loans directly on their phones in a fraction of the time classically required. HaitiPay will power microcredit and meso-finance loans. || ![](https://paper-attachments.dropbox.com/s_49ED6FB24CD8D267294A2C87BEAA57320D554EDC44C2CF475C7395FBC14CA423_1596168541363_Salary+BulkP2P_TP.png)  | \n\n**SALARIES & PENSIONS (BULK2P)** : End-users can receive their salaries directly on their wallet/account. Companies can partner with HaitiPay to send payroll to their employees. SMS, USSD and the mobile wallet app are used for this service.|| ![](https://paper-attachments.dropbox.com/s_49ED6FB24CD8D267294A2C87BEAA57320D554EDC44C2CF475C7395FBC14CA423_1596168557005_Merchant_TP.png)        | \n\n**MERCHANT PAYMENTS** : End-users can securely and conveniently pay in stores with their phones using their wallets/accounts. Any cell phone can be used, no matter the telecom operator or type of phone. Merchants can partner with the HaitiPay HaitiPay to accept HaitiPay payments in their stores, offering their customers a convenient contactless payment experience that is extremely secure and user-friendly. The merchant downloads the Merchant app from Google Play or from the App Store, onto a POS terminal or Android device. NSDT™is used for securing transactions at the point of sale.   || ![](https://paper-attachments.dropbox.com/s_49ED6FB24CD8D267294A2C87BEAA57320D554EDC44C2CF475C7395FBC14CA423_1596168567191_ePAYMENT_TP.png)        | \n\n**E-PAYMENTS** : End-users can pay online with their wallets/accounts. At checkout on the e-commerce website, the end- user is redirected to the HaitiPay online payment system. E-commerce companies can partner with HaitiPay to offer a secure and simple payment experience to their customers. HaitiPay includes a Woocommerce payment module that allows any e-commerce website powered by Woocommerce to accept payments online by incorporating the HaitiPay payment solution into its website. This service is only available in countries with  HaitiPay HaitiPay.   || ![](https://paper-attachments.dropbox.com/s_49ED6FB24CD8D267294A2C87BEAA57320D554EDC44C2CF475C7395FBC14CA423_1596168575287_Subsidies_TP.png)       | \n\n**SUBSIDIES** : The HaitiPay  can partner with non-governmental organizations to distribute subsidies digitally. The recipients of the subsidies are notified and can then visit a network of dedicated merchants in order to buy the subsidized goods. The administrator of the service decides what percentage, if any, the beneficiary of the service must personally pay. During the transaction in the store, the merchant is paid in real-time for the full cost of the product, directly on his HaitiPay account. HaitiPay  partners with non-governmental organizations and merchants in order to set up the service. || ![](https://paper-attachments.dropbox.com/s_49ED6FB24CD8D267294A2C87BEAA57320D554EDC44C2CF475C7395FBC14CA423_1596168584543_Cash2Good_TP.png)       | \n\n**CASH2GOOD** : HaitiPay’s Cash2Good enables P2P transfers that can be used in a dedicated network of stores. An end-user receiving Cash2Good will be able to spend the money at a specific network of merchants, chosen by the sender. || ![](https://paper-attachments.dropbox.com/s_49ED6FB24CD8D267294A2C87BEAA57320D554EDC44C2CF475C7395FBC14CA423_1596168592814_Cash_Collection_TP.png) | \n\n**CASH COLLECTION** : The network of agents set up by HaitiPay can be used for cash collection by third parties. For example, a loan recipient of a local microfinance institution can visit a point of service to perform weekly loan repayments. This is done over the counter.   || ![](https://paper-attachments.dropbox.com/s_49ED6FB24CD8D267294A2C87BEAA57320D554EDC44C2CF475C7395FBC14CA423_1596168600303_ATM_WithDrawal_TP.png)  | \n\n**ATM WITHDRAWAL** : End-users can withdraw cash from their wallets/accounts at an ATM. HaitiPay’s APIs enable simple integration with existing ATMs. For smartphones with the HaitiPay app or from the dedicated web portal, a one-time passcode is generated, that is then immediately used to withdraw cash from the ATM. With a feature phone, USSD is used to generate the passcode. It is also possible to install a solution that works directly with NSDT™ on the ATMs.   |\n\n## ECOSYSTEM DEFINITIONS\n\n**API DESCRIPTION**\n\nThis  API allows third party platforms to request HaitiPay to execute transactions on behalf of a `Merchant` or an `Agent`.A `Client` user  in HaitiPay has one Wallet account named `reserve account` and as many `dedicated account`  as he owns dedicated money at merchants or group of merchants.This API offers the following features:> - Credit or Debit a client's `reserve` or `dedicated` accounts. \n\n> - On Behalf of an Agent execute `Cash-In` and `Cash-Out`.\n\n> - On Behalf of a Merchant `Credit` or `Debit` dedicated merchant or merchant group account).\n> - `Transfer Money` from a Sender to a Recipient. This transfer can be from `reserve account` to `reserve account` or from `dedicated account` to `dedicated account` or from `reserve account` to `dedicated account`.\n\n> - `Change PIN` the client's 4 digits secret code.\n\n\n# Authentication\n\n## OAuth2\n### Pre-requisites\nTo access the HaitiPay Acceptor API you must have a registered acceptor account on the HaitiPay platform. An API key for this acceptor must be created for you by HaitiPay Administration.\n\n### Obtaining an Access Token\nIn order to obtain an Access Token, you must `POST`to the URL https://sandbox.haitipay.com/api/acceptor/v1/oauth2/ token using a `Content-type: application/json` header and a JSON body containing the following items:\n\n|                |                         |                        |\n|----------------|-------------------------------|-----------------------------|\n|grant_type|string|MUST be `client_credentials`          |\n|client_id         |string            |the `API key identifier`            |\n|client_secret        |string|The `API key secret`|\n\n**Request body example**\n\n```json\n{ \n\"grant_type\":\"client_credentials\", \n\"client_id\":\"eza9eza21eaz951ea8f2ffs9fgdfsdd3\", \n\"client_secret\":\"eb5d1477-0dab-4b36-bc3e-9da6d6cc25ba\"\n}\n```\n\nCalling the URL as described above will yield a response similar to this (actual token cut off with `[...]` for brevity):\n\n```json\n{\n\"token_type\": \"Bearer\",\n\"expires_in\":59940,\n\"access_token\":\"eyJ0eXAiOiJKV1Qi0MzI5Oi0MzI5ODDNiMzJj[...]\"\n}\n```\n\n### Now that you have an Access Token\nThe thus obtained access token must be provided in the HTTP request header `Authorization` for each **API call** prefixed by the word `Bearer` (with the trailing space):\n\n`Authorization: Bearer your_api_token`\n\n### Access token lifetime\nThe access token has the **same lifetime as a user's session**, with the significant difference that it's lifetime is not extended upon each API action.\n\nTherefore, the access token will expire after it's predefined lifetime has expired, resulting in a HTTP 401 Unauthorized response with the message Access token is invalid.\n\nIt is the API consumer's responsibility to detect such response, to obtain a new access token using the process described above, and optionally to issue the failed request a new.\n\n## Request an invitation to Access the HaitiPay API \n \n Please request an invitation to access the HaitiPay API\n by sending an email to [admin@haitipay.com](mailto:admin@haitipay.com)\n With your name and company information.\n \n Within 24 hrs you will receive a confirmation that will allow you to access the \n HaitiPay workspace.\n  \n## We're Here to Help\n\nIt is important we understand the Business Models you want to implement.\nGet in touch and let us know how we can help.\n\nContact support at [devsupport@haitipay.com](mailto:devsupport@haitipay.com)\nto get help from our team.\n\n# Server Sent Events\nSome of this API endpoints use the Server Sent Events standard.\n\n## Architecture\nThe server keeps the HTTP response opened over time and send a series of event messages at arbitrary times.\nThe stream is opened until server has no more events to send, decides that the connection has been open long enough and can be considered stale, or until the client explicitly closes the initial request.\nThe Server Sent Events standard specifies how the messages should be formatted.\n\n## Event format\nHere’s a template for a single event message:\n```\nid: <event id>\\n\nevent: <event type>\\n\ndata: <event data>\\n\n\\n\n\\n\n```\n- `id`: A unique ID for this event\n- `event`: Specifies the type of event in the case where one event stream may have distinctly different event types.\n- `data`: The message body, in our case a json encoded object\n\n## Endpoints\nThe following endpoints use Server Sent Events : \n- [NSDT (`PATCH /authentications/{transactionToken}/nsdt/verify`)](#operation/VerifyNSDT)\n- [Client pincode (IVR) (`PATCH /authentications/{transactionToken}/pincode-client-ivr/verify`)](#operation/VerifyPincodeClientIVR)\n\n# API error codes signification\n\nThe Acceptor API uses consistent error representation across all the endpoints.  \nHere is a list of Common errors that could lead an API client to suggest actions to the final user.\n\n| API Error code | Description | Endpoints that could return this error |\n|:---:|---|---|\n| 23008 | Given code is invalid. | Verify otp/sms authentication endpoint |\n| 65200 | Acceptor needs at least one device to make operations. | Acceptor pin code and NSDT authentication endpoints |\n| 65201 | Authentication type not needed. | All authentication endpoints |\n| 65202 | Session state is not valid for this operation. | All confirmation transaction endpoints |\n| 65203 | Session does not exist. |  All confirmation transaction endpoints  |\n| 65204 | Agent-only transaction. | Bill payment endpoints |\n| 65205 | Unknown customer. | All endpoints involving a client |\n| 65206 | Unknown biller. | All endpoints involving a biller |\n| 65207 | Unexpected transaction type. | Bill payment and otp/sms authentication endpoints |\n| 65208 | Customer phone required. | Bill cash payment endpoint |\n| 65209 | Please wait 30 seconds before requesting an SMS. | Send otp/sms authentication endpoint |\n| 65210 | Too many sms requests, authentication refused. | Send otp/sms authentication endpoint |\n| 65212 | Authentication already completed. | All authentication endpoints |\n\n\n# Introduction\nThis API allows Acceptors (Agents and Merchants) to perfom operations and transactions on the HaitiPay platform.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"9000398","team":1184989,"collectionId":"4b325080-0b2a-4e0c-ae05-cc2e868b12aa","publishedId":"UVXqEsq3","public":true,"publicUrl":"https://devportal.haitipay.com","privateUrl":"https://go.postman.co/documentation/9000398-4b325080-0b2a-4e0c-ae05-cc2e868b12aa","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"EF5B25"},"documentationLayout":"classic-double-column","customisation":null,"version":"8.11.6","publishDate":"2022-01-24T02:17:30.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{},"logos":{}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/0b3393a5eaaa25b9dbaecd8330c09427f1c1a4f622e0c422a1512ca424c19bcd","favicon":"https://res.cloudinary.com/postman/image/upload/v1634162207/team/mpqgkpg9xyi0zzuxtboq.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://devportal.haitipay.com/view/metadata/UVXqEsq3"}