{
  "swagger": "2.0",
  "info": {
    "title": "Google Standard Payments Google Hosted Carrier Wallets API",
    "description": "This includes services hosted by Google for Carriers.",
    "version": "v1"
  },
  "host": "vgw.googleapis.com",
  "basePath": "/gsp",
  "schemes": ["https"],
  "paths": {
    "/carrier-wallets-v1/echo": {
      "post": {
        "tags": ["vgw"],
        "operationId": "Echo",
        "description": "Echos back a string sent from the client. If the echo is successful, the endpoint will return an HTTP 200 and the response will be of type `EchoResponse`. If the endpoint encounters an error while processing the request, the endpoint will return HTTP 4xx or 5xx and the HTTP body will either be of type `ErrorResponse` or contain a generic error (e.g. a message similar to \"There was an error. Please try again later.\"). The generic error is used in situations where an `ErrorResponse` with a clear description could be used to help an attacker understand the payment integrator account identifier of other integrators. In these situations, where either the signing key doesn't match, the payment integrator identifier was not found, or the encryption key was unknown, this method will return a generic error. If the request signature could be verified, additional information regarding the error will be returned in an `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"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"
            }
          }
        }
      }
    },
    "/carrier-wallets-v1/getDisputeInquiryReport": {
      "post": {
        "tags": ["vgw"],
        "operationId": "GetDisputeInquiryReport",
        "description": "Get a report that provides information to facilitate a customer support conversation with a user regarding a potential dispute of a payment. Responses to this query may be empty if this method does not return an HTTP 200. If the endpoint encounters an error while processing the request, the endpoint will return HTTP 4xx or 5xx and the HTTP body will either be of type `ErrorResponse` or contain a generic error (e.g. a message similar to \"There was an error. Please try again later.\"). The generic error is used in situations where an `ErrorResponse` with a clear description could be used to help an attacker understand the payment integrator account identifier of other integrators. In these situations, where either the signing key doesn't match, the payment integrator identifier was not found, or the encryption key was unknown, this method will return a generic error. If the request signature could be verified, additional information regarding the error will be returned in an `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"HsKv5pvtQKTtz7rdcw1YqE\", \"requestTimestamp\": { \"epochMillis\": \"1519996751331\" }, \"paymentIntegratorAccountId\": \"InvisiCashUSA_USD\" }, \"paymentLookupCriteria\": { \"googleTransactionReferenceNumberCriteria\": { \"googleTransactionReferenceNumber\": \"714545417102363157911822\", \"authorizationCode\": \"111111\" } }, \"existingGoogleClaimId\": \"138431383281\", \"requestOriginator\": { \"organizationId\": \"ISSUER_256\", \"organizationDescription\": \"Community Bank of Some City\", \"agentId\": \"982749\" } } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": \"1519996752221\" } }, \"result\": { \"success\": { \"googleClaimId\": \"138431383281\", \"report\": { \"customerAccount\": { \"customerEmail\": \"example@gmail.com\", \"customerName\" : \"Example Customer\" }, \"order\": { \"timestamp\": { \"epochMillis\": \"1517992525972\" }, \"orderId\": \"SOP.8976-1234-1234-123456..99\", \"subTotalAmount\": { \"amountMicros\": \"206990000\", \"currencyCode\": \"USD\" }, \"totalAmount\": { \"amountMicros\": \"212990000\", \"currencyCode\": \"USD\" }, \"shippingAddress\": { \"addressLine\": [\"123 Main St\"], \"localityName\": \"Springfield\", \"administrativeAreaName\": \"CO\", \"postalCodeNumber\": \"80309\", \"countryCode\": \"US\" }, \"taxes\": [ { \"description\": \"Colorado Sales Tax\", \"amount\": { \"amountMicros\": \"6000000\", \"currencyCode\": \"USD\" } } ], \"items\": [ { \"description\": \"Super cool gizmo\", \"merchant\": \"HTC\", \"googleProductName\": \"Google Store\", \"quantity\": \"2\", \"totalPrice\": { \"amountMicros\": \"198000000\", \"currencyCode\": \"USD\" } }, { \"description\": \"Gizmo charger\", \"merchant\": \"HTC\", \"googleProductName\": \"Google Store\", \"quantity\": \"1\", \"totalPrice\": { \"amountMicros\": \"8990000\", \"currencyCode\": \"USD\" } } ] }, \"payment\": { \"billingAddress\" : { \"addressLine\": [\"123 Main St\"], \"localityName\": \"Springfield\", \"administrativeAreaName\": \"CO\", \"postalCodeNumber\": \"80309\", \"countryCode\": \"US\" }, \"amount\": { \"amountMicros\": \"100000000\", \"currencyCode\": \"USD\" }, \"refunds\": [ { \"amount\": { \"amountMicros\": \"9250000\", \"currencyCode\": \"USD\" }, \"initiatedTimestamp\": { \"epochMillis\": \"1518811245384\" } } ], \"cardDetails\": { \"authResult\": \"APPROVED\" } } } } } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/GetDisputeInquiryReportRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/GetDisputeInquiryReportResponse"
            }
          }
        }
      }
    },
    "/carrier-wallets-v1/fraudNotification": {
      "post": {
        "tags": ["vgw"],
        "operationId": "FraudNotification",
        "description": "Notifies Google of a fraud dispute initiated by a customer. It is recommended that Google is notified of all potential fraud that has occurred. Fraud can occur without a chargeback and a chargeback can occur without fraud. The information provided to this method does not initiate any money movement. It is used only to update Google's internal risk engine to reduce overall fraud. Google does not respond to this request with any information about the transaction. If the endpoint encounters an error while processing the request, the endpoint will return HTTP 4xx or 5xx and the HTTP body will either be of type `ErrorResponse` or contain a generic error (e.g. a message similar to \"There was an error. Please try again later.\"). The generic error is used in situations where an `ErrorResponse` with a clear description could be used to help an attacker understand the payment integrator account identifier of other integrators. In these situations, where either the signing key doesn't match, the payment integrator identifier was not found, or the encryption key was unknown, this method will return a generic error. If the request signature could be verified, additional information regarding the error will be returned in an `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"f3b6cffe-6fa0-4c33-84b5-7ff8d1ac9ecc\", \"requestTimestamp\": { \"epochMillis\": \"1483532962000\" }, \"paymentIntegratorAccountId\": \"SpeedyPaymentsIndia_INR\" }, \"captureRequestId\": \"G112YZH4XPDV88J\", \"fraudType\": \"FRAUDULENT_USE\", \"rawResult\": { \"scope\": \"VISA\", \"rawCode\": \"06\" } } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": \"1483532962349\" } }, \"result\": { \"success\": {} } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/FraudNotificationRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/FraudNotificationResponse"
            }
          }
        }
      }
    },
    "/carrier-wallets-v1/remittanceStatementDetails": {
      "post": {
        "tags": ["vgw"],
        "operationId": "RemittanceStatementDetails",
        "description": "Returns transaction detail information about a remittance statement. This is a paginated API. The number of transaction events per page can be specified with `numberOfEvents`. If unspecified, the maximum of 1000 events will be returned per page. Each request to this API will return a `nextEventOffset` pointing to the next transaction event in the statement, as well as `totalEvents` specifying the total number of transactions in the statement. If the current retrieved page contains the last transactions of the statement, `nextEventOffset` will not be present in the response. The `statementId` value is the `requestId` from the request to `remittanceStatementNotification` If the endpoint encounters an error while processing the request, the endpoint will return HTTP 4xx or 5xx and the HTTP body will either be of type `ErrorResponse` or contain a generic error (e.g. a message similar to \"There was an error. Please try again later.\"). The generic error is used in situations where an `ErrorResponse` with a clear description could be used to help an attacker understand the payment integrator account identifier of other integrators. In these situations, where either the signing key doesn't match, the payment integrator identifier was not found, or the encryption key was unknown, this method will return a generic error. If the request signature could be verified, additional information regarding the error will be returned in an `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"statement_detail_request_139932019\", \"requestTimestamp\": { \"epochMillis\": \"1616976000000\" }, \"paymentIntegratorAccountId\": \"InvisiCashUSA_USD\" }, \"statementId\": \"0123434-statement-abc\", \"numberOfEvents\": 5 } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": \"1616976000000\" } }, \"remittanceStatementSummary\": { \"statementDate\": { \"epochMillis\": \"1614556800000\" }, \"billingPeriod\": { \"startDate\": { \"epochMillis\": \"1612137600000\" }, \"endDate\": { \"epochMillis\": \"1614470400000\" } }, \"dateDue\": { \"epochMillis\": \"1617235200000\" }, \"totalDueByIntegrator\": { \"amountMicros\": \"1584000000\", \"currencyCode\": \"INR\" }, \"totalProcessedAmount\": { \"amountMicros\": \"1669000000\", \"currencyCode\": \"INR\" }, \"totalFeesAmount\": { \"amountMicros\": \"100000000\", \"currencyCode\": \"INR\" }, \"totalDirectTaxAmount\": { \"amountMicros\": \"100000\", \"currencyCode\": \"INR\" }, \"totalWithholdingTaxAmount\": { \"amountMicros\": \"-1000000\", \"currencyCode\": \"INR\" }, \"totalPresentmentAmounts\": [ { \"amountMicros\": \"1669000000\", \"currencyCode\": \"INR\" } ], \"totalEvents\": 15 }, \"eventOffset\": 0, \"nextEventOffset\": 5, \"totalWithholdingTaxes\": { \"amountMicros\": \"0\", \"currencyCode\": \"INR\" }, \"captureEvents\": [ { \"eventRequestId\": \"bWVyY2hhbnQgdHJhbnNhY3Rpb24gaWQ\", \"eventCharge\": { \"amountMicros\": \"700000000\", \"currencyCode\": \"INR\" }, \"eventFee\": { \"amountMicros\": \"-28000000\", \"currencyCode\": \"INR\" }, \"eventTax\": { \"amountMicros\": \"35000000\", \"currencyCode\": \"INR\" }, \"presentmentChargeAmount\": { \"amountMicros\": \"700000000\", \"currencyCode\": \"INR\" }, \"nanoExchangeRate\": \"10000000000000\" }, { \"eventRequestId\": \"Ggghvh78200PQ3Yrpb\", \"eventCharge\": { \"amountMicros\": \"800000000\", \"currencyCode\": \"INR\" }, \"eventFee\": { \"amountMicros\": \"-32000000\", \"currencyCode\": \"INR\" }, \"eventTax\": { \"amountMicros\": \"40000000\", \"currencyCode\": \"INR\" }, \"presentmentChargeAmount\": { \"amountMicros\": \"800000000\", \"currencyCode\": \"INR\" }, \"nanoExchangeRate\": \"10000000000000\" }, { \"eventRequestId\": \"bWVyY2hhbnQgdHJhbnNhY3Rpb24gaWQ\", \"eventCharge\": { \"amountMicros\": \"500000000\", \"currencyCode\": \"INR\" }, \"eventFee\": { \"amountMicros\": \"-20000000\", \"currencyCode\": \"INR\" }, \"eventTax\": { \"amountMicros\": \"25000000\", \"currencyCode\": \"INR\" }, \"presentmentChargeAmount\": { \"amountMicros\": \"500000000\", \"currencyCode\": \"INR\" }, \"nanoExchangeRate\": \"10000000000000\" } ], \"refundEvents\": [ { \"eventRequestId\": \"liUrreQY233839dfFFb24gaQM\", \"eventCharge\": { \"amountMicros\": \"-200000000\", \"currencyCode\": \"INR\" }, \"eventFee\": { \"amountMicros\": \"8000000\", \"currencyCode\": \"INR\" }, \"eventTax\": { \"amountMicros\": \"-10000000\", \"currencyCode\": \"INR\" }, \"presentmentChargeAmount\": { \"amountMicros\": \"-200000000\", \"currencyCode\": \"INR\" }, \"nanoExchangeRate\": \"10000000000000\" }, { \"eventRequestId\": \"IIghhhUrreQY233839II9qM==\", \"eventCharge\": { \"amountMicros\": \"-150000000\", \"currencyCode\": \"INR\" }, \"eventFee\": { \"amountMicros\": \"6000000\", \"currencyCode\": \"INR\" }, \"eventTax\": { \"amountMicros\": \"-7500000\", \"currencyCode\": \"INR\" }, \"presentmentChargeAmount\": { \"amountMicros\": \"-150000000\", \"currencyCode\": \"INR\" }, \"nanoExchangeRate\": \"10000000000000\" } ] } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/RemittanceStatementDetailsRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/RemittanceStatementDetailsResponse"
            }
          }
        }
      }
    },
    "/carrier-wallets-v1/acceptRemittanceStatement": {
      "post": {
        "tags": ["vgw"],
        "operationId": "AcceptRemittanceStatement",
        "description": "Tells Google that the statement indicated in this request will be paid. If the endpoint encounters an error while processing the request, the endpoint will return HTTP 4xx or 5xx and the HTTP body will either be of type `ErrorResponse` or contain a generic error (e.g. a message similar to \"There was an error. Please try again later.\"). The generic error is used in situations where an `ErrorResponse` with a clear description could be used to help an attacker understand the payment integrator account identifier of other integrators. In these situations, where either the signing key doesn't match, the payment integrator identifier was not found, or the encryption key was unknown, this method will return a generic error. If the request signature could be verified, additional information regarding the error will be returned in an `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"0123434-abc\", \"requestTimestamp\": { \"epochMillis\": \"1616976000000\" }, \"paymentIntegratorAccountId\": \"InvisiCashUSA_USD\" }, \"statementId\": \"0123434-statement-abc\" } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": \"1616976000000\" } }, \"result\": { \"success\": {} } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/AcceptRemittanceStatementRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/AcceptRemittanceStatementResponse"
            }
          }
        }
      }
    },
    "/carrier-wallets-v1/updateAssociatedAccount": {
      "post": {
        "tags": ["vgw"],
        "operationId": "UpdateAssociatedAccountInfo",
        "description": "Requests an update to an associated user account. This method requires that a complete snapshot of the associated account information be provided, along with an update sequence timestamp. The update sequence timestamp is used to determine the most recent update. Updates with an update sequence timestamp older than the current Google record are dropped. The update sequence timestamp should reflect the time the state of the account was read in milliseconds. The update sequence timestamp must be within +\/- 1 min of the Google server time when the request is received, or the request will be rejected with response code 401. Failed requests may be retried until a 401 response code is received. If a 401 response code is received, the client should refresh the updateSequenceTimestamp prior to retrying the request. If the endpoint encounters an error while processing the request, the endpoint will return HTTP 4xx or 5xx and the HTTP body will either be of type `ErrorResponse` or contain a generic error (e.g. a message similar to \"There was an error. Please try again later.\"). The generic error is used in situations where an `ErrorResponse` with a clear description could be used to help an attacker understand the payment integrator account identifier of other integrators. In these situations, where either the signing key doesn't match, the payment integrator identifier was not found, or the encryption key was unknown, this method will return a generic error. If the request signature could be verified, additional information regarding the error will be returned in an `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"8a986fe8-5a2c-45a4-a1bb-3bed6e651020\", \"requestTimestamp\": { \"epochMillis\": \"1482452962000\" }, \"paymentIntegratorAccountId\": \"InvisiCashUSA_USD\" }, \"googlePaymentToken\": { \"issuerId\": { \"value\": \"InvisiCashUSA\" }, \"token\": \"xcoNWE23812Sflks9an01%s\" }, \"updateSequenceTimestamp\": { \"epochMillis\": \"1482452962000\" }, \"accountInfo\": { \"accountStatus\": \"ACCOUNT_AVAILABLE\", \"transactionLimits\": { \"transactionMaxLimit\": { \"limitAmount\": { \"amountMicros\": \"100000000\", \"currencyCode\": \"JPY\" } } }, \"accountIds\": { \"partialAccountNickname\": \"(XXX) XXX-5555\", \"accountAlias\": { \"phoneNumber\": { \"value\": \"+15555555555\" } } } } } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": \"1482452962840\" } }, \"result\": { \"success\": {} } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/UpdateAssociatedAccountRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/UpdateAssociatedAccountResponse"
            }
          }
        }
      }
    },
    "/carrier-wallets-v1/captureResultNotification": {
      "post": {
        "tags": ["vgw"],
        "operationId": "CaptureResultNotification",
        "description": "Notify Google of the result of a capture after a `capture` or `asynchronousCapture` method call has been made. The `captureResult` value is idempotent for this `captureRequestId`, so its value cannot be changed by a subsequent call to this method. If the endpoint encounters an error while processing the request, the endpoint will return HTTP 4xx or 5xx and the HTTP body will either be of type `ErrorResponse` or contain a generic error (e.g. a message similar to \"There was an error. Please try again later.\"). The generic error is used in situations where an `ErrorResponse` with a clear description could be used to help an attacker understand the payment integrator account identifier of other integrators. In these situations, where either the signing key doesn't match, the payment integrator identifier was not found, or the encryption key was unknown, this method will return a generic error. If the request signature could be verified, additional information regarding the error will be returned in an `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"KcgwSKrV76eVNDUbsZ4UA3\", \"requestTimestamp\": { \"epochMillis\": \"1481852928293\" }, \"paymentIntegratorAccountId\": \"InvisiCashUSA_USD\" }, \"captureRequestId\": \"awNaC510cefae3IJdNEvW2\", \"result\": { \"success\": {} } } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": \"1481852928324\" } }, \"result\": { \"success\": {} } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/CaptureResultNotificationRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/CaptureResultNotificationResponse"
            }
          }
        }
      }
    },
    "/carrier-wallets-v1/authenticationResultNotification": {
      "post": {
        "tags": ["vgw"],
        "operationId": "AuthenticationResultNotification",
        "description": "Completes an authentication request that was triggered by Google in a different context that cannot receive a synchronous response from the vendor. For instance, an authentication based on sending an SMS from the user's device. If the endpoint encounters an error while processing the request, the endpoint will return HTTP 4xx or 5xx and the HTTP body will either be of type `ErrorResponse` or contain a generic error (e.g. a message similar to \"There was an error. Please try again later.\"). The generic error is used in situations where an `ErrorResponse` with a clear description could be used to help an attacker understand the payment integrator account identifier of other integrators. In these situations, where either the signing key doesn't match, the payment integrator identifier was not found, or the encryption key was unknown, this method will return a generic error. If the request signature could be verified, additional information regarding the error will be returned in an `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"8c700b9e-62d4-11e9-a923-1681be663d3e\", \"requestTimestamp\": { \"epochMillis\": \"1502545413026\" }, \"paymentIntegratorAccountId\": \"InvisiCashUSA_USD\" }, \"authenticationRequestId\": \"Y382JCD7FK5U1356168QNAJHBTDGADAGGD\", \"result\": { \"success\": {} } } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": \"1502545413098\" } }, \"result\": { \"success\": {} } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/AuthenticationResultNotificationRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/AuthenticationResultNotificationResponse"
            }
          }
        }
      }
    }
  },
  "definitions": {
    "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"
        }
      }
    },
    "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. 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/Version"
        },
        "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"
        }
      }
    },
    "Version": {
      "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"
        }
      }
    },
    "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"
        }
      }
    },
    "ResponseHeader": {
      "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"
        }
      }
    },
    "ErrorResponse": {
      "description": "Error Response object for all methods.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "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/Version"
        },
        "expectedVersion": {
          "description": "**REQUIRED**: The expected version.",
          "$ref": "#/definitions/Version"
        }
      }
    },
    "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": {
      }
    },
    "GetDisputeInquiryReportRequest": {
      "description": "Request payload for the `getDisputeInquiryReport` method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "paymentLookupCriteria": {
          "description": "**REQUIRED**: Criteria indicating the payment that is to be looked up for this inquiry.",
          "$ref": "#/definitions/PaymentLookupCriteria"
        },
        "existingGoogleClaimId": {
          "description": "**OPTIONAL**: A Google-generated string returned by a previous call to `getDisputeInquiryReport` that uniquely identifies this customer dispute claim. If this is not present, a new claim ID will be generated. The caller may provide a `googleClaimId` that was returned by a previous call to `getDisputeInquiryReport` if it is a continuation of the same customer dispute. The claim ID that is populated here or generated will be returned in the response's `googleClaimId` field. It is not valid to provide a `googleClaimId` that wasn't returned by a previous call to `getDisputeInquiryReport`. If this occurs, HTTP 400 Bad Request will be returned.",
          "type": "string"
        },
        "requestOriginator": {
          "description": "**REQUIRED**: Information about the organization or organizational sub-group that originated this request.",
          "$ref": "#/definitions/RequestOriginator"
        }
      }
    },
    "PaymentLookupCriteria": {
      "description": "Container for criteria that can uniquely lookup a payment. One (and only one) member field must be populated.",
      "type": "object",
      "properties": {
        "arnCriteria": {
          "description": "Lookup based on Acquirer Reference Number (ARN).",
          "$ref": "#/definitions/PaymentLookupCriteriaArnCriteria"
        },
        "googleTransactionReferenceNumberCriteria": {
          "description": "Lookup based on the Google Transaction Reference Number.",
          "$ref": "#/definitions/PaymentLookupCriteriaGoogleTransactionReferenceNumberCriteria"
        },
        "captureRequestCriteria": {
          "description": "Lookup based on the original capture request.",
          "$ref": "#/definitions/PaymentLookupCriteriaCaptureRequestCriteria"
        }
      }
    },
    "PaymentLookupCriteriaArnCriteria": {
      "description": "Payment lookup criteria based on Acquirer Reference Number (ARN).",
      "type": "object",
      "properties": {
        "acquirerReferenceNumber": {
          "description": "**REQUIRED**: The Acquirer Reference Number (ARN) that uniquely identifies the payment. Must be 23 digits long.",
          "type": "string"
        },
        "authorizationCode": {
          "description": "**REQUIRED**: The Authorization Code for the transaction.",
          "type": "string"
        }
      }
    },
    "PaymentLookupCriteriaGoogleTransactionReferenceNumberCriteria": {
      "description": "Payment lookup criteria based on the Google-generated Transaction Reference Number.",
      "type": "object",
      "properties": {
        "googleTransactionReferenceNumber": {
          "description": "**REQUIRED**: The Google-generated Transaction Reference Number that uniquely identifies the payment.",
          "type": "string"
        },
        "authorizationCode": {
          "description": "**REQUIRED**: The Authorization Code for the transaction.",
          "type": "string"
        }
      }
    },
    "PaymentLookupCriteriaCaptureRequestCriteria": {
      "description": "Payment lookup criteria based on the original capture request.",
      "type": "object",
      "properties": {
        "captureRequestId": {
          "description": "**REQUIRED**: A unique identifier for this transaction. This is the `requestId` generated by Google during the `capture` call which is being looked up.",
          "type": "string"
        }
      }
    },
    "RequestOriginator": {
      "description": "Information about the organization or organizational sub-group, and optionally the employee, from which this request originated. This allows Google to identify issues or abuse and implement controls at a finer-grained level than the `paymentIntegratorAccountId`. It is especially valuable when the called is an intermediary service provider that sources request from multiple external clients.",
      "type": "object",
      "properties": {
        "organizationId": {
          "description": "**REQUIRED**: An identifier of the company, organization, or organizational group from which this request originated. Must be unique within this `paymentIntegratorAccountId`.",
          "type": "string"
        },
        "organizationDescription": {
          "description": "**REQUIRED**: A human-readable name or description of the organization that can be used to ease communication between employees of Google and the integrator regarding that organization.",
          "type": "string"
        },
        "agentId": {
          "description": "**OPTIONAL**: A unique identifier for the specific agent (employee) of the organization identified by `organizationId` from whom this request originated. Must be unique within this `organizationId`.",
          "type": "string"
        }
      }
    },
    "GetDisputeInquiryReportResponse": {
      "description": "Response payload for the `getDisputeInquiryReport` method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Result of this call.",
          "$ref": "#/definitions/GetDisputeInquiryReportResponseGetDisputeInquiryReportResult"
        }
      }
    },
    "GetDisputeInquiryReportResponseGetDisputeInquiryReportResult": {
      "description": "Result codes for the `getDisputeInquiryReport` method.",
      "type": "object",
      "properties": {
        "success": {
          "description": "The payment was found and a report is provided.",
          "$ref": "#/definitions/GetDisputeInquiryReportResponseGetDisputeInquiryReportResultSuccessDetails"
        },
        "paymentNotFound": {
          "description": "The requested payment was not found.",
          "$ref": "#/definitions/Empty"
        },
        "paymentTooOld": {
          "description": "The requested payment was found, but a report was not provided due to the age of the payment.",
          "$ref": "#/definitions/Empty"
        },
        "orderCannotBeReturned": {
          "description": "The requested payment belongs to an order that exists, but cannot be returned. Reasons include cases where the order was removed at the request of its owner. *Note:* this is a permanent state.",
          "$ref": "#/definitions/Empty"
        },
        "noAdditionalDetails": {
          "description": "The requested payment was found, but a report is not available.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "GetDisputeInquiryReportResponseGetDisputeInquiryReportResultSuccessDetails": {
      "description": "The payment was found and a report is provided.",
      "type": "object",
      "properties": {
        "googleClaimId": {
          "description": "**REQUIRED**: A Google-generated string that uniquely identifies this customer dispute. If `existingGoogleClaimId` was populated in the request, this will be the same value. Otherwise, it will be a newly generated value. This value can be provided in future `getDisputeInquiryReport` requests if they are part of the same customer dispute.",
          "type": "string"
        },
        "report": {
          "description": "**REQUIRED**: Details relevant to the dispute of the payment identified in the request.",
          "$ref": "#/definitions/PurchaseReport"
        }
      }
    },
    "PurchaseReport": {
      "description": "A report containing relevant details of the purchase associated with the requested payment.",
      "type": "object",
      "properties": {
        "customerAccount": {
          "description": "**REQUIRED**: Information regarding the customer and their account.",
          "$ref": "#/definitions/PurchaseReportCustomerAccount"
        },
        "order": {
          "description": "**OPTIONAL**: Information regarding the order on which the payment was made. Not available for all purchase reports.",
          "$ref": "#/definitions/PurchaseReportOrder"
        },
        "payment": {
          "description": "**REQUIRED**: Information regarding the payment. Note: Multiple payments are possible on a single order, but this will only contain info for the payment that was identified in the original request.",
          "$ref": "#/definitions/PurchaseReportPayment"
        }
      }
    },
    "PurchaseReportCustomerAccount": {
      "description": "Information about the customer's account.",
      "type": "object",
      "properties": {
        "customerEmail": {
          "description": "**OPTIONAL**: The email address associated with the customer's Google account.",
          "type": "string"
        },
        "customerName": {
          "description": "**REQUIRED**: The customer's name.",
          "type": "string"
        }
      }
    },
    "PurchaseReportOrder": {
      "description": "Information about the order.",
      "type": "object",
      "properties": {
        "timestamp": {
          "description": "**REQUIRED**: Timestamp of when the order was made.",
          "$ref": "#/definitions/Timestamp"
        },
        "orderId": {
          "description": "**OPTIONAL**: A string uniquely identifying this order.",
          "type": "string"
        },
        "subTotalAmount": {
          "description": "**REQUIRED**: Total amount of this order before tax.",
          "$ref": "#/definitions/Amount"
        },
        "totalAmount": {
          "description": "**REQUIRED**: Total amount of this order including tax.",
          "$ref": "#/definitions/Amount"
        },
        "shippingAddress": {
          "description": "**OPTIONAL**: Shipping address for the physical items in this order.",
          "$ref": "#/definitions/Address"
        },
        "items": {
          "description": "**REQUIRED**: List of items that were part of this order.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/PurchaseReportOrderItem"
          }
        },
        "taxes": {
          "description": "**REQUIRED**: List of taxes that were part of this order. This list may be empty.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/PurchaseReportOrderTax"
          }
        }
      }
    },
    "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"
        }
      }
    },
    "Address": {
      "description": "Structure holding information about a physical address.",
      "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**: Top-level administrative subdivision of this country\" Examples: US state, IT region, CN province, JP prefecture.\"",
          "type": "string"
        },
        "postalCodeNumber": {
          "description": "**OPTIONAL**: Despite the name, postal_code_number values are frequently alphanumeric. Examples: \"94043\", \"SW1W\", \"SW1W 9TQ\".",
          "type": "string"
        },
        "countryCode": {
          "description": "**OPTIONAL**: Customer address country code, expected to be ISO-3166-1 Alpha-2.",
          "type": "string"
        }
      }
    },
    "PurchaseReportOrderItem": {
      "description": "Information about an item in the order.",
      "type": "object",
      "properties": {
        "description": {
          "description": "**OPTIONAL**: A description of the item that was purchased.",
          "type": "string"
        },
        "merchant": {
          "description": "**REQUIRED**: The seller, artist, or maker of the item.",
          "type": "string"
        },
        "quantity": {
          "description": "**OPTIONAL**: The quantity that were ordered of this item. This field will be omitted if integer quantities are not applicable to the product (metered products may have fractional quantities for example).",
          "type": "string",
          "format": "int64"
        },
        "totalPrice": {
          "description": "**OPTIONAL**: The total price of this item.",
          "$ref": "#/definitions/Amount"
        },
        "googleProductName": {
          "description": "**REQUIRED**: Name of the Google product service for the item.",
          "type": "string"
        }
      }
    },
    "PurchaseReportOrderTax": {
      "description": "Information about a tax that applies to this order.",
      "type": "object",
      "properties": {
        "description": {
          "description": "**REQUIRED**: A description of the tax.",
          "type": "string"
        },
        "amount": {
          "description": "**REQUIRED**: The amount of the tax.",
          "$ref": "#/definitions/Amount"
        }
      }
    },
    "PurchaseReportPayment": {
      "description": "Information about the payment.",
      "type": "object",
      "properties": {
        "billingAddress": {
          "description": "**REQUIRED**: Billing address for this payment.",
          "$ref": "#/definitions/Address"
        },
        "amount": {
          "description": "**REQUIRED**: Amount of this payment.",
          "$ref": "#/definitions/Amount"
        },
        "refunds": {
          "description": "**REQUIRED**: List of refunds made to this payment. This list may be empty.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/PurchaseReportPaymentRefund"
          }
        },
        "cardDetails": {
          "description": "Payment details specific to credit & debit card FoPs.",
          "$ref": "#/definitions/PurchaseReportPaymentPaymentCardDetails"
        }
      }
    },
    "PurchaseReportPaymentRefund": {
      "description": "Information about a refund made on a payment.",
      "type": "object",
      "properties": {
        "amount": {
          "description": "**REQUIRED**: The amount refunded.",
          "$ref": "#/definitions/Amount"
        },
        "initiatedTimestamp": {
          "description": "**REQUIRED**: Timestamp of when the refund was initiated.",
          "$ref": "#/definitions/Timestamp"
        }
      }
    },
    "PurchaseReportPaymentPaymentCardDetails": {
      "description": "Payment details specific to credit & debit cards.",
      "type": "object",
      "properties": {
        "authResult": {
          "description": "**REQUIRED**: Result of payment auth.",
          "type": "string",
          "enum": [
            "UNKNOWN_RESULT",
            "APPROVED",
            "DENIED",
            "NOT_ATTEMPTED"
          ]
        }
      }
    },
    "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": {
      }
    },
    "FraudNotificationRequest": {
      "description": "Request object for the Google hosted FraudNotification method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "captureRequestId": {
          "description": "**REQUIRED**: A unique identifier for the capture the potential fraud is associated with. This is the `requestId` generated by Google during the `captureFundsReservation` or `capture` for the original request.",
          "type": "string"
        },
        "fraudType": {
          "description": "**REQUIRED**: This is the type of fraud that may have occurred.",
          "type": "string",
          "enum": [
            "UNKNOWN_TYPE",
            "FRAUDULENT_USE",
            "COUNTERFEIT",
            "LOST",
            "STOLEN",
            "ACCOUNT_TAKEOVER",
            "FRAUDULENT_APPLICATION",
            "CARD_NOT_RECEIVED",
            "OTHER",
            "SCAM",
            "MERCHANT_FRAUD"
          ]
        },
        "rawResult": {
          "description": "**REQUIRED**: Raw result of the fraud notification from the issuer. Used to help inform Google's risk engine and analytics. In fraud code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact fraud code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "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"
        }
      }
    },
    "FraudNotificationResponse": {
      "description": "Response object for the Google hosted FraudNotification method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Result of this call.",
          "$ref": "#/definitions/FraudNotificationResponseFraudNotificationResult"
        }
      }
    },
    "FraudNotificationResponseFraudNotificationResult": {
      "description": "Result codes for the `fraudNotification` method.",
      "type": "object",
      "properties": {
        "success": {
          "description": "Fraud notification was successfully processed.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "RemittanceStatementDetailsRequest": {
      "description": "Request object for the remittance statement detail method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "statementId": {
          "description": "**REQUIRED**: Request ID of the statement notification.",
          "type": "string"
        },
        "eventOffset": {
          "description": "**OPTIONAL**: Return events starting at this offset. This should be set to the `nextEventOffset` if one was returned or left unspecified if this is the first request. If `eventOffset` is zero, events will be returned starting with the first event. If this is two, events will be returned starting with the third event. If unspecified, `eventOffset` will be assumed to be zero. *Note:* If `eventOffset` exceeds the total number of events (i.e. `eventOffset` >= `totalEvents`) then no events will be returned. ",
          "type": "integer",
          "format": "int32"
        },
        "numberOfEvents": {
          "description": "**OPTIONAL**: Number of events to show per page. If unspecified or greater than 1000, this will be 1000.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "RemittanceStatementDetailsResponse": {
      "description": "Response object for the remittance statement detail method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "remittanceStatementSummary": {
          "description": "**REQUIRED**: Summary of this remittance statement.",
          "$ref": "#/definitions/RemittanceStatementSummary"
        },
        "eventOffset": {
          "description": "**REQUIRED**: The event offset of this response.",
          "type": "integer",
          "format": "int32"
        },
        "nextEventOffset": {
          "description": "**OPTIONAL**: The offset of the next event to return. If unspecified there are no more events to retrieve for this statement.",
          "type": "integer",
          "format": "int32"
        },
        "totalWithholdingTaxes": {
          "description": "**REQUIRED**: The sum of all taxes withheld for this statement.",
          "$ref": "#/definitions/Amount"
        },
        "captureEvents": {
          "description": "**REQUIRED**: Set of capture events. *Note:* this is a set, it has no defined order. ",
          "type": "array",
          "items": {
            "$ref": "#/definitions/RemittanceStatementDetailsResponseEvent"
          }
        },
        "refundEvents": {
          "description": "**REQUIRED**: Set of refund events. *Note:* this is a set, it has no defined order. ",
          "type": "array",
          "items": {
            "$ref": "#/definitions/RemittanceStatementDetailsResponseEvent"
          }
        },
        "reverseRefundEvents": {
          "description": "**OPTIONAL**: Set of reverse refund events. *Note:* this is a set, it has no defined order. ",
          "type": "array",
          "items": {
            "$ref": "#/definitions/RemittanceStatementDetailsResponseEvent"
          }
        },
        "chargebackEvents": {
          "description": "**OPTIONAL**: Set of chargeback events. *Note:* this is a set, it has no defined order. ",
          "type": "array",
          "items": {
            "$ref": "#/definitions/RemittanceStatementDetailsResponseEvent"
          }
        },
        "reverseChargebackEvents": {
          "description": "**OPTIONAL**: Set of reverse chargeback events. *Note:* this is a set, it has no defined order. ",
          "type": "array",
          "items": {
            "$ref": "#/definitions/RemittanceStatementDetailsResponseEvent"
          }
        },
        "adjustmentEvents": {
          "description": "**OPTIONAL**: Set of adjustment events. Adjustment events may be added at Google's discretion to reconcile billing discrepancies, for example if fees were undercomputed for a set of prior transactions, an adjustment may be used to make the integrator whole. *Note:* this is a set, it has no defined order. ",
          "type": "array",
          "items": {
            "$ref": "#/definitions/RemittanceStatementDetailsResponseEvent"
          }
        }
      }
    },
    "RemittanceStatementSummary": {
      "description": "Summary object about a remittance statement.",
      "type": "object",
      "properties": {
        "statementDate": {
          "description": "**REQUIRED**: Date (in America\/Los Angeles) that this statement was created.",
          "$ref": "#/definitions/Timestamp"
        },
        "billingPeriod": {
          "description": "**REQUIRED**: The billing period this statement covers.",
          "$ref": "#/definitions/BillingPeriod"
        },
        "dateDue": {
          "description": "**OPTIONAL**: The date that the remittance is due. This is represented as a Timestamp. It is a date (and therefore will always start at the first millisecond of the day in the billing timezone). This is set as long as the `totalDueByIntegrator` is greater than 0.",
          "$ref": "#/definitions/Timestamp"
        },
        "totalDueByIntegrator": {
          "description": "**REQUIRED**: This value is always positive.",
          "$ref": "#/definitions/Amount"
        },
        "totalEvents": {
          "description": "**REQUIRED**: Total number of events in this statement.",
          "type": "integer",
          "format": "int32"
        },
        "totalProcessedAmount": {
          "description": "**TO_BE_REQUIRED**: This value is the sum of all the event charges in this statement.",
          "$ref": "#/definitions/Amount"
        },
        "totalDirectTaxAmount": {
          "description": "**OPTIONAL**: This value is the sum of all direct taxes applied to all events in this statement. This value is populated for integrators on a contractual basis.",
          "$ref": "#/definitions/Amount"
        },
        "totalFeesAmount": {
          "description": "**TO_BE_REQUIRED**: This value is the sum of all fees applied for all events in this statement.",
          "$ref": "#/definitions/Amount"
        },
        "totalWithholdingTaxAmount": {
          "description": "**OPTIONAL**: This value is the total withholding tax applied for this statement. This value is populated for integrators on a contractual basis.",
          "$ref": "#/definitions/Amount"
        },
        "totalPresentmentAmounts": {
          "description": "**REQUIRED**: These are the total amounts presented to the customer. There will be one entry for each presentment currency.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Amount"
          }
        }
      }
    },
    "BillingPeriod": {
      "description": "Billing period of this statement.",
      "type": "object",
      "properties": {
        "startDate": {
          "description": "**REQUIRED**: The start date of the billing period. This is represented as a Timestamp. It is a date (and therefore will always start at the first millisecond of the day in the billing timezone). This is the first millisecond of the day of the billing period, 00:00:00.000",
          "$ref": "#/definitions/Timestamp"
        },
        "endDate": {
          "description": "**REQUIRED**: The end date of the billing period. This is represented as a Timestamp. This is the last millisecond of the last day of the billing period, 23:59:59.999",
          "$ref": "#/definitions/Timestamp"
        }
      }
    },
    "RemittanceStatementDetailsResponseEvent": {
      "description": "Structure representing a single event included in a remittance statement.",
      "type": "object",
      "properties": {
        "eventRequestId": {
          "description": "**REQUIRED**: For capture or refund events, this will be the `requestId` that Google sends with the request. For reverse refund, chargeback and reverse chargeback events, this will be the `requestId` that the Payment Integrator sends with the notification of that event. For adjustments, this will be a unique ID assigned by Google to the adjustment event.",
          "type": "string"
        },
        "eventCharge": {
          "description": "**REQUIRED**: If this value is negative then this represents monetary value moving from Google to the payment integrator. If this is positive it is money from the payment integrator due to Google. For example, capture transactions will always be positive, and refund transactions will always be negative. Reverse refund and reverse chargeback events will always be positive. Chargeback events will always be negative. This value is in [micros]({{glossary_path}}#micros \"What are micros?\").",
          "$ref": "#/definitions/Amount"
        },
        "eventFee": {
          "description": "**REQUIRED**: If this value is negative then this represents monetary value moving from Google to the payment integrator. If this is positive it is money from the payment integrator due to Google. For example, if an agreement says that Google will pay 1% of the `transactionCharge` to the payment integrator, and will reverse that 1% upon refund of that transaction, then the capture fee will be negative and upon refund the refund fee will be positive. This value is in [micros]({{glossary_path}}#micros \"What are micros?\").",
          "$ref": "#/definitions/Amount"
        },
        "eventTax": {
          "description": "**REQUIRED**: If this value is negative then this represents monetary value moving from Google to the payment integrator. If this is positive it is money from the payment integrator due to Google. This value is the tax applied directly to this event, e.g. sales tax.",
          "$ref": "#/definitions/Amount"
        },
        "presentmentChargeAmount": {
          "description": "**REQUIRED**: Transaction amount in the presentment (aka transaction) currency prior to foreign exchange. This field follows the same sign convention as the `eventCharge` field. This value is in [micros]({{glossary_path}}#micros \"What are micros?\"). *Note:* This will be required in version 1.1 ",
          "$ref": "#/definitions/Amount"
        },
        "nanoExchangeRate": {
          "description": "**REQUIRED**: The exchange rate used in converting the presentment amount to the settlement (invoice) amount, expressed in nano basis points. This value is in *nano* basis points (1 basis point = .0001 = .01%). That is, to get the exchange rate, divide this field by 10^13.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "AcceptRemittanceStatementRequest": {
      "description": "Request object for the `acceptRemittanceStatement` method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "statementId": {
          "description": "**REQUIRED**: Request ID of the statement notification.",
          "type": "string"
        }
      }
    },
    "AcceptRemittanceStatementResponse": {
      "description": "Response object for the `acceptRemittanceStatement` method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Result of the AcceptRemittanceStatement call.",
          "$ref": "#/definitions/AcceptRemittanceStatementResponseAcceptRemittanceStatementResult"
        }
      }
    },
    "AcceptRemittanceStatementResponseAcceptRemittanceStatementResult": {
      "description": "Result of this remittance acceptance.",
      "type": "object",
      "properties": {
        "success": {
          "description": "Remittance statement accepted successfully.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "UpdateAssociatedAccountRequest": {
      "description": "Request object for the updateAssociatedAccount method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "googlePaymentToken": {
          "description": "**REQUIRED**: This is the token that both companies will use to identify the account to be updated.",
          "$ref": "#/definitions/GooglePaymentToken"
        },
        "updateSequenceTimestamp": {
          "description": "**REQUIRED**: A timestamp describing when this update request was sent. This timestamp is compared to the updateSequenceTimestamp of the current Google record. Updates with an updateSequenceTimestamp older than the current Google record are dropped.",
          "$ref": "#/definitions/Timestamp"
        },
        "accountInfo": {
          "description": "A complete snapshot of the account information.",
          "$ref": "#/definitions/AccountInfo"
        },
        "accountClosureInfo": {
          "description": "Information about the closure of a user account held with the integrator. Returning this value will cause the user\u2019s account to be closed with Google. Closed accounts may not be re-opened via UpdateAssociatedAccount. The user will be forced to add a new account by going through the association flow again.",
          "$ref": "#/definitions/AccountClosureInfo"
        }
      }
    },
    "GooglePaymentToken": {
      "description": "Describes a GooglePaymentToken (GPT), including the token and the issuer of the backing user account.",
      "type": "object",
      "properties": {
        "issuerId": {
          "description": "**REQUIRED**: The identifier of the issuer of the backing user account.",
          "$ref": "#/definitions/IssuerId"
        },
        "token": {
          "description": "**REQUIRED**: This is the token that both companies will use to identify the account for purchases between each other.",
          "type": "string"
        }
      }
    },
    "IssuerId": {
      "description": "A unique identifier for an issuer of user accounts.",
      "type": "object",
      "properties": {
        "value": {
          "description": "**REQUIRED**: The string value of the identifier. This unique identifier is defined by Google. Google will share a list with the identifiers for all external issuers available through the payment integrator.",
          "type": "string"
        }
      }
    },
    "AccountInfo": {
      "description": "Details about a change to a user's account information.",
      "type": "object",
      "properties": {
        "accountStatus": {
          "description": "**REQUIRED**: The status of the user\u2019s account with the integrator.",
          "type": "string",
          "enum": [
            "ACCOUNT_STATUS_UNSPECIFIED",
            "ACCOUNT_AVAILABLE",
            "ACCOUNT_ON_HOLD"
          ]
        },
        "transactionLimits": {
          "description": "**REQUIRED**: Defines user scoped transaction limits.",
          "$ref": "#/definitions/TransactionLimits"
        },
        "accountIds": {
          "description": "**REQUIRED**: Defines a nickname for the user account.",
          "$ref": "#/definitions/AccountIds"
        }
      }
    },
    "TransactionLimits": {
      "description": "Defines transaction limits for the enclosing entity.",
      "type": "object",
      "properties": {
        "transactionMaxLimit": {
          "description": "**REQUIRED**: Defines the value and currency of a maximum per transaction limit for the enclosing type, or states that no maximum per transaction limit exists.",
          "$ref": "#/definitions/TransactionLimit"
        }
      }
    },
    "TransactionLimit": {
      "description": "Defines a transaction limit amount or the absence of a limit.",
      "type": "object",
      "properties": {
        "limitAmount": {
          "description": "The value of the allowable transaction. This is used to determine whether or not the user should be given this integrator as an option to process a specific transaction. *Note:* that either this value or the `noLimit` can be present, never both.",
          "$ref": "#/definitions/Amount"
        },
        "noLimit": {
          "description": "Indicates that there is no transaction limit. This is used to determine whether or not the user should be given this integrator as an option to process a specific transaction. *Note:* that either this value or the `limitAmount` can be present, never both.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "AccountIds": {
      "description": "Identifiers of the user's account.",
      "type": "object",
      "properties": {
        "partialAccountNickname": {
          "description": "String by which the user knows this account for display purposes. This is a suffix of the account nickname. For example last four digits of a phone number. Google will indicate in the user interface that this is only a suffix of the nickname. *Caution:* This value can be PII, but must never be SPII. This value will be displayed in UIs like the purchase flow to allow the user to distinguish between payment methods. *Note:* that either this value or the `fullAccountNickname` must be present, never both.",
          "type": "string"
        },
        "fullAccountNickname": {
          "description": "String by which the user knows this account for display purposes. Unlike `partialAccountNickname` this is the full account nickname. For example `56565-56501` for a phone number or sally@sample-email.com for an email identity. *Caution:* This value can be PII, but must never be SPII. This value will be displayed in UIs like the purchase flow to allow the user to distinguish between payment methods. *Note:* that either this value or the `accountNickname` must be present, never both.",
          "type": "string"
        },
        "accountAlias": {
          "description": "**OPTIONAL**: An additional account alias the user associates with their vendor account. These are used for Google risk to understand account re-use and account relationships and Google customer operation agents to help customers diagnose issues. These aliases should be user recognizable (for example the user knows this alias because it appears on their statement or appears on the website after they log into the account).",
          "$ref": "#/definitions/AccountAlias"
        }
      }
    },
    "AccountAlias": {
      "description": "Defines the type and value of an alias that a user associates with their vendor account.",
      "type": "object",
      "properties": {
        "phoneNumber": {
          "description": "The phone number the user has on file with the integrator.",
          "$ref": "#/definitions/PhoneNumber"
        },
        "emailAddress": {
          "description": "The email address the user has on file with the integrator.",
          "type": "string"
        }
      }
    },
    "PhoneNumber": {
      "description": "An E.164 formatted phone number. Examples include +14035551111 and +918067218000. This will always lead with a + and include only numbers afterwards (no dashes).",
      "type": "object",
      "properties": {
        "value": {
          "description": "**REQUIRED**: This is a E.164 formatted phone number. Examples include +14035551111 and +918067218000. This will always lead with a + and include only numbers afterwards (no dashes).",
          "type": "string"
        }
      }
    },
    "AccountClosureInfo": {
      "description": "Details about the closure of a user's account.",
      "type": "object",
      "properties": {
        "accountTakenOver": {
          "description": "The user\u2019s account held with the integrator has been closed. The integrator suspects the user's account has been taken over.",
          "$ref": "#/definitions/Empty"
        },
        "fraud": {
          "description": "The user\u2019s account held with the integrator has been closed because of fraud.",
          "$ref": "#/definitions/Empty"
        },
        "closedByUser": {
          "description": "The account was closed at the request of the user.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "UpdateAssociatedAccountResponse": {
      "description": "Response object for the updateAssociatedAccount method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Contains the result of the request.",
          "$ref": "#/definitions/UpdateAssociatedAccountResponseUpdateAssociatedAccountResult"
        }
      }
    },
    "UpdateAssociatedAccountResponseUpdateAssociatedAccountResult": {
      "description": "Result codes for the account update.",
      "type": "object",
      "properties": {
        "success": {
          "description": "The 'UpdateAssociatedAccountRequest' was received successfully by Google. The account will be updated.",
          "$ref": "#/definitions/Empty"
        },
        "missingAccountAliasType": {
          "description": "A required AccountAlias type is missing",
          "$ref": "#/definitions/UpdateAssociatedAccountResponseUpdateAssociatedAccountResultMissingAccountAliasType"
        }
      }
    },
    "UpdateAssociatedAccountResponseUpdateAssociatedAccountResultMissingAccountAliasType": {
      "description": "Details about a missing AccountAlias type.",
      "type": "object",
      "properties": {
        "missingAccountAliasType": {
          "description": "**REQUIRED**: If a required AccountAlias type was not provided, the field name corresponding to that type will be given here.",
          "type": "string"
        }
      }
    },
    "CaptureResultNotificationRequest": {
      "description": "Request object for the `captureResultNotification` method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "captureRequestId": {
          "description": "**REQUIRED**: A unique identifier for this transaction. This is the `requestId` generated by Google during the `capture` or `asynchronousCapture` call which this request is associated with. This is a string with a max length of 100 characters and contains only the characters \"a-z\", \"A-Z\", \"0-9\", \":\", \"-\", and \"_\".",
          "type": "string"
        },
        "result": {
          "description": "**REQUIRED**: Result of this capture.",
          "$ref": "#/definitions/CaptureResultNotificationRequestCaptureResult"
        }
      }
    },
    "CaptureResultNotificationRequestCaptureResult": {
      "description": "Information about the final result of a capture.",
      "type": "object",
      "properties": {
        "success": {
          "description": "The capture was successful",
          "$ref": "#/definitions/Empty"
        },
        "chargeUnderLimit": {
          "description": "Requested capture amount does not meet the integrator's minimum per-transaction amount. If this code is used, populate the `transactionMinLimit` field with the minimum transaction amount for user messaging purposes.",
          "$ref": "#/definitions/ChargeUnderLimit"
        },
        "chargeExceedsTransactionLimit": {
          "description": "Requested capture amount exceeds the integrator's maximum per-transaction limit. If this code is used, populate the `transactionMaxLimit` field with the transaction limit for user messaging purposes.",
          "$ref": "#/definitions/ChargeExceedsTransactionLimit"
        },
        "chargeExceedsDailyLimit": {
          "description": "User's account cannot be used for purchases right now as it has exceeded its daily limit.",
          "$ref": "#/definitions/ChargeExceedsDailyLimit"
        },
        "chargeExceedsMonthlyLimit": {
          "description": "User's account cannot be used for purchases right now as it has exceeded its monthly limit.",
          "$ref": "#/definitions/ChargeExceedsMonthlyLimit"
        },
        "insufficientFunds": {
          "description": "This account does not have sufficient funds to guarantee this capture.",
          "$ref": "#/definitions/InsufficientFunds"
        },
        "accountClosed": {
          "description": "User's account held with the integrator has been closed. This return value will cause the user's instrument to be closed with Google. The user will be forced to add a new instrument.",
          "$ref": "#/definitions/AccountClosed"
        },
        "accountClosedAccountTakenOver": {
          "description": "User's account with the integrator has been closed, suspected account take over. This return value will cause the user's instrument to be closed with Google. The user will be forced to add a new instrument.",
          "$ref": "#/definitions/AccountClosedAccountTakenOver"
        },
        "accountClosedFraud": {
          "description": "User's account held with the integrator has been closed because of fraud. This return value will cause the user's instrument to be closed with Google. The user will be forced to add a new instrument.",
          "$ref": "#/definitions/AccountClosedFraud"
        },
        "accountOnHold": {
          "description": "User's account is on hold.",
          "$ref": "#/definitions/AccountOnHold"
        },
        "captureRequestExpired": {
          "description": "It took too long for the integrator to capture the user's funds. Google will treat this decline as a final state, so the integrator must ensure that the user's funds do not get captured later or that the user gets automatically refunded if the capture ended up succeeding.",
          "$ref": "#/definitions/CaptureRequestExpired"
        },
        "invalidPin": {
          "description": "The user supplied an invalid PIN.",
          "$ref": "#/definitions/InvalidPin"
        },
        "osLockFailed": {
          "description": "This payment flow requires an OS lock challenge and the user failed to unlock the device.",
          "$ref": "#/definitions/OsLockFailed"
        },
        "pinEntryAttemptsExhausted": {
          "description": "This payment flow requires user PIN entry. The user failed PIN entry enough times that they ran out of retries.",
          "$ref": "#/definitions/PinEntryAttemptsExhausted"
        },
        "userExitedPaymentFlow": {
          "description": "User canceled the whole payment attempt (either at the OS lock or at the PIN entry screen).",
          "$ref": "#/definitions/UserExitedPaymentFlow"
        },
        "monthlyFrequencyLimitExceeded": {
          "description": "User's account cannot be used for purchases right now as it has exceeded its monthly transaction attempt limit.",
          "$ref": "#/definitions/MonthlyFrequencyLimitExceeded"
        },
        "declinedByIssuer": {
          "description": "This decline code should never be used in steady-state. It is meant as a temporary catch-all code to use when the integrator encounters an unknown decline code from the underlying issuer of the user's instrument. This result code can be used while the integrator determines a more appropriate result code to use or negotiates the addition of a new result code to this specification. Importantly, this decline code is very much a *real* decline. It is a permanent decline as far as Google is concerned. If the integrator returns this, it is up to them to track down what the issuer's code really means and refund the user if it turns out the code actually meant `SUCCESS`. If this decline code is used for the same underlying decline code for more than a certain number of days, Google will treat it as a bug and track it accordingly with respect to any contractual penalties around fixing bugs. *Note:* even after the integrator maps the unknown issuer decline code to an appropriate result code going forward, it is important that they still return `DECLINED_BY_ISSUER` idempotently for any capture request that was originally declined with a `DECLINED_BY_ISSUER` result.",
          "$ref": "#/definitions/DeclinedByIssuer"
        },
        "riskDeclined": {
          "description": "The transaction was declined due to a risk check on the integrator's side. This is a permanent failure for this payment, but does not cause the user's instrument to be closed at Google.",
          "$ref": "#/definitions/RiskDeclined"
        },
        "upcomingTransactionNotificationExpired": {
          "description": "The notification that was sent to the user for a recurring mandate payment was expired.",
          "$ref": "#/definitions/UpcomingTransactionNotificationExpired"
        },
        "googlePaymentTokenInvalidatedByUser": {
          "description": "The account is active, but the GPT has been invalidated by the user on the integrator's side. Returning this value will cause the user's instrument to be disabled by Google. The user will be forced to go through the association flow again to add a new GPT to their instrument.",
          "$ref": "#/definitions/GooglePaymentTokenInvalidatedByUser"
        }
      }
    },
    "ChargeUnderLimit": {
      "description": "This request's `amount` does not meet the minimum transaction amount.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        },
        "minimumTransactionLimit": {
          "description": "**OPTIONAL**: This is the minimum amount the user could spend on a transaction. Note: this field will transition to REQUIRED in a future version of the API.",
          "$ref": "#/definitions/Amount"
        }
      }
    },
    "ChargeExceedsTransactionLimit": {
      "description": "This payment request's `amount` exceeds per-transaction limit. If this code is used populate the transaction_limit field for user messaging purposes.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        },
        "transactionLimit": {
          "description": "**REQUIRED**: This is the maximum amount the user could spend on a transaction. The `currencyCode` of `transactionLimit` must match the `currencyCode` of the request.",
          "$ref": "#/definitions/Amount"
        }
      }
    },
    "ChargeExceedsDailyLimit": {
      "description": "This account cannot be used for purchases right now as it has exceeded its daily `amount` limits.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "ChargeExceedsMonthlyLimit": {
      "description": "This account cannot be used for purchases right now as it has exceeded its monthly `amount` limits.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "InsufficientFunds": {
      "description": "This account does not have sufficient funds to guarantee this capture.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        },
        "currentBalance": {
          "description": "**OPTIONAL**: This is the current available balance for the account. If provided, this value will be included in user-facing messaging.",
          "$ref": "#/definitions/Amount"
        }
      }
    },
    "AccountClosed": {
      "description": "The user's account held with the integrator has been closed.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "AccountClosedAccountTakenOver": {
      "description": "The user's account with the integrator has been closed, suspected account take over.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "AccountClosedFraud": {
      "description": "The user's account held with the integrator has been closed because of fraud.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "AccountOnHold": {
      "description": "The account is on hold.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "CaptureRequestExpired": {
      "description": "It took too long for the integrator to capture the user's funds. Google will treat this decline as a final state, so the integrator must ensure that the user's funds do not get captured later or that the user gets automatically refunded if the capture ended up succeeding.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a rawcode. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "InvalidPin": {
      "description": "The user supplied an invalid PIN.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a rawcode. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "OsLockFailed": {
      "description": "This payment flow requires an OS lock challenge and the user failed to unlock the device.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a rawcode. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "PinEntryAttemptsExhausted": {
      "description": "This payment flow requires user PIN entry. The user failed PIN entry enough times that they ran out of retries.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a rawcode. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "UserExitedPaymentFlow": {
      "description": "User canceled the whole payment attempt.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a rawcode. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "MonthlyFrequencyLimitExceeded": {
      "description": "User's account cannot be used for purchases right now as it has exceeded its monthly transaction attempt limit.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a rawcode. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "DeclinedByIssuer": {
      "description": "This decline code should never be used in steady-state. It is meant as a temporary catch-all code to use when the integrator encounters an unknown decline code from the underlying issuer of the user's instrument. This result code can be used while the integrator determines a more appropriate result code to use or negotiates the addition of a new result code to this specification.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a rawcode. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "RiskDeclined": {
      "description": "The transaction was declined due to a risk check on the integrator's side.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "UpcomingTransactionNotificationExpired": {
      "description": "The notification that was sent to the user for a recurring mandate payment was expired.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a rawcode. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "GooglePaymentTokenInvalidatedByUser": {
      "description": "The account is active, but the GPT has been invalidated by the user on the integrator's side.",
      "type": "object",
      "properties": {
        "rawResult": {
          "description": "**OPTIONAL**: Raw result of this event. Used to help inform Google's risk engine and analytics. In decline code\u2013mapping situations, data is sometimes lost. The integrator can choose to give Google a raw code. For example, a credit card gateway (the integrator) may use this field to communicate to Google the exact decline code that was received from the VISA network. In that case, the `scope` would be \"visa\" and the `rawCode` would be whatever the VISA network returned.",
          "$ref": "#/definitions/RawResult"
        }
      }
    },
    "CaptureResultNotificationResponse": {
      "description": "Response object for the `captureResultNotification` method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Result of this call.",
          "$ref": "#/definitions/CaptureResultNotificationResponseCaptureResultNotificationResult"
        }
      }
    },
    "CaptureResultNotificationResponseCaptureResultNotificationResult": {
      "description": "Result codes for the `captureResultNotification` method.",
      "type": "object",
      "properties": {
        "success": {
          "description": "Capture result notification was successfully processed.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "AuthenticationResultNotificationRequest": {
      "description": "Request object for the `authenticationResultNotification` method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/RequestHeader"
        },
        "authenticationRequestId": {
          "description": "**REQUIRED**: Reflected back to Google by the payment integrator. This is the ID of this particular authentication session. It was originally generated by Google and sent to the payment integrator at the start of the authentication flow.",
          "type": "string"
        },
        "result": {
          "description": "**REQUIRED**: The result of the authentication attempt.",
          "$ref": "#/definitions/AuthenticationResult"
        }
      }
    },
    "AuthenticationResult": {
      "description": "The result of the authentication attempt.",
      "type": "object",
      "properties": {
        "success": {
          "description": "The user was authenticated successfully.",
          "$ref": "#/definitions/Empty"
        },
        "authenticationFailed": {
          "description": "The user was not authenticated and the current flow should be aborted or authentication should be retried.",
          "$ref": "#/definitions/Empty"
        }
      }
    },
    "AuthenticationResultNotificationResponse": {
      "description": "Response object for the `authenticationResultNotification` method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Result of this call.",
          "$ref": "#/definitions/AuthenticationResultNotificationResponseAuthenticationResultNotificationResult"
        }
      }
    },
    "AuthenticationResultNotificationResponseAuthenticationResultNotificationResult": {
      "description": "Result codes for the `authenticationResultNotification` method.",
      "type": "object",
      "properties": {
        "success": {
          "description": "The authentication result was successfully processed.",
          "$ref": "#/definitions/Empty"
        }
      }
    }
  }
}
