Feature Request: API Access to Payment Accounts & Card Charging

Use Case

Building an automation agent to charge OTA Virtual Credit Cards at the correct time:

  • Non-refundable bookings → charge immediately
  • Standard bookings → charge when cancellation policy window passes

The Data Already Exists

Rover already receives VCC information from OTAs via the channel manager. For example, from Booking.com:

<GuaranteeDescription>
  <Text>GuaranteeType: VIRTUAL CREDITCARD, Type: PrePay, 
        Description: payment_on_Booking.com (Payout type: Virtual credit card)</Text>
</GuaranteeDescription>

<Comments>
  <Text>You received a virtual credit card for this reservation. 
        You can charge it from 2025-12-13.</Text>
</Comments>

This tells us:

  • It's a VCC (GuaranteeType: VIRTUAL CREDITCARD)
  • Activation date (from 2025-12-13)
This data is coming in but not exposed via API.

Request 1: Expose Payment Account Details

GET /reservations/{id} should return:

{
  "payment_accounts": [
    {
      "id": "PA_123456",
      "card_holder": "Bookingcom Agent",
      "card_type": "MC",
      "last_four": "1111",
      "expiry_month": "09",
      "expiry_year": "2025",
      "is_virtual": true,
      "activation_date": "2025-12-13",
      "guarantee_type": "VIRTUAL CREDITCARD"
    },
    {
      "id": "PA_789012",
      "card_holder": "Jane Doe",
      "card_type": "VISA",
      "last_four": "4242",
      "expiry_month": "03",
      "expiry_year": "2027",
      "is_virtual": false,
      "activation_date": null,
      "guarantee_type": "CREDIT CARD"
    }
  ]
}

At minimum expose:

  • id – unique identifier to select which card to charge
  • card_holder – to identify VCCs by name pattern
  • is_virtual – to filter VCCs from guest cards
  • activation_date – already in incoming OTA data
  • guarantee_type – already parsed from OTA message

Request 2: Endpoint to List Payment Accounts

GET /payment_accounts?hotel_id=123&reservation_id=456

{
  "results": [
    {
      "id": "PA_123456",
      "reservation_id": 456,
      "card_holder": "Bookingcom Agent",
      "card_type": "MC",
      "last_four": "1111",
      "is_virtual": true,
      "activation_date": "2025-12-13"
    },
    {
      "id": "PA_789012",
      "reservation_id": 456,
      "card_holder": "Jane Doe",
      "card_type": "VISA",
      "last_four": "4242",
      "is_virtual": false,
      "activation_date": null
    }
  ]
}

Optional filter: GET /payment_accounts?hotel_id=123&reservation_id=456&is_virtual=true

Request 3: Endpoint to Charge a Specific Payment Account

POST /bills/{bill_id}/payments/by-payment-account

A reservation may have multiple cards on file (e.g., OTA VCC + guest's personal card). The API must allow selecting which card to charge by payment_account_id.

Request:

{
  "payment_account_id": "PA_123456",  // Specify which card to charge
  "amount": {
    "amount": 450.00,
    "currency": "PLN"
  },
  "reference": "VCC charge - nonref policy"
}

Response (success):

{
  "transaction_id": "TXN_789456",
  "status": "APPROVED",
  "authorization_code": "AUTH123",
  "amount_charged": 450.00,
  "charged_at": "2025-12-13T10:30:00Z",
  "payment_account_id": "PA_123456",
  "card_last_four": "1111"
}

Response (declined):

{
  "transaction_id": "TXN_789457",
  "status": "DECLINED",
  "decline_reason": "Card not yet active",
  "decline_code": "NOT_ACTIVE",
  "payment_account_id": "PA_123456"
}

Summary

WhatStatusRequest
VCC flag & activation dateAlready received from OTAExpose in API
Card holder nameAlready storedExpose in API
Payment account IDExists internallyExpose in API
List all cards on reservationData existsExpose in API
Select specific card to chargeLogic exists (UI allows this)Expose in API
Charge endpointLogic exists (Auto Charge feature)Expose in API
This is not asking for new functionality – just API access to data and logic that already exists in Rover.

Is this on the roadmap?

Login or Signup to post a comment