{
  "swagger": "2.0",
  "info": {
    "title": "Google Standard Payments Payment Integrator Hosted Card FOP API",
    "description": "This includes services hosted by Payment Integrators for Card FOP.",
    "version": "v1"
  },
  "host": "www.integratorhost.example.com",
  "basePath": "/integrator-base-path",
  "schemes": ["https"],
  "paths": {
    "/v1/payment-integrator-card-fop-api/asynchronousRefund": {
      "post": {
        "tags": ["payment_integrator_card_fop_api"],
        "operationId": "AsynchronousRefund",
        "description": "Refunds a portion or all of the transaction initiated through `asynchronousCaptureFundsReservation`. 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, \"minor\": 0, \"revision\": 0 }, \"requestId\": \"G18FCDTLD5B0SR4\", \"requestTimestamp\": \"1482489410000\" }, \"paymentIntegratorAccountId\": \"SpeedyPaymentsIndia_INR\", \"captureRequestId\": \"G112YZH4XPDV88J\", \"refundAmount\": \"364000000\" } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": \"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-card-fop-api/capture": {
      "post": {
        "tags": ["payment_integrator_card_fop_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 request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1, \"minor\": 0, \"revision\": 0 }, \"requestId\": \"G112YZH4XPDV88J\", \"requestTimestamp\": \"1481907920000\" }, \"paymentIntegratorAccountId\": \"SpeedyPaymentsIndia_INR\", \"accountDetails\": { \"card\": { \"accountNumber\": \"4123456789101112\", \"nameOnCard\": \"Example Customer\", \"expiryMonth\": \"01\", \"expiryYear\": \"20\", \"cvn\": \"123\" } }, \"currencyCode\": \"INR\", \"amount\": \"728000000\", \"transactionDescription\": \"Movie ACB\", \"merchantCategoryCode\": \"5815\", \"addressVerificationData\": { \"addressLine\": [\"2 Inner Ring Road\"], \"localityName\": \"Bangalore\", \"administrativeAreaName\": \"Karnataka\", \"postalCodeNumber\": \"560071\", \"countryCode\": \"IN\" }, \"additionalTransactionProcessingOptions\": { \"userSelectedProcessingNetworkTypeNotApplicable\": {}, \"electronicCommerceIndicatorNotApplicable\": {}, \"threeDSecureNotAppplicable\": {}, \"storedCredentialTransactionInformationNotApplicable\": {} } } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": \"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\" }, \"additionalTransactionProcessingResult\": { \"storedCredentialInformationSuccessful\": { \"networkTransactionIdentifier\": \"cdf04f0d-44a8-4b5d-bf63-440e9194db33\" } } } ",
        "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-card-fop-api/reserveFunds": {
      "post": {
        "tags": ["payment_integrator_card_fop_api"],
        "operationId": "ReserveFunds",
        "description": "Reserve funds on a user's card. This call synchronously attempts to reserve funds from a user's card. The response to this message will return the result of that attempt. No money is directly moved as the result of this call. The requested amount of funds should be reserved until an `asynchronousCaptureFundsReservation`, an `asynchronousCancelFundsReservation` or until the reservation has reached the `reservationExpirationTimestamp` specified in the ReserveFundsResponse. The `requestId` within the header is the idempotency key and uniquely identifies this transaction. All mutations on this transaction (`asynchronousCancelFundsReservation`, `asynchronousCaptureFundsReservation`) populate the `requestId` value in their `reservationRequestId` field. 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, \"minor\": 0, \"revision\": 0 }, \"requestId\": \"G1MQ0YERJ0Q7LPM\", \"requestTimestamp\": \"1481899949606\" }, \"paymentIntegratorAccountId\": \"SpeedyPaymentsIndia_INR\", \"accountDetails\": { \"card\": { \"accountNumber\": \"4123456789101112\", \"nameOnCard\": \"Example Customer\", \"expiryMonth\": \"01\", \"expiryYear\": \"20\", \"cvn\": \"123\" } }, \"currencyCode\": \"INR\", \"amount\": \"728000000\", \"transactionDescription\": \"Movie ACB\", \"merchantCategoryCode\": \"5815\", \"addressVerificationData\": { \"addressLine\": [ \"2 Inner Ring Road\" ], \"localityName\": \"Bangalore\", \"administrativeAreaName\": \"Karnataka\", \"postalCodeNumber\": \"560071\", \"countryCode\": \"IN\" }, \"additionalTransactionProcessingOptions\": { \"userSelectedProcessingNetworkTypeNotApplicable\": {}, \"electronicCommerceIndicator\": \"05\", \"threeDSecureAuthenticationDetails\": { \"directoryServerTransactionId\": \"c5b808e7-1de1-4069-a17b-f70d3b3b1640\", \"cavv\": \"123ABCCAVVAA\", \"threeDsVersion\": \"2.2.0\", \"threeDsServerTransactionId\": \"40c52a12-31e1-463e-ab0e-89d9f6189b79\", \"transStatus\": \"Y\" }, \"storedCredentialTransactionInformation\": { \"merchantInitiated\": { \"transactionIntentClassification\": \"RECURRING\", \"instrumentStorageType\": \"STORED\", \"previousTransactionInformation\": { \"storedCredentialTransactionId\": \"c7e2d54b-aa12-4aea-9ce6-fb6f1e4df2b4\", \"originalTransactionAmount\": \"728000000\" } } } } } An example request using a tokenized card looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1, \"minor\": 0, \"revision\": 0 }, \"requestId\": \"G1MQ0YERJ0Q7LPM\", \"requestTimestamp\": \"1481899949606\" }, \"paymentIntegratorAccountId\": \"SpeedyPaymentsIndia_INR\", \"accountDetails\": { \"paymentToken\": { \"nameOnCard\": \"Example Customer\", \"paymentTokenAccountNumber\": \"4123456789101112\", \"expiryMonth\": \"01\", \"expiryYear\": \"20\", \"cryptogram\": \"12345\", \"tokenTypeMerchantToken\": {} } }, \"currencyCode\": \"INR\", \"amount\": \"728000000\", \"transactionDescription\": \"Movie ACB\", \"merchantCategoryCode\": \"5815\", \"addressVerificationData\": { \"addressLine\": [\"2 Inner Ring Road\"], \"localityName\": \"Bangalore\", \"administrativeAreaName\": \"Karnataka\", \"postalCodeNumber\": \"560071\", \"countryCode\": \"IN\" }, \"additionalTransactionProcessingOptions\": { \"userSelectedProcessingNetworkTypeNotApplicable\": {}, \"electronicCommerceIndicator\": \"05\", \"threeDSecureAuthenticationDetails\": { \"directoryServerTransactionId\": \"c5b808e7-1de1-4069-a17b-f70d3b3b1640\", \"cavv\": \"123ABCCAVVAA\", \"threeDsVersion\": \"2.2.0\", \"threeDsServerTransactionId\": \"40c52a12-31e1-463e-ab0e-89d9f6189b79\", \"transStatus\": \"Y\" }, \"storedCredentialTransactionInformation\": { \"merchantInitiated\": { \"transactionIntentClassification\": \"RECURRING\", \"instrumentStorageType\": \"STORED\", \"previousTransactionInformation\": { \"storedCredentialTransactionId\": \"c7e2d54b-aa12-4aea-9ce6-fb6f1e4df2b4\", \"originalTransactionAmount\": \"728000000\" } } } } } An example successful response looks like: { \"responseHeader\": { \"responseTimestamp\": \"1481899950236\" }, \"paymentIntegratorFundsReservationId\": \"2eec3ece-66cf-4d0e-90ea-0933a0079753\", \"cardNetworkResult\": { \"passThroughResponseCodes\": { \"iso8583V1987ResponseCode\": { \"responseCode\": \"00\", \"responseCodeDescription\": \"Approved\" } }, \"authorizationCode\": \"123456\" }, \"addressVerificationResult\": { \"result\": { \"rawAvsResult\": \"M\", \"addressLine\": \"MATCH\", \"localityName\": \"MATCH\", \"administrativeAreaName\": \"MATCH\", \"postalCodeNumber\": \"MATCH\", \"countryCode\": \"MATCH\", \"nameOnCard\": \"MATCH\" } }, \"cvnResult\": \"MATCH\", \"result\": \"SUCCESS\", \"reservationExpirationTimestamp\": \"1482460769503\", \"cardMetadata\": { \"issuerName\": \"exampleissuer\", \"issuingCountryCode\": \"IN\", \"networks\": [\"VISA\"], \"cardType\": \"CREDIT_CARD\" }, \"additionalTransactionProcessingResult\": { \"storedCredentialInformationSuccessful\": { \"networkTransactionIdentifier\": \"cdf04f0d-44a8-4b5d-bf63-440e9194db33\" } } } An example declined response looks like: { \"responseHeader\": { \"responseTimestamp\": \"1481899950236\" }, \"paymentIntegratorFundsReservationId\": \"2eec3ece-66cf-4d0e-90ea-0933a0079753\", \"cardNetworkResult\": { \"passThroughResponseCodes\": { \"iso8583V1987ResponseCode\": { \"responseCode\": \"05\", \"responseCodeDescription\": \"Do not honor\" }, \"merchantAdviceCode\": { \"responseCode\": \"03\", \"responseCodeDescription\": \"Do not try again\" } } }, \"addressVerificationResult\": { \"result\": { \"rawAvsResult\": \"M\", \"addressLine\": \"MATCH\", \"localityName\": \"MATCH\", \"administrativeAreaName\": \"MATCH\", \"postalCodeNumber\": \"MATCH\", \"countryCode\": \"MATCH\", \"nameOnCard\": \"MATCH\" } }, \"cvnResult\": \"MATCH\", \"result\": \"DO_NOT_HONOR\", \"reservationExpirationTimestamp\": \"1482460769503\", \"cardMetadata\": { \"issuerName\": \"exampleissuer\", \"issuingCountryCode\": \"IN\", \"networks\": [\"MASTERCARD\"], \"cardType\": \"CREDIT_CARD\" }, \"additionalTransactionProcessingResult\": { \"storedCredentialInformationUnsupported\": {} } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/ReserveFundsRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/ReserveFundsResponse"
            }
          }
        }
      }
    },
    "/v1/payment-integrator-card-fop-api/asynchronousCaptureFundsReservation": {
      "post": {
        "tags": ["payment_integrator_card_fop_api"],
        "operationId": "AsynchronousCaptureFundsReservation",
        "description": "Initiates money movement by capturing funds that were previously reserved in a call to `reserveFunds`. This initiates money movement by capturing funds that were previously reserved in a call to `reserveFunds`. The `reservationRequestId` specifies which funds reservation is to be captured. The amount captured can be less than or equal to the amount reserved but each reservation may only be captured once. The final result of the capture request is supplied by a call to `captureFundsReservationResultNotification`. The `requestId` within the header is the idempotency key and uniquely identifies this transaction. All mutations on this transaction (e.g. `asynchronousRefund`, `chargebackNotification`) populate this request's `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 request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1, \"minor\": 0, \"revision\": 0 }, \"requestId\": \"G112YZH4XPDV88J\", \"requestTimestamp\": \"1481907920000\" }, \"paymentIntegratorAccountId\": \"SpeedyPaymentsIndia_INR\", \"reservationRequestId\": \"G1MQ0YERJ0Q7LPM\", \"amount\": \"728000000\" } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": \"1481907920760\" }, \"result\": \"ACKNOWLEDGED\" } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/AsynchronousCaptureFundsReservationRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/AsynchronousCaptureFundsReservationResponse"
            }
          }
        }
      }
    },
    "/v1/payment-integrator-card-fop-api/asynchronousCancelFundsReservation": {
      "post": {
        "tags": ["payment_integrator_card_fop_api"],
        "operationId": "AsynchronousCancelFundsReservation",
        "description": "Initiates canceling the funds that were previously reserved in a call to `reserveFunds`. This cancels the pending transaction by freeing the reserved funds. The `reservationRequestId` identifies which funds reservation is being canceled. When this is used, there is no money movement from a customer's account for this transaction. The final result of the cancel is supplied by a call to `cancelFundsReservationResultNotification`. The `requestId` within the header is the idempotency key and uniquely identifies this transaction. If the reservation of funds has expired or the payment integrator has automatically canceled the reservation, consider it a successful cancel rather than an error. Therefore, return an `ACKNOWLEDGED` response code and call `cancelFundsReservationResultNotification`. 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\": \"G1NMPDFX4AW395L\", \"requestTimestamp\": \"1481907920000\" }, \"paymentIntegratorAccountId\": \"SpeedyPaymentsIndia_INR\", \"reservationRequestId\": \"G1MQ0YERJ0Q7LPM\" } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": \"1481907920760\" }, \"result\": \"ACKNOWLEDGED\" } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/AsynchronousCancelFundsReservationRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/AsynchronousCancelFundsReservationResponse"
            }
          }
        }
      }
    },
    "/v1/payment-integrator-card-fop-api/verifyCardWithMinimumReservation": {
      "post": {
        "tags": ["payment_integrator_card_fop_api"],
        "operationId": "VerifyCardWithMinimumReservation",
        "description": "Verifies a user's card to see if it is valid. This method is called by Google to verify details of a user's card and to see if the card can be used for payments. `asynchronousCancelFundsReservation` will be called in order to return any reserved funds to the user's account. 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\": \"SpeedyPaymentsIndia_INR\", \"card\": { \"accountNumber\": \"4123456789101112\", \"nameOnCard\": \"Example Customer\", \"expiryMonth\": \"01\", \"expiryYear\": \"20\", \"cvn\": \"123\" }, \"currencyCode\": \"INR\", \"transactionDescription\": \"Movie ACB\", \"merchantCategoryCode\": \"5815\", \"addressVerificationData\": { \"addressLine\": [\"2 Inner Ring Road\"], \"localityName\": \"Bangalore\", \"administrativeAreaName\": \"Karnataka\", \"postalCodeNumber\": \"560071\", \"countryCode\": \"IN\" } } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": \"1481899950236\" }, \"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\" }, \"fundsTransferFlow\": \"NOT_SUPPORTED\", \"reserveCaptureFlow\": \"SUPPORTED\", \"additionalTransactionProcessingResult\": { \"storedCredentialInformationSuccessful\": { \"networkTransactionIdentifier\": \"cdf04f0d-44a8-4b5d-bf63-440e9194db33\" } } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/VerifyCardWithMinimumReservationRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/VerifyCardWithMinimumReservationResponse"
            }
          }
        }
      }
    },
    "/v1/payment-integrator-dispute-api/defendChargeback": {
      "post": {
        "tags": ["payment_integrator_card_fop_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"
            }
          }
        }
      }
    },
    "/v1/echo": {
      "post": {
        "tags": ["payment_integrator_card_fop_api"],
        "operationId": "Echo",
        "description": "Echos back the `clientMessage` that is passed in. The purpose of this method is to test basic connectivity between the payment integrator and Google. This method may be called by Google multiple times per minute with valid or invalid parameters in order to test that security constraints are being held properly. Google also calls this method ad-hoc at the integrator's direction as well as at Google's direction. Google will never call this faster than once every 10s, and never more than 30 times in a 15 minute window. Examples of security constraint tests are (but not limited to): - Test to ensure payment integrator's endpoint doesn't negotiate to weak cipher suites. - Test to ensure payment integrator's endpoint doesn't negotiate to anything but TLS 1.2 - Test to ensure payment integrator's endpoint doesn't support HTTP. - Test to ensure payment integrator's endpoint mandates at least one known PGP signing key. - Test to ensure payment integrator's endpoint supports multiple PGP key signatures, both known and unknown, both expired and active. - Test to ensure payment integrator only support strict JSON parsing. 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\": \"ZWNobyB0cmFuc2FjdGlvbg\", \"requestTimestamp\": \"1481899949606\" }, \"clientMessage\": \"client message\" } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": \"1481900013178\" }, \"clientMessage\": \"client message\", \"serverMessage\": \"server message\" } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/EchoRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/EchoResponse"
            }
          }
        }
      }
    }
  },
  "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/RequestHeader"
        },
        "paymentIntegratorAccountId": {
          "description": "**REQUIRED**: This is the payment integrator account ID that defines contractual constraints around this transaction.",
          "type": "string"
        },
        "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, a positive number of micros of the currency unit specified in the originating message, either the funds reservation or initiating capture.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "RequestHeader": {
      "description": "Header object that is defined on all requests sent to the server.",
      "type": "object",
      "properties": {
        "requestId": {
          "description": "**REQUIRED**: Unique identifier of this request. This is a string that has a max length of 100 characters, and contains only the characters \"a-z\", \"A-Z\", \"0-9\", \":\", \"-\", and \"_\".",
          "type": "string"
        },
        "requestTimestamp": {
          "description": "**REQUIRED**: Timestamp of this request represented as milliseconds since epoch. The receiver should verify that this timestamp is \u00B1 60s of 'now'. This request timestamp is not idempotent upon retries.",
          "type": "string",
          "format": "int64"
        },
        "userLocale": {
          "description": "**DEPRECATED**: A two- or three-letter ISO 639-2 Alpha 3 language code optionally followed by a hyphen and an ISO 3166-1 Alpha-2 country code, e.g.'pt', 'pt-BR', 'fil', or 'fil-PH'. Use this to help drive the `userMessage` fields in the response.",
          "type": "string"
        },
        "protocolVersion": {
          "description": "**REQUIRED**: The version of this request.",
          "$ref": "#/definitions/Version"
        }
      }
    },
    "Version": {
      "description": "Version object which is a structured form of the classic `a.b.c` version structure. Major versions of the same number are guaranteed to be compatible. Note that minor and revisions can change frequently and without notice. The integrator must support all requests for the same major version.",
      "type": "object",
      "properties": {
        "major": {
          "description": "**REQUIRED**: Major version. This is marked for compatibility requests with different versions are not guaranteed to be compatible.",
          "type": "integer",
          "format": "int32"
        },
        "minor": {
          "description": "**REQUIRED**: Minor version. This denotes significant bug fixes.",
          "type": "integer",
          "format": "int32"
        },
        "revision": {
          "description": "**REQUIRED**: Minor version. This denotes minor bug fixes.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "AsynchronousRefundResponse": {
      "description": "Response object for the payment integrator hosted AsynchronousRefund method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: The result of the asynchronous refund call.",
          "type": "string",
          "enum": [
            "ASYNCHRONOUS_REFUND_RESULT_CODE_UNSPECIFIED",
            "ACKNOWLEDGED"
          ]
        }
      }
    },
    "ResponseHeader": {
      "description": "Header object that is defined on all responses sent from the server.",
      "type": "object",
      "properties": {
        "responseTimestamp": {
          "description": "**REQUIRED**: Timestamp of this response represented as milliseconds since epoch. The receiver should verify that this timestamp is \u00B1 60s of 'now'.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "ErrorResponse": {
      "description": "Error Response object for all methods.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "errorResponseCode": {
          "description": "**OPTIONAL**: A code that captures the type of error that occurred.",
          "type": "string",
          "enum": [
            "UNKNOWN_ERROR_RESPONSE_CODE",
            "INVALID_API_VERSION",
            "INVALID_PAYLOAD_SIGNATURE",
            "INVALID_PAYLOAD_ENCRYPTION",
            "REQUEST_TIMESTAMP_OUT_OF_RANGE",
            "INVALID_IDENTIFIER",
            "IDEMPOTENCY_VIOLATION",
            "INVALID_FIELD_VALUE",
            "MISSING_REQUIRED_FIELD",
            "PRECONDITION_VIOLATION",
            "USER_ACTION_IN_PROGRESS",
            "INVALID_DECRYPTED_REQUEST",
            "FORBIDDEN"
          ]
        },
        "errorDescription": {
          "description": "**OPTIONAL**: Provide a description of this status for support reps to debug errors. Note that this is never shown to users. It can contain descriptive, non-sensitive text used for debugging. Note that some values for errorResponseCode should be accompanied by additional detail in this field. For example, `INVALID_IDENTIFIER` should be accompanied by information in this field as to which type of identifier was invalid. Warning: Do not include any tokens in this message unless they are defined as public.",
          "type": "string"
        },
        "paymentIntegratorErrorIdentifier": {
          "description": "**OPTIONAL**: This identifier is specific to the integrator and is generated by the integrator. It is used for debugging purposes only in order to identify this call. This is the identifier that the integrator knows this call by.",
          "type": "string"
        }
      }
    },
    "CaptureRequest": {
      "description": "Request object for the payment integrator hosted Capture method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "paymentIntegratorAccountId": {
          "description": "**REQUIRED**: This is the payment integrator account identifier that identifies contractual constraints around this transaction.",
          "type": "string"
        },
        "accountDetails": {
          "description": "**REQUIRED**: Data about the user's payment card.",
          "$ref": "#/definitions/AccountDetails"
        },
        "currencyCode": {
          "description": "**REQUIRED**: ISO 4217 3-letter currency code.",
          "type": "string"
        },
        "amount": {
          "description": "**REQUIRED**: The amount of the purchase, in micros of the currency unit.",
          "type": "string",
          "format": "int64"
        },
        "transactionDescription": {
          "description": "**REQUIRED**: This is the description of the transaction that can be put on the customer's statement. This format can be changed without notice and must never be parsed. 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"
        },
        "additionalTransactionProcessingOptions": {
          "description": "**REQUIRED**: 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 authenticate the transaction. If these fields are specified then they should be applied for the transaction.",
          "$ref": "#/definitions/AdditionalTransactionProcessingOptions"
        }
      }
    },
    "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"
        },
        "issuanceDateMonth": {
          "description": "**OPTIONAL**: Issuance month, formatted `MM`.",
          "type": "string"
        },
        "issuanceDateYear": {
          "description": "**OPTIONAL**: Issuance year, formatted `YY`.",
          "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"
        },
        "tokenTypeDeviceToken": {
          "description": "The token is bound to a device. It is represented by a DPAN and was generated by the user going through a SCA (Strong Customer Authentication) \/ Step Up flow.",
          "$ref": "#/definitions/Empty"
        },
        "tokenTypeMerchantToken": {
          "description": "The token is bound to a merchant. It could be used while the user is offline and might be accompanied by additional, transaction time authentication details, such as 3DS2.",
          "$ref": "#/definitions/Empty"
        },
        "tokenTypeUnsupported": {
          "description": "Unsupported token type.",
          "$ref": "#/definitions/Empty"
        },
        "tokenTypeNotApplicable": {
          "description": "Payment token type is not applicable. Not passed in the request.",
          "$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": {
      }
    },
    "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"
        }
      }
    },
    "AdditionalTransactionProcessingOptions": {
      "description": "Contains additional information relevant to processing the payment.",
      "type": "object",
      "properties": {
        "userSelectedProcessingNetworkType": {
          "description": "User-provided preference for network type.",
          "type": "string",
          "enum": [
            "PROCESSING_NETWORK_TYPE_UNSPECIFIED",
            "CREDIT",
            "DEBIT"
          ]
        },
        "userSelectedProcessingNetworkTypeNotApplicable": {
          "description": "User selection not relevant to this card or transaction.",
          "$ref": "#/definitions/Empty"
        },
        "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"
        },
        "threeDSecureAuthenticationDetails": {
          "description": "Proof of a successful 3DS2 authentication.",
          "$ref": "#/definitions/ThreeDSecureAuthenticationData"
        },
        "threeDSecureNotAppplicable": {
          "description": "3DS2 was not performed for this transaction.",
          "$ref": "#/definitions/Empty"
        },
        "storedCredentialTransactionInformation": {
          "description": "Information pertaining to the usage of stored credentials within the CIT\/MIT framework.",
          "$ref": "#/definitions/StoredCredentialTransactionInformation"
        },
        "storedCredentialTransactionInformationNotApplicable": {
          "description": "Stored credential information is not applicable for this payment.",
          "$ref": "#/definitions/Empty"
        },
        "scaExemptionNotApplicable": {
          "description": "No exemption is requested for this transaction.",
          "$ref": "#/definitions/Empty"
        },
        "scaLowValueTransaction": {
          "description": "A low value exemption is requested for this transaction.",
          "$ref": "#/definitions/Empty"
        },
        "scaTransactionRiskAnalysis": {
          "description": "A low risk exemption is requested for this transaction.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "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"
        }
      }
    },
    "StoredCredentialTransactionInformation": {
      "description": "Bundle containing necessary information required for CIT \/ MIT payments.",
      "type": "object",
      "properties": {
        "customerInitiated": {
          "description": "The customer initiated the payment.",
          "$ref": "#/definitions/StoredCredentialTransactionInformationCustomerInitiatedTransactionInformation"
        },
        "merchantInitiated": {
          "description": "The merchant initiated the payment.",
          "$ref": "#/definitions/StoredCredentialTransactionInformationMerchantInitiatedTransactionInformation"
        }
      }
    },
    "StoredCredentialTransactionInformationCustomerInitiatedTransactionInformation": {
      "description": "Contains information necessary to process a CIT.",
      "type": "object",
      "properties": {
        "transactionIntentClassification": {
          "description": "**REQUIRED**: Defines the intent for initiating the stored credential or merchant initiated transaction.",
          "type": "string",
          "enum": [
            "TRANSACTION_INTENT_CLASSIFICATION_UNKNOWN",
            "INSTALLMENT",
            "RECURRING",
            "UNSCHEDULED",
            "INCREMENTAL",
            "RESUBMISSION",
            "REAUTHORIZATION",
            "DELAYED_CHARGES",
            "NO_SHOW"
          ]
        },
        "instrumentStorageType": {
          "description": "**REQUIRED**: Indicates the manner in which the payment instrument is stored for future use.",
          "type": "string",
          "enum": [
            "INSTRUMENT_STORAGE_TYPE_UNKNOWN",
            "FIRST_TRANSACTION",
            "STORED"
          ]
        }
      }
    },
    "StoredCredentialTransactionInformationMerchantInitiatedTransactionInformation": {
      "description": "Contains information necessary to process an MIT.",
      "type": "object",
      "properties": {
        "transactionIntentClassification": {
          "description": "**REQUIRED**: Defines the intent for initiating the stored credential or merchant initiated transaction.",
          "type": "string",
          "enum": [
            "TRANSACTION_INTENT_CLASSIFICATION_UNKNOWN",
            "INSTALLMENT",
            "RECURRING",
            "UNSCHEDULED",
            "INCREMENTAL",
            "RESUBMISSION",
            "REAUTHORIZATION",
            "DELAYED_CHARGES",
            "NO_SHOW"
          ]
        },
        "instrumentStorageType": {
          "description": "**REQUIRED**: Indicates the manner in which the payment instrument is stored for future use.",
          "type": "string",
          "enum": [
            "INSTRUMENT_STORAGE_TYPE_UNKNOWN",
            "FIRST_TRANSACTION",
            "STORED"
          ]
        },
        "previousTransactionInformation": {
          "description": "Information related to previous payments made with these stored credentials.",
          "$ref": "#/definitions/StoredCredentialTransactionInformationPreviousTransactionInformation"
        },
        "legacyMerchantTransaction": {
          "description": "No stored credential transaction id is available for this payment. This is used when the recurring payment needs to be migrated to the stored credential framework. The payment integrator should attempt to obtain a stored credential transaction id for use in subsequent Merchant Initiated Transactions.",
          "type": "boolean"
        },
        "previousTransactionInformationNotProvided": {
          "description": "There was no stored credential transaction id provided. It might be optional or not available for this payment.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "StoredCredentialTransactionInformationPreviousTransactionInformation": {
      "description": "Contains information about previous payments used to verify the current transaction",
      "type": "object",
      "properties": {
        "storedCredentialTransactionId": {
          "description": "**REQUIRED**: The transaction id from a previous stored-credential transaction, if available. Sometimes known as authorization trace identifier.",
          "type": "string"
        },
        "originalTransactionAmount": {
          "description": "**REQUIRED**: The authorization amount associated with the transaction id supplied in stored_credential_transaction_id.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "CaptureResponse": {
      "description": "Response object for the payment integrator hosted Capture method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "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",
            "NOT_SPECIFIED",
            "UNSUPPORTED_BY_INTEGRATOR",
            "UNSUPPORTED_BY_NETWORK",
            "UNSUPPORTED_BY_ISSUER",
            "SKIPPED_BY_NETWORK",
            "SKIPPED_BY_ISSUER"
          ]
        },
        "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",
            "RECURRING_PAYMENT_NOT_SUPPORTED",
            "NETWORK_TIMEOUT",
            "RESTRICTED_CARD",
            "CARD_AUTHENTICATION_EXPIRED",
            "STRONG_CUSTOMER_AUTHENTICATION_REQUIRED",
            "CARD_CANCELLED"
          ]
        },
        "cardMetadata": {
          "description": "**REQUIRED**: Optional metadata about the card that may be useful for future processing and debugging.",
          "$ref": "#/definitions/CardMetadata"
        },
        "additionalTransactionProcessingResult": {
          "description": "**REQUIRED**: Information resulting from additional processing options sent in the request. *Note:* This field will transition to be required. ",
          "$ref": "#/definitions/AdditionalTransactionProcessingResult"
        }
      }
    },
    "CardNetworkResult": {
      "description": "Contains response codes from the card network.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**DEPRECATED**: The raw response code from the network to this call. This is informational only. If this is a ISO 8583 code, set scope to \"Iso8583Code\". If this is a Merchant Advice Code, set scope to \"MerchantAdviceCode\".",
          "$ref": "#/definitions/RawResult"
        },
        "passThroughResponseCodes": {
          "description": "Response codes passed through from the network.",
          "$ref": "#/definitions/PassThroughResponseCodes"
        },
        "cardNetworkResultNotAvailable": {
          "description": "A card network result is not available. This can occur if the card network did not provide one, for example, in the case of a network timeout.",
          "$ref": "#/definitions/Empty"
        },
        "authorizationCode": {
          "description": "**OPTIONAL**: 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"
        }
      }
    },
    "RawResult": {
      "description": "Raw result object.",
      "type": "object",
      "properties": {
        "scope": {
          "description": "**OPTIONAL**: Scope of the raw_code, can be empty.",
          "type": "string"
        },
        "rawCode": {
          "description": "**REQUIRED**: Raw code from the integrator or subsystems within it.",
          "type": "string"
        }
      }
    },
    "PassThroughResponseCodes": {
      "description": "Contains ISO 8583 response codes and other response codes received from the card network.",
      "type": "object",
      "properties": {
        "iso8583V1987ResponseCode": {
          "description": "The ISO 8583 version 1987 response code provided by the card network. Examples: 00, 05, 34, 54, N4, ...",
          "$ref": "#/definitions/PassThroughResponseCodesResponseCode"
        },
        "iso8583V1993ResponseCode": {
          "description": "The ISO 8583 version 1993 response code provided by the card network. Examples: 000, 002, 101, 116, 400, 201, ...",
          "$ref": "#/definitions/PassThroughResponseCodesResponseCode"
        },
        "merchantAdviceCode": {
          "description": "The MasterCard Merchant Advice Code received by the card network. Examples: 01, 02, 04, 21, 27, 40, ...",
          "$ref": "#/definitions/PassThroughResponseCodesResponseCode"
        },
        "visaCategoryCode": {
          "description": "The Visa Category Code provided by the card network. Examples: 1, 2, 3, 4",
          "$ref": "#/definitions/PassThroughResponseCodesResponseCode"
        }
      }
    },
    "PassThroughResponseCodesResponseCode": {
      "description": "A response code and its description.",
      "type": "object",
      "properties": {
        "responseCode": {
          "description": "**REQUIRED**: The alphanumeric network code provided by the card network. This does not contain the human readable description of the code. Examples: 3, 00, 05, N4, 001, 101, 116, 201, 400, ...",
          "type": "string"
        },
        "responseCodeDescription": {
          "description": "**OPTIONAL**: The full description of the code provided by the network. If there is a human readable component to the code, it can be placed here. Examples: \"Do not try again\", \"Retry after 24 hours\", \"Data Quality Issues\"",
          "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`.",
          "$ref": "#/definitions/AddressVerificationResultAddressVerificationNotSent"
        },
        "sentUnsupported": {
          "description": "Google sent `addressVerificationData` but AVS is unsupported.",
          "$ref": "#/definitions/AddressVerificationResultAddressVerificationSentUnsupported"
        },
        "result": {
          "description": "The result of the address verification when `addressVerificationData` was sent.",
          "$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"
          ]
        }
      }
    },
    "AdditionalTransactionProcessingResult": {
      "description": "Response information pertaining to data sent in `AdditionalTransactionProcessingOptions`.",
      "type": "object",
      "properties": {
        "storedCredentialInformationSuccessful": {
          "description": "Stored Credentials were sent on the request and properly used for the transaction.",
          "$ref": "#/definitions/AdditionalTransactionProcessingResultStoredCredentialTransactionInformationSuccessful"
        },
        "storedCredentialInformationUnsupported": {
          "description": "Stored Credentials were sent on the request, but could not be properly used for the transaction.",
          "$ref": "#/definitions/AdditionalTransactionProcessingResultStoredCredentialTransactionInformationSentUnsupported"
        },
        "storedCredentialInformationNotSent": {
          "description": "Stored Credentials were not sent on the request.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "AdditionalTransactionProcessingResultStoredCredentialTransactionInformationSuccessful": {
      "description": "Information resulting from the usage of sent `StoredCredentialTransactionInformation`.",
      "type": "object",
      "properties": {
        "networkTransactionIdentifier": {
          "description": "**REQUIRED**: The transaction identifier provided by the network for usage in subsequent payments as part of the CIT \/ MIT framework. This value should be returned when stored credential information is supplied in the request and the network is able to provide a value. Sometimes known as authorization trace identifier.",
          "type": "string"
        }
      }
    },
    "AdditionalTransactionProcessingResultStoredCredentialTransactionInformationSentUnsupported": {
      "description": "Stored Credential information was sent, but was not able to be used.",
      "type": "object",
      "properties": {
        "reasonDescription": {
          "description": "**REQUIRED**: A description for why StoredCredentialTransactionInformation was not able to be used.",
          "type": "string"
        }
      }
    },
    "ReserveFundsRequest": {
      "description": "Request object for the payment integrator hosted ReserveFunds method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "paymentIntegratorAccountId": {
          "description": "**REQUIRED**: This is the payment integrator account identifier that identifies contractual constraints around this transaction.",
          "type": "string"
        },
        "accountDetails": {
          "description": "**REQUIRED**: Data about the user's payment card.",
          "$ref": "#/definitions/AccountDetails"
        },
        "currencyCode": {
          "description": "**REQUIRED**: ISO 4217 3-letter currency code.",
          "type": "string"
        },
        "amount": {
          "description": "**REQUIRED**: The amount of the purchase, in micros of the currency unit.",
          "type": "string",
          "format": "int64"
        },
        "transactionDescription": {
          "description": "**REQUIRED**: This is the description of the transaction that can be put on the customer's statement. This format can be changed without notice and must never be parsed. 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 address to be verified by AVS.",
          "$ref": "#/definitions/AddressVerificationData"
        },
        "additionalTransactionProcessingOptions": {
          "description": "**REQUIRED**: 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 authenticate the transaction. If these fields are specified then they should be applied for the transaction.",
          "$ref": "#/definitions/AdditionalTransactionProcessingOptions"
        }
      }
    },
    "ReserveFundsResponse": {
      "description": "Response object for the payment integrator hosted ReserveFunds method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "paymentIntegratorFundsReservationId": {
          "description": "**OPTIONAL**: This identifier is specific to the integrator and is generated by the integrator. This is the identifier that the integrator knows this transaction by. For convenience, this identifier is included with in the remittance details",
          "type": "string"
        },
        "cardNetworkResult": {
          "description": "**REQUIRED**: The result of issuing the authorization 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",
            "NOT_SPECIFIED",
            "UNSUPPORTED_BY_INTEGRATOR",
            "UNSUPPORTED_BY_NETWORK",
            "UNSUPPORTED_BY_ISSUER",
            "SKIPPED_BY_NETWORK",
            "SKIPPED_BY_ISSUER"
          ]
        },
        "result": {
          "description": "**REQUIRED**: Result of this call.",
          "type": "string",
          "enum": [
            "RESERVE_FUNDS_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_FUNDS_TRANSFER",
            "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",
            "RECURRING_PAYMENT_NOT_SUPPORTED",
            "NETWORK_TIMEOUT",
            "RESTRICTED_CARD",
            "CARD_AUTHENTICATION_EXPIRED",
            "STRONG_CUSTOMER_AUTHENTICATION_REQUIRED",
            "CARD_CANCELLED"
          ]
        },
        "reservationExpirationTimestamp": {
          "description": "**OPTIONAL**: Timestamp of the expiration of this reservation of funds represented as milliseconds since epoch. If `AsynchronousCaptureFundsReservation` is called after this timestamp, a `CaptureFundsReservationResultNotification` must be sent to Google with the code `RESERVATION_OF_FUNDS_EXPIRED` If `AsynchronousCancelFundsReservation` is called after this timestamp and the integrator has already issued an automatic cancel, a `CancelFundsReservationResultNotification` must be sent to Google with the code `SUCCESS`. If the integrator has not issued an automatic cancel, the request must be processed normally and the reservation of funds must be canceled.",
          "type": "string",
          "format": "int64"
        },
        "cardMetadata": {
          "description": "**REQUIRED**: Optional metadata about the card that may be useful for future processing and debugging.",
          "$ref": "#/definitions/CardMetadata"
        },
        "additionalTransactionProcessingResult": {
          "description": "**REQUIRED**: Information resulting from additional processing options sent in the request. *Note:* This field will transition to be required. ",
          "$ref": "#/definitions/AdditionalTransactionProcessingResult"
        }
      }
    },
    "AsynchronousCaptureFundsReservationRequest": {
      "description": "Request object for the payment integrator hosted AsynchronousCaptureFundsReservation method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "paymentIntegratorAccountId": {
          "description": "**REQUIRED**: This is the payment integrator account identifier that identifies contractual constraints around this transaction.",
          "type": "string"
        },
        "reservationRequestId": {
          "description": "**REQUIRED**: This is the `requestId` generated by Google during the `reserveFunds` call which this request is associated with. This call will capture the funds previously reserved by that request.",
          "type": "string"
        },
        "amount": {
          "description": "**REQUIRED**: The amount of the purchase, in micros of the currency unit specified in the prior funds reservation. This amount can be less than or equal to the amount specified in the prior funds reservation. An example situation when this would occur would be, if Google runs out of stock for one item in an order with multiple items.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "AsynchronousCaptureFundsReservationResponse": {
      "description": "Response object for the payment integrator hosted AsynchronousCaptureFundsReservation method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: The result of the asynchronous capture call.",
          "type": "string",
          "enum": [
            "ASYNCHRONOUS_CAPTURE_FUNDS_RESERVATION_RESULT_CODE_UNSPECIFIED",
            "ACKNOWLEDGED"
          ]
        }
      }
    },
    "AsynchronousCancelFundsReservationRequest": {
      "description": "Request object for the payment integrator hosted AsynchronousCancelFundsReservation method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "paymentIntegratorAccountId": {
          "description": "**REQUIRED**: This is the payment integrator account identifier that identifies contractual constraints around this transaction.",
          "type": "string"
        },
        "reservationRequestId": {
          "description": "**REQUIRED**: A unique identifier for this transaction. This is the `requestId` generated by Google during the `reserveFunds` or `verifyCardWithMinimumReservation` calls which this request is associated with.",
          "type": "string"
        }
      }
    },
    "AsynchronousCancelFundsReservationResponse": {
      "description": "Response object for the payment integrator hosted AsynchronousCancelFundsReservation method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: The result of the `asynchronousCancelFundsReservation` call.",
          "type": "string",
          "enum": [
            "ASYNCHRONOUS_CANCEL_FUNDS_RESERVATION_RESULT_CODE_UNSPECIFIED",
            "ACKNOWLEDGED"
          ]
        }
      }
    },
    "VerifyCardWithMinimumReservationRequest": {
      "description": "Request object for the payment integrator hosted VerifyCardWithMinimumReservation method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "paymentIntegratorAccountId": {
          "description": "**REQUIRED**: This is the payment integrator account identifier that identifies contractual constraints around this transaction.",
          "type": "string"
        },
        "card": {
          "description": "**REQUIRED**: Data about the user's payment card.",
          "$ref": "#/definitions/Card"
        },
        "currencyCode": {
          "description": "**REQUIRED**: ISO 4217 3-letter currency code.",
          "type": "string"
        },
        "transactionDescription": {
          "description": "**REQUIRED**: This is the description of the transaction that can be put on the customer's statement. This format can be changed without notice and must never be parsed. 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 address to be verified by AVS.",
          "$ref": "#/definitions/AddressVerificationData"
        },
        "storedCredentialTransactionInformation": {
          "description": "**OPTIONAL**: Information about usage of stored credentials.",
          "$ref": "#/definitions/StoredCredentialTransactionInformation"
        }
      }
    },
    "VerifyCardWithMinimumReservationResponse": {
      "description": "Response object for the payment integrator hosted VerifyCardWithMinimumReservation method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "cardNetworkResult": {
          "description": "**REQUIRED**: The result of issuing the authorization 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",
            "NOT_SPECIFIED",
            "UNSUPPORTED_BY_INTEGRATOR",
            "UNSUPPORTED_BY_NETWORK",
            "UNSUPPORTED_BY_ISSUER",
            "SKIPPED_BY_NETWORK",
            "SKIPPED_BY_ISSUER"
          ]
        },
        "result": {
          "description": "**REQUIRED**: Result of this call.",
          "type": "string",
          "enum": [
            "VERIFY_CARD_WITH_MINIMUM_RESERVATION_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",
            "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_INVALID",
            "TRANSACTION_NOT_ALLOWED",
            "STRONG_CUSTOMER_AUTHENTICATION_REQUIRED",
            "TRANSACTION_EXCEEDS_AMOUNT_LIMIT",
            "RECURRING_PAYMENT_NOT_SUPPORTED",
            "NETWORK_TIMEOUT",
            "RESTRICTED_CARD",
            "CARD_AUTHENTICATION_EXPIRED",
            "TRANSACTION_UNDER_AMOUNT_LIMIT",
            "CARD_CANCELLED"
          ]
        },
        "cardMetadata": {
          "description": "**REQUIRED**: Optional metadata about the card that may be useful for future processing and debugging.",
          "$ref": "#/definitions/CardMetadata"
        },
        "fundsTransferFlow": {
          "description": "**REQUIRED**: Set to `SUPPORTED` if this card supports Funds Transfer (single message) protocol.",
          "type": "string",
          "enum": [
            "CAPABILITY_SUPPORT_UNSPECIFIED",
            "INTEGRATOR_CANNOT_SPECIFY_SUPPORT",
            "SUPPORTED",
            "NOT_SUPPORTED"
          ]
        },
        "reserveCaptureFlow": {
          "description": "**REQUIRED**: Set to `SUPPORTED` if this card supports the Reserve Capture (dual message) protocol.",
          "type": "string",
          "enum": [
            "CAPABILITY_SUPPORT_UNSPECIFIED",
            "INTEGRATOR_CANNOT_SPECIFY_SUPPORT",
            "SUPPORTED",
            "NOT_SUPPORTED"
          ]
        },
        "additionalTransactionProcessingResult": {
          "description": "**REQUIRED**: Information resulting from additional processing options sent in the request. *Note:* This field will transition to be required. ",
          "$ref": "#/definitions/AdditionalTransactionProcessingResult"
        }
      }
    },
    "DefendChargebackRequest": {
      "description": "Request object for the payment integrator hosted DefendChargeback method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "paymentIntegratorAccountId": {
          "description": "**REQUIRED**: This is the payment integrator account identifier that identifies contractual constraints around this transaction.",
          "type": "string"
        },
        "captureRequestId": {
          "description": "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"
        }
      }
    },
    "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/ResponseHeader"
        },
        "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"
          ]
        }
      }
    },
    "EchoRequest": {
      "description": "Request object for the echo method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "clientMessage": {
          "description": "**REQUIRED**: Message to echo in the response.",
          "type": "string"
        }
      }
    },
    "EchoResponse": {
      "description": "Response object for the echo method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "clientMessage": {
          "description": "**REQUIRED**: Message received in the request.",
          "type": "string"
        },
        "serverMessage": {
          "description": "**OPTIONAL**: Server message, independent of the `clientMessage` being echoed.",
          "type": "string"
        }
      }
    }
  }
}
