{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"787aae2b-3eaf-451a-a23a-b3b4a4ed0360","name":"AFXLink API Reference Guide for Trolley","description":"**1\\. PAYMENT SOLUTIONS OVERVIEW**\n\nAscendant provides payment solutions that allow to send payment anytime with flexible tools. The AFXLink Developer Platform provides APIs for you to integrate Ascendant payments into your applications to process online, in-app, and in-person payments.\n\nThis document is intended for use by developers to integrate their system/application with the AFXLink API platform.\n\n**2\\. GETTING STARTED**\n\nThis section provides an overview of steps involved in successfully undertaking the integration.\n\nGet started with AFXLink APIs and test them on Postman. Generate API Keys in Test and Live Modes.\n\nAFXLink APIs are completely RESTful, and all our responses are returned in JSON.\n\n**2.1 Postman Guide**\n\nUse Postman to explore AFXLink REST APIs with a developer account. You can customize requests and receive responses for any of AFxLink API methods.\n\nYou can test APIs right away by forking AFxLink's Postman collection.\n\n1. Sign up or log in to an account on [postman.com](https://www.postman.com/).\n    \n2. Select the following Run in Postman button:\n    \n\n[<img src=\"https://run.pstmn.io/button.svg\">](https://apay-link-732073.postman.co/collection/23833580-3c633303-d1ad-4a24-a1db-d0109b1750c6?source=rip_markdown)\n\n**2.2 API KEY**\n\nYou can use AFXLink APIs in two modes, Test and Live. The API keys are different for each mode. Get your API Key to the Sandbox for Test Mode. Contact your account manager to get this generated.\n\n**API Authentication**  \nAll AFXLink APIs are authenticated using Basic Auth. Basic auth requires the following:\n\n\\[YOUR_KEY_ID\\]  \n\\[YOUR_KEY_SECRET\\]\n\nBasic auth expects an Authorization header for each request in the Basic base64token format. Here, base64token is a base64 encoded string of YOUR_KEY_ID:YOUR_KEY_SECRET.\n\n**API keys security**  \nIt is essential to store your API keys safely. For the utmost security, follow the best practices listed below when integrating with AFXLink APIs.\n\nWhile integrating AFXLink APIs with your application, ensure that:\n\n- The API key secret is not included in version control (GitHub, Gitlab).\n    \n- You only provide access to the API secret to employees on a need-to-know basis.\n    \n- You store all secrets, such as the API secret and Org ID in a secure vault.\n    \n- **Do not share your API Key secret with anyone or on any public platforms.** This can pose security threats for your AFXLink account.\n    \n\n**2.3 RELEASE/DEPLOYMENT MODEL**\n\n**a. Regular**\n\n<img src=\"https://content.pstmn.io/cca691ac-3928-4243-a9af-06e4b10e5b03/aW1hZ2UucG5n\" width=\"641\" height=\"334\">\n\n**b. Fast Track**\n\n<img src=\"https://content.pstmn.io/119c0afb-5581-441b-8bf4-6bda2a858611/aW1hZ2UucG5n\" width=\"623\" height=\"231\">\n\n**2.4 API GATEWAY URL**\n\nThe URL to the API service is either:\n\nSandbox. [https://afxlink-staging.ascendantfx.com/](https://afxlink-staging.ascendantfx.com/)  \nLive. [https://trolley-api.ascendant.world](https://trolley-api.ascendant.world)\n\nYou need to include this before each API endpoint to make API calls.\n\n**Getting handshake endpoint**\n\nYou can use below endpoint to runs a health check or ping on the AFXLink API.  \nIf the web service accessable, will return its latest version with response status OK\n\n[https://afxlink-staging.ascendantfx.com/api/getservice/status](https://afxlink-staging.ascendantfx.com/api/getservice/status)\n\n**3\\. CORE RESOURCES**\n\n**3.1 API Entities**\n\nThese are the various terminology being used in api integration and api payloads.\n\n**i. Client**  \nClient is the sender of payment instruction and will call the api method to book the Deals from their application and servers.\n\nClient needs to be register on ascendant platform and will be issued organization id and api credentials to access the api.\n\n**ii. Payee**  \nPayee objects represent the recipient information and consist of various information related to it like.  \n_Payee Information:_ Name, Mail id, Currency, Address, Account number etc  \n_Payee Bank Information:_ Details of bank where recipient have the account and will receive the payment.  \n_Originator Info:_ In case or FI customers, details of Originator information who send the payment through clients.\n\n**iii.Payment**\n\nPayment object represents transaction information like payment amount, payment currency, payment method, Settlement amount, Settlement currency, Settlement method, fee and related payee object.\n\n**iv. Deal**\n\nA Deal id collection of one or more payment objects. With the help of deal object, multiple payment instruction can be sent in bulk at once with one settlement / funding source.\n\n**v. Quote**\n\nQuote object represent foreign exchange information of a transaction/payment with details like payment currency, settlement amount, settlement currency , settlement amount, rate , fee and total settlement amount with fee and rate calculation.\n\n**3.2 API Object Flow**\n\nFollowing will be flow of object creations using api methods/endpoint in order to book deals on ascendant platform.\n\n**i. Payee Creation**  \nYou can use add payee, update payee api methods to insert payee object.\n\nOn successful payee creation you will get PayeeID, which you can keep in your database to reuse with submit deals.\n\nAlternatively, you can provide payee object with submit deal api method. In this case the payee object will be created first internally before submitting deal. If payee object already exists, then the payee will be updated first before submitting deal.\n\n**ii.Quote Creation**  \nYou can use GeQuote and GetQuoteTBA methods to get rates of a allowed currency pair and calculate payment and settlement amounts.\n\n**iii. Accept Quote**  \nBefore submitting the deal you need to accept the quote with help of AcceptQuote method. The rate will have expiration period of two hours. After this you have to generate new quote to submit a deal\n\n**iv. Submit Deal**  \nAfter accepting the quote you can submit the deal with valid QuoteID, accepted payment information and valid payeeID or payee object information.  \nAfter successful deal creation you will get AFXDealID, which you can use further to track- status and reconciliation process.\n\n**v. PostDeal**  \nYou can get list of all successful deals and payments and use to reconcile with your system.  \nYou can use PaymentID returned in response to trace the remittance on swift network using GetPaymentStatus method.\n\n**vi. PostDealConfirmation**  \nYou can use this to mark the payment as reconciled in your system, so you will get un reconciled and latest deal/payment information through PostDeal method in subsequent calls .  \nThis will keep the post deal response short and will get only new deals and will reduce the network latency on api calls.\n\n**3.3 Use Cases For Selecting Methods**\n\n**i. Just need to submit deal in one go.**  \nUse _SubmitDealAutoQuote_ method with payee object. This will create payee object and getquote and accept internally on the basis of current market rate and submit the deal.\n\n**ii. Need Control on getQuote and accept before submitting deal**  \nUse _GetQuote_, _AcceptQuote_ and _SubmitDeal_ in same sequence.\n\n**iii. Want to create payee database on ascendant and want to reuse for subsequent calls in future.**\n\nUse _AddPayee_ followed by _SubmitDealAutoQuote_ with PayeeID reference or (_GetQuote_ + _AcceptQuote_+ _SubmitDeal_ ) with PayeeID reference\n\n**iv. Want manual approval system on web plateform, afetr submiting deals through API**\n\nUse _SubbmitDealForApproval_ along with _GetQuote_ and _AcceptQuote._\n\nAfter submitting successfully, you will get list of all these deals on aPay online portal where deals can be reviewed as pet setup approval rules and cab be release for payment.\n\n**3.4 API METHODS**  \nCheck out the list of methods in the list. Explore possible use cases/objectives you can meet  \nwith using them.\n\n| **Methods** | **Brief Description** |\n| --- | --- |\n| GetQuote | Get quote |\n| AcceptQuote | To accept quote |\n| SubmitDeal v 0_0_1 | To submit deal – specify funding acc number |\n| ValidateIBAN | Validates the IBAN |\n| GetAccountBalancev0_0_1 | Get AFX holding account balance – with AC Unique ID |\n| GetFundingAccountList | Generate List of All Funding Accounts Configured for a given account. It returns details of both external and internal accounts |\n| AddPayee | To add a new payee |\n| UpdatePayee | To update a given payee’s information |\n| DeletePayee | To delete a given payee |\n| GetAccountActivityv0_0_2 | Returns ledger by days, debit/credit, specific deal # |\n| GetQuoteTBA | Get a quote when transferring funds from one holding account for a given currency to another account for a different currency |\n| GetPaymentStatus | Get Payments Status by Payment_Id |\n| AcceptAndSubmitDealTBA | Submit the request to transfer funds from holding account to the other based on the rate provided in GetQuoteTBA |","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":true,"owner":"31228683","team":5982770,"collectionId":"787aae2b-3eaf-451a-a23a-b3b4a4ed0360","publishedId":"2sAYX5K2P5","public":true,"publicUrl":"https://docs-trolley.api.ascendant.world","privateUrl":"https://go.postman.co/documentation/31228683-787aae2b-3eaf-451a-a23a-b3b4a4ed0360","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"light","themes":[{"name":"dark","logo":"https://content.pstmn.io/b57689c8-287e-4f12-88fb-b0e9d44f8663/YWZ4ZGFya2xvZ28ucG5n","colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"FF6C37"}},{"name":"light","logo":"https://content.pstmn.io/e37ca72c-1fc2-492c-b611-d2b884419da9/YWZ4d2hpdGVsb2dvLnBuZw==","colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"}}]}},"version":"8.10.0","publishDate":"2025-02-03T15:03:00.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":"https://content.pstmn.io/e37ca72c-1fc2-492c-b611-d2b884419da9/YWZ4d2hpdGVsb2dvLnBuZw==","logoDark":"https://content.pstmn.io/b57689c8-287e-4f12-88fb-b0e9d44f8663/YWZ4ZGFya2xvZ28ucG5n"}},"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/81cd7e3746de17440772907d451d5b55b84ea0dc28a191428d80efd5179803fa","favicon":"https://ascendant.world/favicon.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://docs-trolley.api.ascendant.world/view/metadata/2sAYX5K2P5"}