{
  "swagger": "2.0",
  "info": {
    "title": "Google Standard Payments Google Hosted Refundable One Time Payment Codes API",
    "description": "This includes services hosted by Google for Refundable One Time Payment Codes.",
    "version": "v1"
  },
  "host": "vgw.googleapis.com",
  "basePath": "/gsp",
  "schemes": ["https"],
  "paths": {
    "/refundable-one-time-payment-code-v1/inquiryNotification": {
      "post": {
        "tags": ["vgw"],
        "operationId": "InquiryNotification",
        "description": "Notifies Google of a request for inquiry into a transaction. This signifies a user is contesting a payment but the issuer is requesting more information before deciding whether to issue a chargeback or not. No money movement occurs as a result of this call. Google may send details about the payment to the integrator to prove validity. If the endpoint encounters an error while processing the request, the endpoint will return HTTP 4xx or 5xx and the HTTP body will either be of type `ErrorResponse` or contain a generic error (e.g. a message similar to \"There was an error. Please try again later.\"). The generic error is used in situations where an `ErrorResponse` with a clear description could be used to help an attacker understand the payment integrator account identifier of other integrators. In these situations, where either the signing key doesn't match, the payment integrator identifier was not found, or the encryption key was unknown, this method will return a generic error. If the request signature could be verified, additional information regarding the error will be returned in an `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1, \"minor\": 0, \"revision\": 0 }, \"requestId\": \"6bbeb443-7ebf-4307-9c5d-259534b1aede\", \"requestTimestamp\": \"1483711327000\" }, \"paymentIntegratorAccountId\": \"SpeedyPaymentsIndia_INR\", \"captureRequestId\": \"G112YZH4XPDV88J\", \"amount\": \"728000000\", \"reasonCode\": \"INCORRECT_MERCHANDISE\", \"rawResult\": { \"scope\": \"VISA\", \"rawCode\": \"04\" }, \"inquiryDate\": \"1481846400000\", \"replyByDate\": \"1487203200000\", \"caseId\": \"G-4732-1352-123\" } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": \"1483711328134\" }, \"result\": \"SUCCESS\" } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/InquiryNotificationRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/InquiryNotificationResponse"
            }
          }
        }
      }
    },
    "/refundable-one-time-payment-code-v1/echo": {
      "post": {
        "tags": ["vgw"],
        "operationId": "Echo",
        "description": "Echos back the `clientMessage` passed in. The purpose of this method is to test basic connectivity between the payment integrator and Google. If the echo is successful, the endpoint will return an HTTP 200 and the response will be of type `EchoResponse`. If the endpoint encounters an error while processing the request, the endpoint will return HTTP 4xx or 5xx and the HTTP body will either be of type `ErrorResponse` or contain a generic error (e.g. a message similar to \"There was an error. Please try again later.\"). The generic error is used in situations where an `ErrorResponse` with a clear description could be used to help an attacker understand the payment integrator account identifier of other integrators. In these situations, where either the signing key doesn't match, the payment integrator identifier was not found, or the encryption key was unknown, this method will return a generic error. If the request signature could be verified, additional information regarding the error will be returned in an `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1, \"minor\": 0, \"revision\": 0 }, \"requestId\": \"ZWNobyB0cmFuc2FjdGlvbg\", \"requestTimestamp\": \"1481899949606\" }, \"clientMessage\": \"client message\" } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": \"1481900013178\" }, \"clientMessage\": \"client message\", \"serverMessage\": \"server message\" } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/EchoRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/EchoResponse"
            }
          }
        }
      }
    },
    "/refundable-one-time-payment-code-v1/referenceNumberPaidNotification": {
      "post": {
        "tags": ["vgw"],
        "operationId": "ReferenceNumberPaidNotification",
        "description": "Notify Google that a customer completed payment of a reference number. It is expected that this will be called within milliseconds of the user paying. While this call can be enqueued if the network is down, Google expects the user will typically receive notification that their payment has been paid by the time they are leaving the store. If the endpoint encounters an error while processing the request, the endpoint will return HTTP 4xx or 5xx and the HTTP body will either be of type `ErrorResponse` or contain a generic error (e.g. a message similar to \"There was an error. Please try again later.\"). The generic error is used in situations where an `ErrorResponse` with a clear description could be used to help an attacker understand the payment integrator account identifier of other integrators. In these situations, where either the signing key doesn't match, the payment integrator identifier was not found, or the encryption key was unknown, this method will return a generic error. If the request signature could be verified, additional information regarding the error will be returned in an `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1, \"minor\": 0, \"revision\": 0 }, \"requestId\": \"ZWNobyB0cmFuc2FjdGlvbg\", \"requestTimestamp\": \"1481855969503\" }, \"paymentIntegratorAccountId\": \"InvisiCashUSA_USD\", \"paymentIntegratorTransactionId\": \"abc-e34-21343\", \"referenceNumber\": \"a1234567\", \"paymentTimestamp\": \"1481855969203\", \"paymentLocation\": { \"brandName\": \"ExampleMart\", \"locationId\": \"7783\" } } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": \"1481855970403\" }, \"result\": \"SUCCESS\" } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/ReferenceNumberPaidNotificationRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/ReferenceNumberPaidNotificationResponse"
            }
          }
        }
      }
    },
    "/refundable-one-time-payment-code-v1/referenceNumberPaymentStatusNotification": {
      "post": {
        "tags": ["vgw"],
        "operationId": "ReferenceNumberPaymentStatusNotification",
        "description": "**RECOMMENDED**: Notifies Google of the status of a reference number payment. This method supports Succeeded, Pending, and Declined statuses. If the endpoint encounters an error while processing the request, the endpoint will return HTTP 4xx or 5xx and the HTTP body will either be of type `ErrorResponse` or contain a generic error (e.g. a message similar to \"There was an error. Please try again later.\"). The generic error is used in situations where an `ErrorResponse` with a clear description could be used to help an attacker understand the payment integrator account identifier of other integrators. In these situations, where either the signing key doesn't match, the payment integrator identifier was not found, or the encryption key was unknown, this method will return a generic error. If the request signature could be verified, additional information regarding the error will be returned in an `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1, \"minor\": 0, \"revision\": 0 }, \"requestId\": \"req-status-123456\", \"requestTimestamp\": \"1778748779585\" }, \"paymentIntegratorAccountId\": \"paidy-retail-account\", \"referenceNumber\": \"pay_Hovihg1oLIH35LV\", \"paymentStatusResult\": { \"updateSequenceTimestamp\": { \"epochMillis\": \"1778748779000\" }, \"paymentIntegratorTransactionId\": \"paidy-tx-98765\", \"success\": { \"paidAmount\": { \"amountMicros\": \"10000000\", \"currencyCode\": \"JPY\" }, \"installmentPlanType\": \"INSTALLMENT_PLAN_3_MONTHS\", \"paymentTimestamp\": { \"epochMillis\": \"1778748778000\" } } } } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": \"1778748780000\" }, \"result\": { \"success\": { \"googlePaymentTransactionId\": \"google-tx-123456\" } } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/ReferenceNumberPaymentStatusNotificationRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/ReferenceNumberPaymentStatusNotificationResponse"
            }
          }
        }
      }
    },
    "/refundable-one-time-payment-code-v1/captureResultNotification": {
      "post": {
        "tags": ["vgw"],
        "operationId": "CaptureResultNotification",
        "description": "Notify Google of the result of a capture after an `asynchronousCapture` method call has been made. The `captureResult` value is idempotent for this `captureRequestId`, so its value cannot be changed by a subsequent call to this method. If the endpoint encounters an error while processing the request, the endpoint will return HTTP 4xx or 5xx and the HTTP body will either be of type `ErrorResponse` or contain a generic error (e.g. a message similar to \"There was an error. Please try again later.\"). The generic error is used in situations where an `ErrorResponse` with a clear description could be used to help an attacker understand the payment integrator account identifier of other integrators. In these situations, where either the signing key doesn't match, the payment integrator identifier was not found, or the encryption key was unknown, this method will return a generic error. If the request signature could be verified, additional information regarding the error will be returned in an `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1, \"minor\": 1, \"revision\": 0 }, \"requestId\": \"KcgwSKrV76eVNDUbsZ4UA3\", \"requestTimestamp\": \"1481852928293\" }, \"paymentIntegratorAccountId\": \"InvisiCashUSA_USD\", \"captureRequestId\": \"awNaC510cefae3IJdNEvW2\", \"captureResult\": { \"captureResultCode\": \"SUCCESS\" }, \"payerInfo\": { \"payerTaxInfo\": { \"brazil\": { \"cnpj\": \"66818021000127\" } }, \"payerBankAccountIdentifier\": { \"brazilBankAccount\": { \"bankCode\": \"12345678\", \"branchCode\": \"1234567890\", \"accountNumber\": \"1234567890123456\" } } } } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": \"1481852928324\" }, \"result\": \"SUCCESS\" } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/CaptureResultNotificationRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/CaptureResultNotificationResponse"
            }
          }
        }
      }
    },
    "/refundable-one-time-payment-code-v1/createMandateResultNotification": {
      "post": {
        "tags": ["vgw"],
        "operationId": "CreateMandateResultNotification",
        "description": "Notify Google of the result of a mandate creation after a `createMandateWithOptionalInstantPayment` method call has been made. The `createMandateResult` value is idempotent for this `createMandateRequestId`, so its value cannot be changed by a subsequent call to this method. If the endpoint encounters an error while processing the request, the endpoint will return HTTP 4xx or 5xx and the HTTP body will either be of type `ErrorResponse` or contain a generic error (e.g. a message similar to \"There was an error. Please try again later.\"). The generic error is used in situations where an `ErrorResponse` with a clear description could be used to help an attacker understand the payment integrator account identifier of other integrators. In these situations, where either the signing key doesn't match, the payment integrator identifier was not found, or the encryption key was unknown, this method will return a generic error. If the request signature could be verified, additional information regarding the error will be returned in an `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1, \"minor\": 0, \"revision\": 0 }, \"requestId\": \"bWVyY2hhbnQgdHJhbnNhY3Rpb24gaWQ\", \"requestTimestamp\": \"1502220196078\" }, \"paymentIntegratorAccountId\": \"InvisiCashIN_INR\", \"paymentIntegratorTransactionId\": \"5243098752039874502983745\", \"createMandateRequestId\": \"zXCbyY2hhbnQgdHJhbnNhY3Rpb49qaAH\", \"instantPaymentInfo\": { \"referenceNumber\": \"referenceNumber\", \"paymentTimestamp\": { \"epochMillis\": \"1521855969203\" }, \"paidAmount\": { \"amountMicros\": \"728000000\", \"currencyCode\": \"USD\" } }, \"payerInfo\": { \"payerTaxInfo\": { \"brazil\": { \"cnpj\": \"66818021000127\" } }, \"payerBankAccountIdentifier\": { \"brazilBankAccount\": { \"bankCode\": \"12345678\", \"branchCode\": \"1234567890\", \"accountNumber\": \"1234567890123456\" } } }, \"createMandateResult\" : { \"success\" : {} } } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": \"1481900013178\" }, \"result\": { \"success\": {} } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/CreateMandateResultNotificationRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/CreateMandateResultNotificationResponse"
            }
          }
        }
      }
    },
    "/refundable-one-time-payment-code-v1/refundResultNotification": {
      "post": {
        "tags": ["vgw"],
        "operationId": "RefundResultNotification",
        "description": "Notify Google of the result of a refund after a `refund` method call has been made. Refunds should be handled synchronously during the `refund` method call, but this method provides Google with a fast backup signal in case the synchronous call fails after it has performed the action but before it can return a result. This avoids the delay introduced by Google scheduling a retry for a future time. The `refundResult` value is idempotent for this `refundRequestId`, so its value can not be changed by a subsequent call to this method. If the endpoint encounters an error while processing the request, the endpoint will return HTTP 4xx or 5xx and the HTTP body will either be of type `ErrorResponse` or contain a generic error (e.g. a message similar to \"There was an error. Please try again later.\"). The generic error is used in situations where an `ErrorResponse` with a clear description could be used to help an attacker understand the payment integrator account identifier of other integrators. In these situations, where either the signing key doesn't match, the payment integrator identifier was not found, or the encryption key was unknown, this method will return a generic error. If the request signature could be verified, additional information regarding the error will be returned in an `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1, \"minor\": 1, \"revision\": 0 }, \"requestId\": \"HsKv5pvtQKTtz7rdcw1YqE\", \"requestTimestamp\": \"1481855928301\" }, \"paymentIntegratorAccountId\": \"InvisiCashUSA_USD\", \"refundRequestId\": \"hH1T32PI86CpKwjuf6oD2r\", \"refundResult\": \"SUCCESS\" } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": \"1481855928376\" }, \"result\": { \"accepted\": {} } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/RefundResultNotificationRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/RefundResultNotificationResponse"
            }
          }
        }
      }
    },
    "/refundable-one-time-payment-code-v1/remittanceStatementDetails": {
      "post": {
        "tags": ["vgw"],
        "operationId": "RemittanceStatementDetails",
        "description": "Returns transaction detail information about a remittance statement. This is a paginated API. The number of transaction events per page can be specified with `numberOfEvents`. If unspecified, the maximum of 1000 events will be returned per page. Each request to this API will return a `nextEventOffset` pointing to the next transaction event in the statement, as well as `totalEvents` specifying the total number of transactions in the statement. If the current retrieved page contains the last transactions of the statement, `nextEventOffset` will not be present in the response. The `statementId` value is the `requestId` from the request to `remittanceStatementNotification` If the endpoint encounters an error while processing the request, the endpoint will return HTTP 4xx or 5xx and the HTTP body will either be of type `ErrorResponse` or contain a generic error (e.g. a message similar to \"There was an error. Please try again later.\"). The generic error is used in situations where an `ErrorResponse` with a clear description could be used to help an attacker understand the payment integrator account identifier of other integrators. In these situations, where either the signing key doesn't match, the payment integrator identifier was not found, or the encryption key was unknown, this method will return a generic error. If the request signature could be verified, additional information regarding the error will be returned in an `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1, \"minor\": 0, \"revision\": 0 }, \"requestId\": \"statement_detail_request_139932019\", \"requestTimestamp\": \"1502551332087\" }, \"paymentIntegratorAccountId\": \"InvisiCashUSA_USD\", \"statementId\": \"0123434-statement-abc\", \"numberOfEvents\": 4 } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": \"1481900013178\" }, \"eventOffset\": 0, \"nextEventOffset\": 4, \"totalEvents\": 15, \"remittanceStatementSummary\": { \"statementDate\": \"1502521200000\", \"billingPeriod\": { \"startDate\": \"1502434800000\", \"endDate\": \"1502434800000\" }, \"dateDue\": \"1502348400000\", \"currencyCode\": \"INR\", \"totalDueByIntegrator\": \"1076000000\", \"totalPresentmentAmounts\": [ { \"amountMicros\": \"1076000000\", \"currencyCode\": \"INR\" } ], \"remittanceInstructions\": { \"memoLineId\": \"stmt-1AB-pp0-invisi\" } }, \"captureEvents\": [ { \"eventRequestId\": \"bWVyY2hhbnQgdHJhbnNhY3Rpb24gaWQ\", \"paymentIntegratorEventId\": \"ioj32SOIjf23oijSDfoij\", \"eventCharge\": \"700000000\", \"eventFee\": \"-28000000\" }, { \"eventRequestId\": \"Ggghvh78200PQ3Yrpb\", \"paymentIntegratorEventId\": \"iasdf23dSdfijSDfoij\", \"eventCharge\": \"800000000\", \"eventFee\": \"-32000000\" } ], \"refundEvents\": [ { \"eventRequestId\": \"liUrreQY233839dfFFb24gaQM\", \"paymentIntegratorEventId\": \"asd3SDf3f3oijSDfoij\", \"eventCharge\": \"-200000000\", \"eventFee\": \"8000000\" }, { \"eventRequestId\": \"IIghhhUrreQY233839II9qM==\", \"paymentIntegratorEventId\": \"DFjidoso12FSDFSDE\", \"eventCharge\": \"-150000000\", \"eventFee\": \"6000000\" } ] } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/RemittanceStatementDetailsRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/RemittanceStatementDetailsResponse"
            }
          }
        }
      }
    },
    "/refundable-one-time-payment-code-v1/acceptRemittanceStatement": {
      "post": {
        "tags": ["vgw"],
        "operationId": "AcceptRemittanceStatement",
        "description": "Tells Google that the statement indicated in this request will be paid. If the endpoint encounters an error while processing the request, the endpoint will return HTTP 4xx or 5xx and the HTTP body will either be of type `ErrorResponse` or contain a generic error (e.g. a message similar to \"There was an error. Please try again later.\"). The generic error is used in situations where an `ErrorResponse` with a clear description could be used to help an attacker understand the payment integrator account identifier of other integrators. In these situations, where either the signing key doesn't match, the payment integrator identifier was not found, or the encryption key was unknown, this method will return a generic error. If the request signature could be verified, additional information regarding the error will be returned in an `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1, \"minor\": 0, \"revision\": 0 }, \"requestId\": \"0123434-abc\", \"requestTimestamp\": \"1502545413098\" }, \"paymentIntegratorAccountId\": \"InvisiCashUSA_USD\", \"statementId\": \"0123434-statement-abc\" } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": \"1519996752221\" }, \"acceptRemittanceStatementResultCode\": \"SUCCESS\" } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/AcceptRemittanceStatementRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/AcceptRemittanceStatementResponse"
            }
          }
        }
      }
    },
    "/refundable-one-time-payment-code-v1/acceptRemittanceStatementWithModifications": {
      "post": {
        "tags": ["vgw"],
        "operationId": "AcceptRemittanceStatementWithModifications",
        "description": "Tells Google that the statement indicated in this request will be paid after modifications are made to the statement such as fee to VAT reclassification. If the endpoint encounters an error while processing the request, the endpoint will return HTTP 4xx or 5xx and the HTTP body will either be of type `ErrorResponse` or contain a generic error (e.g. a message similar to \"There was an error. Please try again later.\"). The generic error is used in situations where an `ErrorResponse` with a clear description could be used to help an attacker understand the payment integrator account identifier of other integrators. In these situations, where either the signing key doesn't match, the payment integrator identifier was not found, or the encryption key was unknown, this method will return a generic error. If the request signature could be verified, additional information regarding the error will be returned in an `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1, \"minor\": 0, \"revision\": 0 }, \"requestId\": \"0123434-abc\", \"requestTimestamp\": \"1502545413098\" }, \"paymentIntegratorAccountId\": \"InvisiCashUSA_USD\", \"statementId\": \"0123434-statement-abc\", \"feeToVatModification\": { \"vatToFeeRatioInMicros\": \"150000\" } } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": \"1519996752221\" }, \"acceptRemittanceStatementWithModificationsResultCode\": \"SUCCESS\" } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/AcceptRemittanceStatementWithModificationsRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/AcceptRemittanceStatementWithModificationsResponse"
            }
          }
        }
      }
    }
  },
  "definitions": {
    "InquiryNotificationRequest": {
      "description": "Request object for Google hosted InquiryNotification method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "paymentIntegratorAccountId": {
          "description": "**REQUIRED**: This is the payment integrator account identifier that identifies contractual constraints around this transaction.",
          "type": "string"
        },
        "captureRequestId": {
          "description": "**REQUIRED**: A unique identifier for the capture that the inquiry is associated with. This is the `requestId` generated by Google during the `captureFundsReservation` or `capture` which this request is associated with.",
          "type": "string"
        },
        "amount": {
          "description": "**REQUIRED**: The amount associated with the inquiry, in [micros]({{glossary_path}}#micros \"What are micros?\") of the currency unit. This must be greater than zero and less than or equal to the amount in the`capture` or `captureFundsReservation` request and is in the same currency unit as the capture.",
          "type": "string",
          "format": "int64"
        },
        "reasonCode": {
          "description": "**REQUIRED**: The reason for the inquiry.",
          "type": "string",
          "enum": [
            "UNKNOWN_REASON",
            "FRAUD",
            "FAMILIAR_FRAUD",
            "SUSPICIOUS",
            "CHARGE_NOT_RECOGNIZED",
            "CREDIT_NOT_PROCESSED",
            "DUPLICATE_PAYMENT",
            "SUBSCRIPTION_CANCELED",
            "INPUT_ERROR",
            "INSUFFICIENT_FUNDS",
            "NOT_DELIVERED",
            "DEFECTIVE_OR_NOT_AS_DESCRIBED",
            "INCORRECT_MERCHANDISE",
            "UNWANTED_MERCHANDISE",
            "TRANSACTION_AMOUNT_DIFFER",
            "PAID_BY_OTHER_MEANS",
            "LATE_PRESENTMENT"
          ]
        },
        "rawResult": {
          "description": "**REQUIRED**: Raw result of the inquiry request from the issuer. Used to help inform Google's risk engine and analytics. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact inquiry code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        },
        "inquiryDate": {
          "description": "**REQUIRED** Timestamp of the date that the inquiry was requested. If that date is not known then it should be the date that the payment integrator received the notification for an inquiry. It is represented as milliseconds since epoch. This is a date and therefore should be the first millisecond of the day in the America\/Los Angeles timezone. If it is not the first millisecond of the day the date will be assumed to be the day the specified millisecond falls on in the America\/Los Angeles time zone.",
          "type": "string",
          "format": "int64"
        },
        "replyByDate": {
          "description": "**REQUIRED**: Timestamp of the date by which a reply must be received by the payment integrator. It is represented as milliseconds since epoch. This is a date and therefore should be the first millisecond of the day in the America\/Los Angeles timezone. If it is not the first millisecond of the day the date will be assumed to be the day the specified millisecond falls on in the America\/Los Angeles time zone.",
          "type": "string",
          "format": "int64"
        },
        "caseId": {
          "description": "**REQUIRED**: A unique value assigned to each dispute that the issuer and payment integrator can use to identify this dispute.",
          "type": "string"
        }
      }
    },
    "RequestHeader": {
      "description": "Header object that is defined on all requests sent to the server.",
      "type": "object",
      "properties": {
        "requestId": {
          "description": "**REQUIRED**: Unique identifier of this request. This is a string that has a max length of 100 characters, and contains only the characters \"a-z\", \"A-Z\", \"0-9\", \":\", \"-\", and \"_\".",
          "type": "string"
        },
        "requestTimestamp": {
          "description": "**REQUIRED**: Timestamp of this request represented as milliseconds since epoch. The receiver should verify that this timestamp is \u00B1 60s of 'now'. This request timestamp is not idempotent upon retries.",
          "type": "string",
          "format": "int64"
        },
        "userLocale": {
          "description": "**DEPRECATED**: A two- or three-letter ISO 639-2 Alpha 3 language code optionally followed by a hyphen and an ISO 3166-1 Alpha-2 country code, e.g.'pt', 'pt-BR', 'fil', or 'fil-PH'. Use this to help drive the `userMessage` fields in the response.",
          "type": "string"
        },
        "protocolVersion": {
          "description": "**REQUIRED**: The version of this request.",
          "$ref": "#/definitions/Version"
        }
      }
    },
    "Version": {
      "description": "Version object which is a structured form of the classic `a.b.c` version structure. Major versions of the same number are guaranteed to be compatible. Note that minor and revisions can change frequently and without notice. The integrator must support all requests for the same major version.",
      "type": "object",
      "properties": {
        "major": {
          "description": "**REQUIRED**: Major version. This is marked for compatibility requests with different versions are not guaranteed to be compatible.",
          "type": "integer",
          "format": "int32"
        },
        "minor": {
          "description": "**REQUIRED**: Minor version. This denotes significant bug fixes.",
          "type": "integer",
          "format": "int32"
        },
        "revision": {
          "description": "**REQUIRED**: Minor version. This denotes minor bug fixes.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "RawResult": {
      "description": "Raw result object.",
      "type": "object",
      "properties": {
        "scope": {
          "description": "**OPTIONAL**: Scope of the raw_code, can be empty.",
          "type": "string"
        },
        "rawCode": {
          "description": "**REQUIRED**: Raw code from the integrator or subsystems within it.",
          "type": "string"
        }
      }
    },
    "InquiryNotificationResponse": {
      "description": "Response object for Google hosted InquiryNotification method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Result of this call.",
          "type": "string",
          "enum": [
            "UNKNOWN_RESULT",
            "SUCCESS"
          ]
        }
      }
    },
    "ResponseHeader": {
      "description": "Header object that is defined on all responses sent from the server.",
      "type": "object",
      "properties": {
        "responseTimestamp": {
          "description": "**REQUIRED**: Timestamp of this response represented as milliseconds since epoch. The receiver should verify that this timestamp is \u00B1 60s of 'now'.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "ErrorResponse": {
      "description": "Error Response object for all methods.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "errorResponseCode": {
          "description": "**OPTIONAL**: A code that captures the type of error that occurred.",
          "type": "string",
          "enum": [
            "UNKNOWN_ERROR_RESPONSE_CODE",
            "INVALID_API_VERSION",
            "INVALID_PAYLOAD_SIGNATURE",
            "INVALID_PAYLOAD_ENCRYPTION",
            "REQUEST_TIMESTAMP_OUT_OF_RANGE",
            "INVALID_IDENTIFIER",
            "IDEMPOTENCY_VIOLATION",
            "INVALID_FIELD_VALUE",
            "MISSING_REQUIRED_FIELD",
            "PRECONDITION_VIOLATION",
            "USER_ACTION_IN_PROGRESS",
            "INVALID_DECRYPTED_REQUEST",
            "FORBIDDEN"
          ]
        },
        "errorDescription": {
          "description": "**OPTIONAL**: Provide a description of this status for support reps to debug errors. Note that this is never shown to users. It can contain descriptive, non-sensitive text used for debugging. Note that some values for errorResponseCode should be accompanied by additional detail in this field. For example, `INVALID_IDENTIFIER` should be accompanied by information in this field as to which type of identifier was invalid. Warning: Do not include any tokens in this message unless they are defined as public.",
          "type": "string"
        },
        "paymentIntegratorErrorIdentifier": {
          "description": "**OPTIONAL**: This identifier is specific to the integrator and is generated by the integrator. It is used for debugging purposes only in order to identify this call. This is the identifier that the integrator knows this call by.",
          "type": "string"
        }
      }
    },
    "EchoRequest": {
      "description": "Request object for the echo method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "clientMessage": {
          "description": "**REQUIRED**: Message to echo in the response.",
          "type": "string"
        }
      }
    },
    "EchoResponse": {
      "description": "Response object for the echo method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "clientMessage": {
          "description": "**REQUIRED**: Message received in the request.",
          "type": "string"
        },
        "serverMessage": {
          "description": "**OPTIONAL**: Server message, independent of the `clientMessage` being echoed.",
          "type": "string"
        }
      }
    },
    "ReferenceNumberPaidNotificationRequest": {
      "description": "Request object for the referenceNumberPaidNotification method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "paymentIntegratorAccountId": {
          "description": "**REQUIRED**: This is the payment integrator account identifier on which the reference number was created.",
          "type": "string"
        },
        "paymentIntegratorTransactionId": {
          "description": "**OPTIONAL**: This identifier is specific to the integrator and is generated by the integrator. This is the identifier by which the integrator knows this transaction. For convenience, this identifier is included when the payment integrator requests remittanceStatementDetails.",
          "type": "string"
        },
        "pixEndToEndId": {
          "description": "This ID is created by Banco Central do Brasil (BCB) for the Brazilian instant payment ecosystem (Pix). This ID is used to identify the operation on a transaction, either a payment or a refund.",
          "type": "string"
        },
        "referenceNumber": {
          "description": "**REQUIRED**: Reference number that the user has paid. For legacy integrations, it is the `referenceNumber` of the `generateReferenceNumber` call for this transaction. For new integrations, it is the `printableString` of the `generateReferenceNumber` call for this transaction. If the `generateReferenceNumber` call doesn't contains `printableString`, it falls back to the `barcodeContents` of the same call.",
          "type": "string"
        },
        "paymentTimestamp": {
          "description": "**REQUIRED**: Timestamp recorded by the integrator when the user paid this reference number (milliseconds since epoch).",
          "type": "string",
          "format": "int64"
        },
        "paymentLocation": {
          "description": "**REQUIRED**: Information about the physical location where the user paid.",
          "$ref": "#/definitions/PaymentLocation"
        },
        "paidAmount": {
          "description": "**TO-BE-REQUIRED**: The amount actually paid by the user. The user should not be allowed to pay a different amount than the amount sent in the `generateReferenceNumber` call, and any cases of the amount mismatching will be treated as a bug requiring investigation. This field supports accurate accounting of how much the user actually paid, independent of what the user should have paid. *Note:* This field will transition to be required by end of October 2023. ",
          "$ref": "#/definitions/Amount"
        },
        "payerInfo": {
          "description": "**OPTIONAL**: Details about the person making the payment. This may include tax information, bank account details, etc. Providing this information enhances our ability to detect and prevent fraudulent activity by adding Risk checks, making the payment system more secure for cash FOPs. If this information is not provided, the payment system will still function normally but may not be as secure.",
          "$ref": "#/definitions/PayerInfo"
        }
      }
    },
    "PaymentLocation": {
      "description": "Information about the physical location where the user paid.",
      "type": "object",
      "properties": {
        "brandName": {
          "description": "**REQUIRED**: The brand name of the location where the user paid (for example, the brand name of the store chain).",
          "type": "string"
        },
        "locationId": {
          "description": "**REQUIRED**: A unique name, number, or other identifier for the specific location where the user paid (for example a number representing the particular store within a brand of stores).",
          "type": "string"
        }
      }
    },
    "Amount": {
      "description": "Associates an amount in micros with a currency code.",
      "type": "object",
      "properties": {
        "amountMicros": {
          "description": "**REQUIRED**: An amount in [micros]({{glossary_path}}#micros \"What are micros?\").",
          "type": "string",
          "format": "int64"
        },
        "currencyCode": {
          "description": "**REQUIRED**: ISO 4217 3-letter currency code",
          "type": "string"
        }
      }
    },
    "PayerInfo": {
      "description": "Information about the person making the payment.",
      "type": "object",
      "properties": {
        "payerTaxInfo": {
          "description": "**OPTIONAL**: Tax-related information about the payer, such as tax ID or orther relevant identifiers.",
          "$ref": "#/definitions/TaxInfo"
        },
        "payerBankAccountIdentifier": {
          "description": "**OPTIONAL**: Banking details of the payer, potentially including bank name, account number, or other identifying information.",
          "$ref": "#/definitions/BankAccountIdentifier"
        }
      }
    },
    "TaxInfo": {
      "description": "Tax-related information about the payer.",
      "type": "object",
      "properties": {
        "brazil": {
          "description": "Specific tax details for Brazil.",
          "$ref": "#/definitions/BrazilTaxInfo"
        }
      }
    },
    "BrazilTaxInfo": {
      "description": "Tax-related information about the payer specific to Brazil.",
      "type": "object",
      "properties": {
        "cnpj": {
          "description": "Cadastro Nacional da Pessoa Jur\u00EDdica (CNPJ), an identification number issued to Brazilian companies.",
          "type": "string"
        },
        "cpf": {
          "description": "Cadastro de Pessoas F\u00EDsicas (CPF), the Brazilian individual taxpayer registry identification.",
          "type": "string"
        }
      }
    },
    "BankAccountIdentifier": {
      "description": "Unique identifier of a bank account.",
      "type": "object",
      "properties": {
        "brazilBankAccount": {
          "description": "An account with a bank in Brazil.",
          "$ref": "#/definitions/BrazilBankAccountInfo"
        }
      }
    },
    "BrazilBankAccountInfo": {
      "description": "Details of a user's bank account in Brazil.",
      "type": "object",
      "properties": {
        "bankCode": {
          "description": "**REQUIRED**: The unique code identifying the bank associated with the payer's account.",
          "type": "string"
        },
        "branchCode": {
          "description": "**REQUIRED**: The specific code representing the branch where the payer's account is held.",
          "type": "string"
        },
        "accountNumber": {
          "description": "**REQUIRED**: The unique number identifying the payer's bank account.",
          "type": "string"
        }
      }
    },
    "ReferenceNumberPaidNotificationResponse": {
      "description": "Response object for the referenceNumberPaidNotification method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Result of the call.",
          "type": "string",
          "enum": [
            "UNKNOWN_RESULT",
            "SUCCESS",
            "INVALID_REFERENCE_NUMBER"
          ]
        },
        "googlePaymentTransactionId": {
          "description": "**OPTIONAL**: Populated if `result` is `SUCCESS`, otherwise not populated. A Google-generated identifier for this transaction that is included when the payment integrator requests `remittanceStatementDetails`.",
          "type": "string"
        }
      }
    },
    "ReferenceNumberPaymentStatusNotificationRequest": {
      "description": "Request object for the referenceNumberPaymentStatusNotification method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "paymentIntegratorAccountId": {
          "description": "**REQUIRED**: This is the payment integrator account identifier.",
          "type": "string"
        },
        "referenceNumber": {
          "description": "**REQUIRED**: Reference number that this notification pertains to. For legacy integrations, it is the `referenceNumber` of the `generateReferenceNumber` call for this transaction. For new integrations, it is the `printableString` of the `generateReferenceNumber` call for this transaction. If the `generateReferenceNumber` call doesn't contain `printableString`, it falls back to the `barcodeContents` of the same call.",
          "type": "string"
        },
        "paymentStatusResult": {
          "description": "**REQUIRED**: The current status details of the reference number payment.",
          "$ref": "#/definitions/ReferenceNumberPaymentStatus"
        }
      }
    },
    "ReferenceNumberPaymentStatus": {
      "description": "The current status of the payment.",
      "type": "object",
      "properties": {
        "updateSequenceTimestamp": {
          "description": "**REQUIRED**: A timestamp (in UTC) describing when this payment status is effective at the vendor. This can be used for order handling and sequencing.",
          "$ref": "#/definitions/Timestamp"
        },
        "paymentIntegratorTransactionId": {
          "description": "**OPTIONAL**: The vendor's unique identifier for this transaction.",
          "type": "string"
        },
        "success": {
          "description": "**OPTIONAL**: The payment was successful.",
          "$ref": "#/definitions/SuccessDetails"
        },
        "pendingUserAction": {
          "description": "**OPTIONAL**: The payment is pending an action from the user.",
          "$ref": "#/definitions/Empty"
        },
        "pendingVendorProcessing": {
          "description": "**OPTIONAL**: The payment is currently being processed by the vendor or underlying payment network.",
          "$ref": "#/definitions/Empty"
        },
        "insufficientFunds": {
          "description": "**OPTIONAL**: The payment was declined due to insufficient funds or credit.",
          "$ref": "#/definitions/InsufficientFunds"
        },
        "riskDeclined": {
          "description": "**OPTIONAL**: The payment was declined due to risk assessment by the vendor.",
          "$ref": "#/definitions/RiskDeclined"
        },
        "userIneligible": {
          "description": "**OPTIONAL**: The user is not eligible for this payment method or terms.",
          "$ref": "#/definitions/AccountNotEligible"
        },
        "canceled": {
          "description": "**OPTIONAL**: The payment was canceled, likely due to a timeout or user action.",
          "$ref": "#/definitions/UserExitedPaymentFlow"
        },
        "pixEndToEndId": {
          "description": "This ID is created by Banco Central do Brasil (BCB) for the Brazilian instant payment ecosystem (Pix). This ID is used to identify the operation on a transaction, either a payment or a refund.",
          "type": "string"
        },
        "payerInfo": {
          "description": "**OPTIONAL**: Details about the person making the payment. This may include tax information, bank account details, etc.",
          "$ref": "#/definitions/PayerInfo"
        }
      }
    },
    "Timestamp": {
      "description": "A timestamp object representing a point on the ISO timeline in milliseconds since the Unix epoch.",
      "type": "object",
      "properties": {
        "epochMillis": {
          "description": "**REQUIRED**: Milliseconds since the Unix epoch",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "SuccessDetails": {
      "description": "Details for a successful payment.",
      "type": "object",
      "properties": {
        "paidAmount": {
          "description": "**REQUIRED**: The amount paid.",
          "$ref": "#/definitions/Amount"
        },
        "installmentPlanType": {
          "description": "**OPTIONAL**: The type of installment plan selected by the user.",
          "type": "string",
          "enum": [
            "INSTALLMENT_PLAN_TYPE_UNSPECIFIED",
            "INSTALLMENT_PLAN_NONE",
            "INSTALLMENT_PLAN_3_MONTHS",
            "INSTALLMENT_PLAN_6_MONTHS",
            "INSTALLMENT_PLAN_9_MONTHS",
            "INSTALLMENT_PLAN_12_MONTHS",
            "INSTALLMENT_PLAN_18_MONTHS",
            "INSTALLMENT_PLAN_24_MONTHS",
            "INSTALLMENT_PLAN_36_MONTHS"
          ]
        },
        "paymentTimestamp": {
          "description": "**REQUIRED**: Timestamp of when the user physically paid.",
          "$ref": "#/definitions/Timestamp"
        }
      }
    },
    "Empty": {
      "description": " This object is used for extensibility because booleans and enumerations often need to be extended with extra data. The implementer uses it to determine presence. The enumeration this represents may be extended to contain data in future versions. The JSON representation for `Empty` is empty JSON object `{}`.",
      "type": "object",
      "properties": {
      }
    },
    "InsufficientFunds": {
      "description": "This account does not have sufficient funds to guarantee this capture.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        },
        "currentBalance": {
          "description": "**OPTIONAL**: This is the current available balance for the account. If provided, this value will be included in user-facing messaging.",
          "$ref": "#/definitions/Amount"
        },
        "remedyMethod": {
          "description": "**OPTIONAL**: This is the remedy method to be applied for the user to help with the insufficient funds issue.",
          "$ref": "#/definitions/InsufficientFundsRemedyMethod"
        }
      }
    },
    "InsufficientFundsRemedyMethod": {
      "description": "Remedy method for `InsufficientFunds`.",
      "type": "object",
      "properties": {
        "topUp": {
          "description": "This account does not have sufficient funds to guarantee this transfer. The user should be recommended to top-up.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "RiskDeclined": {
      "description": "The transaction was declined due to a risk check on the integrator's side.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "AccountNotEligible": {
      "description": "User's account is not eligible for this service.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "UserExitedPaymentFlow": {
      "description": "User canceled the whole payment attempt.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a rawcode. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "ReferenceNumberPaymentStatusNotificationResponse": {
      "description": "Response object for the referenceNumberPaymentStatusNotification method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Result of the call.",
          "$ref": "#/definitions/ReferenceNumberPaymentStatusNotificationResponseReferenceNumberPaymentStatusNotificationResult"
        }
      }
    },
    "ReferenceNumberPaymentStatusNotificationResponseReferenceNumberPaymentStatusNotificationResult": {
      "description": "Result of the referenceNumberPaymentStatusNotification method.",
      "type": "object",
      "properties": {
        "success": {
          "description": "**OPTIONAL**: The notification was successfully received.",
          "$ref": "#/definitions/ReferenceNumberPaymentStatusNotificationResponseSuccess"
        }
      }
    },
    "ReferenceNumberPaymentStatusNotificationResponseSuccess": {
      "description": "Details for a successful notification ACK.",
      "type": "object",
      "properties": {
        "googlePaymentTransactionId": {
          "description": "**OPTIONAL**: A Google-generated identifier for this transaction that is included when the payment integrator requests `remittanceStatementDetails`.",
          "type": "string"
        }
      }
    },
    "CaptureResultNotificationRequest": {
      "description": "Request object for the `captureResultNotification` method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "paymentIntegratorAccountId": {
          "description": "**REQUIRED**: Payment integrator account identifier on which the capture occurred.",
          "type": "string"
        },
        "paymentIntegratorTransactionId": {
          "description": "**OPTIONAL**: This identifier is specific to the integrator and is generated by the integrator. This is the identifier by which the integrator knows this transaction. For convenience, this identifier is included when the payment integrator requests `remittanceStatementDetails`.",
          "type": "string"
        },
        "captureRequestId": {
          "description": "**REQUIRED**: A unique identifier for this transaction. This is the `requestId` generated by Google during the `capture` or `asynchronousCapture` call which this request is associated with. This is a string with a max length of 100 characters and contains only the characters \"a-z\", \"A-Z\", \"0-9\", \":\", \"-\", and \"_\".",
          "type": "string"
        },
        "pixEndToEndId": {
          "description": "This ID is created by Banco Central do Brasil (BCB) for the Brazilian instant payment ecosystem (Pix). This ID is used to identify the operation on a transaction, either a payment or a refund.",
          "type": "string"
        },
        "captureResult": {
          "description": "**REQUIRED**: Result of this capture.",
          "$ref": "#/definitions/CaptureResult"
        },
        "payerInfo": {
          "description": "**OPTIONAL**: Details about the person making the payment. This may include tax information, bank account details, etc. Providing this information enhances our ability to detect and prevent fraudulent activity by adding Risk checks, making the payment system more secure for one-time payment code FOPs. If this information is not provided, the payment system will still function normally but may not be as secure.",
          "$ref": "#/definitions/PayerInfo"
        }
      }
    },
    "CaptureResult": {
      "description": "Information about the final result of a capture.",
      "type": "object",
      "properties": {
        "captureResultCode": {
          "description": "**REQUIRED**: Result code of this capture.",
          "type": "string",
          "enum": [
            "UNKNOWN_RESULT",
            "SUCCESS",
            "CHARGE_UNDER_TRANSACTION_LIMIT",
            "CHARGE_EXCEEDS_TRANSACTION_LIMIT",
            "CHARGE_EXCEEDS_DAILY_LIMIT",
            "CHARGE_EXCEEDS_MONTHLY_LIMIT",
            "INSUFFICIENT_FUNDS",
            "SUSPECTED_FRAUD",
            "ACCOUNT_CLOSED",
            "ACCOUNT_CLOSED_ACCOUNT_TAKEN_OVER",
            "ACCOUNT_CLOSED_FRAUD",
            "ACCOUNT_ON_HOLD",
            "OTP_NOT_MATCHED",
            "OTP_ALREADY_USED",
            "CAPTURE_REQUEST_EXPIRED",
            "INVALID_PIN",
            "OS_LOCK_FAILED",
            "PIN_ENTRY_ATTEMPTS_EXHAUSTED",
            "USER_EXITED_PAYMENT_FLOW",
            "MONTHLY_FREQUENCY_LIMIT_EXCEEDED",
            "DECLINED_BY_ISSUER",
            "GOOGLE_PAYMENT_TOKEN_INVALIDATED_BY_USER",
            "PAYMENT_CANCELLED_BY_THE_USER",
            "ENROLLMENT_CANCELLED_BY_THE_USER"
          ]
        },
        "transactionMaxLimit": {
          "description": "If `captureResultCode` is `CHARGE_EXCEEDS_TRANSACTION_LIMIT` then this is the value of the maximum allowable transaction. This is used for structured, user facing messaging and decline rate analysis. This amount is [micros]({{glossary_path}}#micros \"What are micros?\") of the same `currencyCode` as the original `capture` or `asynchronousCapture` method call.",
          "type": "string",
          "format": "int64"
        },
        "transactionMinLimit": {
          "description": "If `captureResultCode` is `CHARGE_UNDER_TRANSACTION_LIMIT` then this is the value of the minimum allowable transaction. This is used for structured, user facing messaging and decline rate analysis. This amount is [micros]({{glossary_path}}#micros \"What are micros?\") of the same `currencyCode` as the original `capture` or `asynchronousCapture` method call.",
          "type": "string",
          "format": "int64"
        },
        "currentBalance": {
          "description": "If Result is `INSUFFICIENT_FUNDS`, then this is the current available balance in the user's account (in [micros]({{glossary_path}}#micros \"What are micros?\")). This is used for structured, user facing messaging. This value must be in the same currency as the `currencyCode` on the request.",
          "type": "string",
          "format": "int64"
        },
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this capture. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned. This value is **required** if the `result` is not `SUCCESS`.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "CaptureResultNotificationResponse": {
      "description": "Response object for the `captureResultNotification` method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Result of this capture.",
          "type": "string",
          "enum": [
            "UNKNOWN_RESULT",
            "SUCCESS"
          ]
        }
      }
    },
    "CreateMandateResultNotificationRequest": {
      "description": "Request object for the `createMandateResultNotification` method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "paymentIntegratorAccountId": {
          "description": "**REQUIRED**: This is the payment integrator account identifier that identifies contractual constraints around this transaction.",
          "type": "string"
        },
        "paymentIntegratorTransactionId": {
          "description": "**OPTIONAL**: This identifier is specific to the integrator and is generated by the integrator. This is the identifier by which the integrator knows this transaction. For convenience, this identifier is included when the payment integrator requests remittanceStatementDetails.",
          "type": "string"
        },
        "createMandateRequestId": {
          "description": "**REQUIRED**: The unique identifier for the mandate that is being created. This is the `requestId` generated by Google during the `createMandateWithOptionalInstantPayment` call which this mandate is associated with. This is a string with a max length of 100 characters and contains only the characters \"a-z\", \"A-Z\", \"0-9\", \":\", \"-\", and \"_\".",
          "type": "string"
        },
        "pixEndToEndId": {
          "description": "This ID is created by Banco Central do Brasil (BCB) for the Brazilian instant payment ecosystem (Pix). This ID is used to identify the operation on a transaction, either a payment or a refund.",
          "type": "string"
        },
        "instantPaymentInfo": {
          "description": "**OPTIONAL**: Details about the instant payment, if one was made. This field is required only if an instant payment was part of the mandate creation.",
          "$ref": "#/definitions/CreateMandateResultNotificationRequestInstantPaymentInfo"
        },
        "payerInfo": {
          "description": "**OPTIONAL**: Details about the person making the payment. This may include tax information, bank account details, etc. Providing this information enhances our ability to detect and prevent fraudulent activity by adding Risk checks, making the payment system more secure for one-time payment code form of payment. If this information is not provided, the payment system will still function normally but may not be as secure.",
          "$ref": "#/definitions/PayerInfo"
        },
        "createMandateResult": {
          "description": "**REQUIRED**: The result of this mandate creation.",
          "$ref": "#/definitions/CreateMandateResultNotificationRequestCreateMandateResult"
        }
      }
    },
    "CreateMandateResultNotificationRequestInstantPaymentInfo": {
      "description": "Details about an instant payment made during mandate creation.",
      "type": "object",
      "properties": {
        "referenceNumber": {
          "description": "**REQUIRED**: The reference number associated with the instant payment, if one was made. This field is required only if an instant payment was part of the mandate creation. For legacy integrations, this is the `referenceNumber` of the `generateReferenceNumber` call for this transaction. For new integrations, this is the `printableString` of the `generateReferenceNumber` call for this transaction. If the `generateReferenceNumber` call doesn't contain `printableString`, use the `barcodeContents` of the `generateReferenceNumber` call instead.",
          "type": "string"
        },
        "paymentTimestamp": {
          "description": "**REQUIRED**: The timestamp recorded by the integrator when the user paid this reference number (represented as milliseconds since epoch). This field is required only if an instant payment was part of the mandate creation.",
          "$ref": "#/definitions/Timestamp"
        },
        "paidAmount": {
          "description": "**REQUIRED**: The amount actually paid by the user when initiating the mandate. The user should not be allowed to pay a different amount than the instant payment amount sent in the `createMandate` call, and any cases of the amount mismatching will be treated as a bug requiring investigation. This field supports accurate accounting of how much the user actually paid, independent of what the user should have paid.",
          "$ref": "#/definitions/Amount"
        }
      }
    },
    "CreateMandateResultNotificationRequestCreateMandateResult": {
      "description": "Information about the final result of a create mandate.",
      "type": "object",
      "properties": {
        "success": {
          "description": "The mandate is active and could be used for transactions.",
          "$ref": "#/definitions/Empty"
        },
        "userDeclinedMandate": {
          "description": "The mandate is declined by the user.",
          "$ref": "#/definitions/UserDeclinedMandate"
        },
        "accountDoesNotSupportMandate": {
          "description": "User's account held with the integrator is not supported for mandate creation.",
          "$ref": "#/definitions/AccountDoesNotSupportMandate"
        },
        "createMandateRequestExpired": {
          "description": "The create mandate request has expired. Google will treat this decline as a final state, so the integrator must ensure that the creation doesn't succeed later or that the mandate gets automatically revoked if the creation ends up being successful.",
          "$ref": "#/definitions/CreateMandateRequestExpired"
        },
        "suspectedFraud": {
          "description": "The integrator has reason to suspect that this transaction is fraudulent.",
          "$ref": "#/definitions/SuspectedFraud"
        },
        "accountClosed": {
          "description": "User's account held with the integrator has been closed. This return value will cause the user's instrument to be closed with Google. The user will be forced to add a new instrument.",
          "$ref": "#/definitions/AccountClosed"
        },
        "accountClosedAccountTakenOver": {
          "description": "User's account with the integrator has been closed, suspected account take over. This return value will cause the user's instrument to be closed with Google. The user will be forced to add a new instrument.",
          "$ref": "#/definitions/AccountClosedAccountTakenOver"
        },
        "accountClosedFraud": {
          "description": "User's account held with the integrator has been closed because of fraud. This return value will cause the user's instrument to be closed with Google. The user will be forced to add a new instrument.",
          "$ref": "#/definitions/AccountClosedFraud"
        },
        "accountOnHold": {
          "description": "User's account is on hold.",
          "$ref": "#/definitions/AccountOnHold"
        },
        "insufficientFunds": {
          "description": "This account does not have sufficient funds needed to create this mandate.",
          "$ref": "#/definitions/InsufficientFunds"
        },
        "invalidPin": {
          "description": "The user supplied an invalid PIN.",
          "$ref": "#/definitions/InvalidPin"
        },
        "mandateExceedsCountLimit": {
          "description": "User's account cannot be used to create a mandate right now as it has exceeded its limit for the number of mandates.",
          "$ref": "#/definitions/MandateExceedsCountLimit"
        },
        "declinedByIssuer": {
          "description": "This decline code should never be used in steady-state. It is meant as a temporary catch-all code to use when the integrator encounters an unknown decline code from the underlying issuer of the user's instrument. This result code can be used while the integrator determines a more appropriate result code to use or negotiates the addition of a new result code to this specification. Importantly, this decline code is very much a *real* decline. It is a permanent decline as far as Google is concerned. If the integrator returns this, it is up to them to track down what the issuer's code really means and refund the user if it turns out the code actually meant `SUCCESS`. If this decline code is used for the same underlying decline code for more than a certain number of days, Google will treat it as a bug and track it accordingly with respect to any contractual penalties around fixing bugs. *Note:* even after the integrator maps the unknown issuer decline code to an appropriate result code going forward, it is important that they still return `DECLINED_BY_ISSUER` idempotently for any capture request that was originally declined with a `DECLINED_BY_ISSUER` result.",
          "$ref": "#/definitions/DeclinedByIssuer"
        },
        "osLockFailed": {
          "description": "This payment flow requires an OS lock challenge and the user failed to unlock the device.",
          "$ref": "#/definitions/OsLockFailed"
        },
        "pinEntryAttemptsExhausted": {
          "description": "This payment flow requires user PIN entry. The user failed PIN entry enough times that they ran out of retries.",
          "$ref": "#/definitions/PinEntryAttemptsExhausted"
        },
        "userExitedPaymentFlow": {
          "description": "User canceled the whole payment attempt (either at the OS lock or at the PIN entry screen).",
          "$ref": "#/definitions/UserExitedPaymentFlow"
        },
        "riskDeclined": {
          "description": "The transaction was declined due to a risk check on the integrator's side. This is a permanent failure for this payment, but does not cause the user's instrument to be closed at Google.",
          "$ref": "#/definitions/RiskDeclined"
        },
        "mandateCreationFailedChargeSucceeded": {
          "description": "This decline code is for the case when the mandate creation failed but the instant payment associated with the mandate succeeded.",
          "$ref": "#/definitions/MandateCreationFailedChargeSucceeded"
        }
      }
    },
    "UserDeclinedMandate": {
      "description": "This mandate is declined by the user.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "AccountDoesNotSupportMandate": {
      "description": "This account does not support mandate creation.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "CreateMandateRequestExpired": {
      "description": "The create mandate request has expired. Google will treat this decline as a final state, so the integrator must ensure that the creation doesn't succeed later or that the mandate gets automatically revoked if the creation ended up succeeding.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a rawcode. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "SuspectedFraud": {
      "description": "The integrator has reason to suspect that this transaction is fraudulent.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a rawcode. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "AccountClosed": {
      "description": "The user's account held with the integrator has been closed.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "AccountClosedAccountTakenOver": {
      "description": "The user's account with the integrator has been closed, suspected account take over.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "AccountClosedFraud": {
      "description": "The user's account held with the integrator has been closed because of fraud.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "AccountOnHold": {
      "description": "The account is on hold.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "InvalidPin": {
      "description": "The user supplied an invalid PIN.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a rawcode. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "MandateExceedsCountLimit": {
      "description": "User's account cannot be used to create a mandate right now as it has exceeded its limit for the number of mandates.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a rawcode. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "DeclinedByIssuer": {
      "description": "This decline code should never be used in steady-state. It is meant as a temporary catch-all code to use when the integrator encounters an unknown decline code from the underlying issuer of the user's instrument. This result code can be used while the integrator determines a more appropriate result code to use or negotiates the addition of a new result code to this specification.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a rawcode. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "OsLockFailed": {
      "description": "This payment flow requires an OS lock challenge and the user failed to unlock the device.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a rawcode. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "PinEntryAttemptsExhausted": {
      "description": "This payment flow requires user PIN entry. The user failed PIN entry enough times that they ran out of retries.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a rawcode. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "MandateCreationFailedChargeSucceeded": {
      "description": "Mandate creation failed but the instant payment associated with the mandate succeeded.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "CreateMandateResultNotificationResponse": {
      "description": "Response object for the `createMandateResultNotification` method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Result of this call.",
          "$ref": "#/definitions/CreateMandateResultNotificationResponseCreateMandateResultNotificationResult"
        }
      }
    },
    "CreateMandateResultNotificationResponseCreateMandateResultNotificationResult": {
      "description": "Result codes for the `createMandateResultNotification` method.",
      "type": "object",
      "properties": {
        "success": {
          "description": "Create mandate result notification was successfully processed.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "RefundResultNotificationRequest": {
      "description": "Request object for the `refundResultNotification` method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "paymentIntegratorAccountId": {
          "description": "**REQUIRED**: Payment integrator account identifier on which the refund occurred.",
          "type": "string"
        },
        "refundRequestId": {
          "description": "**REQUIRED**: Unique identifier for this refund, established by the `requestId` field when the `refund` method was called.",
          "type": "string"
        },
        "refundResult": {
          "description": "**REQUIRED**: Result of this refund.",
          "type": "string",
          "enum": [
            "UNKNOWN_RESULT",
            "SUCCESS",
            "NO_MONEY_LEFT_ON_TRANSACTION",
            "ACCOUNT_CLOSED",
            "ACCOUNT_CLOSED_ACCOUNT_TAKEN_OVER",
            "ACCOUNT_CLOSED_FRAUD",
            "ACCOUNT_ON_HOLD",
            "REFUND_EXCEEDS_MAXIMUM_BALANCE",
            "REFUND_WINDOW_EXCEEDED",
            "CAPTURE_USED_PROMOTIONAL_BALANCE",
            "ISSUER_DOES_NOT_SUPPORT_REFUND",
            "GOOGLE_PAYMENT_TOKEN_INVALIDATED_BY_USER"
          ]
        },
        "paymentIntegratorRefundId": {
          "description": "**REQUIRED**: This identifier is specific to the integrator and is generated by the integrator. This is the identifier that the integrator knows this refund by. For convenience, this identifier is included with in the remittance details",
          "type": "string"
        }
      }
    },
    "RefundResultNotificationResponse": {
      "description": "Response object for the `refundResultNotification` method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Result of this call.",
          "$ref": "#/definitions/RefundResultNotificationResponseRefundResultNotificationResult"
        }
      }
    },
    "RefundResultNotificationResponseRefundResultNotificationResult": {
      "description": "Result messages for the `refundResultNotification` method.",
      "type": "object",
      "properties": {
        "accepted": {
          "description": "Refund result notification was accepted",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "RemittanceStatementDetailsRequest": {
      "description": "Request object for the remittance statement detail method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "paymentIntegratorAccountId": {
          "description": "**REQUIRED**: This is the payment integrator account identifier that identifies contractual constraints around this statement.",
          "type": "string"
        },
        "statementId": {
          "description": "**REQUIRED**: Request ID of the statement notification.",
          "type": "string"
        },
        "eventOffset": {
          "description": "**OPTIONAL**: Return events starting at this offset. This should be set to the `nextEventOffset` if one was returned or left unspecified if this is the first request. If `eventOffset` is zero, events will be returned starting with the first event. If this is two, events will be returned starting with the third event. If unspecified, `eventOffset` will be assumed to be zero. *Note:* If `eventOffset` exceeds the total number of events (i.e. `eventOffset` >= `totalEvents`) then no events will be returned. ",
          "type": "integer",
          "format": "int32"
        },
        "numberOfEvents": {
          "description": "**OPTIONAL**: Number of events to show per page. If unspecified or greater than 1000, this will be 1000.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "RemittanceStatementDetailsResponse": {
      "description": "Response object for the remittance statement detail method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "remittanceStatementSummary": {
          "description": "**REQUIRED**: Summary of this remittance statement.",
          "$ref": "#/definitions/RemittanceStatementSummary"
        },
        "eventOffset": {
          "description": "**REQUIRED**: The event offset of this response.",
          "type": "integer",
          "format": "int32"
        },
        "nextEventOffset": {
          "description": "**OPTIONAL**: The offset of the next event to return. If unspecified there are no more events to retrieve for this statement.",
          "type": "integer",
          "format": "int32"
        },
        "totalEvents": {
          "description": "**REQUIRED**: Total number of events in this statement.",
          "type": "integer",
          "format": "int32"
        },
        "totalWithholdingTaxes": {
          "description": "**REQUIRED**: The sum of all taxes withheld for this statement. This value is in [micros]({{glossary_path}}#micros \"What are micros?\").",
          "type": "string",
          "format": "int64"
        },
        "captureEvents": {
          "description": "**REQUIRED**: Set of capture events. *Note:* this is a set, it has no defined order. ",
          "type": "array",
          "items": {
            "$ref": "#/definitions/RemittanceStatementDetailsResponseEvent"
          }
        },
        "refundEvents": {
          "description": "**REQUIRED**: Set of refund events. *Note:* this is a set, it has no defined order. ",
          "type": "array",
          "items": {
            "$ref": "#/definitions/RemittanceStatementDetailsResponseEvent"
          }
        },
        "reverseRefundEvents": {
          "description": "**OPTIONAL**: Set of reverse refund events. *Note:* this is a set, it has no defined order. ",
          "type": "array",
          "items": {
            "$ref": "#/definitions/RemittanceStatementDetailsResponseEvent"
          }
        },
        "chargebackEvents": {
          "description": "**OPTIONAL**: Set of chargeback events. *Note:* this is a set, it has no defined order. ",
          "type": "array",
          "items": {
            "$ref": "#/definitions/RemittanceStatementDetailsResponseEvent"
          }
        },
        "reverseChargebackEvents": {
          "description": "**OPTIONAL**: Set of reverse chargeback events. *Note:* this is a set, it has no defined order. ",
          "type": "array",
          "items": {
            "$ref": "#/definitions/RemittanceStatementDetailsResponseEvent"
          }
        },
        "adjustmentEvents": {
          "description": "**OPTIONAL**: Set of adjustment events. Adjustment events may be added at Google's discretion to reconcile billing discrepancies, for example if fees were undercomputed for a set of prior transactions, an adjustment may be used to make the integrator whole. *Note:* this is a set, it has no defined order. ",
          "type": "array",
          "items": {
            "$ref": "#/definitions/RemittanceStatementDetailsResponseEvent"
          }
        }
      }
    },
    "RemittanceStatementSummary": {
      "description": "Summary object about a remittance statement.",
      "type": "object",
      "properties": {
        "statementDate": {
          "description": "**REQUIRED**: Date (in America\/Los Angeles) that this statement was created.",
          "type": "string",
          "format": "int64"
        },
        "billingPeriod": {
          "description": "**REQUIRED**: The billing period this statement covers.",
          "$ref": "#/definitions/BillingPeriod"
        },
        "dateDue": {
          "description": "**OPTIONAL**: The date that the remittance is due. This is represented as milliseconds from epoch. It is a date (and therefore will always start at the first millisecond of the day in the billing timezone). This is set as long as the `totalDueByIntegrator` is greater than 0.",
          "type": "string",
          "format": "int64"
        },
        "currencyCode": {
          "description": "**REQUIRED**: ISO 4217 3-letter currency code.",
          "type": "string"
        },
        "totalDueByIntegrator": {
          "description": "**REQUIRED**: This value is in micros in the currency of `currencyCode`. This value is always positive.",
          "type": "string",
          "format": "int64"
        },
        "remittanceInstructions": {
          "description": "**REQUIRED**: Details on how to remit payment",
          "$ref": "#/definitions/RemittanceInstructions"
        },
        "totalPresentmentAmounts": {
          "description": "**REQUIRED**: This is the total amount presented to the customer. There will be one entry for each presentment currency.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Amount"
          }
        }
      }
    },
    "BillingPeriod": {
      "description": "Billing period of this statement.",
      "type": "object",
      "properties": {
        "startDate": {
          "description": "**REQUIRED**: The start date of the billing period. This is represented as milliseconds from epoch. It is a date (and therefore will always start at the first millisecond of the day in the billing timezone). This is the first millisecond of the day of the billing period, 00:00:00.000",
          "type": "string",
          "format": "int64"
        },
        "endDate": {
          "description": "**REQUIRED**: The end date of the billing period. This is represented as milliseconds from epoch. This is the last millisecond of the last day of the billing period, 23:59:59.999",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "RemittanceInstructions": {
      "description": "Structure holding information about how to pay this remittance notification.",
      "type": "object",
      "properties": {
        "memoLineId": {
          "description": "**REQUIRED**: Identifier that is mandatory to be put on the memo line for the payment for remittance identification.",
          "type": "string"
        }
      }
    },
    "RemittanceStatementDetailsResponseEvent": {
      "description": "Structure representing a single event included in a remittance statement.",
      "type": "object",
      "properties": {
        "eventRequestId": {
          "description": "**REQUIRED**: For capture or refund events, this will be the `requestId` that Google sends with the request. For reverse refund, chargeback and reverse chargeback events, this will be the `requestId` that the Payment Integrator sends with the notification of that event. For adjustments, this will be a unique ID assigned by Google to the adjustment event.",
          "type": "string"
        },
        "paymentIntegratorEventId": {
          "description": "**REQUIRED**: ID the payment integrator returned for this event. For a capture this is the `paymentIntegratorTransactionId` from the response to a `capture` call, for a refund this is the `paymentIntegratorRefundId` from the response to a `refund` call. This field is of variable length, as an integrator whatever ID you supply for this event will be reflected here. If a value was not provided by the integrator for the corresponding event, this field will contain the same value as the `eventRequestId` field. For reverse refund, chargeback and reverse chargeback events this will be the `requestId` that the Payment Integrator sent with the notification of the event. The length and format of this field depends on the source field for each ID. Refer to the documentation for each of the source fields for details about length and character set requirements. In particular, note that this field can sometimes contain Google-generated IDs which may have different max length requirements than integrator-generated IDs.",
          "type": "string"
        },
        "eventCharge": {
          "description": "**REQUIRED**: In currency code defined by the statement. If this value is negative then this represents monetary value moving from Google to the payment integrator. If this is positive it is money from the payment integrator due to Google. For example, capture transactions will always be positive, and refund transactions will always be negative. Reverse refund and reverse chargeback events will always be positive. Chargeback events will always be negative. This value is in [micros]({{glossary_path}}#micros \"What are micros?\").",
          "type": "string",
          "format": "int64"
        },
        "eventFee": {
          "description": "**REQUIRED**: In currency code defined by the statement. If this value is negative then this represents monetary value moving from Google to the payment integrator. If this is positive it is money from the payment integrator due to Google. For example, if an agreement says that Google will pay 1% of the `transactionCharge` to the payment integrator, and will reverse that 1% upon refund of that transaction, then the capture fee will be negative and upon refund the refund fee will be positive. This value is in [micros]({{glossary_path}}#micros \"What are micros?\").",
          "type": "string",
          "format": "int64"
        },
        "presentmentChargeAmount": {
          "description": "**OPTIONAL**: Transaction amount in the presentment (aka transaction) currency prior to foreign exchange. This field follows the same sign convention as the `eventCharge` field. This value is in [micros]({{glossary_path}}#micros \"What are micros?\"). *Note:* This will be required in version 1.1 ",
          "type": "string",
          "format": "int64"
        },
        "presentmentCurrencyCode": {
          "description": "**OPTIONAL**: ISO 4217 3-letter currency code denominating the presentment (transaction) currency. *Note:* This will be required in version 1.1 ",
          "type": "string"
        },
        "exchangeRate": {
          "description": "**DEPRECATED**: The exchange rate used in converting the presentment amount to the settlement (invoice) amount. This value is in *micro* basis points (1 basis point = .0001 = .01%). That is, to get the exchange rate, divide this field by 10^10.",
          "type": "string",
          "format": "int64"
        },
        "nanoExchangeRate": {
          "description": "**OPTIONAL**: The exchange rate used in converting the presentment amount to the settlement (invoice) amount, expressed in nano basis points. This value is in *nano* basis points (1 basis point = .0001 = .01%). That is, to get the exchange rate, divide this field by 10^13. Both this field and exchange_rate will be populated. They are equivalent exchange rates expressed with different precision. In future versions, exchange_rate will be removed in favor of nano_exchange_rate. *Note:* This will be required in version 1.1 ",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "AcceptRemittanceStatementRequest": {
      "description": "Request object for the `acceptRemittanceStatement` method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "paymentIntegratorAccountId": {
          "description": "**REQUIRED**: This is the payment integrator account identifier that identifies contractual constraints around this statement.",
          "type": "string"
        },
        "statementId": {
          "description": "**REQUIRED**: Request ID of the statement notification.",
          "type": "string"
        }
      }
    },
    "AcceptRemittanceStatementResponse": {
      "description": "Response object for the `acceptRemittanceStatement` method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "acceptRemittanceStatementResultCode": {
          "description": "**REQUIRED**: Result of the AcceptRemittanceStatement call.",
          "type": "string",
          "enum": [
            "UNKNOWN_RESULT",
            "SUCCESS"
          ]
        }
      }
    },
    "AcceptRemittanceStatementWithModificationsRequest": {
      "description": "Request object for the `acceptRemittanceStatementWithModifications` method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "paymentIntegratorAccountId": {
          "description": "**REQUIRED**: This is the payment integrator account identifier that identifies contractual constraints around this statement.",
          "type": "string"
        },
        "statementId": {
          "description": "**REQUIRED**: Request ID of the statement notification this request modifies.",
          "type": "string"
        },
        "feeToVatModification": {
          "description": "Requested modification to reattribute a portion of fees to value-added-tax (VAT).",
          "$ref": "#/definitions/FeeToVATModification"
        },
        "settlementExchangeRateModification": {
          "description": "Requested modification to adjust the exchange rate on the statement to use a different exchange rate, where permitted.",
          "$ref": "#/definitions/SettlementExchangeRateModification"
        },
        "feeToVatAndSettlementExchangeRateModification": {
          "description": "Requested modification to both reattribute a portion of fees to value-added-tax (VAT) and adjust the exchange rate on the statement to use a different exchange rate, where permitted.",
          "$ref": "#/definitions/AcceptRemittanceStatementWithModificationsRequestFeeToVATAndSettlementExchangeRateModification"
        }
      }
    },
    "FeeToVATModification": {
      "description": "This object provides tax modifications to be applied to remittance statements.",
      "type": "object",
      "properties": {
        "vatToFeeRatioInMicros": {
          "description": "**REQUIRED**: Ratio of VAT to Fee amount in micros. This is the percentage of the fees to reattribute to VAT and must be greater than or equal to zero. Rounding should be \"half even\" or \"banker's\" rounding, meaning round to the even neighbor in the case that both numbers are equidistant (e.g. 2.5 -> 2, 5.5 -> 6). A sample for calculating tax is as follows: - Tax-inclusive processing fee collected by payment integrator: 1000 USD - Tax rate: 10% - Thus, 1000 USD = (processing fee) + (10% * processing fee) - Processing fee (sans tax) = 1000 \/ 1.1 = 909.090909 USD - Tax paid by payment integrator = 1000 - 909.090909 = 90.909091 USD - `vatToFeeRatioInMicros` = (90.909091 \/ 1000) * 1000000 = 90909.091 - Half-even rounding on 90909.091 = 90909 ",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "SettlementExchangeRateModification": {
      "description": "If permitted for the payment integrator, this object provides the ability to report a different exchange rate than what is on the statement.",
      "type": "object",
      "properties": {
        "actualNanoExchangeRate": {
          "description": "**REQUIRED**: The actual exchange rate that the payment integrator is planning to settle with. The exchange rate represents the value that the presentment amount is multiplied by to convert to the settlement amount. This value is in *nano* basis points (1 basis point = .0001 = .01%). That is, to get the exchange rate, divide this field by 10^13.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "AcceptRemittanceStatementWithModificationsRequestFeeToVATAndSettlementExchangeRateModification": {
      "description": "Object used for modifications that both reattributes a portion of fees to value-added-tax (VAT) and also adjusts the exchange rate on the statement to use a different exchange rate, where permitted.",
      "type": "object",
      "properties": {
        "feeToVatModification": {
          "description": "**REQUIRED**: Requested modification to reattribute a portion of fees to value-added-tax (VAT).",
          "$ref": "#/definitions/FeeToVATModification"
        },
        "settlementExchangeRateModification": {
          "description": "** REQUIRED **: Requested modification to adjust the exchange rate on the statement to use a different exchange rate, where permitted.",
          "$ref": "#/definitions/SettlementExchangeRateModification"
        }
      }
    },
    "AcceptRemittanceStatementWithModificationsResponse": {
      "description": "Response object for the `acceptRemittanceStatementWithModifications` method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "acceptRemittanceStatementWithModificationsResultCode": {
          "description": "**REQUIRED**: Result of the AcceptRemittanceStatement call.",
          "type": "string",
          "enum": [
            "UNKNOWN_RESULT",
            "SUCCESS",
            "INVALID_VAT_MODIFICATION"
          ]
        },
        "modifiedTotalDueByIntegrator": {
          "description": "**OPTIONAL**: If the amount of the remittance modification changed the amount due (for example, due to an exchange rate modification), this field will be populated with the new total due.",
          "$ref": "#/definitions/Amount"
        }
      }
    }
  }
}
