Developer
  • Getting started keyboard_arrow_down

    Discover

    • arrow_forward
      EV Charging

      Discover our unattended POS solution for the ev market

    Our solutions

    • arrow_forward
      CCV Terminal

      Integrate with a CCV Terminal

    • arrow_forward
      SoftPOS

      Turn your own device into a payment terminal

    • arrow_forward
      CCV Online Payments

      Accepting online payments in your platform without technical knowledge

    • arrow_forward

    • arrow_forward

    Connect to the CCV Platform

    Integrate our products into your software. Let's make payment happen together!

    Look at all the possibilities
  • Documentation
  • API Reference
menu
    • expand_less Payment API
      • expand_less General
        • Communication
        • Environments
        • Authentication
        • Idempotency
        • Transaction Types
        • Webhooks
        • Notifications
        • Error Handling
        • Security & Privacy
        • Return URL
      • expand_more Online Payments
        • expand_more Quick Start
          • Initial Setup
          • Create Payment
        • expand_more Basic Operations
          • Create A Payment
          • Refund A Payment
          • Authorise & Capture Payments
          • Query The Payment Status
        • expand_more Payment Features
          • expand_more 3D-Secure 2
            • SCA And 3D-Secure 2
            • Compliance Guide
            • Out Of Scope Transactions
            • Exemptions
          • Payment Links
          • Merchant Initiated Payments
          • Embedded Card Payments
          • Mandates
          • Customers & Loyalty
          • Partial Payment
        • expand_more Payment Methods
          • American Express
          • Apple Pay
          • Google Pay
          • expand_more Bancontact
            • Bancontact Walled Initiated Payments (WIP)
            • Bancontact Deferred Sales
          • Bancontact Mobile
          • Banktransfer
          • IDEAL
          • Klarna
          • Landingpage
          • Maestro
          • Mastercard
          • Payconiq
          • Paypal
          • Visa
        • expand_more Payouts
          • Split Payout
          • Test Payout
        • expand_more Developer Resources
          • Currencies
          • Languages
          • Payment Testing
          • Test Cards
      • expand_more In-person Payments
        • expand_more SoftPOS
          • expand_more General
            • Getting Started
            • Device Requirements
            • SoftPOS TerminalIds
            • SoftPOS Errors
            • Currencies
            • Languages
            • Network And Connectivity
            • Release Notes
          • expand_more Basic Operations
            • Install A Terminal
            • Make A Payment
            • Handling Receipts
          • expand_more API Reference
            • SoftPOS - API Reference
    • expand_more Board Your Merchants At CCV
      • expand_more General
        • Getting Started
        • Authentication
      • expand_more Boarding API
        • StartOrder
        • AddSalesPackage
        • AddProductPSPStandalone
        • AddProductPSPSubmerchant
        • AddTerminalPackage
        • SetShoppingCartPricingDetails
        • SubmitOrder
        • Boarding
      • API Reference
    • expand_more Android Rest Beta API
      • expand_more General
        • Getting Started
        • Brands
        • Supported Languages
      • expand_more Basic Operations
        • Make A Payment
        • Cancel A Payment
        • Handling Receipts
        • Show Display Messages
        • Recover A Payment
      • expand_more Payment Features
        • Authorise & Capture
        • Capture
      • expand_more Terminal Features
        • Transaction Overview
        • Brands
        • Period Closing
        • Terminal - Status
      • expand_more Tokenization
        • Tokenization - Get A Card Token
        • Read A Mifare Card
        • Custom Text On Terminal
      • expand_more API Reference
        • API Reference
    • expand_more Android SDK
      • expand_more General
        • Getting Started
        • Demo Application - Android SDK
        • Result States
        • Language Codes
        • Error Handling
        • Logging
        • EP2
        • Download SDK
        • Release Notes
      • expand_more Basic Operations
        • Make A Payment
        • Stop Ongoing Payment
        • Recover A Payment - Android SDK
      • expand_more Payment Features
        • Account Selection - Android SDK
        • Additional Receipt Text - Android SDK
        • Allow Or Deny Card Brands - Android SDK
        • Authorisation By Voice - Android SDK
        • Authorise - Android SDK
        • Capture - Android SDK
        • Card Detection - Android SDK
        • Card Detection Deprecated - Android SDK
        • Card Token - Android SDK
        • Card Validation - Android SDK
        • Customer Display - Android SDK
        • E-Receipt - Android SDK
        • Manual Card Information Entry - Android SDK
        • Payment Reversal - Android SDK
        • Refund - Android SDK
        • Request Transaction Information - Android SDK
        • Reservation - Android SDK
        • German Eichrecht - Android SDK
      • expand_more SDK Guides
        • Activate Terminal - Android SDK
        • Card Circuits - Android SDK
        • Card Reader Status - Android SDK
        • Card Reader Status - Android SDK
        • Check Password - Android SDK
        • Factory Reset - Android SDK
        • Get Config - Android SDK
        • Get Status - Android SDK
        • Mobile Phone Prepaid - Android SDK
        • Online Agent - Android SDK
        • Partial Period Closing - Android SDK
        • Period Closing - Android SDK
        • Possible Transaction Types - Android SDK
        • Retrieve Last Ticket - Android SDK
        • Retrieve Open Pre Authorisations - Android SDK
        • Startup - Android SDK
        • Taxfree - Android SDK
        • Terminal Administration - Android SDK
        • Terminal Discovery - Android SDK
        • Ticket Reprint Period Closing - Android SDK
        • Transaction Overview - Android SDK
        • Check Password - Android SDK
      • expand_more Hardware Access
        • Getting Started
        • NFC - Android SDK
        • Printing - Android SDK
        • QR And Barcode Scanner - Android SDK
      • expand_more API Reference
        • API Documentation
    • Android App Requirements
    • expand_more Certification
      • Introduction
      • expand_more Attended Certification Tests
        • expand_more Aborting
          • F1A - Regular Abort By Merchant
          • F1B - Failing Abort By Merchant
          • F1D - Hammering Abort By Merchant
        • expand_more Allowed Amounts
          • S1A - Transaction With Amount Of EUR 0,00
          • S1B - Transaction With Negative Amount
          • S1C - Transaction With Highest Possible Amount
          • S1D - Over-Amount Transaction
        • expand_more Connection Lost
          • Q1B - Manual Transaction Recovery
          • Q1C - Ethernet Connection With ITS Fails
          • Q1F - Device Unavailable
          • Q1G - Terminal Not Responding
          • T1A - Automatic Transaction Recovery
        • expand_more E Journal
          • M1A - Store E-Journal
          • M2A - ECR/POS Print Journal Receipts
          • M3A - ECR/POS Storing Journal Receipts
        • expand_more Reprint Ticket
          • L1A - Reprint Ticket
          • L1B - Reprint Ticket Declined Transaction
          • L2A - Reprint Ticket No Printer Available
          • L2B - Reprint Ticket Declined Transaction No Printer Available
        • expand_more Tickets
          • U1A - Request For Identification
          • U1B - Request For Signature
          • U1C - Request For Signature And Identification
          • U1D - Failing Transaction No Receipt
          • U1E - Split Payment
        • expand_more Time Out
          • R1A - Time Out On Presenting A Card
          • R1B - Time Out During Pin Entry
        • expand_more Transactions
          • C1A - Happy Flow
          • C1B - Happy Flow Contactless
          • C1D - Happy Flow Magnetic Stripe
          • C1E - Declined Transaction By Host
          • C1E - Transaction Aborted By Cardholder
          • C1F - Absence Of Thousand Separator
          • C1G - Cashier Display Messages
        • expand_more Validation
          • H1A - Too Many Fingers
          • H1B - Not Removing Card
          • H2A - Power Loss Or Closing Of ECR/POS During Transaction
      • expand_more Unattended Certification Tests
        • expand_more User Guidance
          • C1 - Successful Payment
          • C2 - Next Cardholder
          • C3 - Abort On PIN Entry
          • C4 - Time Out During PIN Entry
          • C5 - No Amount Entered
          • C6 - Language Selection
          • C7 - Amount To Authorise
          • C8 - Available Funds
        • expand_more Device Selection
          • D1 - Device Selection
          • D2 - Invalid Device
          • D3 - Charger Selection Abort
          • D4 - No Charger Selected
          • D5 - Authorisation With No Free Devices
        • expand_more Product Delivery
          • E1 - Product Selection
          • E2 - Enabled Products
          • E3 - Invalid Product Entered
          • E4 - Product Selection Aborted
          • E5 - No Product Selected
          • E6 - Max Delivery Time
          • E7 - Abort Session
          • E7 - Abort By POS
          • E9 - Not Started Charging In Time
          • E10 - Take More Fuel Than AVF
          • E10 - Multiple Sessions Mixed
          • E12 - Postpone Card Financial Advice On New Cardholder Card
          • E13 - Abort Session On Card Reinsert
        • expand_more Receipts
          • F1 - Cardholder Retrieve Receipt Info
          • F2 - Cardholder Receipt Retrieval
          • F3 - Reprint Ticket
          • F4 - F8 - Ticket Printing And Content
          • F9 - TrackingToken Deleted
          • F10 - Printer Paper Low
          • F11 - CardPayment Erased From Storage
          • F12 - E-Receipt Received By Cardholder
          • F13 - E-Receipt Failure
        • expand_more Transaction Limit Handeling Maestro
          • G1 - Maestro CardPayment 1 Euro
          • G2 - Maestro CardPayment 30 Euro
          • G3 - Maestro CardPayment 60 Euro
          • G4 - Maestro CardPayment 500 Euro
        • expand_more Transaction Limit Handeling Mastercard
          • H1 - Mastercard CardPayment 1 Euro
          • H2 - Mastercard CardPayment 30 Euro
          • H3 - Mastercard CardPayment 60 Euro
          • H4 - Mastercard CardPayment 500 Euro
        • expand_more Mifare Handling
          • I1 - Happy Flow Mifare
          • I2 - Unknown Mifare Card
          • I3 - No Mifare Card Presented
          • I4 - Mastercard Presented
        • expand_more Card Circuits
          • L1 - Available Card Circuits
        • expand_more Reconciliation
          • M1 - Reconciliation As Function
          • M2 - Reconciliation By New Shiftnumber
          • M3 - POS Auto Triggers Reconciliation With Closure
        • expand_more Journal
          • N1 - Journal Accessible By Authorized Employees
          • N2 - Journal Cannot Be Altered
        • expand_more Exception Flows
          • O1 - Unknown Card Session
          • O2 - Maximum Time Out
          • O3 - Device Unavailable
          • O4 - Time Out Card-Type Fallback
          • O5 - Time Out On Presenting Card
          • O6 - App Stability
          • O7 - Automatic Startup
          • O8 - Sleep Mode Not Supported
          • O8 - Sleep Mode Supported
        • expand_more Recovery
          • X1 - Recovery After Communication Failure
          • X2 - Recovery After CCV Component Update
          • X3 - Recovery After 24 Hour Reboot
          • X4 - Recovery After CCV-Fusion Client Restart
          • Y1 - Recovery After Power Failure With No Battery Backup
          • Y2 - Recovery After Power Failure With Battery Backup
      • expand_more SoftPOS Certification Tests
        • expand_more Success Scenarios
          • Installation Success - SoftPOS Certification Test
          • Payment Success - SoftPOS Certification Test
        • expand_more Failed Scenarios
          • Installation Failed - CCV SoftPOS App Not Installed - SoftPOS Certification Test
          • Payment Failed - Declined - SoftPOS Certification Test
          • Payment Failed - CCV SoftPOS App Is Closed During Payment - SoftPOS Certification Test
          • Payment Failed -CCV SoftPOS App Is Killed During Payment - SoftPOS Certification Test
          • Payment Failed - SoftPOS App Not Installed Anymore - SoftPOS Certification Test
        • expand_more Other Scenarios
          • Other Scenario - Data Cleared Of The CCV SoftPOS App - SoftPOS Certification Test
    • expand_more Development Kits
      • SoftPOS Dev Kit
      • IM30 Dev Kit
    • Glossary

