Home / Issuing / Control Authorizations
Collaborative authorization empowers you to approve or decline transactions in real time based on your business logic. Collaborative authorization requests are for initial authorizations only, not refund authorizations.
This guide covers how to configure and activate a collaborative authorization endpoint, verify requests, make real-time authorization decisions, and simulate authorizations in the test environment.
The following steps demonstrate how collaborative authorization typically works on a card product:
These steps are depicted in the following graphic:
Collaborative authorization is self-service in your test environment. In the live environment, this feature must be enabled for your product by the Highnote team.
To start using collaborative authorization, you must complete the following steps:
You can manage collaborative authorization endpoints using the Highnote Dashboard or API.
For information on managing your collaborative authorization endpoints using the Highnote Dashboard, see the Collaborative authorization in the Support docs.
Refer to the following guidelines when managing collaborative authorization endpoints using the Highnote API:
user-agent: HighnotePlatform/1.0.0highnote-signature: The result of computing an HMAC 256 signature of the request bodycontent-type: application/jsonUse the following mutation to register and add a collaborative authorization endpoint. By default, collaborative authorization endpoints are inactive at creation.
When registering a collaborative authorization endpoint, refer to the following requirements:
2XX response. All other status codes result in the transaction being declined.Only 1 endpoint can be ACTIVE at a time. Activating an endpoint automatically deactivates any existing active endpoints.
Once a collaborative authorization endpoint has been registered, you must activate and verify it. Use the following mutation to activate a collaborative authorization endpoint:
The collaborativeAuthorizationRequest.id is an idempotent key. In the event of a retry, Highnote resends the same request to your collaborative authorization endpoint with the same id.
Collaborative authorization request events differ from payment card authorization notification events.
Refer to the following guidelines for handling collaborative authorization requests and responses:
When your endpoint fails to respond (timeout or non-2XX), Highnote uses your card product's stand-in settings to approve or decline the transaction. Contact support@highnote.com to configure stand-in behavior.
Collaborative authorization request events differ from payment card authorization notification events.
A collaborative authorization request is an HTTPS POST request with a JSON body.
Amount fields:
A collaborative authorization request body has several amount fields relating to a transaction's money movement. These amount fields may differ from one request to another.
| Field | Description |
|---|---|
| transactionAmount | The amount the merchant requested for the transaction, displayed in the local (transaction) currency. |
| settlementAmount | The transactionAmount converted to the settlement currency. |
| requestedAmount | The amount of funds approved by the issuer in the settlement currency. May include surcharge fees. In some use cases, this value can exceed transactionAmount. |
Other notes:
"responseCode": "APPROVED" refers to Highnote's preliminary authorization decision before calling your endpoint.extensions object contains metadata about the request, specifically the signatureTimestamp which is the Unix timestamp (milliseconds) when the request was signed. Use this to verify request freshness and prevent replay attacks.The following code snippet provides an example of a collaborative authorization request body:
The following code snippet provides an example of a cross-border collaborative authorization request body:
Collaborative authorization response bodies may have the following fields:
| Field | Description |
|---|---|
transaction.id | Unique identifier of the transaction |
responseCode | Transaction authorization response |
authorizedAmount | An Amount object |
For a full list of collaborative authorization response codes, see CollaborativeAuthorizationResponseCode in the API reference.
When your endpoint responds with the following payload, an AuthorizationEvent will reflect a status of APPROVED.
The following code snippet provides an example APPROVED response body:
For partial approvals, the authorizedAmount cannot be greater than the requestedAmount and must be expressed in the same currency.
When your endpoint responds with the following payload, an AuthorizationEvent reflects a status of PARTIAL_AMOUNT_APPROVED.
The merchant must report whether their point of sale can accept a partial amount via the terminalSupportsPartialApproval field in the pointOfSaleDetails object:
When you need to decline an AuthorizationEvent, your endpoint passes back an appropriate response code reflecting why your system declined the authorization:
During collaborative authorization, when Highnote receives an authorization from the payment network, Highnote responds with one of three initial response codes:
APPROVEDPARTIAL_AMOUNT_APPROVEDDO_NOT_HONORYou will only see a collaborative authorization request in your system if Highnote sends an APPROVED or PARTIAL_AMOUNT_APPROVED response.
When your system responds to the collaborative authorization request, the resulting response code from Highnote's platform follows the pattern described in the following tables.
The following table provides an overview of scenarios when Highnote provides an APPROVED response to a IssuerPreliminaryAuthorizationEvent:
| Initial Highnote response | Your system's response | Final Highnote platform response code |
|---|---|---|
APPROVED | Your system returns an APPROVED response without authorizedAmount or with authorizedAmount equal to requestedAmount | APPROVED |
APPROVED | Your system returns an APPROVED response with authorizedAmount less than requestedAmount and the POS supports partial approval | PARTIAL_AMOUNT_APPROVED |
APPROVED | Your system returns an APPROVED response with authorizedAmount less than requestedAmount and POS does not support partial approval | DO_NOT_HONOR |
APPROVED | Your system returns an APPROVED response with authorizedAmount more than requestedAmount | DO_NOT_HONOR |
APPROVED | Your system responds with an APPROVED response and authorizedAmount is not equal to requestedAmount and POS does not support partial approval | DO_NOT_HONOR |
APPROVED | Your system returns a PARTIAL_AMOUNT_APPROVED response without authorizedAmount | APPROVED |
APPROVED | Your system returns a PARTIAL_AMOUNT_APPROVED reponse with authorizedAmount equal to requestedAmount | APPROVED |
APPROVED | Your system returns a PARTIAL_AMOUNT_APPROVED reponse with authorizedAmount more than requestedAmount | DO_NOT_HONOR |
APPROVED | Your system returns a PARTIAL_AMOUNT_APPROVED response with authorizedAmount less than requestedAmount | PARTIAL_AMOUNT_APPROVED |
APPROVED | Your system returns a PARTIAL_AMOUNT_APPROVED and authorizedAmount is not equal to requestedAmount and POS does not support partial approval | DO_NOT_HONOR |
APPROVED | Your system returns a response with a different currency code than the currency code used in the original transaction | DO_NOT_HONOR |
The following table provides an overview of scenarios when Highnote provides an PARTIAL_AMOUNT_APPROVED response to a IssuerPreliminaryAuthorizationEvent:
| Initial Highnote response | Your system's response | Final Highnote platform response code |
|---|---|---|
PARTIAL_AMOUNT_APPROVED | Your system returns an APPROVED response without authorizedAmount or with authorizedAmount equal to requestedAmount | PARTIAL_AMOUNT_APPROVED |
PARTIAL_AMOUNT_APPROVED | Your system returns an APPROVED response with authorizedAmount less than requestedAmount | PARTIAL_AMOUNT_APPROVED |
PARTIAL_AMOUNT_APPROVED | Your system returns an APPROVED response with authorizedAmount more than requestedAmount | DO_NOT_HONOR |
PARTIAL_AMOUNT_APPROVED | Your system returns an PARTIAL_AMOUNT_APPROVED response without authorizedAmount | PARTIAL_AMOUNT_APPROVED |
PARTIAL_AMOUNT_APPROVED | Your system returns a PARTIAL_AMOUNT_APPROVED response with authorizedAmount equal to requestedAmount | PARTIAL_AMOUNT_APPROVED |
PARTIAL_AMOUNT_APPROVED | Your system returns a PARTIAL_AMOUNT_APPROVED response with authorizedAmount more than requestedAmount | DO_NOT_HONOR |
PARTIAL_AMOUNT_APPROVED | Your system returns a PARTIAL_AMOUNT_APPROVED response with authorizedAmount less than requestedAmount | PARTIAL_AMOUNT_APPROVED |
PARTIAL_AMOUNT_APPROVED | Your system returns a PARTIAL_AMOUNT_APPROVED response and authorizedAmount is not equal to requestedAmount and POS does not support partial approval | DO_NOT_HONOR |
PARTIAL_AMOUNT_APPROVED | Your system returns a response with a different currency code than the currency code used in the original transaction | DO_NOT_HONOR |
When you register a collaborative authorization endpoint, the API returns a secret key. If you need to retrieve this key again, you can query the CollaborativeAuthorizationEndpoint object to retrieve the signingKeys field.
Use the following query to retrieve a collaborative authorization endpoint's secret key:
Use the collaborative authorization simulation to test your endpoints in the test environment. For more information, see Simulate Collaborative Authorization.