{
  "swagger": "2.0",
  "info": {
    "title": "Google Standard Payments Payment Integrator Hosted India Cards API",
    "description": "This includes services hosted by Payment Integrators for India Cards.",
    "version": "v1"
  },
  "host": "www.integratorhost.example.com",
  "basePath": "/integrator-base-path",
  "schemes": ["https"],
  "paths": {
    "/v1/payment-integrator-authenticated-card-fop-api/asynchronousRefund": {
      "post": {
        "tags": ["payment_integrator_india_cards_api"],
        "operationId": "AsynchronousRefund",
        "description": "Refunds a portion or all of the transaction initiated through `capture`. This initiates a request to refund funds that were captured. The amount refunded can be equal to or smaller than the remaining captured amount on the transaction. Multiple partial refunds are allowed by calling `AsynchronousRefund` multiple times with different `requestId` within the header. The final result of the refund is supplied by a call to `refundResultNotification`. The `requestId` within the header is the idempotency key, which uniquely identifies this transaction. If the endpoint encounters an error while processing the request, the response body from this endpoint should be of type `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"G18FCDTLD5B0SR4\", \"requestTimestamp\": { \"epochMillis\": 1482489410000 }, \"paymentIntegratorAccountId\": \"SpeedyPaymentsIndia_INR\" }, \"captureRequestId\": \"G112YZH4XPDV88J\", \"refundAmount\": { \"amountMicros\": \"364000000\", \"currencyCode\": \"INR\" } } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": 1482489412366 } }, \"result\": { \"acknowledged\": {} } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/AsynchronousRefundRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/AsynchronousRefundResponse"
            }
          }
        }
      }
    },
    "/v1/payment-integrator-authenticated-card-fop-api/authenticate": {
      "post": {
        "tags": ["payment_integrator_india_cards_api"],
        "operationId": "Authenticate",
        "description": "Initiates the authentication of a user for a card to make a purchase. This can be accomplished in multiple ways that may or may not be supported for the specified card. The payment integrator attempts to authenticate using all specified methods that are supported by the card. If `NATIVE_OTP` is specified within the `supportedAuthenticationTypes`, the issuer should immediately send an OTP to the cardholder, using the information already on file. If the endpoint encounters an error while processing the request, the response body from this endpoint should be of type `ErrorResponse`. An example request using a physical card looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"G112YZH4XPDV88J\", \"requestTimestamp\": { \"epochMillis\": \"1481907920000\" }, \"paymentIntegratorAccountId\": \"SpeedyPaymentsIndia_INR\" }, \"accountDetails\": { \"card\": { \"accountNumber\": \"4123456789101112\", \"nameOnCard\": \"Example Customer\", \"expiryMonth\": \"01\", \"expiryYear\": \"20\", \"cvn\": \"123\" } }, \"amount\": { \"amountMicros\": \"728000000\", \"currencyCode\": \"INR\" }, \"requestedAuthenticationTypes\": { \"redirectUrl\": { \"callbackUrl\": \"https:\/\/example.google.com\/return\/url\/\" }, \"nativeOtp\": { \"deviceInformation\": { \"userAgent\": \"Mozilla\/5.0 (WindowsNT10.0)\", \"userIpAddress\": \"2001:4860:4860::8888\" } } } } An example request using a tokenized card looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"G112YZH4XPDV88J\", \"requestTimestamp\": { \"epochMillis\": \"1481907920000\" }, \"paymentIntegratorAccountId\": \"SpeedyPaymentsIndia_INR\" }, \"accountDetails\": { \"paymentToken\": { \"nameOnCard\": \"Example Customer\", \"paymentTokenAccountNumber\": \"4123456789101112\", \"expiryMonth\": \"01\", \"expiryYear\": \"20\", \"cryptogram\": \"12345\" } }, \"amount\": { \"amountMicros\": \"728000000\", \"currencyCode\": \"INR\" }, \"requestedAuthenticationTypes\": { \"redirectUrl\": { \"callbackUrl\": \"https:\/\/example.google.com\/return\/url\/\" }, \"nativeOtp\": { \"deviceInformation\": { \"userAgent\": \"Mozilla\/5.0 (WindowsNT10.0)\", \"userIpAddress\": \"2001:4860:4860::8888\" } } } } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": 1481907920760 } }, \"paymentIntegratorAuthenticationId\": \"36be1a5d-ff21-455d-8dba-e3c4306e193e\", \"cvnResult\": \"CVN_RESULT_NOT_DETERMINED\", \"redirectUrlResultCase\": { \"redirectUrlResult\": { \"getMethod\": { \"url\": \"https:\/\/example.paymentintegratordomain.com\/authenitcate\/G112YZH4XPDV88J\" } } }, \"nativeOtpResultCase\": { \"nativeOtpNotSupported\": { \"nativeOtpNotSupportedReason\": { \"notSupportedByIssuer\": {} } } } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/AuthenticateRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/AuthenticateResponse"
            }
          }
        }
      }
    },
    "/v1/payment-integrator-authenticated-card-fop-api/resendOtp": {
      "post": {
        "tags": ["payment_integrator_india_cards_api"],
        "operationId": "ResendOtp",
        "description": "Requests that the issuer send the cardholder an additional OTP if the user requests one. It is sent using the same information provided in the `authenticate` request. If the endpoint encounters an error while processing the request, the response body from this endpoint should be of type `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"cmVxdWVzdDE\", \"requestTimestamp\": { \"epochMillis\": \"1481899949606\" }, \"paymentIntegratorAccountId\": \"SpeedyPaymentsIndia_INR\" }, \"authenticateRequestId\": \"G112YZH4XPDV88J\" } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": \"1481899949611\" } }, \"result\": { \"success\": {} } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/ResendOtpRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/ResendOtpResponse"
            }
          }
        }
      }
    },
    "/v1/payment-integrator-authenticated-card-fop-api/verifyOtp": {
      "post": {
        "tags": ["payment_integrator_india_cards_api"],
        "operationId": "VerifyOtp",
        "description": "Verifies the user provided OTP to determine if it matches what the issuer sent. If it matches then the authentication is considered successful. If the endpoint encounters an error while processing the request, the response body from this endpoint should be of type `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"cmVxdWVzdDE\", \"requestTimestamp\": { \"epochMillis\": \"1481899949606\" }, \"paymentIntegratorAccountId\": \"SpeedyPaymentsIndia_INR\" }, \"authenticateRequestId\": \"G112YZH4XPDV88J\", \"otp\": \"123456\" } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": \"1481899949611\" } }, \"eci\": \"07\", \"result\": { \"success\": {} } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/VerifyOtpRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/VerifyOtpResponse"
            }
          }
        }
      }
    },
    "/v1/payment-integrator-dispute-api/defendChargeback": {
      "post": {
        "tags": ["payment_integrator_india_cards_api"],
        "operationId": "DefendChargeback",
        "description": "This method is called by Google to defend an Inquiry or a Chargeback. If the endpoint encounters an error while processing the request, the response body from this endpoint should be of type `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1, \"minor\": 0, \"revision\": 0 }, \"requestId\": \"G1MQ0YERJ0Q7LPM\", \"requestTimestamp\": \"1481899949606\" }, \"paymentIntegratorAccountId\": \"InvisiCashUSA_USD\", \"captureRequestId\": \"G664529173\", \"defenseMaterialDocument\" : { \"mimeType\": \"APPLICATION_PDF\", \"payload\": \"ZGFzZGFkYXNkc2Rhc2Rhc2Rhc2Zhc2Y=\" } } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": \"1481899950236\" }, \"result\": \"SUCCESS\" } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/DefendChargebackRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/DefendChargebackResponse"
            }
          }
        }
      }
    },
    "/v2/echo": {
      "post": {
        "tags": ["payment_integrator_india_cards_api"],
        "operationId": "Echo",
        "description": "Echos back a string sent from the client. If the endpoint encounters an error while processing the request, the response body from this endpoint should be of type `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"G1MQ0YERJ0Q7LPM\", \"requestTimestamp\": { \"epochMillis\": \"1481899949606\" }, \"paymentIntegratorAccountId\": \"InvisiCashUSA_USD\" }, \"clientMessage\": \"Client echo message\" } An example success response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\":\"1481899950236\" } }, \"clientMessage\": \"Client echo message\", \"serverMessage\": \"Debug ID 12345\" } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/EchoRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/EchoResponse"
            }
          }
        }
      }
    },
    "/v1/payment-integrator-authenticated-card-fop-api/capture": {
      "post": {
        "tags": ["payment_integrator_india_cards_api"],
        "operationId": "Capture",
        "description": "Captures funds from a user's card. This call synchronously attempts to capture funds from a user's card. The response to this message will return the result of that attempt. The `requestId` within the header is the idempotency key and uniquely identifies this transaction. All mutations on this transaction populate the `requestId` value in their `captureRequestId` field. If the endpoint encounters an error while processing the request, the response body from this endpoint should be of type `ErrorResponse`. An example of a standard payment request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"G112YZH4XPDV88J\", \"requestTimestamp\": { \"epochMillis\": \"1481907920000\" }, \"paymentIntegratorAccountId\": \"SpeedyPaymentsIndia_INR\" }, \"accountDetails\": { \"card\": { \"accountNumber\": \"4123456789101112\", \"nameOnCard\": \"Example Customer\", \"expiryMonth\": \"01\", \"expiryYear\": \"20\", \"cvn\": \"123\" } }, \"amount\": { \"amountMicros\": \"728000000\", \"currencyCode\": \"INR\" }, \"transactionDescription\": \"Movie ACB\", \"merchantCategoryCode\": \"5815\", \"addressVerificationData\": { \"addressLine\": [\"2 Inner Ring Road\"], \"localityName\": \"Bangalore\", \"administrativeAreaName\": \"Karnataka\", \"postalCodeNumber\": \"560071\", \"countryCode\": \"IN\" }, \"authenticationNotAttempted\" : {} } An example of a standard payment response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": 1481907920760 } }, \"paymentIntegratorCaptureId\": \"36be1a5d-ff21-455d-8dba-e3c4306e193e\", \"cardNetworkResult\": { \"rawResult\": { \"scope\": \"VISA\", \"rawCode\": \"00\" }, \"authorizationCode\": \"123456\" }, \"addressVerificationResult\": { \"result\": { \"rawAvsResult\": \"M\", \"addressLine\": \"MATCH\", \"localityName\": \"MATCH\", \"administrativeAreaName\": \"MATCH\", \"postalCodeNumber\": \"MATCH\", \"countryCode\": \"MATCH\", \"nameOnCard\": \"MATCH\" } }, \"cvnResult\": \"MATCH\", \"result\": \"SUCCESS\", \"cardMetadata\": { \"issuerName\": \"exampleissuer\", \"issuingCountryCode\": \"IN\", \"networks\": [\"VISA\"], \"cardType\": \"CREDIT_CARD\" } } An example of a recurring payment with mandate creation looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"G112YZH4XPDV88J\", \"requestTimestamp\": { \"epochMillis\": \"1481907920000\" }, \"paymentIntegratorAccountId\": \"SpeedyPaymentsIndia_INR\" }, \"authenticateRequestId\": \"G13478DFHKE123HG74\", \"amount\": { \"amountMicros\": \"728000000\", \"currencyCode\": \"INR\" }, \"transactionDescription\": \"Movie ACB\", \"merchantCategoryCode\": \"5815\", \"addressVerificationData\": { \"addressLine\": [\"2 Inner Ring Road\"], \"localityName\": \"Bangalore\", \"administrativeAreaName\": \"Karnataka\", \"postalCodeNumber\": \"560071\", \"countryCode\": \"IN\" }, \"authenticationWasSuccessful\" : { \"paymentIntegratorAuthenticationId\": \"6e77bd35-3fca-4b03-9cbb-6586c31def72\", \"recurringPaymentDetails\": { \"customerReferenceId\": \"customer57\", \"recurringPaymentReferenceId\": \"subscription201\", \"recurringPaymentDescription\": \"Google TV\", \"startDate\": { \"year\": 2021, \"month\": 1, \"day\": 21 }, \"endDate\": { \"year\": 2099, \"month\": 12, \"day\": 31 }, \"frequency\": \"MONTHLY\", \"fixedAmount\": { \"amountMicros\": \"728000000\", \"currencyCode\": \"INR\" } } } } An example of a recurring payment with mandate creation response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": 1481907920760 } }, \"paymentIntegratorCaptureId\": \"36be1a5d-ff21-455d-8dba-e3c4306e193e\", \"cardNetworkResult\": { \"rawResult\": { \"scope\": \"VISA\", \"rawCode\": \"00\" }, \"authorizationCode\": \"123456\" }, \"addressVerificationResult\": { \"result\": { \"rawAvsResult\": \"M\", \"addressLine\": \"MATCH\", \"localityName\": \"MATCH\", \"administrativeAreaName\": \"MATCH\", \"postalCodeNumber\": \"MATCH\", \"countryCode\": \"MATCH\", \"nameOnCard\": \"MATCH\" } }, \"cvnResult\": \"MATCH\", \"result\": \"SUCCESS\", \"cardMetadata\": { \"issuerName\": \"exampleissuer\", \"issuingCountryCode\": \"IN\", \"networks\": [\"VISA\"], \"cardType\": \"CREDIT_CARD\" }, \"recurringMandateDetails\": { \"mandateId\": \"MA061B00045154\", \"mandateStatus\": \"ACTIVE\", \"mandateCreationDetails\" : { \"integratorPaymentToken\" : {} } } } An example of a recurring payment request using a mandate looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"G112YZH4XPDV88J\", \"requestTimestamp\": { \"epochMillis\": \"1481907920000\" }, \"paymentIntegratorAccountId\": \"SpeedyPaymentsIndia_INR\" }, \"recurringPaymentMandate\": { \"mandateId\": \"MA061B00045154\", \"recurringPaymentReferenceId\": \"subscription201\", \"paymentIntegratorNotificationId\": \"invoiceid1234\" }, \"amount\": { \"amountMicros\": \"728000000\", \"currencyCode\": \"INR\" }, \"transactionDescription\": \"N\/A\", \"merchantCategoryCode\": \"N\/A\", \"authenticationNotAttempted\" : {} } An example of a recurring payment response using a mandate looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": 1481907920760 } }, \"paymentIntegratorCaptureId\": \"36be1a5d-ff21-455d-8dba-e3c4306e193e\", \"cardNetworkResult\": { \"rawResult\": { \"scope\": \"VISA\", \"rawCode\": \"00\" }, \"authorizationCode\": \"123456\" }, \"addressVerificationResult\": { \"notSent\": { \"support\": \"SUPPORTED\" } }, \"cvnResult\": \"NOT_SENT_SUPPORTED\", \"result\": \"SUCCESS\", \"cardMetadata\": { \"issuerName\": \"exampleissuer\", \"issuingCountryCode\": \"IN\", \"networks\": [\"VISA\"], \"cardType\": \"CREDIT_CARD\" } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/CaptureRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/CaptureResponse"
            }
          }
        }
      }
    },
    "/v1/payment-integrator-authenticated-card-fop-api/preNotifyUser": {
      "post": {
        "tags": ["payment_integrator_india_cards_api"],
        "operationId": "PreNotifyUser",
        "description": "Notifies a user of pending transaction for a recurring payment. This informs the user that a new charge on an existing mandate is pending. This notification must be performed before a new charge and each charge is tied to one notification. If the endpoint encounters an error while processing the request, the response body from this endpoint should be of type `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"cmVxdWVzdDE\", \"requestTimestamp\": { \"epochMillis\": \"1481899949606\" }, \"paymentIntegratorAccountId\": \"SpeedyPaymentsIndia_INR\" }, \"notificationNumber\": \"AdWords1234\", \"notificationDisplayNumber\": \"Adwords1234\", \"customerReferenceId\": \"customer57\", \"recurringPaymentReferenceId\": \"subscription201\", \"mandateId\": \"MA061B00045154\", \"notificationDate\": { \"year\":2021, \"month\":2, \"day\":21 }, \"dueDate\": { \"year\":2021, \"month\":2, \"day\":22 }, \"debitDate\": { \"year\":2021, \"month\":2, \"day\":22 }, \"amount\": { \"amountMicros\": \"728000000\", \"currencyCode\": \"INR\" }, \"netAmount\": { \"amountMicros\": \"728000000\", \"currencyCode\": \"INR\" }, \"description\": \"Google TV subscription\" } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": \"1481899949611\" } }, \"result\": { \"success\": { \"paymentIntegratorNotificationId\": \"invoiceid1234\" } } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/PreNotifyUserRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/PreNotifyUserResponse"
            }
          }
        }
      }
    },
    "/v1/payment-integrator-authenticated-card-fop-api/cancelMandate": {
      "post": {
        "tags": ["payment_integrator_india_cards_api"],
        "operationId": "CancelMandate",
        "description": "Initiates cancelling the mandate that was created for recurring payment. This cancels the existing mandate on the user's account. The `mandateId` identifies which mandate is being cancelled. It was generated by the vendor while creating the mandate. If the mandate has expired or is already cancelled, consider it a successful cancellation rather than an error. Therefore, return a `success` response code. The `requestId` within the header is the idempotency key and uniquely identifies this transaction. If the endpoint encounters an error while processing the request, the response body from this endpoint should be of type `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"cmVxdWVzdDE\", \"requestTimestamp\": { \"epochMillis\": \"1481899949606\" }, \"paymentIntegratorAccountId\": \"SpeedyPaymentsIndia_INR\" }, \"mandateId\": \"MA061B00045154\", \"customerReferenceId\": \"customer57\", \"recurringPaymentReferenceId\": \"subscription201\" } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": \"1481899949611\" } }, \"result\": { \"success\": {} } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/CancelMandateRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/CancelMandateResponse"
            }
          }
        }
      }
    }
  },
  "definitions": {
    "AsynchronousRefundRequest": {
      "description": "Request object for the payment integrator hosted AsynchronousRefund method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/V2RequestHeader"
        },
        "captureRequestId": {
          "description": "**REQUIRED**: A unique identifier for the capture to be refunded. This is the `requestId` generated by Google during the `captureFundsReservation` or `capture` which this request is associated with.",
          "type": "string"
        },
        "refundAmount": {
          "description": "**REQUIRED**: The amount of the refund. This will be a positive number, and should always be less-than or equal-to the remaining balance for the completed redirect payment.",
          "$ref": "#/definitions/Amount"
        }
      }
    },
    "V2RequestHeader": {
      "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. The receiver must verify that this timestamp is \u00B1 60s of 'now', and reject the request if it is not. This request timestamp is not idempotent upon retries.",
          "$ref": "#/definitions/Timestamp"
        },
        "protocolVersion": {
          "description": "**REQUIRED**: The version of this request.",
          "$ref": "#/definitions/V2Version"
        },
        "paymentIntegratorAccountId": {
          "description": "**REQUIRED**: Identifies a unique account with contractual constraints.",
          "type": "string"
        }
      }
    },
    "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"
        }
      }
    },
    "V2Version": {
      "description": "Version object contains the major version of the API. Versions of the same major version are guaranteed to be compatible. 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"
        }
      }
    },
    "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"
        }
      }
    },
    "AsynchronousRefundResponse": {
      "description": "Response object for the payment integrator hosted AsynchronousRefund method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/V2ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Result of this asynchronous refund.",
          "$ref": "#/definitions/AsynchronousRefundResponseAsynchronousRefundResult"
        }
      }
    },
    "V2ResponseHeader": {
      "description": "Header object that is defined on all responses sent from the server.",
      "type": "object",
      "properties": {
        "responseTimestamp": {
          "description": "**REQUIRED**: Timestamp of this response. The receiver must verify that this timestamp is \u00B1 60s of 'now', and reject the response if it is not.",
          "$ref": "#/definitions/Timestamp"
        }
      }
    },
    "AsynchronousRefundResponseAsynchronousRefundResult": {
      "description": "Result of this asynchronous refund.",
      "type": "object",
      "properties": {
        "acknowledged": {
          "description": "Refund result notification was acknowledged.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "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": {
      }
    },
    "V2ErrorResponse": {
      "description": "Error Response object for all methods.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/V2ResponseHeader"
        },
        "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. 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"
        },
        "errorResponseResult": {
          "description": "**OPTIONAL**: A code that captures the type of error that occurred.",
          "$ref": "#/definitions/ErrorResponseErrorResponseResult"
        }
      }
    },
    "ErrorResponseErrorResponseResult": {
      "description": "Error Codes",
      "type": "object",
      "properties": {
        "invalidApiVersion": {
          "description": "Used if the request's API version is unsupported. Advised HTTP Code: 400",
          "$ref": "#/definitions/ErrorResponseInvalidApiVersion"
        },
        "invalidPayloadSignature": {
          "description": "Used if the signature of the payload is to an unknown or inactive key. Advised HTTP Code: 401",
          "$ref": "#/definitions/ErrorResponseInvalidPayloadSignature"
        },
        "invalidPayloadEncryption": {
          "description": "Used if the encryption of the payload is to an unknown or inactive key. Advised HTTP Code: 400",
          "$ref": "#/definitions/ErrorResponseInvalidPayloadEncryption"
        },
        "requestTimestampOutOfRange": {
          "description": "Used if the request_timestamp is not \u00B1 60s of now. Advised HTTP Code: 400",
          "$ref": "#/definitions/ErrorResponseRequestTimestampOutOfRange"
        },
        "invalidIdentifier": {
          "description": "Used if an identifier sent in the request was invalid or unknown. This may include PIAID, captureRequestId, Google Payment Token, etc. Advised HTTP Code: 404",
          "$ref": "#/definitions/ErrorResponseInvalidIdentifier"
        },
        "idempotencyViolation": {
          "description": "Used if the request violates the idempotency requirements for the request. Advised HTTP Code: 412",
          "$ref": "#/definitions/ErrorResponseIdempotencyViolation"
        },
        "invalidFieldValue": {
          "description": "Used if the request contains a value for a field that isn't in the set of supported values. Advised HTTP Code: 400",
          "$ref": "#/definitions/ErrorResponseInvalidFieldValue"
        },
        "missingRequiredField": {
          "description": "Used if a field that is required is unset in the request. Advised HTTP Code: 400",
          "$ref": "#/definitions/ErrorResponseMissingRequiredField"
        },
        "preconditionViolation": {
          "description": "Used if a constraint on the operation is violated (e.g. when a request for a refund amount exceeds the amount remaining on the transaction). Advised HTTP Code: 400",
          "$ref": "#/definitions/ErrorResponsePreconditionViolation"
        },
        "userActionInProgress": {
          "description": "Used if the request cannot be processed at this time because it would interrupt an in-process user action which effectively acts as a system lock. This code must *not* be used to indicate failures due to implementation-specific internal concurrency errors. Advised HTTP Code: 423",
          "$ref": "#/definitions/ErrorResponseUserActionInProgress"
        },
        "invalidDecryptedRequest": {
          "description": "Used if the request payload could be decrypted, but the resulting message could not be parsed. Advised HTTP Code: 400",
          "$ref": "#/definitions/ErrorResponseInvalidDecryptedRequest"
        },
        "forbidden": {
          "description": "Access to the requested resource is forbidden. Advised Http Code: 403",
          "$ref": "#/definitions/ErrorResponseForbidden"
        }
      }
    },
    "ErrorResponseInvalidApiVersion": {
      "description": "Used if the request's API version is unsupported.",
      "type": "object",
      "properties": {
        "requestVersion": {
          "description": "**REQUIRED**: The invalid version that was specified on the request.",
          "$ref": "#/definitions/V2Version"
        },
        "expectedVersion": {
          "description": "**REQUIRED**: The expected version.",
          "$ref": "#/definitions/V2Version"
        }
      }
    },
    "ErrorResponseInvalidPayloadSignature": {
      "description": "This message is intentionally empty right now. New fields could be added in the future.",
      "type": "object",
      "properties": {
      }
    },
    "ErrorResponseInvalidPayloadEncryption": {
      "description": "This message is intentionally empty right now. New fields could be added in the future.",
      "type": "object",
      "properties": {
      }
    },
    "ErrorResponseRequestTimestampOutOfRange": {
      "description": "Used if the request_timestamp is not \u00B1 60s of now.",
      "type": "object",
      "properties": {
        "requestTimestamp": {
          "description": "**REQUIRED**: The timestamp provided in the request",
          "$ref": "#/definitions/Timestamp"
        },
        "serverTimestampAtReceipt": {
          "description": "**REQUIRED**: The server time at receipt, used for comparison",
          "$ref": "#/definitions/Timestamp"
        }
      }
    },
    "ErrorResponseInvalidIdentifier": {
      "description": "Used if an identifier sent in the request was invalid or unknown. This may include PIAID, captureRequestId, Google Payment Token, etc.",
      "type": "object",
      "properties": {
        "invalidIdentifierType": {
          "description": "**REQUIRED**: The type of identifier that was invalid, e.g. PIAID, captureRequestId, etc.",
          "type": "string"
        }
      }
    },
    "ErrorResponseIdempotencyViolation": {
      "description": "This message is intentionally empty right now. New fields could be added in the future.",
      "type": "object",
      "properties": {
      }
    },
    "ErrorResponseInvalidFieldValue": {
      "description": "Used if the request contains a value for a field that isn't in the set of supported values.",
      "type": "object",
      "properties": {
        "invalidFieldName": {
          "description": "**REQUIRED**: The name of the field that was found to be invalid.",
          "type": "string"
        }
      }
    },
    "ErrorResponseMissingRequiredField": {
      "description": "Used if a field that is required is unset in the request.",
      "type": "object",
      "properties": {
        "missingFieldNames": {
          "description": "**REQUIRED**: The names of the missing fields.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "ErrorResponsePreconditionViolation": {
      "description": "This message is intentionally empty right now. New fields could be added in the future.",
      "type": "object",
      "properties": {
      }
    },
    "ErrorResponseUserActionInProgress": {
      "description": "This message is intentionally empty right now. New fields could be added in the future.",
      "type": "object",
      "properties": {
      }
    },
    "ErrorResponseInvalidDecryptedRequest": {
      "description": "This message is intentionally empty right now. New fields could be added in the future.",
      "type": "object",
      "properties": {
      }
    },
    "ErrorResponseForbidden": {
      "description": "This message is intentionally empty right now. New fields could be added in the future.",
      "type": "object",
      "properties": {
      }
    },
    "AuthenticateRequest": {
      "description": "Request object for the payment integrator hosted `authenticate` method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/V2RequestHeader"
        },
        "accountDetails": {
          "description": "**REQUIRED**: Data about the user's payment card.",
          "$ref": "#/definitions/AccountDetails"
        },
        "amount": {
          "description": "**REQUIRED**: The amount of the purchase if the authentication is successful.",
          "$ref": "#/definitions/Amount"
        },
        "requestedAuthenticationTypes": {
          "description": "**REQUIRED**: The types of authentication methods being requested.",
          "$ref": "#/definitions/AuthenticateRequestAuthenticationType"
        },
        "additionalAuthenticationContext": {
          "description": "**OPTIONAL**: Contains additional information relevant to processing the authentication.",
          "$ref": "#/definitions/AuthenticateRequestAdditionalAuthenticationContext"
        }
      }
    },
    "AccountDetails": {
      "description": "Contains data related to the user's payment card.",
      "type": "object",
      "properties": {
        "card": {
          "description": "Representation of a card in its physical format (i.e. the FPAN).",
          "$ref": "#/definitions/Card"
        },
        "paymentToken": {
          "description": "Representation of a card that has been tokenized by the network.",
          "$ref": "#/definitions/PaymentToken"
        }
      }
    },
    "Card": {
      "description": "Description of a payment card account (i.e., credit card, debit card, charge card).",
      "type": "object",
      "properties": {
        "accountNumber": {
          "description": "**REQUIRED**: The account number itself (i.e., the FPAN).",
          "type": "string"
        },
        "nameOnCard": {
          "description": "**REQUIRED**: The customer's name as it appears on the card.",
          "type": "string"
        },
        "expiryMonth": {
          "description": "**OPTIONAL**: Expiration month, formatted `MM`.",
          "type": "string"
        },
        "expiryYear": {
          "description": "**OPTIONAL**: Expiration year, formatted `YY`.",
          "type": "string"
        },
        "cvn": {
          "description": "**OPTIONAL**: If Google collected the CVN from the user it is provided here and should be verified.",
          "type": "string"
        }
      }
    },
    "PaymentToken": {
      "description": "The representation of a card after it has been tokenized by the network.",
      "type": "object",
      "properties": {
        "nameOnCard": {
          "description": "**REQUIRED**: The customer's name as it appears on the card.",
          "type": "string"
        },
        "paymentTokenAccountNumber": {
          "description": "**REQUIRED**: The account number for the payment token.",
          "type": "string"
        },
        "expiryMonth": {
          "description": "**OPTIONAL**: Expiration month, formatted `MM`.",
          "type": "string"
        },
        "expiryYear": {
          "description": "**OPTIONAL**: Expiration year, formatted `YY`.",
          "type": "string"
        },
        "cryptogram": {
          "description": "**OPTIONAL**: The single-use key generated by the token provider for the transaction.",
          "type": "string"
        },
        "cvn": {
          "description": "**OPTIONAL**: If Google collected the CVN from the user it is provided here.",
          "type": "string"
        },
        "last4DigitsOnCard": {
          "description": "**OPTIONAL**: The last four digits of the Card.",
          "type": "string"
        },
        "additionalPaymentTokenInfo": {
          "description": "**OPTIONAL**: The type of the token and additional information for that token type.",
          "$ref": "#/definitions/AdditionalPaymentTokenInfo"
        }
      }
    },
    "AdditionalPaymentTokenInfo": {
      "description": "Contains the type of the token and additional information for that token type.",
      "type": "object",
      "properties": {
        "cloudTokenInfo": {
          "description": "The cloud token info for the payment token.",
          "$ref": "#/definitions/CloudTokenInfo"
        },
        "altIdTokenInfo": {
          "description": "The alt ID token info for the payment token.",
          "$ref": "#/definitions/AltIdTokenInfo"
        }
      }
    },
    "CloudTokenInfo": {
      "description": "Additional information about a cloud token.",
      "type": "object",
      "properties": {
      }
    },
    "AltIdTokenInfo": {
      "description": "Additional information about an alt ID token.",
      "type": "object",
      "properties": {
      }
    },
    "AuthenticateRequestAuthenticationType": {
      "description": "Defines the possible ways of authenticating a user. At least one type must be requested.",
      "type": "object",
      "properties": {
        "redirectUrl": {
          "description": "**OPTIONAL**: Used when requesting authentication by redirect URL.",
          "$ref": "#/definitions/AuthenticateRequestAuthenticationTypeRedirectUrl"
        },
        "nativeOtp": {
          "description": "**OPTIONAL**: Used when requesting authentication by native OTP.",
          "$ref": "#/definitions/AuthenticateRequestAuthenticationTypeNativeOtp"
        }
      }
    },
    "AuthenticateRequestAuthenticationTypeRedirectUrl": {
      "description": "Redirect URL authentication information.",
      "type": "object",
      "properties": {
        "callbackUrl": {
          "description": "**REQUIRED**: This is the callback URL the user is sent to after completion of the redirect.",
          "type": "string"
        },
        "deviceInformation": {
          "description": "**OPTIONAL**: This is the information about the user's browser that will be loading the `url` sent in the `RedirectUrlResult`. If this information is provided it can be used in generating the `redirectUrl`. For instance, the `userAgent` can be used to custimize a page that matches the user's browser and the `ipAddress` can be used to verify that the correct user is being redirected.",
          "$ref": "#/definitions/DeviceInformation"
        }
      }
    },
    "DeviceInformation": {
      "description": "Contains information about the user's device. It is sent when available and required in the current context. For example, it can be used to provide a better user experience by redirecting the user to a URL optimized for their device.",
      "type": "object",
      "properties": {
        "userAgent": {
          "description": "**REQUIRED**: The browser's user agent.",
          "type": "string"
        },
        "userIpAddress": {
          "description": "**OPTIONAL**: This is the IP address of the user's device if the purchase was made by a user in session. This can be either IPv4 or IPv6 version. If the particular contract doesn't stipulate the need for this field, it will always be empty.",
          "type": "string"
        }
      }
    },
    "AuthenticateRequestAuthenticationTypeNativeOtp": {
      "description": "Native OTP authentication information.",
      "type": "object",
      "properties": {
        "smsMatchingToken": {
          "description": "**OPTIONAL**: A string to be included with the SMS, if possible, so that the device can automatically ingest the token.",
          "type": "string"
        },
        "deviceInformation": {
          "description": "**OPTIONAL**: This is the information about the user's device where this transaction was initiated. This field is present only when it is required for generating the OTP. If the particular contract does not stipulate the need for this field, it will always be empty.",
          "$ref": "#/definitions/DeviceInformation"
        }
      }
    },
    "AuthenticateRequestAdditionalAuthenticationContext": {
      "description": "Contains additional authentication information required at the time of authentication.",
      "type": "object",
      "properties": {
        "installmentData": {
          "description": "**REQUIRED**: Contains the installment data for the payment for which authentication is being attempted.",
          "$ref": "#/definitions/InstallmentData"
        }
      }
    },
    "InstallmentData": {
      "description": "Contains installment details relevant to payment processing.",
      "type": "object",
      "properties": {
        "installmentPayment": {
          "description": "An installment payment is being configured with this field. This contains details required to determine the installment charges and duration.",
          "$ref": "#/definitions/InstallmentPayment"
        },
        "installmentPaymentNotApplicable": {
          "description": "Installment payment is not applicable for this transaction.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "InstallmentPayment": {
      "description": "Object used to pass details needed for the creation of an installment payment.",
      "type": "object",
      "properties": {
        "installmentPlanType": {
          "description": "**REQUIRED**: Installment term for the installment plan.",
          "type": "string",
          "enum": [
            "INSTALLMENT_PLAN_TYPE_UNSPECIFIED",
            "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"
          ]
        }
      }
    },
    "AuthenticateResponse": {
      "description": "Response object for the payment integrator hosted `authenticate` method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/V2ResponseHeader"
        },
        "paymentIntegratorAuthenticationId": {
          "description": "**OPTIONAL**: This identifier is specific to the integrator and is generated by the integrator. The integrator identifies this authentication attempt in their system by this identifier.",
          "type": "string"
        },
        "cvnResult": {
          "description": "**REQUIRED**: The result of verifying the CVN sent in the request. If the CVN was not set on the request, this value should be `NOT_SENT`.",
          "type": "string",
          "enum": [
            "CVN_RESULT_UNSPECIFIED",
            "NOT_SENT_UNSUPPORTED_BY_INTEGRATOR",
            "NOT_SENT_UNSUPPORTED_BY_NETWORK",
            "NOT_SENT_UNSUPPORTED_BY_ISSUER",
            "NOT_SENT_SUPPORTED",
            "NOT_VERIFIED",
            "MATCH",
            "MISMATCH",
            "UNSUPPORTED_BY_INTEGRATOR",
            "UNSUPPORTED_BY_NETWORK",
            "UNSUPPORTED_BY_ISSUER",
            "SKIPPED_BY_NETWORK",
            "SKIPPED_BY_ISSUER",
            "CVN_RESULT_NOT_DETERMINED"
          ]
        },
        "redirectUrlResultCase": {
          "description": "**REQUIRED** A container for the result of the `redirectUrl` request.",
          "$ref": "#/definitions/RedirectUrlResultCase"
        },
        "nativeOtpResultCase": {
          "description": "**REQUIRED** A container for the result of the `nativeOtp` request.",
          "$ref": "#/definitions/NativeOtpResultCase"
        }
      }
    },
    "RedirectUrlResultCase": {
      "description": "A container for the result of the `redirectUrl` request.",
      "type": "object",
      "properties": {
        "redirectUrlNotRequested": {
          "description": "Google did not request authentication by `redirectUrl` so nothing could be done.",
          "$ref": "#/definitions/RedirectUrlNotRequested"
        },
        "redirectUrlNotSupported": {
          "description": "Google requested authentication by `redirectUrl` but it is not supported.",
          "$ref": "#/definitions/RedirectUrlNotSupported"
        },
        "redirectUrlResult": {
          "description": "Google requested authentication by `redirectUrl` and this is the result.",
          "$ref": "#/definitions/RedirectDetails"
        }
      }
    },
    "RedirectUrlNotRequested": {
      "description": "This is used when a `redirectUrl` was not requested.",
      "type": "object",
      "properties": {
        "redirectUrlSupport": {
          "description": "**REQUIRED**: This is used to indicated if a `redirectUrl` would have been supported if it had been requested.",
          "$ref": "#/definitions/RedirectUrlSupport"
        }
      }
    },
    "RedirectUrlSupport": {
      "description": "This is used to specify if a `redirectUrl` would have been supported for a particular request.",
      "type": "object",
      "properties": {
        "notSupportedByPaymentIntegrator": {
          "description": "The payment integrator can not support a `redirectUrl` for this request.",
          "$ref": "#/definitions/Empty"
        },
        "notSupportedByNetwork": {
          "description": "The network can not support a `redirectUrl` for this request.",
          "$ref": "#/definitions/Empty"
        },
        "notSupportedByIssuer": {
          "description": "The issuer can not support a `redirectUrl` for this request.",
          "$ref": "#/definitions/Empty"
        },
        "notEnrolled": {
          "description": "A `redirectUrl` is not supported for this request because the card has not been enrolled.",
          "$ref": "#/definitions/Empty"
        },
        "supported": {
          "description": "A `redirectUrl` is supported for this request.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "RedirectUrlNotSupported": {
      "description": "This is used when a `redirectUrl` was requested but it is unsupported for this request.",
      "type": "object",
      "properties": {
        "reason": {
          "description": "**REQUIRED**: Authentication by `redirectUrl` was requested, but it could not be performed for the following reason.",
          "$ref": "#/definitions/RedirectUrlNotSupportedReason"
        }
      }
    },
    "RedirectUrlNotSupportedReason": {
      "description": "The reasons why `redirectUrl` could not be performed.",
      "type": "object",
      "properties": {
        "notSupportedByPaymentIntegrator": {
          "description": "The integrator could not support `redirectUrl` for this request.",
          "$ref": "#/definitions/Empty"
        },
        "notSupportedByNetwork": {
          "description": "The network could not support `redirectUrl` for this request.",
          "$ref": "#/definitions/Empty"
        },
        "notSupportedByIssuer": {
          "description": "The issuer could not support `redirectUrl` for this request. This would include international cards that don't support the `redirectUrl` authentication flow.",
          "$ref": "#/definitions/Empty"
        },
        "notEnrolled": {
          "description": "The user is not enrolled to support `redirectUrl` for this request. This is used for cases where a `redirectUrl` would have been supported but the user has not yet completed the necessary steps to enable it as a valid option.",
          "$ref": "#/definitions/Empty"
        },
        "doNotHonor": {
          "description": "The issuer returned a `DO_NOT_HONOR` for this request.",
          "$ref": "#/definitions/Empty"
        },
        "invalidExpiry": {
          "description": "The expiry date for this request is invalid.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "RedirectDetails": {
      "description": "This contains the result of the `redirectUrl` request when it is supported.",
      "type": "object",
      "properties": {
        "getMethod": {
          "description": "The user's browser should be redirected using an HTTPS GET.",
          "$ref": "#/definitions/GetRequest"
        },
        "postFormMethod": {
          "description": "The user's browser should be redirected using an HTTPS POST with content time `x-www-form-urlencoded`.",
          "$ref": "#/definitions/PostFormRequest"
        }
      }
    },
    "GetRequest": {
      "description": "This contains details for redirecting the user's browser using an HTTPS GET.",
      "type": "object",
      "properties": {
        "url": {
          "description": "**REQUIRED**: The URL that the user's browser should be redirected to with a GET request. Should not exceed 2048 characters in length.",
          "type": "string"
        }
      }
    },
    "PostFormRequest": {
      "description": "This contains details for redirecting the user's browser using an HTTPS POST.",
      "type": "object",
      "properties": {
        "url": {
          "description": "**REQUIRED**: The url the user will be redirected to. Should not exceed 2048 characters in length.",
          "type": "string"
        },
        "body": {
          "description": "**REQUIRED**: Data for the body of the POST for the redirect. This list represents the HTTPS POST body. For example: [ \"myParammy\": \"Val\", \"otherParam\": \"otherVal\", \"repeatedParam\": \"val1\", \"repeatedParam\": \"val2\" ] Would be formatted as this in the POST body: myParam=myVal&otherParam=otherVal&repeatedParam=val1&repeatedParam= val2. *Note:* When redirecting the user's browser, the content type will be set to `x-www-form-urlencoded`",
          "type": "array",
          "items": {
            "$ref": "#/definitions/PostFormRequestBodyPair"
          }
        },
        "bodyEncoding": {
          "description": "**REQUIRED**: The character set used for the body. UTF-8 is recommended.",
          "type": "string",
          "enum": [
            "BODY_ENCODING_UNSPECIFIED",
            "BODY_ENCODING_ISO_8859_1",
            "BODY_ENCODING_UTF_8",
            "BODY_ENCODING_US_ASCII"
          ]
        }
      }
    },
    "PostFormRequestBodyPair": {
      "description": "Data for the body of the POST for the redirect.",
      "type": "object",
      "properties": {
        "name": {
          "description": "**REQUIRED**: Name of the parameter.",
          "type": "string"
        },
        "value": {
          "description": "**REQUIRED**: Value of the parameter.",
          "type": "string"
        }
      }
    },
    "NativeOtpResultCase": {
      "description": "A container for the result of the `nativeOtp` request.",
      "type": "object",
      "properties": {
        "nativeOtpNotRequested": {
          "description": "Google did not request authentication by `nativeOtp` so nothing could be done.",
          "$ref": "#/definitions/NativeOtpNotRequested"
        },
        "nativeOtpNotSupported": {
          "description": "Google requested authentication by `nativeOtp` but native OTP is not supported.",
          "$ref": "#/definitions/NativeOtpNotSupported"
        },
        "nativeOtpResult": {
          "description": "Google requested authentication by `nativeOtp` and this is the result.",
          "$ref": "#/definitions/NativeOtpResult"
        }
      }
    },
    "NativeOtpNotRequested": {
      "description": "This is used when a `nativeOtp` was not requested.",
      "type": "object",
      "properties": {
        "nativeOtpSupport": {
          "description": "**REQUIRED**: If authentication by `nativeOtp` was requested, the following support would have been available.",
          "$ref": "#/definitions/NativeOtpSupport"
        }
      }
    },
    "NativeOtpSupport": {
      "description": "This is used to specify if a `nativeOtp` would have been supported for a particular request.",
      "type": "object",
      "properties": {
        "notSupportedByPaymentIntegrator": {
          "description": "The payment integrator can not support a `nativeOtp` for this request.",
          "$ref": "#/definitions/Empty"
        },
        "notSupportedByNetwork": {
          "description": "The network can not support a `nativeOtp` for this request.",
          "$ref": "#/definitions/Empty"
        },
        "notSupportedByIssuer": {
          "description": "The issuer can not support a `nativeOtp` for this request.",
          "$ref": "#/definitions/Empty"
        },
        "notEnrolled": {
          "description": "A `nativeOtp` is not supported for this request because the card has not been enrolled.",
          "$ref": "#/definitions/Empty"
        },
        "supported": {
          "description": "A `nativeOtp` is supported for this request.",
          "$ref": "#/definitions/Empty"
        },
        "invalidExpiry": {
          "description": "The expiry date for this request is invalid.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "NativeOtpNotSupported": {
      "description": "This is used when a `nativeOtp` was requested but it is not supported for this request.",
      "type": "object",
      "properties": {
        "nativeOtpNotSupportedReason": {
          "description": "**REQUIRED**: Authentication by `nativeOtp` was requested, but it could not be performed for the following reason.",
          "$ref": "#/definitions/NativeOtpNotSupportedReason"
        }
      }
    },
    "NativeOtpNotSupportedReason": {
      "description": "The reasons why `nativeOtp` could not be performed.",
      "type": "object",
      "properties": {
        "notSupportedByPaymentIntegrator": {
          "description": "The integrator could not support `nativeOtp` for this request.",
          "$ref": "#/definitions/Empty"
        },
        "notSupportedByNetwork": {
          "description": "The network could not support `nativeOtp` for this request.",
          "$ref": "#/definitions/Empty"
        },
        "notSupportedByIssuer": {
          "description": "The issuer could not support `nativeOtp` for this request. This would include international cards that don't support the `redirectUrl` authentication flow.",
          "$ref": "#/definitions/Empty"
        },
        "notEnrolled": {
          "description": "The user is not enrolled to support `nativeOtp` for this request. This is used for cases where a `nativeOtp` would have been supported but the user has not yet completed the necessary steps to enable it as a valid option.",
          "$ref": "#/definitions/Empty"
        },
        "doNotHonor": {
          "description": "The issuer returned a `DO_NOT_HONOR` for this request.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "NativeOtpResult": {
      "description": "This is used when a `nativeOtp` was requested and is supported.",
      "type": "object",
      "properties": {
        "result": {
          "description": "**REQUIRED**: The result of requesting that an OTP be sent to the user.",
          "$ref": "#/definitions/NativeOtpResultCode"
        }
      }
    },
    "NativeOtpResultCode": {
      "description": "Result codes for `NativeOtpResult`.",
      "type": "object",
      "properties": {
        "otpSent": {
          "description": "An OTP has successfully be sent to the user using by the issuer using information they had stored.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "ResendOtpRequest": {
      "description": "Request object for the payment integrator hosted `resendOtp` method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/V2RequestHeader"
        },
        "authenticateRequestId": {
          "description": "**REQUIRED**: A unique identifier representing the request to send an OTP. This is the `requestId` generated by Google during an `authenticate` request. An OTP is sent to the same user using the same information that was in the `authenticate` request.",
          "type": "string"
        }
      }
    },
    "ResendOtpResponse": {
      "description": "Response object for the payment integrator hosted `resendOtp` method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/V2ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: The result of the `resendOtp` request.",
          "$ref": "#/definitions/ResendOtpResultCode"
        }
      }
    },
    "ResendOtpResultCode": {
      "description": "Result codes for `resendOtp`.",
      "type": "object",
      "properties": {
        "success": {
          "description": "The request to send an OTP to the user was successful.",
          "$ref": "#/definitions/Empty"
        },
        "requestExpired": {
          "description": "The request to authenticate the user has expired. A new `authenticate` request is required in order to authenticate this user.",
          "$ref": "#/definitions/Empty"
        },
        "otpRequestLimitReached": {
          "description": "The number of requests to send an OTP has reached its limit and no more OTPs can be requested for this `authenticate` request.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "VerifyOtpRequest": {
      "description": "Request object for the `verifyOtp` method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/V2RequestHeader"
        },
        "authenticateRequestId": {
          "description": "**REQUIRED**: `requestId` from the `authenticate` request that preceded this call.",
          "type": "string"
        },
        "otp": {
          "description": "**REQUIRED**: This is the OTP the user provided, which this call is verifying",
          "type": "string"
        }
      }
    },
    "VerifyOtpResponse": {
      "description": "Response object for the `verifyOtp` method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/V2ResponseHeader"
        },
        "paymentIntegratorVerifyOtpId": {
          "description": "**OPTIONAL**: Identifier the payment integrator generates and uses to identify this request.",
          "type": "string"
        },
        "eci": {
          "description": "**OPTIONAL**: The Electronic Commerce Indicator returned for the request. It should be returned if available.",
          "type": "string"
        },
        "result": {
          "description": "**REQUIRED**: Result of this request",
          "$ref": "#/definitions/VerifyOtpResultCode"
        }
      }
    },
    "VerifyOtpResultCode": {
      "description": "Result codes for `verifyOtp`.",
      "type": "object",
      "properties": {
        "success": {
          "description": "OTP matched what the integrator sent",
          "$ref": "#/definitions/Empty"
        },
        "otpNotMatched": {
          "description": "OTP did not match what the integrator sent.",
          "$ref": "#/definitions/Empty"
        },
        "otpAlreadyUsed": {
          "description": "OTP was already used.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "DefendChargebackRequest": {
      "description": "Request object for the payment integrator hosted DefendChargeback method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/V1RequestHeader"
        },
        "paymentIntegratorAccountId": {
          "description": "**REQUIRED**: This is the payment integrator account identifier that identifies contractual constraints around this transaction.",
          "type": "string"
        },
        "captureRequestId": {
          "description": "A unique identifier for the payment that is being defended. This is the `requestId` generated by Google during the `captureFundsReservation` or `capture` which this request is associated with.",
          "type": "string"
        },
        "mrnPaymentDetails": {
          "description": "Details to lookup payments that originated outside of GSP.",
          "$ref": "#/definitions/DefendChargebackRequestMrnPaymentDetails"
        },
        "defenseMaterialDocument": {
          "description": "**REQUIRED**: Present when the chargeback is defended using a PDF document.",
          "$ref": "#/definitions/DefenseMaterialDocument"
        }
      }
    },
    "V1RequestHeader": {
      "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/V1Version"
        }
      }
    },
    "V1Version": {
      "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"
        }
      }
    },
    "DefendChargebackRequestMrnPaymentDetails": {
      "description": "Details to lookup payments which originated outside of GSP.",
      "type": "object",
      "properties": {
        "disputeCaseId": {
          "description": "**REQUIRED**: The ID which identifies the dispute being represented.",
          "type": "string"
        },
        "merchantReferenceNumber": {
          "description": "**REQUIRED**: The merchant reference number of the original transaction.",
          "type": "string"
        },
        "merchantId": {
          "description": "**REQUIRED**: The MID for the payment processor that handled the original transaction.",
          "type": "string"
        }
      }
    },
    "DefenseMaterialDocument": {
      "description": "A chargeback defense in the form of a PDF document.",
      "type": "object",
      "properties": {
        "mimeType": {
          "description": "**REQUIRED**: The MIME type of the document. Only the listed subset of IANA published MIME types are valid.",
          "type": "string",
          "enum": [
            "MIME_TYPE_UNSPECIFIED",
            "IMAGE_PNG",
            "IMAGE_JPEG",
            "IMAGE_GIF",
            "APPLICATION_PDF"
          ]
        },
        "payload": {
          "description": "**REQUIRED**: The raw bytes of the PDF document encoded using base64url.",
          "type": "string"
        }
      }
    },
    "DefendChargebackResponse": {
      "description": "Response object for the payment integrator hosted DefendChargeback method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/V1ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Result of this call.",
          "type": "string",
          "enum": [
            "DEFEND_CHARGEBACK_RESULT_CODE_UNSPECIFIED",
            "SUCCESS",
            "CAPTURE_REQUEST_ID_NOT_FOUND",
            "INVALID_DOCUMENT_FORMAT",
            "CHARGEBACK_NOT_DEFENDABLE"
          ]
        }
      }
    },
    "V1ResponseHeader": {
      "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"
        }
      }
    },
    "V1ErrorResponse": {
      "description": "Error Response object for all methods.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/V1ResponseHeader"
        },
        "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/V2RequestHeader"
        },
        "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/V2ResponseHeader"
        },
        "clientMessage": {
          "description": "**REQUIRED**: Message received in the request.",
          "type": "string"
        },
        "serverMessage": {
          "description": "**OPTIONAL**: Server message, independent of the `clientMessage` being echoed.",
          "type": "string"
        }
      }
    },
    "CaptureRequest": {
      "description": "Request object for the payment integrator hosted Capture method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/V2RequestHeader"
        },
        "accountDetails": {
          "description": "Data about the user's payment card.",
          "$ref": "#/definitions/AccountDetails"
        },
        "authenticateRequestId": {
          "description": "The `requestId` from the `AuthenticateRequest` request that authenticated the user for this payment. If this option is used, the `accountDetails` were sent in that request.",
          "type": "string"
        },
        "recurringPaymentMandate": {
          "description": "The payment is a recurring payment and can be made with an existing mandate.",
          "$ref": "#/definitions/RecurringPaymentMandate"
        },
        "inPlaceTokenizedCardPayment": {
          "description": "A `card` was passed to `AuthenticateRequest` with the intent to make a purchase and create a `paymentToken`. The new `paymentToken` is passed with the `requestId` for the `AuthenticateRequest` so a capture can be attempted on the `paymentToken`.",
          "$ref": "#/definitions/InPlaceTokenizedCardPayment"
        },
        "amount": {
          "description": "**REQUIRED**: The amount of the purchase, in micros of the currency unit.",
          "$ref": "#/definitions/Amount"
        },
        "transactionDescription": {
          "description": "**REQUIRED**: This is the description of the transaction that can be put on the customer's statement. The format can be changed without notice and therefore this value must never be parsed. This field will always be sent, however it is understood that not all issuers or networks support it. In those cases it does not have to be used. This field is classified as SPII because it can contain sensitive information, for example one-time password.",
          "type": "string"
        },
        "merchantCategoryCode": {
          "description": "**REQUIRED**: This is the ISO 18245 merchant category code (MCC) identifying the type of goods\/services being purchased by the user.",
          "type": "string"
        },
        "addressVerificationData": {
          "description": "**OPTIONAL**: The user's billing address to be verified by AVS.",
          "$ref": "#/definitions/AddressVerificationData"
        },
        "authenticationNotAttempted": {
          "description": "An attempt was not made to authenticate the user. This typically means the request was system initiated.",
          "$ref": "#/definitions/Empty"
        },
        "authenticationWasSuccessful": {
          "description": "There was a successful call to `authenticateRequest` to authenticate the user for this purchase.",
          "$ref": "#/definitions/AuthenticationDetails"
        },
        "authenticationWasAttempted": {
          "description": "An inconclusive attempt was made to authenticate the user.",
          "$ref": "#/definitions/AuthenticationDetails"
        },
        "additionalTransactionProcessingOptions": {
          "description": "**OPTIONAL**: Used to specify additional details about a transaction that might not apply to every region or situation. This is used to enable particular features, such as 3DS, specify details about how a transaction should be processed, or provide additional information that can be used to capture the transaction. If these fields are specified then they should be applied for the transaction.",
          "$ref": "#/definitions/AdditionalTransactionProcessingOptions"
        }
      }
    },
    "RecurringPaymentMandate": {
      "description": "Object to represent info related to a recurring payment mandate that can be used to make a purchase.",
      "type": "object",
      "properties": {
        "mandateId": {
          "description": "**REQUIRED**: The mandate ID associated with this recurring payment.",
          "type": "string"
        },
        "recurringPaymentReferenceId": {
          "description": "**REQUIRED**: The reference ID associated with this recurring payment.",
          "type": "string"
        },
        "paymentIntegratorNotificationId": {
          "description": "**REQUIRED**: The payment integrator generated ID for the notification that was sent to the user. This is returned from the related `preNotifyUser` call.",
          "type": "string"
        }
      }
    },
    "InPlaceTokenizedCardPayment": {
      "description": "This object is used to pass details when `Authenticate` was called with a `card` and the card was then tokenized. The new `paymentToken` is passed with the `requestId` for the `AuthenticateRequest` so a capture can be attempted on the `paymentToken`.",
      "type": "object",
      "properties": {
        "paymentToken": {
          "description": "**REQUIRED**: Representation of a card that has been tokenized by the network.",
          "$ref": "#/definitions/PaymentToken"
        },
        "authenticateRequestId": {
          "description": "**REQUIRED**: The `requestId` from the `AuthenticateRequest` request that authenticated the user for this payment using card details.",
          "type": "string"
        }
      }
    },
    "AddressVerificationData": {
      "description": "Contains address fields to be verified by AVS.",
      "type": "object",
      "properties": {
        "addressLine": {
          "description": "**OPTIONAL**: This holds unstructured Address text.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "localityName": {
          "description": "**OPTIONAL**: This is something of a fuzzy term, but it generally refers to the city\/town portion of an address. In regions of the world where localities are not well defined or do not fit into this structure well (for example, Japan and China), leave locality_name empty and use address_line. Examples: US city, IT comune, UK post town.",
          "type": "string"
        },
        "administrativeAreaName": {
          "description": "**OPTIONAL**: The top-level administrative subdivision of this country for the user's billing address. Examples: US state, IT region, UK constituent nation, JP prefecture When country == US, this is expected to be the 2-character abbreviation for the US State.",
          "type": "string"
        },
        "postalCodeNumber": {
          "description": "**OPTIONAL**: The user's billing postal code.",
          "type": "string"
        },
        "countryCode": {
          "description": "**OPTIONAL**: The country code of the user's billing address in ISO-3166-1 Alpha-2 format.",
          "type": "string"
        }
      }
    },
    "AuthenticationDetails": {
      "description": "Contains details about the authentication that was performed. Note: This will be deprecated in favor of AdditionalTransactionProcessingOptions.",
      "type": "object",
      "properties": {
        "paymentIntegratorAuthenticationId": {
          "description": "**OPTIONAL**: This identifier is specific to the integrator and is generated by the integrator. The integrator identifies this authentication attempt in their system by this identifier. This will be populated when it was included in the `authenticateResponse`.",
          "type": "string"
        },
        "recurringPaymentDetails": {
          "description": "**OPTIONAL**: If present, a recurring payment is being configured. This contains details about those payments so a mandate can be created.",
          "$ref": "#/definitions/RecurringPaymentDetails"
        },
        "installmentPayment": {
          "description": "**OPTIONAL**: If present, an installment payment is being configured. This contains details required to determine the installment charges and duration.",
          "$ref": "#/definitions/InstallmentPayment"
        }
      }
    },
    "RecurringPaymentDetails": {
      "description": "Object used to pass details needed for the creation of a recurring payment mandate that can be used to make future payments.",
      "type": "object",
      "properties": {
        "customerReferenceId": {
          "description": "**REQUIRED**: Google generated ID to reference this customer.",
          "type": "string"
        },
        "recurringPaymentReferenceId": {
          "description": "**REQUIRED**: Google generated ID to reference this recurring payment.",
          "type": "string"
        },
        "recurringPaymentDescription": {
          "description": "**REQUIRED**: Description of the recurring payment.",
          "type": "string"
        },
        "startDate": {
          "description": "**REQUIRED**: Date of when the recurring payment began.",
          "$ref": "#/definitions/Date"
        },
        "endDate": {
          "description": "**REQUIRED**: Date of when this recurring payment ends. If the subscription does not have an end date, this will be set to a day far in the future, such as 31st Dec, 2099.",
          "$ref": "#/definitions/Date"
        },
        "frequency": {
          "description": "**REQUIRED**: The expected frequency of the recurring payment.",
          "type": "string",
          "enum": [
            "FREQUENCY_UNSPECIFIED",
            "WEEKLY",
            "MONTHLY",
            "BI_MONTHLY",
            "QUARTERLY",
            "BI_ANNUALLY",
            "YEARLY",
            "ADHOC"
          ]
        },
        "fixedAmount": {
          "description": "The recurring payment is for a fixed amount.",
          "$ref": "#/definitions/Amount"
        },
        "maximumAmount": {
          "description": "The recurring payment is for a variable amount up to this value.",
          "$ref": "#/definitions/Amount"
        }
      }
    },
    "Date": {
      "description": "A date object. This is not a Datetime. It is just a date -- meaning that it refers to a non-relative date like a birthdate.",
      "type": "object",
      "properties": {
        "year": {
          "description": "**REQUIRED**: The year portion of the date.",
          "type": "string",
          "format": "int64"
        },
        "month": {
          "description": "**REQUIRED**: The month portion of the date. January is 1, February is 2, and so on.",
          "type": "string",
          "format": "int64"
        },
        "day": {
          "description": "**REQUIRED**: The day portion of the date. The first day of the month is 1.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "AdditionalTransactionProcessingOptions": {
      "description": "Contains additional information relevant to processing the payment.",
      "type": "object",
      "properties": {
        "authenticationData": {
          "description": "**REQUIRED**: Contains the authentication result data of the payment processed.",
          "$ref": "#/definitions/AuthenticationData"
        },
        "recurrenceCreationDetails": {
          "description": "**REQUIRED**: Contains the recurrence creation details for the payment processed.",
          "$ref": "#/definitions/RecurrenceCreationDetails"
        },
        "installmentData": {
          "description": "**REQUIRED**: Contains the installment data for the payment processed.",
          "$ref": "#/definitions/InstallmentData"
        },
        "deviceInformation": {
          "description": "**OPTIONAL**: Contains information about the user's device.",
          "$ref": "#/definitions/DeviceInformation"
        }
      }
    },
    "AuthenticationData": {
      "description": "Contains Authentication details relevant to payment processing.",
      "type": "object",
      "properties": {
        "threeDSecureTwoAuthenticationData": {
          "description": "Proof of a successful 3DS2 authentication.",
          "$ref": "#/definitions/ThreeDSecureTwoAuthenticationData"
        },
        "threeDSecureDelegatedAuthenticationData": {
          "description": "Proof of a successful 3DS delegated authentication.",
          "$ref": "#/definitions/ThreeDSecureDelegatedAuthenticationData"
        },
        "authenticationDataNotApplicable": {
          "description": "Authentication was not performed for this transaction. This typically means the request was system initiated.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "ThreeDSecureTwoAuthenticationData": {
      "description": "Contains 3-D Secure v2 Authentication details relevant to payment processing.",
      "type": "object",
      "properties": {
        "threeDSecureAuthenticationDetails": {
          "description": "**REQUIRED**: The 3DS2 authentication result.",
          "$ref": "#/definitions/ThreeDSecureAuthenticationData"
        },
        "electronicCommerceIndicator": {
          "description": "**REQUIRED**: The numeric ECI value to be sent to the network.",
          "$ref": "#/definitions/ElectronicCommerceIndicator"
        }
      }
    },
    "ThreeDSecureAuthenticationData": {
      "description": "Contains 3-D Secure v2 Authentication details relavent to payment processing.",
      "type": "object",
      "properties": {
        "directoryServerTransactionId": {
          "description": "**REQUIRED**: Unique transaction identifier assigned and returned by the directory server as a part of successful authentication result. As per the EMVCo 3-D Secure spec v2, this is a UUID following IETF RFC 4122.",
          "type": "string"
        },
        "cavv": {
          "description": "**REQUIRED**: Cardholder Authentication Verification Value, the proof of authentication, returned by the ACS and is in Base64 format.",
          "type": "string"
        },
        "threeDsVersion": {
          "description": "**REQUIRED**: The version of 3DS v2 used to process the authentication. The field is populated with the value returned by the ACS.",
          "type": "string"
        },
        "threeDsServerTransactionId": {
          "description": "**OPTIONAL**: Universally unique transaction identifier assigned by the 3DS Server to identify a single transaction.",
          "type": "string"
        },
        "transStatus": {
          "description": "**OPTIONAL**: The final status of the 3DS flow which resulted in the cardholder authentication information associated with this request. Refer to EMVCo's 3DS specifications for additional details.",
          "type": "string"
        }
      }
    },
    "ElectronicCommerceIndicator": {
      "description": "Contains the numeric ECI value to be sent to the network.",
      "type": "object",
      "properties": {
        "electronicCommerceIndicator": {
          "description": "The Electronic Commerce Indicator representing a numeric value defined by the card network. This should be sent to the network with the transaction.",
          "type": "string"
        },
        "electronicCommerceIndicatorNotApplicable": {
          "description": "An ECI is not used for this transaction.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "ThreeDSecureDelegatedAuthenticationData": {
      "description": "Contains 3-D Secure delegated authentication details relevant to payment processing.",
      "type": "object",
      "properties": {
        "paymentIntegratorAuthenticationId": {
          "description": "**OPTIONAL**: This identifier is specific to the integrator and is generated by the integrator. The integrator identifies this authentication attempt in their system by this identifier. This will be populated when it was included in the `authenticateResponse`.",
          "type": "string"
        },
        "authenticationResult": {
          "description": "**REQUIRED**: This is used to specify the result of 3DS1 authentication attempt.",
          "$ref": "#/definitions/AuthenticationResult"
        }
      }
    },
    "AuthenticationResult": {
      "description": "Contains the result of the authentication attempt.",
      "type": "object",
      "properties": {
        "authenticationWasSuccessful": {
          "description": "There was a successful call to `authenticateRequest` to authenticate the user for this purchase.",
          "$ref": "#/definitions/Empty"
        },
        "authenticationWasAttempted": {
          "description": "An inconclusive attempt was made to authenticate the user.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "RecurrenceCreationDetails": {
      "description": "Contains recurrence creation details relevant to payment processing.",
      "type": "object",
      "properties": {
        "recurringPaymentDetails": {
          "description": "Object used to pass details needed for the creation of a recurring payment mandate that can be used to make future payments.",
          "$ref": "#/definitions/RecurringPaymentDetails"
        },
        "recurrenceDetailsNotApplicable": {
          "description": "Recurring payments are not being setup as part of this transaction.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "CaptureResponse": {
      "description": "Response object for the payment integrator hosted Capture method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/V2ResponseHeader"
        },
        "paymentIntegratorCaptureId": {
          "description": "**OPTIONAL**: This identifier is specific to the integrator and is generated by the integrator. The integrator identifies this capture in their system by this identifier. For convenience, this identifier is included with in the remittance details",
          "type": "string"
        },
        "cardNetworkResult": {
          "description": "**REQUIRED**: The result of issuing the capture on the card network.",
          "$ref": "#/definitions/CardNetworkResult"
        },
        "addressVerificationResult": {
          "description": "**REQUIRED**: The result of verifying the address fields sent in the request.",
          "$ref": "#/definitions/AddressVerificationResult"
        },
        "cvnResult": {
          "description": "**REQUIRED**: The result of verifying the CVN sent in the request. If the CVN was not set on the request, this value should be `NOT_SENT`.",
          "type": "string",
          "enum": [
            "CVN_RESULT_UNSPECIFIED",
            "NOT_SENT_UNSUPPORTED_BY_INTEGRATOR",
            "NOT_SENT_UNSUPPORTED_BY_NETWORK",
            "NOT_SENT_UNSUPPORTED_BY_ISSUER",
            "NOT_SENT_SUPPORTED",
            "NOT_VERIFIED",
            "MATCH",
            "MISMATCH",
            "UNSUPPORTED_BY_INTEGRATOR",
            "UNSUPPORTED_BY_NETWORK",
            "UNSUPPORTED_BY_ISSUER",
            "SKIPPED_BY_NETWORK",
            "SKIPPED_BY_ISSUER",
            "CVN_RESULT_NOT_DETERMINED"
          ]
        },
        "result": {
          "description": "**REQUIRED**: Result of this call.",
          "type": "string",
          "enum": [
            "CAPTURE_RESULT_CODE_UNSPECIFIED",
            "SUCCESS",
            "CARD_ACTIVITY_EXCEEDS_AMOUNT_LIMIT",
            "CARD_ACTIVITY_EXCEEDS_COUNT_LIMIT",
            "CARD_AUTHENTICATION_FAILED",
            "CARD_EXPIRATION_DATE_INVALID",
            "CARD_EXPIRED",
            "CARD_LOST_OR_STOLEN",
            "CARD_NOT_ACTIVATED",
            "CARD_NUMBER_INVALID",
            "CARD_REQUIRES_RESERVE_CAPTURE",
            "CUSTOMER_INFO_INVALID",
            "CVN_MISMATCH",
            "DO_NOT_HONOR",
            "INSUFFICIENT_FUNDS",
            "ISSUER_DECLINED",
            "REVOCATION_OF_AUTHORIZATION",
            "STOP_PAYMENT",
            "SUSPECTED_FRAUD",
            "TRANSACTION_COULD_NOT_BE_ROUTED",
            "TRANSACTION_UNDER_AMOUNT_LIMIT",
            "TRANSACTION_EXCEEDS_AMOUNT_LIMIT",
            "TRANSACTION_INVALID",
            "TRANSACTION_NOT_ALLOWED",
            "TRANSACTION_PENDING",
            "RECURRING_PAYMENT_NOT_SUPPORTED",
            "NETWORK_TIMEOUT",
            "RESTRICTED_CARD",
            "CARD_AUTHENTICATION_EXPIRED",
            "MANDATE_CREATION_FAILED",
            "MANDATE_NOT_ACTIVE",
            "MANDATE_REQUIRED_BUT_NOT_PRESENT",
            "CHARGE_CANCELED_BY_USER",
            "DUPLICATE_REQUEST",
            "INTERNAL_ERROR",
            "INVALID_ISSUER_RESPONSE",
            "INVALID_REQUEST",
            "ISSUER_UNAVAILABLE",
            "NOTIFICATION_NOT_SENT",
            "NOTIFICATION_NOT_VALID",
            "NOT_PERMITTED",
            "CHARGE_NOT_APPROVED_BY_USER",
            "MANDATE_INSTRUMENT_NOT_VALID",
            "NETWORK_ALTID_FETCH_FAILED"
          ]
        },
        "cardMetadata": {
          "description": "**REQUIRED**: Optional metadata about the card that may be useful for future processing and debugging.",
          "$ref": "#/definitions/CardMetadata"
        },
        "recurringMandateDetails": {
          "description": "The creation of a recurring mandate was requested and successful.",
          "$ref": "#/definitions/RecurringMandateDetails"
        },
        "recurringMandateNotRequired": {
          "description": "The creation of a recurring mandate was requested, but it is not required for this transaction, e.g. because it is an international card that is out of scope.",
          "$ref": "#/definitions/Empty"
        },
        "recurringMandateNotSupported": {
          "description": "The creation of a recurring mandate was requested, but it is not currently supported for this transaction, e.g. the issuer does not yet support mandates. This differs from `recurringMandateNotRequired`, which is used for cards that are not in scope of requiring a mandate. `recurringMandateNotSupported` is used for cards that are in scope but can not currently support mandate creation.",
          "$ref": "#/definitions/Empty"
        },
        "recurringMandateNotRequested": {
          "description": "The creation of a recurring mandate was not requested.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "CardNetworkResult": {
      "description": "Contains a network and a raw result code from that network.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**REQUIRED**: The raw response code from the network to this call. This is informational only.",
          "$ref": "#/definitions/V2RawResult"
        },
        "authorizationCode": {
          "description": "The Authorization Verification Code returned from the Card Network during the reservation of funds. Any time that this Code is provided by the network, it should be returned to Google. Common names for this field include: Auth code, Verification Code, Authorization Number, Authorization ID, Approval Code",
          "type": "string"
        },
        "processorDebugInformation": {
          "description": "**OPTIONAL**: The additional transactional information which is useful for debugging or troubleshooting purpose only.",
          "$ref": "#/definitions/ProcessorDebugInformation"
        }
      }
    },
    "V2RawResult": {
      "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"
        }
      }
    },
    "ProcessorDebugInformation": {
      "description": "This contains the additional information sent by the processor which is useful for debugging or analysis purposes only.",
      "type": "object",
      "properties": {
        "errorCode": {
          "description": "**OPTIONAL**: This contains specific identifier or error code from the processor system.",
          "type": "string"
        },
        "category": {
          "description": "**OPTIONAL**: This contains type or category of failure.",
          "type": "string"
        },
        "details": {
          "description": "**REQUIRED**: The detailed information or internal error description which is useful for investigation purposes.",
          "type": "string"
        }
      }
    },
    "AddressVerificationResult": {
      "description": "The result of verifying the address fields provided in the request. All fields are required because we want an explicit result for each field rather than relying on the absence of a field as an implied result.",
      "type": "object",
      "properties": {
        "notSent": {
          "description": "Google did not send `addressVerificationData` so nothing could be done.",
          "$ref": "#/definitions/AddressVerificationResultAddressVerificationNotSent"
        },
        "sentUnsupported": {
          "description": "Google sent `addressVerificationData` but AVS is unsupported.",
          "$ref": "#/definitions/AddressVerificationResultAddressVerificationSentUnsupported"
        },
        "result": {
          "description": "Google sent `addressVerificationData` and this is the result.",
          "$ref": "#/definitions/AddressVerificationResultAddressVerificationSentResult"
        }
      }
    },
    "AddressVerificationResultAddressVerificationNotSent": {
      "description": "Google did not send `addressVerificationData` so nothing could be done.",
      "type": "object",
      "properties": {
        "support": {
          "description": "**REQUIRED**: If `addressVerificationData` had been sent, the following support would have been available.",
          "type": "string",
          "enum": [
            "NOT_SENT_AVS_SUPPORT_UNSPECIFIED",
            "UNSUPPORTED_BY_INTEGRATOR",
            "UNSUPPORTED_BY_NETWORK",
            "UNSUPPORTED_BY_ISSUER",
            "SUPPORTED",
            "AVS_SUPPORT_NOT_KNOWN"
          ]
        }
      }
    },
    "AddressVerificationResultAddressVerificationSentUnsupported": {
      "description": "Google sent `addressVerificationData` but AVS is unsupported.",
      "type": "object",
      "properties": {
        "reason": {
          "description": "**REQUIRED**: The `addressVerificationData` was sent but Address Verification could not be performed for the following reason.",
          "type": "string",
          "enum": [
            "AVS_NOT_SUPPORTED_REASON_UNSPECIFIED",
            "UNSUPPORTED_BY_INTEGRATOR",
            "UNSUPPORTED_BY_NETWORK",
            "UNSUPPORTED_BY_ISSUER"
          ]
        }
      }
    },
    "AddressVerificationResultAddressVerificationSentResult": {
      "description": "Google sent `addressVerificationData` and this is the result.",
      "type": "object",
      "properties": {
        "rawAvsResult": {
          "description": "**REQUIRED**: The raw AVS value returned from the card network. If `addressVerificationData` was not set in the request, or if the raw result is not known then the value should be \"UNKNOWN\".",
          "type": "string"
        },
        "addressLine": {
          "description": "**REQUIRED**: The result of verifying the `streetAddress` sent in the `addressVerificationSystemData` field of the request.",
          "type": "string",
          "enum": [
            "VERIFICATION_RESULT_UNSPECIFIED",
            "MATCH",
            "MISMATCH",
            "NOT_SPECIFIED",
            "SKIPPED_BY_NETWORK",
            "SKIPPED_BY_ISSUER"
          ]
        },
        "localityName": {
          "description": "**REQUIRED**: The result of verifying the `localityName` sent in the `addressVerificationSystemData` field of the request.",
          "type": "string",
          "enum": [
            "VERIFICATION_RESULT_UNSPECIFIED",
            "MATCH",
            "MISMATCH",
            "NOT_SPECIFIED",
            "SKIPPED_BY_NETWORK",
            "SKIPPED_BY_ISSUER"
          ]
        },
        "administrativeAreaName": {
          "description": "**REQUIRED**: The result of verifying the `administrativeAreaName` sent in the `addressVerificationSystemData` field of the request.",
          "type": "string",
          "enum": [
            "VERIFICATION_RESULT_UNSPECIFIED",
            "MATCH",
            "MISMATCH",
            "NOT_SPECIFIED",
            "SKIPPED_BY_NETWORK",
            "SKIPPED_BY_ISSUER"
          ]
        },
        "postalCodeNumber": {
          "description": "**REQUIRED**: The result of verifying the `postalCodeNumber` sent in the `addressVerificationSystemData` field of the request.",
          "type": "string",
          "enum": [
            "VERIFICATION_RESULT_UNSPECIFIED",
            "MATCH",
            "MISMATCH",
            "NOT_SPECIFIED",
            "SKIPPED_BY_NETWORK",
            "SKIPPED_BY_ISSUER"
          ]
        },
        "countryCode": {
          "description": "**REQUIRED**: The result of verifying the `countryCode` sent in the `addressVerificationSystemData` field of the request.",
          "type": "string",
          "enum": [
            "VERIFICATION_RESULT_UNSPECIFIED",
            "MATCH",
            "MISMATCH",
            "NOT_SPECIFIED",
            "SKIPPED_BY_NETWORK",
            "SKIPPED_BY_ISSUER"
          ]
        },
        "nameOnCard": {
          "description": "**REQUIRED**: The result of verifying the `nameOnCard` sent in the `card` field of this request.",
          "type": "string",
          "enum": [
            "VERIFICATION_RESULT_UNSPECIFIED",
            "MATCH",
            "MISMATCH",
            "NOT_SPECIFIED",
            "SKIPPED_BY_NETWORK",
            "SKIPPED_BY_ISSUER"
          ]
        }
      }
    },
    "CardMetadata": {
      "description": "Metadata about the card returned from the payment integrator that may be useful for future processing and debugging.",
      "type": "object",
      "properties": {
        "issuerName": {
          "description": "**OPTIONAL**: The name of the card issuer. This is for internal use only and can take whatever format is most convenient for the payment integrator. It will not be displayed to the user and does not have to be human readable.",
          "type": "string"
        },
        "issuingCountryCode": {
          "description": "**OPTIONAL**: The country code of the country that this card was issued in using ISO-3166-1 Alpha-2 format.",
          "type": "string"
        },
        "networks": {
          "description": "**OPTIONAL**: The networks that this card can be processed on. These should be in upper case. e.g. VISA, MASTERCARD, AMEX",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "cardType": {
          "description": "**REQUIRED**: The type of card.",
          "type": "string",
          "enum": [
            "CARD_TYPE_UNSPECIFIED",
            "INTEGRATOR_CANNOT_SPECIFY_CARD_TYPE",
            "CREDIT_CARD",
            "DEBIT_CARD",
            "PREPAID_CARD"
          ]
        }
      }
    },
    "RecurringMandateDetails": {
      "description": "Details about the recurring mandate that was created.",
      "type": "object",
      "properties": {
        "mandateId": {
          "description": "**REQUIRED**: The ID that represents the mandate created for this recurring mandate.",
          "type": "string"
        },
        "mandateStatus": {
          "description": "**REQUIRED**: The current status of the mandate.",
          "type": "string",
          "enum": [
            "MANDATE_STATUS_UNSPECIFIED",
            "PENDING",
            "ACTIVE",
            "REJECTED",
            "DELETED"
          ]
        },
        "mandateCreationDetails": {
          "description": "**REQUIRED**: Details pertaining to this mandate's creation. Set this when there is specific information that needs to be supplied regarding how the mandate was created.",
          "$ref": "#/definitions/RecurringMandateDetailsMandateCreationDetails"
        }
      }
    },
    "RecurringMandateDetailsMandateCreationDetails": {
      "description": "Details pertaining to mandate creation.",
      "type": "object",
      "properties": {
        "integratorPaymentToken": {
          "description": "Signifies that the mandate was created on integrator's payment-token.",
          "$ref": "#/definitions/Empty"
        },
        "googlePaymentToken": {
          "description": "Signifies that the mandate was created on Google's payment-token.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "PreNotifyUserRequest": {
      "description": "Request object for the payment integrator hosted PreNotifyUser method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/V2RequestHeader"
        },
        "notificationNumber": {
          "description": "**REQUIRED**: A number to associate with the notification for this payment.",
          "type": "string"
        },
        "notificationDisplayNumber": {
          "description": "**REQUIRED**: This number is associated with the notification and can be displayed to the user.`.",
          "type": "string"
        },
        "customerReferenceId": {
          "description": "**REQUIRED**: The Google generated customer reference ID that is associated with the mandate for this recurring payment. It is the same ID that is provided when the mandate creation is requested and is unique to that mandate.",
          "type": "string"
        },
        "recurringPaymentReferenceId": {
          "description": "**REQUIRED**: The Google generated recurring payment ID. It is the same ID that is provided when the mandate creation is requested and is unique to that mandate.",
          "type": "string"
        },
        "mandateId": {
          "description": "**REQUIRED**: The payment integrator generated ID that represents the mandate for this recurring payment. This is returned in the `capture` call when the recurring payment is first set up.",
          "type": "string"
        },
        "notificationDate": {
          "description": "**REQUIRED**: Date of when this notification was generated.",
          "$ref": "#/definitions/Date"
        },
        "dueDate": {
          "description": "**REQUIRED**: Date of when the payment is due.",
          "$ref": "#/definitions/Date"
        },
        "debitDate": {
          "description": "**REQUIRED**: Date of when the payment will be debited.",
          "$ref": "#/definitions/Date"
        },
        "amount": {
          "description": "**REQUIRED**: The amount of the pending payment.",
          "$ref": "#/definitions/Amount"
        },
        "netAmount": {
          "description": "**REQUIRED**: The current net amount of the payment, including any discount or late payment penalties, if applicable.",
          "$ref": "#/definitions/Amount"
        },
        "description": {
          "description": "**REQUIRED**: A brief description of the payment.",
          "type": "string"
        }
      }
    },
    "PreNotifyUserResponse": {
      "description": "Response object for the payment integrator hosted PreNotifyUser method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/V2ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Result of this request",
          "$ref": "#/definitions/PreNotifyUserResult"
        }
      }
    },
    "PreNotifyUserResult": {
      "description": "The result of the PreNotifyUserResponse.",
      "type": "object",
      "properties": {
        "success": {
          "description": "The user was or will be notified and the scheduled payment can occur.",
          "$ref": "#/definitions/PreNotifyUserResultSuccess"
        },
        "preNotificationFailed": {
          "description": "The user could not be notified and a payment should not occur.",
          "$ref": "#/definitions/PreNotifyUserResultPreNotificationFailed"
        },
        "mandateNotActive": {
          "description": "The specified mandate is not currently active and can not be used for payments.",
          "$ref": "#/definitions/Empty"
        },
        "mandateAmountExceeded": {
          "description": "The mandate's amount limit is lower than the proposed charge.",
          "$ref": "#/definitions/PreNotifyUserResultMandateAmountExceeded"
        },
        "mandateInstrumentNotValid": {
          "description": "The instrument associated with the mandate on the integrator side is not valid. For example, when a mandate is created on card which is not migrated to a cloud token and deleted from the integrator's end.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "PreNotifyUserResultSuccess": {
      "description": "An object to represent a successful `preNotifyUserRequest`.",
      "type": "object",
      "properties": {
        "paymentIntegratorNotificationId": {
          "description": "**REQUIRED**: A payment integretor created ID for this notification. It will be supplied with the related payment when that payment is made.",
          "type": "string"
        }
      }
    },
    "PreNotifyUserResultPreNotificationFailed": {
      "description": "Object used to convey error responses for when the pre notification failed.",
      "type": "object",
      "properties": {
        "errorCode": {
          "description": "**REQUIRED**: Error code.",
          "type": "string"
        },
        "errorType": {
          "description": "**REQUIRED**: Error type.",
          "type": "string"
        },
        "errorDescription": {
          "description": "**REQUIRED**: Error description.",
          "type": "string"
        }
      }
    },
    "PreNotifyUserResultMandateAmountExceeded": {
      "description": "Object used to convey information about a mandate's charge amount if the `preNotifyUser` was attempting to charge more than the mandate supports.",
      "type": "object",
      "properties": {
        "mandateMaximumAmount": {
          "description": "**OPTIONAL**: The maximum amount that can be used to charge this mandate.",
          "$ref": "#/definitions/Amount"
        }
      }
    },
    "CancelMandateRequest": {
      "description": "Request object for the cancel mandate method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/V2RequestHeader"
        },
        "mandateId": {
          "description": "**REQUIRED**: The payment integrator generated ID that represents the mandate for this recurring payment. This is returned in the `capture` call when the recurring payment is first set up.",
          "type": "string"
        },
        "customerReferenceId": {
          "description": "**REQUIRED**: The Google generated customer reference ID that is associated with the mandate for this recurring payment. It is the same ID that is provided when the mandate creation is requested and is unique to that mandate.",
          "type": "string"
        },
        "recurringPaymentReferenceId": {
          "description": "**REQUIRED**: The Google generated recurring payment ID. It is the same ID that is provided when the mandate creation is requested and is unique to that mandate.",
          "type": "string"
        }
      }
    },
    "CancelMandateResponse": {
      "description": "Response object for the cancel mandate method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/V2ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Result of this mandate cancellation.",
          "$ref": "#/definitions/CancelMandateResponseCancelMandateResult"
        }
      }
    },
    "CancelMandateResponseCancelMandateResult": {
      "description": "Result codes for cancel mandate.",
      "type": "object",
      "properties": {
        "success": {
          "description": "The mandate was successfully cancelled.",
          "$ref": "#/definitions/Empty"
        }
      }
    }
  }
}