Payment API

  • General
    • Communication
    • Environments
    • Authentication
    • Idempotency
    • Transaction Types
    • Webhooks
    • Notifications
    • Error Handling
    • Security & Privacy
    • Return URL
  • Online Payments
    • Quick Start expand_more
      • Initial Setup
      • Create Payment
    • Basic Operations expand_more
      • Create A Payment
      • Refund A Payment
      • Authorise & Capture Payments
      • Query The Payment Status
    • Payment Features expand_more
      • 3D-Secure 2 expand_more
        • SCA And 3D-Secure 2
        • Compliance Guide
        • Out Of Scope Transactions
        • Exemptions
      • Payment Links
      • Merchant Initiated Payments
      • Embedded Card Payments
      • Mandates
      • Customers & Loyalty
      • Partial Payment
    • Payment Methods expand_more
      • American Express
      • Apple Pay
      • Google Pay
      • Bancontact expand_more
        • Bancontact Walled Initiated Payments (WIP)
        • Bancontact Deferred Sales
      • Bancontact Mobile
      • Banktransfer
      • IDEAL
      • Klarna
      • Landingpage
      • Maestro
      • Mastercard
      • Payconiq
      • Paypal
      • Visa
    • Payouts expand_more
      • Split Payout
      • Test Payout
    • Developer Resources expand_more
      • Currencies
      • Languages
      • Payment Testing
      • Test Cards
  • In-person Payments
    • SoftPOS expand_more
      • General expand_more
        • Getting Started
        • Device Requirements
        • SoftPOS TerminalIds
        • SoftPOS Errors
        • Currencies
        • Languages
        • Network And Connectivity
        • Release Notes
      • Basic Operations expand_more
        • Install A Terminal
        • Make A Payment
        • Handling Receipts
      • API Reference expand_more
        • SoftPOS - API Reference

