{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"b24a1396-fe0b-48ec-bff6-54a5d2267db0","name":"AFXLink API Reference Guide V5.28.7.1","description":"## **Welcome**\n\nWelcome to AFX Link, Ascendant's API\n\n**1\\. PAYMENT SOLUTIONS OVERVIEW**\n\nAFXLink provides REST APIs that allow developers to integrate Ascendant's global payment and foreign exchange capabilities directly into their applications and internal systems.\n\nUsing the AFXLink API, you can build workflows to manage payees, retrieve FX quotes, submit payments, check account balances, validate payment information, and track transactions.\n\nThis guide is intended for developers integrating their applications or systems with the AFXLink API.\n\nAFXLink APIs use REST principles, and API responses are returned in JSON.\n\n### **2\\. GETTING STARTED**\n\nAFXLink provides separate Sandbox and Live environments so you can build and test your integration before moving to production.\n\nTo get started:\n\n1. Obtain your Sandbox API credentials from your Ascendant account manager.\n    \n2. Configure authentication using your API credentials.\n    \n3. Use the AFXLink Postman collection to explore and test API requests.\n    \n4. Build and test your integration in the Sandbox environment.\n    \n5. When you are ready to move to production, contact your Ascendant account manager to obtain Live API credentials.\n    \n\nSandbox and Live environments use separate API credentials. Do not use Sandbox credentials in the Live environment.\n\n**2.1 Postman Guide**\n\nYou can use Postman to explore and test AFXLink REST APIs before integrating them into your application.\n\nThe AFXLink Postman collection provides sample requests that you can customize and send to available API methods.\n\nTo get started:\n\n1. Sign up for or log in to your Postman account on [postman.com](https://www.postman.com/).\n    \n2. Fork the AFXLink Postman collection into your workspace.\n    \n3. Configure the collection with your Sandbox API credentials.\n    \n4. Send a request and review the API response.\n    \n\nSelect **Run in Postman** below to access the collection.  \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:\n\n**Sandbox**  \nUse the Sandbox environment to develop and test your integration.\n\n**Live**  \nUse the Live environment to process production transactions.\n\nEach environment uses separate API credentials. Contact your Ascendant account manager to obtain the appropriate credentials.\n\n**API Authentication**  \nAll AFXLink APIs are authenticated using HTTP Basic Authentication . Basic auth requires the following:\n\n\\[YOUR_KEY_ID\\]  \n\\[YOUR_KEY_SECRET\\]\n\nUse an Authorization header for each request in the format:\n\n`Authorization: Basic BASE64_TOKEN`\n\n`BASE64_TOKEN` is the Base64-encoded value of:\n\n`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 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://afxlink-live.ascendantfx.com/](https://afxlink-live.ascendantfx.com/)\n\nYou need to include this before each API endpoint to make API calls.\n\nYou can use the below endpoint to run a health check or ping on the AFXLink API.  \nIf the web service is accessible, it 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\nAFXLink uses several core objects throughout its API requests, responses, and payment workflows.\n\nUnderstanding these objects will make it easier to work with the API.\n\n**3.1 API Entities**\n\n**i. Client**\n\nThe Client must be registered with Ascendant before using the API. Once registered, the Client receives an Organization ID and API credentials.\n\nThe Client's application uses these credentials to authenticate API requests and access permitted AFXLink functionality.\n\n**ii. Payee**\n\nA Payee is the recipient of the payment. A Payee record includes information such as:\n\n- _Payee Information:_ Name, Mail id, Currency, Address, Account number etc\n    \n- _Payee Bank Information:_ Details of bank where recipient have the account and will receive the payment.\n    \n- _Originator Info:_ In case or FI customers, details of Originator information who send the payment through clients.\n    \n\n**iii. Payment**\n\nA Payment represents an individual payment instruction. A Payment can include information such as:\n\n- Payment amount\n    \n- Payment currency\n    \n- Payment method\n    \n- Settlement amount\n    \n- Settlement currency\n    \n- Settlement method\n    \n- Fees\n    \n- Payee information\n    \n\n**iv. Deal**\n\nA Deal is a collection of one or more payment objects. With the help of Deal, multiple payment instructions can be sent in bulk at once with one settlement / funding source.\n\n**v. Quote**\n\nA Quote represents the 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\nThe following will be the flow of object creations using api methods/endpoint in order to book deals on the Ascendant platform.\n\n**i. Payee Creation**\n\nUse the `AddPayee` API method to create a Payee or `UpdatePayee` to update an existing Payee.\n\nAfter a Payee is created successfully, AFXLink returns a `PayeeID`. Store this identifier in your system if you want to reuse the Payee for future payments.\n\nYou can also provide Payee information directly when calling `SubmitDeal`. If the Payee does not already exist, AFXLink creates the Payee before submitting the Deal. If the Payee already exists, the existing Payee information is updated before the Deal is submitted.\n\n**ii. Quote Creation**\n\nUse `GetQuote` to retrieve an FX quote for a supported currency pair.\n\nFor transfers between Ascendant accounts, use `GetQuoteTBA`.\n\nThe Quote provides the applicable exchange rate and calculates the corresponding payment and settlement amounts.\n\n**iii. Accept Quote**\n\nUse `AcceptQuote` to accept the Quote before submitting the Deal.\n\nAn accepted Quote is valid for two hours. If the Quote expires before the Deal is submitted, request and accept a new Quote.\n\n**iv. Submit Deal**\n\nAfter accepting the Quote, use `SubmitDeal` with:\n\n- A valid `QuoteID`\n    \n- Accepted Payment information\n    \n- A valid `PayeeID` or Payee object\n    \n\nAfter the Deal is created successfully, AFXLink returns an `AFXDealID`.\n\nStore the `AFXDealID` in your system. You can use it to track the Deal and support reconciliation.\n\n**v. Retrieve Submitted Deals**\n\nUse `PostDeal` to retrieve successfully submitted and approved Deals and Payments for reconciliation with your system.\n\nThe response includes a `PaymentID`. Where applicable, you can use this identifier with `GetPaymentStatus` to retrieve payment status information from the Swift network.\n\n**vi. Confirm Reconcilliation**\n\nUse `PostDealConfirmation` to mark a Payment as reconciled in your system.\n\nOnce confirmed, subsequent `PostDeal` requests can return only newer or unreconciled Deal and Payment information. This helps keep responses smaller and reduces unnecessary network latency on api calls.\n\n**3.3 Use Cases For Selecting Methods**\n\n**i. Quick Quote.**  \nUse _SubmitDealAutoQuote_ method with payee object. This will create payee object and GetQuote, accept internally on the basis of current market rate, and submit the deal.\n\n**ii. Quote Approval before before submitting deal**  \nUse _GetQuote_, _AcceptQuote_ and _SubmitDeal_ in same sequence.\n\n**iii. Create payee database to reuse for subsequent calls.**\n\nUse _AddPayee_ followed by _SubmitDealAutoQuote_ with PayeeID reference or (_GetQuote_ + _AcceptQuote_\\+ _SubmitDeal_ ) with PayeeID reference\n\n**iv. Manual approval on web platform, after 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 can 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 with using them.\n\n| **Methods** | **Brief Description** |\n| --- | --- |\n| GetQuote | Get quote |\n| AcceptQuote | To accept quote |\n| SubmitDeal | To submit deal |\n| SubmitDeal v 0_0_1 | To submit deal – specify funding acc number |\n| ValidateIBAN | Validates the IBAN |\n| GetAccountBalance | Get AFX holding account balance |\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| GetPayeeInfo | Get information for a given payee |\n| GetPayeeInfov_0_0_2 | Get information for a given payee + PayeeNickName in the Response |\n| GetPayeeInfov_0_0_3 | Get information for a given payee with NickName search |\n| AddPayee | To add a new payee |\n| UpdatePayee | To update a given payee’s information |\n| DeletePayee | To delete a given payee |\n| PostDeal | Post submitted and approved deals back into your ERP or Accounting Platform |\n| ValidatePayeeInfo | Validate existing payee record through our trademark Payee Intelligence engine to look for completeness of information provided |\n| GetAccountActivity | Returns ledger of the holding account |\n| GetAccountActivityv0_0_1 | Returns ledger by days, debit/credit, specific deal # |\n| IncomingFundsStatusCheck | Check if the coming funds has been credited to your holding account |\n| GetQuoteTBA | Get a quote when transferring funds from one holding account for a given currency to another account for a different currency |\n| AcceptAndSubmitDealTBA | Submit the request to transfer funds from holding account to the other based on the rate provided in GetQuoteTBA |\n| IncomingPaymentInstruction | For Partners who would like to provide instructions to their end users/customers for a payment being sent to the US or CAD |\n| SubmitIncomingDeal | For submitting incoming deals by our partners for their end users/clients |\n| SmartAddPayeeInitiate | Payee Intelligence – First start to initiate the process |\n| SmartAddPayee | Payee Intelligence – continues the process from the point of initiation |\n| IncompletePayee | Fetch the list of incomplete payees created while using the Payee Intelligence (Smart Add) functionality |\n| GetDealPendingApproval | Fetch the list of deal/payments that are pending approval |\n| SubmitDealDefaultFunding | To submit deal with default funding |\n| SubmitDealAutoQuote | To submit deal with auto quote (no need to Get Quote and Accept Quote method calls.) |\n| SubmitDealAutoQuote_0_0_1 | To submit deal with DBLI auto quote (no need to Get Quote and Accept Quote method calls.) |\n| SubmitDealAutoQuote_0_0_2 | To submit deal with auto quote (no need to Get Quote and Accept Quote method calls.)+ YourPaymentId |\n| SubmitDealAutoQuote_0_0_3 | To submit deal with auto quote (no need to Get Quote and Accept Quote method calls.)+ AFXPaymentID |\n| SubmitDealForApproval | To submit deal for approval (this deal goes in approval process and approver can approve this deal from online portal) |\n| DeletePendingDealById | Delete a specific deal in the pending approval queue for a given client |\n| GetDealStatus | Get status for a given Deal |\n| GetDealInfo | Get Payment information for a given Deal |\n| GetPayorInfo | Get information for a given payer/payor |\n| New Additions |  |\n| SubmitDealMultipayorAutoQuote | To submit deal with auto quote and multiple funding (no need to Get Quote and Accept Quote method calls.) |\n| AddPayee_0_0_3 | Include DOB while Adding New Payee |\n| UpdatePayee_0_0_3 | Include DOB while Updating a Payee |\n| GetPayeeInfo_0_0_5 | Include DOB in response payload |\n| GetPayeeDynamicFields | For a given country & currency combination, it will return a set of dynamic & mandatory fields |","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":true,"owner":"31228683","team":5982770,"collectionId":"b24a1396-fe0b-48ec-bff6-54a5d2267db0","publishedId":"2sAYkGJy87","public":true,"publicUrl":"https://docs.api.ascendant.world","privateUrl":"https://go.postman.co/documentation/31228683-b24a1396-fe0b-48ec-bff6-54a5d2267db0","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/06c99ec6-874e-4707-980e-4caea38203a9/YWZ4ZGFya2xvZ28ucG5n","colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"FF6C37"}},{"name":"light","logo":"https://content.pstmn.io/36982b91-b0f1-4600-b22d-80f4ceefc357/YWZ4d2hpdGVsb2dvLnBuZw==","colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"}}]}},"version":"8.12.3","publishDate":"2025-03-20T13:00:42.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":"https://content.pstmn.io/36982b91-b0f1-4600-b22d-80f4ceefc357/YWZ4d2hpdGVsb2dvLnBuZw==","logoDark":"https://content.pstmn.io/06c99ec6-874e-4707-980e-4caea38203a9/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.api.ascendant.world/view/metadata/2sAYkGJy87"}