Understanding Invoice Response Fields
When you receive an invoice response from Revolv3, you’ll see two similar-sounding fields:message and responseMessage. They serve different purposes and come from different sources.
What’s the Difference?
responseMessage - Processor’s Message
What it is: The payment processor’s exact message for the latest invoice attempt.
Where it comes from: Directly from the payment processor (WorldPay, Adyen, Nuvei, etc.)
What it contains: Processor-specific wording like:
- “Approved”
- “Declined”
- “Insufficient Funds”
- “Card Expired”
- Processor-specific error codes and messages
- ✅ Logging: Store processor messages for debugging and support
- ✅ Customer support: Show customers the exact processor message
- ✅ Reconciliation: Match with processor reports using processor wording
- ✅ Processor-specific logic: When you need to handle processor-specific responses
message - Platform-Level Context
What it is: A platform-level, contextual field that may contain business or workflow information.
Where it comes from: Revolv3’s platform (not directly from the processor)
What it contains: High-level workflow or business context like:
- “retryPending” (payment will be retried)
- “no sale attempt was made” (validation prevented processing)
- Workflow notes or validation messages
- Platform-level status updates
- ✅ UI display: Show high-level status to users
- ✅ Workflow logic: Understand what Revolv3 is doing (retrying, etc.)
- ✅ Supplemental context: Additional information beyond processor response
- Reflect the processor’s exact wording
- Correspond to a single processor attempt
- Always be present
Recommended Usage
For Logging and Support
UseresponseMessage:
- Store it in your logs
- Show it to customer support agents
- Use it for reconciliation with processor reports
- It’s the most reliable source of “what the processor said”
For User Interface
Usemessage for high-level context, responseMessage for details:
- Show
messagefor workflow status (e.g., “Payment will be retried”) - Show
responseMessagefor specific errors (e.g., “Insufficient Funds”) - Combine both for complete information
Example: Handling Both Fields
Real-World Scenarios
Scenario 1: Payment Declined
Response:- Show customer: “Payment declined: Insufficient Funds” (from
responseMessage) - Log
responseMessagefor support - Don’t show
message(it’s null)
Scenario 2: Payment Will Be Retried
Response:- Show customer: “Payment declined, but we’ll try again automatically” (combine both)
- Log both:
messagefor workflow,responseMessagefor processor details - Don’t show error to customer yet—wait for final status
Scenario 3: Validation Error
Response:- Show customer: “Payment could not be processed. Please check your information.”
- Log
message(validation prevented processing) responseMessageis null because processor never saw the request
Best Practices
- Always check
responseMessage: It’s the most reliable source of processor feedback - Use
messagefor context: It provides workflow information - Log both: Store both fields for complete debugging information
- Handle nulls: Either field might be null—check before using
- Prioritize
responseMessage: For customer-facing messages, preferresponseMessagewhen available
Common Questions
Q: Which field should I show to customers? A: GenerallyresponseMessage (it’s more specific), but you can combine both for complete context.
Q: What if both are null?
A: Check invoiceAttemptStatus and invoiceStatus for the current state. The invoice might be pending or in an intermediate state.
Q: Can I rely on message always being there?
A: No. message is optional and may be null. Always check if it exists before using it.
Q: Which is better for reconciliation?
A: responseMessage—it matches what processors report, making reconciliation easier.
Next Steps
- Invoice Status — Understand what invoice statuses mean
- Get Invoice Details — See all payment attempts and responses
- Error Responses — Learn how to handle API errors