What's on this page

  • Notifications
  • Event Types
  • Security
  • Notification Signing
  • Communication
    • Request
      • StatusChanged
      • PaidOut
      • AuthenticationStarted
      • AuthenticationCompleted
      • MandateUpdated
      • MandateUsed
      • TerminalMessageUpdate
    • Response
  • Best practices
  • Common mistakes
    • Replying with a redirect
    • Using localhost in your notification
    • Not using a secure endpoint
General / Notifications

Notifications

A Notification is (similar to a Webhook) callback mechanism to inform you of events occurring in our system related to a transaction. This is accomplished by making an HTTP call to an endpoint in your system at the moment these events take place. Whereas a webhook does not contain any data next to the id (the referenceId), we will include information regarding the event and the notification itself.

Event Types

Notification Requests allow you to subscribe to certain events in order to receive a notification for those events. The following events are currently supported:

Event type Description
StatusChanged Results in a notification as the transaction status is changed. This would replace the standard Webhook when included.
Collected Results in a notification as the transaction is collected for balance processing in preparation for payout processing. This will only be triggered for collecting protocols
PaidOut Triggered as the transaction is processed and taken into account for payout to the merchant. This will only be triggered for collecting protocols.
AutoRefunded Results in a notification when the transaction is automatically refunded. This will only be triggered for collecting protocols.
AuthenticationStarted Results in a notification when the authentication process has started. If there is no authentication, no notification is sent.
AuthenticationCompleted Results in a notification when the authentication process has been completed, regardless of the authentication status.
MandateUpdated Results in a notification when a mandate is updated.
MandateUsed Results in a notification when a mandate is used to initiate a transaction.
TerminalMessageUpdate Results in notifications for intermediate messages (eg: Waiting for PIN) received from the terminal. In an attended terminal payment flow these messages can be handy when displayed to the cashier.

Duplicate event types are not allowed and each request must be accompanied by a URL to which we will send the notification.

It’s possible to include additional URL parameters for each notification to the notification URL, for example, an order reference. This would result in a notification URL like http://shop/notify?order=123456&foo=bar.

Example

{
  "amount" : 0.1,
  "currency" : "EUR",
  "method" : "ideal",
  "returnUrl" : "http://shop/?order=8cdbb73f-6537-4b7f-a6de-6ddab6c283e1",
  "metadata" : "my custom metadata",
  "merchantOrderReference" : "8cdbb73f-6537-4b7f-a6de-6ddab6c283e1",
  "description" : "API Payment description",
  "language" : "eng",
  "notificationRequests": [
          {
              "eventType": "StatusChanged",
              "notificationUrl": "https://notifiy.shop/1233455"
          }
      ]
}

Security

Due to security restrictions, we will only support https:// URLs. If you are technically not able to support this, please contact us.

For a more secure internet, you can look at services like Let's Encrypt that provide you certificates issued by a free and trusted Certificate Authority!

Notification Signing

In order to ensure that the Notification received originates from CCV, the request has a Signature header which is the result of signing the notification JSON request body. Verifying the signature is optional and is available as a security feature. The Public Key to perform this check can be obtained via this resource (which is also present as a full URL in the request JKWurl header):

  • Resource: /api/v1/notifications/jwk
  • Method: GET
  • Content-Type: application/json

For more information on JSON Web Keys, please visit JOSE4J on BitBucket.

The algorithm used is ECDSA_USING_P256_CURVE_AND_SHA256. The id of the key used to create the signature is present in the JWKkeyId header field of each notification request which indicates which cached key you should use to verify the signature. We strongly recommend caching the active keys.

Communication

Request

  • Method: POST
  • Content-Type: application/json
  • Parameters

The following parameters are common;

Name Description
id The unique reference of the transaction
eventType The type of event that triggered this notification
eventTimestamp The epoch timestamp that the event took place that triggered the notification
order The order this notification has in the sequence of requested notification types for the transaction
attempt The number of times this notification type was attempted for the transaction

Example

{
  "id" : "AP150513232281754007360.1",
  "eventType" : "Collected",
  "eventTimestamp" : 1420106400000,
  "order" : 2,
  "attempt" : 1
}

Certain events have additional parameters that may be included;

StatusChanged

Name Description
newStatus The new status of the transaction
failureCode If the status changed to failed the failure code will specify the reason.

Example

{
  "id" : "AP150513232281754007360.1",
  "eventType" : "StatusChanged",
  "eventTimestamp" : 1420106400000,
  "newStatus" : "FAILED",
  "failureCode" : "CANCELLED",
  "order" : 1,
  "attempt" : 1
}

PaidOut

Name Description
paidoutReference The reference used when performing the payout. This can be used to look up transactions related to that payout.
unstructuredMessage The unstructured message that will be visible on the customer’s bank statement.

Example

{
  "id" : "AP150513232281754007360.1",
  "eventType" : "PaidOut",
  "eventTimestamp" : 1420106400000,
  "paidoutReference" : "yourPayoutRef",
  "unstructuredMessage" : "someUnstructuredMessage",
  "order" : 3,
  "attempt" : 2
}

AuthenticationStarted

No additional parameters.

Example

{
  "id" : "AP150513232281754007360.1",
  "eventType" : "AuthenticationStarted",
  "eventTimestamp" : 1420106400000,
  "order" : 1,
  "attempt" : 1
}

AuthenticationCompleted

Name Description
status The status of the authentication. Values that are possible: SUCCESS, FAILED, UNKNOWN.

Example

{
  "id" : "AP150513232281754007360.1",
  "eventType" : "AuthenticationCompleted",
  "eventTimestamp" : 1420106400000,
  "status": "SUCCESS",
  "order" : 2,
  "attempt" : 1
}

MandateUpdated

Name Description
status The status of the mandate. Values that are possible: ACTIVE, INACTIVE.

Example

{
  "id" : "MAN210729090035746CB87E192.0",
  "eventType" : "MandateUpdated",
  "eventTimestamp" : 1420106400000,
  "status": "ACTIVE",
  "order" : 1,
  "attempt" : 1
}

MandateUsed

Name Description
childReferenceId The referenceId of the payment that used the mandate.

Example

{
    "id" : "MAN210729090035746CB87E192.0",
    "eventType" : "MandateUsed",
    "eventTimestamp" : 1420106400000,
    "childReferenceId": "P210729090128096CB87E190.1",
    "order" : 1,
    "attempt" : 3
}

TerminalMessageUpdate

Name Description
message The message to be displayed to the cashier
messageOrderNumber The order number of the message. The messages can be sent out of order. You should only display messages with a higher number than the currently displayed message

Example

{
  "id" : "AP150513232281754007360.1",
  "eventType" : "AuthenticationCompleted",
  "eventTimestamp" : 1420106400000,
  "message": "Payment in progress",
  "messageOrderNumber": 5,
  "order" : 2,
  "attempt" : 1
}

Response

We expect an HTTP 2XX Success code and the content will be ignored. If no 2XX code is returned, we will retry.

Best practices

It is strongly recommended to answer the notification with a 2xx HTTP status code as fast as possible. We recommend that you do not perform any heavy processing in your notification handler synchronously. Our system only sends a limited amount of parallel notifications to your system. If you block the notification handler by doing some processing, you might miss other webhooks. Instead, we suggest to use a queue system to process the notification asynchronously and to answer the notification immediately after receiving it.

Common mistakes

Replying with a redirect

CCV does not follow redirects. If you responds with a HTTP code that is less than 200 or greater than 299, CCV will retry the notification.

Using localhost in your notification

CCV does not send notifications to localhost. A notification url must be a public endpoint that CCV can access.

Not using a secure endpoint

CCV does not send notifications to insecure endpoints. See Security for more information

Go to

Home
Documentation




Cookies Privacy Statement