{
  "swagger": "2.0",
  "info": {
    "title": "Google Standard Payments Payment Integrator Hosted Redirect FOP API",
    "description": "This includes services hosted by Payment Integrators for Redirect FOPs.",
    "version": "v1"
  },
  "host": "www.integratorhost.example.com",
  "basePath": "/integrator-base-path",
  "schemes": ["https"],
  "paths": {
    "/v1/echo": {
      "post": {
        "tags": ["payment_integrator_redirect_fop_api"],
        "operationId": "Echo",
        "description": "Echos back a string sent from the client. If the endpoint encounters an error while processing the request, the response body from this endpoint should be of type `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"G1MQ0YERJ0Q7LPM\", \"requestTimestamp\": { \"epochMillis\": \"1481899949606\" }, \"paymentIntegratorAccountId\": \"InvisiCashUSA_USD\" }, \"clientMessage\": \"Client echo message\" } An example success response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\":\"1481899950236\" } }, \"clientMessage\": \"Client echo message\", \"serverMessage\": \"Debug ID 12345\" } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/EchoRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/EchoResponse"
            }
          }
        }
      }
    },
    "/v1/payment-integrator-redirect/asynchronousRefund": {
      "post": {
        "tags": ["payment_integrator_redirect_fop_api"],
        "operationId": "AsynchronousRefund",
        "description": "Refunds a portion of or the entire redirect payment. The `requestId` within the header is the idempotency key, which uniquely identifies this transaction. This initiates a request to refund funds from a redirect payment. The amount refunded can be equal to or smaller than the remaining payment amount on the transaction. Multiple partial refunds are allowed by calling `AsynchronousRefund` multiple times with different `requestId` values within the header. The final result of the refund is supplied by a call to `refundResultNotification`. If the endpoint encounters an error while processing the request, the response body from this endpoint should be of type `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"qierozie12345\", \"requestTimestamp\": { \"epochMillis\": \"1481899949606\" }, \"paymentIntegratorAccountId\": \"InvisiRedirectPaymentUSA_USD\" }, \"captureRequestId\": \"cmVxdWVzdDE\", \"refundAmount\": { \"amountMicros\": \"109900000\", \"currencyCode\": \"INR\" } } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": \"1481899949611\" } }, \"result\": { \"acknowledged\": {} } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/AsynchronousRefundRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/AsynchronousRefundResponse"
            }
          }
        }
      }
    },
    "/v1/payment-integrator-redirect/generateRedirectPaymentUrl": {
      "post": {
        "tags": ["payment_integrator_redirect_fop_api"],
        "operationId": "GenerateRedirectPaymentUrl",
        "description": "Provides basic information about this transaction to allow the integrator to create a redirect URL. The URL returned from a successful request will be sent to the user and the user's browser\/device will be redirected to that URL. If the endpoint encounters an error while processing the request, the response body from this endpoint should be of type `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"cmVxdWVzdDE\", \"requestTimestamp\": { \"epochMillis\": \"1481899949606\" }, \"paymentIntegratorAccountId\": \"InvisiRedirectPaymentUSA_USD\" }, \"transactionAmount\": { \"amountMicros\": \"109900000\", \"currencyCode\": \"INR\" }, \"transactionDescription\": \"Play Movies\", \"formOfPayment\": { \"issuerId\": { \"value\": \"123ABC\" } }, \"callbackUrl\": \"https:\/\/example.google.com\/return\/url\/\" } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": \"1481899949611\" } }, \"result\": { \"success\": { \"redirectDetails\": { \"getMethod\": { \"url\": \"https:\/\/example.com\/target\/redirect\/url\/\" } } } } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/GenerateRedirectPaymentUrlRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/GenerateRedirectPaymentUrlResponse"
            }
          }
        }
      }
    },
    "/v1/payment-integrator-redirect/getRedirectPaymentStatus": {
      "post": {
        "tags": ["payment_integrator_redirect_fop_api"],
        "operationId": "GetRedirectPaymentStatus",
        "description": "Get completion details about a specific redirect payment. If the user never redirected back to Google or there was a problem with the redirect, this API will be called to obtain the final result of a payment. If the endpoint encounters an error while processing the request, the response body from this endpoint should be of type `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"ak31kzZk3l19\", \"requestTimestamp\": { \"epochMillis\": \"1481899949606\" }, \"paymentIntegratorAccountId\": \"InvisiRedirectPaymentUSA_USD\" }, \"redirectRequestId\": \"cmVxdWVzdDE\" } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": \"1481899949611\" } }, \"result\": { \"success\": {} }, \"formOfPayment\": { \"issuerId\": { \"value\": \"123ABC\" } } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/GetRedirectPaymentStatusRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/GetRedirectPaymentStatusResponse"
            }
          }
        }
      }
    },
    "/v1/remittanceStatementNotification": {
      "post": {
        "tags": ["payment_integrator_redirect_fop_api"],
        "operationId": "RemittanceStatementNotification",
        "description": "Notifies the integrator of a new remittance statement. Statement notifications occur every time a new statement is raised that represents money that Google will pay the integrator or the money that the integrator owes Google. If the integrator returns a success, then it acknowledges receipt of the statement. The `requestId` is also the statement Id (used elsewhere). The `requestId` within the header is the idempotency key and uniquely identifies this statement. If the endpoint encounters an error while processing the request, the response body from this endpoint should be of type `ErrorResponse`. An example request looks like: { \"requestHeader\": { \"protocolVersion\": { \"major\": 1 }, \"requestId\": \"0123434-statement-abc\", \"requestTimestamp\": { \"epochMillis\": \"1502632800000\" }, \"paymentIntegratorAccountId\": \"InvisiCashUSA_USD\" }, \"remittanceStatementSummary\": { \"statementDate\": { \"epochMillis\": \"1502521200000\" }, \"billingPeriod\": { \"startDate\": { \"epochMillis\": \"1502434800000\" }, \"endDate\": { \"epochMillis\": \"1502434800000\" } }, \"dateDue\": { \"epochMillis\": \"1502348400000\" }, \"totalDueByIntegrator\": { \"amountMicros\": \"1076000000\", \"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 } } An example response looks like: { \"responseHeader\": { \"responseTimestamp\": { \"epochMillis\": \"1502632802000\" } }, \"result\": { \"accepted\": {} } } ",
        "parameters": [
          {
            "name": "body",
            "description": "The request body.",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/RemittanceStatementNotificationRequest"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/RemittanceStatementNotificationResponse"
            }
          }
        }
      }
    }
  },
  "definitions": {
    "EchoRequest": {
      "description": "Request object for the echo method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2RequestHeader"
        },
        "clientMessage": {
          "description": "**REQUIRED**: Message to echo in the response.",
          "type": "string"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2RequestHeader": {
      "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/GoogleStandardpaymentsTypesV2Timestamp"
        },
        "protocolVersion": {
          "description": "**REQUIRED**: The version of this request.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Version"
        },
        "paymentIntegratorAccountId": {
          "description": "**REQUIRED**: Identifies a unique account with contractual constraints.",
          "type": "string"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2Timestamp": {
      "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"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2Version": {
      "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/GoogleStandardpaymentsTypesV2ResponseHeader"
        },
        "clientMessage": {
          "description": "**REQUIRED**: Message received in the request.",
          "type": "string"
        },
        "serverMessage": {
          "description": "**OPTIONAL**: Server message, independent of the `clientMessage` being echoed.",
          "type": "string"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2ResponseHeader": {
      "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/GoogleStandardpaymentsTypesV2Timestamp"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2ErrorResponse": {
      "description": "Error Response object for all methods.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2ResponseHeader"
        },
        "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/GoogleStandardpaymentsTypesV2ErrorResponseErrorResponseResult"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2ErrorResponseErrorResponseResult": {
      "description": "Error Codes",
      "type": "object",
      "properties": {
        "invalidApiVersion": {
          "description": "Used if the request's API version is unsupported. Advised HTTP Code: 400",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2ErrorResponseInvalidApiVersion"
        },
        "invalidPayloadSignature": {
          "description": "Used if the signature of the payload is to an unknown or inactive key. Advised HTTP Code: 401",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2ErrorResponseInvalidPayloadSignature"
        },
        "invalidPayloadEncryption": {
          "description": "Used if the encryption of the payload is to an unknown or inactive key. Advised HTTP Code: 400",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2ErrorResponseInvalidPayloadEncryption"
        },
        "requestTimestampOutOfRange": {
          "description": "Used if the request_timestamp is not \u00B1 60s of now. Advised HTTP Code: 400",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2ErrorResponseRequestTimestampOutOfRange"
        },
        "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/GoogleStandardpaymentsTypesV2ErrorResponseInvalidIdentifier"
        },
        "idempotencyViolation": {
          "description": "Used if the request violates the idempotency requirements for the request. Advised HTTP Code: 412",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2ErrorResponseIdempotencyViolation"
        },
        "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/GoogleStandardpaymentsTypesV2ErrorResponseInvalidFieldValue"
        },
        "missingRequiredField": {
          "description": "Used if a field that is required is unset in the request. Advised HTTP Code: 400",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2ErrorResponseMissingRequiredField"
        },
        "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/GoogleStandardpaymentsTypesV2ErrorResponsePreconditionViolation"
        },
        "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/GoogleStandardpaymentsTypesV2ErrorResponseUserActionInProgress"
        },
        "invalidDecryptedRequest": {
          "description": "Used if the request payload could be decrypted, but the resulting message could not be parsed. Advised HTTP Code: 400",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2ErrorResponseInvalidDecryptedRequest"
        },
        "forbidden": {
          "description": "Access to the requested resource is forbidden. Advised Http Code: 403",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2ErrorResponseForbidden"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2ErrorResponseInvalidApiVersion": {
      "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/GoogleStandardpaymentsTypesV2Version"
        },
        "expectedVersion": {
          "description": "**REQUIRED**: The expected version.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Version"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2ErrorResponseInvalidPayloadSignature": {
      "description": "This message is intentionally empty right now. New fields could be added in the future.",
      "type": "object",
      "properties": {
      }
    },
    "GoogleStandardpaymentsTypesV2ErrorResponseInvalidPayloadEncryption": {
      "description": "This message is intentionally empty right now. New fields could be added in the future.",
      "type": "object",
      "properties": {
      }
    },
    "GoogleStandardpaymentsTypesV2ErrorResponseRequestTimestampOutOfRange": {
      "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/GoogleStandardpaymentsTypesV2Timestamp"
        },
        "serverTimestampAtReceipt": {
          "description": "**REQUIRED**: The server time at receipt, used for comparison",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Timestamp"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2ErrorResponseInvalidIdentifier": {
      "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"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2ErrorResponseIdempotencyViolation": {
      "description": "This message is intentionally empty right now. New fields could be added in the future.",
      "type": "object",
      "properties": {
      }
    },
    "GoogleStandardpaymentsTypesV2ErrorResponseInvalidFieldValue": {
      "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"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2ErrorResponseMissingRequiredField": {
      "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"
          }
        }
      }
    },
    "GoogleStandardpaymentsTypesV2ErrorResponsePreconditionViolation": {
      "description": "This message is intentionally empty right now. New fields could be added in the future.",
      "type": "object",
      "properties": {
      }
    },
    "GoogleStandardpaymentsTypesV2ErrorResponseUserActionInProgress": {
      "description": "This message is intentionally empty right now. New fields could be added in the future.",
      "type": "object",
      "properties": {
      }
    },
    "GoogleStandardpaymentsTypesV2ErrorResponseInvalidDecryptedRequest": {
      "description": "This message is intentionally empty right now. New fields could be added in the future.",
      "type": "object",
      "properties": {
      }
    },
    "GoogleStandardpaymentsTypesV2ErrorResponseForbidden": {
      "description": "This message is intentionally empty right now. New fields could be added in the future.",
      "type": "object",
      "properties": {
      }
    },
    "AsynchronousRefundRequest": {
      "description": "Request object for the `refund` method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2RequestHeader"
        },
        "captureRequestId": {
          "description": "**REQUIRED**: Unique identifier for this redirect payment. This is the `requestId` field generated by Google when the redirect payment began. For example, if Google called `generateRedirectPaymentUrl` to generate the Redirect URL, this identifier will be set to the `requestId` in the `requestHeader` of that call.",
          "type": "string"
        },
        "refundAmount": {
          "description": "**REQUIRED**: The amount of the refund. This will be a positive number, and should always be less-than or equal-to the remaining balance for the completed redirect payment.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Amount"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2Amount": {
      "description": "Associates an amount in micros with a currency code.",
      "type": "object",
      "properties": {
        "amountMicros": {
          "description": "**REQUIRED**: An amount in [micros]({{glossary_path}}#micros \"What are micros?\").",
          "type": "string",
          "format": "int64"
        },
        "currencyCode": {
          "description": "**REQUIRED**: ISO 4217 3-letter currency code",
          "type": "string"
        }
      }
    },
    "AsynchronousRefundResponse": {
      "description": "Response object for the `refund` method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Result of this asynchronous refund.",
          "$ref": "#/definitions/AsynchronousRefundResponseAsynchronousRefundResult"
        }
      }
    },
    "AsynchronousRefundResponseAsynchronousRefundResult": {
      "description": "Result of this asynchronous refund.",
      "type": "object",
      "properties": {
        "acknowledged": {
          "description": "The refund has been requested and the integrator will do additional steps to determine if the refund was successful. Once the integrator knows the result of the refund, they will inform Google of the result by calling the `refundResultNotification` API.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Empty"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2Empty": {
      "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": {
      }
    },
    "GenerateRedirectPaymentUrlRequest": {
      "description": "Request object for the `GenerateRedirectPaymentUrl` method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2RequestHeader"
        },
        "transactionAmount": {
          "description": "**REQUIRED**: The amount of the transaction.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Amount"
        },
        "transactionDescription": {
          "description": "**REQUIRED**: A description of the transaction that can be shown to the user.",
          "type": "string"
        },
        "formOfPayment": {
          "description": "**REQUIRED**: The form of payment that the user already selected for this payment. If the user made no choice or it does not apply, this will be set to `noneChosen`. In the `noneChosen` case, the user should be redirected to the integrator's website to allow the user to select a form of payment.",
          "$ref": "#/definitions/FormOfPayment"
        },
        "callbackUrl": {
          "description": "**REQUIRED**: The URL the user should be redirected to when the redirect payment is complete. The URL has a max length of 512 characters.",
          "type": "string"
        }
      }
    },
    "FormOfPayment": {
      "description": "The form of payment (FOP) that the user already selected for this payment. If the user made no choice or it does not apply, this will be set to `noneChosen`.",
      "type": "object",
      "properties": {
        "noneChosen": {
          "description": "The user has not chosen any specific form of payment. For redirect payments where the user needs to select a FOP, the integrator should present a FOP selection UI upon redirect.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Empty"
        },
        "issuerId": {
          "description": "The Google-generated unique identifier of the issuer that the user wants to use for this payment. This identifier represents a specific bank \/ ewallet \/ etc. Google will maintain a hard-coded mapping of available issuers and their IDs. The payment integrator should notify Google when a change is required.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV1IssuerId"
        },
        "card": {
          "description": "User's payment card account.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV1Card"
        }
      }
    },
    "GoogleStandardpaymentsTypesV1IssuerId": {
      "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"
        }
      }
    },
    "GoogleStandardpaymentsTypesV1Card": {
      "description": "Description of a payment card account (i.e., credit card, debit card, charge card).",
      "type": "object",
      "properties": {
        "accountNumber": {
          "description": "**REQUIRED**: The account number itself (i.e., the FPAN).",
          "type": "string"
        },
        "nameOnCard": {
          "description": "**REQUIRED**: The customer's name as it appears on the card.",
          "type": "string"
        },
        "expiryMonth": {
          "description": "**OPTIONAL**: Expiration month, formatted `MM`.",
          "type": "string"
        },
        "expiryYear": {
          "description": "**OPTIONAL**: Expiration year, formatted `YY`.",
          "type": "string"
        },
        "cvn": {
          "description": "**OPTIONAL**: If Google collected the CVN from the user it is provided here and should be verified.",
          "type": "string"
        },
        "issuanceDateMonth": {
          "description": "**OPTIONAL**: Issuance month, formatted `MM`.",
          "type": "string"
        },
        "issuanceDateYear": {
          "description": "**OPTIONAL**: Issuance year, formatted `YY`.",
          "type": "string"
        }
      }
    },
    "GenerateRedirectPaymentUrlResponse": {
      "description": "Response object for the `GenerateRedirectPaymentUrl` method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Result details of the `GenerateRedirectPaymentUrl` request.",
          "$ref": "#/definitions/GenerateRedirectPaymentUrlResponseGenerateRedirectPaymentUrlResult"
        }
      }
    },
    "GenerateRedirectPaymentUrlResponseGenerateRedirectPaymentUrlResult": {
      "description": "Result details of the `GenerateRedirectPaymentUrl` request.",
      "type": "object",
      "properties": {
        "success": {
          "description": "The integrator successfully generated a redirect URL. Details about the results are within this message.",
          "$ref": "#/definitions/GenerateRedirectPaymentUrlResponseSuccessDetails"
        },
        "invalidIssuerId": {
          "description": "The `issuerId` in the request was not valid for this integrator. This should only be used in cases where this form of payment is not valid in the integrator's system. It should not be used to communicate outages or other minor issues with an otherwise valid form of payment.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Empty"
        },
        "cardNotActivated": {
          "description": "The card has not been activated.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Empty"
        },
        "cardNumberInvalid": {
          "description": "The card number is invalid.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Empty"
        },
        "cardExpired": {
          "description": "The card has expired.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Empty"
        },
        "cardExpirationDateInvalid": {
          "description": "The expiration date on the card was invalid.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Empty"
        },
        "cardIssuanceDateInvalid": {
          "description": "The issuance date on the card was invalid.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Empty"
        },
        "cardHolderNameInvalid": {
          "description": "The card holder name on the card was invalid.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Empty"
        },
        "restrictedCard": {
          "description": "The card is restricted from making this type of purchase.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Empty"
        },
        "invalidCardDetails": {
          "description": "This decline code should never be used in steady-state. It is meant as a temporary code to use when the integrator encounters a generic invalid card information 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. Declined because the card details, while formatted correctly, were invalid. (e.g. The card holder name was invalid).",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Empty"
        },
        "insufficientFunds": {
          "description": "This account does not have sufficient funds to guarantee this redirect payment.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2InsufficientFunds"
        },
        "notSupportedByIssuer": {
          "description": "The issuer can not support a redirect payment for this request.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Empty"
        },
        "networkTimeout": {
          "description": "There was a network timeout while attempting to process the `formOfPayment` (eg: card). This request can be retried.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Empty"
        },
        "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. *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/GoogleStandardpaymentsTypesV2DeclinedByIssuer"
        }
      }
    },
    "GenerateRedirectPaymentUrlResponseSuccessDetails": {
      "description": "The integrator successfully generated a redirect URL. Details about the results are within this message.",
      "type": "object",
      "properties": {
        "redirectDetails": {
          "description": "**REQUIRED**: Details about the redirect parameters to pass on to the user's browser\/device.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2RedirectDetails"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2RedirectDetails": {
      "description": "This contains the result of the `redirectUrl` request when it is supported.",
      "type": "object",
      "properties": {
        "getMethod": {
          "description": "The user's browser should be redirected using an HTTPS GET.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2GetRequest"
        },
        "postFormMethod": {
          "description": "The user's browser should be redirected using an HTTPS POST with content time `x-www-form-urlencoded`.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2PostFormRequest"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2GetRequest": {
      "description": "This contains details for redirecting the user's browser using an HTTPS GET.",
      "type": "object",
      "properties": {
        "url": {
          "description": "**REQUIRED**: The URL that the user's browser should be redirected to with a GET request. Should not exceed 2048 characters in length.",
          "type": "string"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2PostFormRequest": {
      "description": "This contains details for redirecting the user's browser using an HTTPS POST.",
      "type": "object",
      "properties": {
        "url": {
          "description": "**REQUIRED**: The url the user will be redirected to. Should not exceed 2048 characters in length.",
          "type": "string"
        },
        "body": {
          "description": "**REQUIRED**: Data for the body of the POST for the redirect. This list represents the HTTPS POST body. For example: [ \"myParammy\": \"Val\", \"otherParam\": \"otherVal\", \"repeatedParam\": \"val1\", \"repeatedParam\": \"val2\" ] Would be formatted as this in the POST body: myParam=myVal&otherParam=otherVal&repeatedParam=val1&repeatedParam= val2. *Note:* When redirecting the user's browser, the content type will be set to `x-www-form-urlencoded`",
          "type": "array",
          "items": {
            "$ref": "#/definitions/GoogleStandardpaymentsTypesV2PostFormRequestBodyPair"
          }
        },
        "bodyEncoding": {
          "description": "**REQUIRED**: The character set used for the body. UTF-8 is recommended.",
          "type": "string",
          "enum": [
            "BODY_ENCODING_UNSPECIFIED",
            "BODY_ENCODING_ISO_8859_1",
            "BODY_ENCODING_UTF_8",
            "BODY_ENCODING_US_ASCII"
          ]
        }
      }
    },
    "GoogleStandardpaymentsTypesV2PostFormRequestBodyPair": {
      "description": "Data for the body of the POST for the redirect.",
      "type": "object",
      "properties": {
        "name": {
          "description": "**REQUIRED**: Name of the parameter.",
          "type": "string"
        },
        "value": {
          "description": "**REQUIRED**: Value of the parameter.",
          "type": "string"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2InsufficientFunds": {
      "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/GoogleStandardpaymentsTypesV2RawResult"
        },
        "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/GoogleStandardpaymentsTypesV2Amount"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2RawResult": {
      "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"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2DeclinedByIssuer": {
      "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/GoogleStandardpaymentsTypesV2RawResult"
        }
      }
    },
    "GetRedirectPaymentStatusRequest": {
      "description": "Request object for the `GetRedirectPaymentStatus` method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2RequestHeader"
        },
        "redirectRequestId": {
          "description": "**REQUIRED**: The `requestId` sent in the original\/initiating redirect payment 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"
        }
      }
    },
    "GetRedirectPaymentStatusResponse": {
      "description": "Response object for the `GetRedirectPaymentStatus` method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Result of this redirect payment.",
          "$ref": "#/definitions/RedirectPaymentResult"
        },
        "formOfPayment": {
          "description": "**REQUIRED**: The form of payment that the user selected for this payment. If the user made no choice or it does not apply, this should be set to `noneChosen`.",
          "$ref": "#/definitions/FormOfPayment"
        }
      }
    },
    "RedirectPaymentResult": {
      "description": "Result details of the redirect payment.",
      "type": "object",
      "properties": {
        "success": {
          "description": "Successful redirect payment, deliver the goods.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Empty"
        },
        "pending": {
          "description": "Payment is pending a final answer. This is a non-terminal state to indicate the redirect payment was inconclusive and will resolve to be a `success` or decline in the future via a `redirectPaymentCompleteNotification`. Depending on the Google product being purchased, if it takes too long for the integrator to tell Google the payment was successful, the payment may be considered canceled due to the user dropping out of session. A payment that is late in being marked successful (for some products) will immediately be refunded after the payment was reported as `success`. A `pending` result should not be used to indicate system errors, those should be reported using the `ErrorResponse`.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Empty"
        },
        "chargeExceedsTransactionLimit": {
          "description": "This redirect payment request `amount` exceeds per-transaction limit. If this code is used populate the transaction_limit field for user messaging purposes.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2ChargeExceedsTransactionLimit"
        },
        "chargeUnderLimit": {
          "description": "This redirect payment request `amount` does not meet the minimum transaction amount.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2ChargeUnderLimit"
        },
        "insufficientFunds": {
          "description": "This account does not have sufficient funds to guarantee this redirect payment.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2InsufficientFunds"
        },
        "accountDoesNotSupportCurrency": {
          "description": "This account does not support the requested currency.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2AccountDoesNotSupportCurrency"
        },
        "userExitedPaymentFlow": {
          "description": "User canceled the whole payment attempt. At any point in the payment flow, the user performed an action that canceled the payment. This should be used only when the payment will not complete in the future.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2UserExitedPaymentFlow"
        },
        "riskDeclined": {
          "description": "The transaction was declined due to a risk check done by the integrator. This does not cause the user's instrument to be closed at Google.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2RiskDeclined"
        },
        "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/GoogleStandardpaymentsTypesV2CaptureRequestExpired"
        },
        "otpNotMatched": {
          "description": "OTP did not match what the integrator sent.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2OtpNotMatched"
        },
        "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`. *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/GoogleStandardpaymentsTypesV2DeclinedByIssuer"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2ChargeExceedsTransactionLimit": {
      "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/GoogleStandardpaymentsTypesV2RawResult"
        },
        "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/GoogleStandardpaymentsTypesV2Amount"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2ChargeUnderLimit": {
      "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/GoogleStandardpaymentsTypesV2RawResult"
        },
        "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/GoogleStandardpaymentsTypesV2Amount"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2AccountDoesNotSupportCurrency": {
      "description": "This account does not support the requested currency.",
      "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/GoogleStandardpaymentsTypesV2RawResult"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2UserExitedPaymentFlow": {
      "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/GoogleStandardpaymentsTypesV2RawResult"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2RiskDeclined": {
      "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/GoogleStandardpaymentsTypesV2RawResult"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2CaptureRequestExpired": {
      "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/GoogleStandardpaymentsTypesV2RawResult"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2OtpNotMatched": {
      "description": "OTP did not match what the integrator sent.",
      "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/GoogleStandardpaymentsTypesV2RawResult"
        }
      }
    },
    "RemittanceStatementNotificationRequest": {
      "description": "Request object for the remittance statement notification method.",
      "type": "object",
      "properties": {
        "requestHeader": {
          "description": "**REQUIRED**: Common header for all requests.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2RequestHeader"
        },
        "remittanceStatementSummary": {
          "description": "**REQUIRED**: Summary of this remittance statement.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2RemittanceStatementSummary"
        }
      }
    },
    "GoogleStandardpaymentsTypesV2RemittanceStatementSummary": {
      "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/GoogleStandardpaymentsTypesV2Timestamp"
        },
        "billingPeriod": {
          "description": "**REQUIRED**: The billing period this statement covers.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2BillingPeriod"
        },
        "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/GoogleStandardpaymentsTypesV2Timestamp"
        },
        "totalDueByIntegrator": {
          "description": "**REQUIRED**: This value is always positive.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Amount"
        },
        "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/GoogleStandardpaymentsTypesV2Amount"
        },
        "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/GoogleStandardpaymentsTypesV2Amount"
        },
        "totalFeesAmount": {
          "description": "**TO_BE_REQUIRED**: This value is the sum of all fees applied for all events in this statement.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Amount"
        },
        "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/GoogleStandardpaymentsTypesV2Amount"
        },
        "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/GoogleStandardpaymentsTypesV2Amount"
          }
        }
      }
    },
    "GoogleStandardpaymentsTypesV2BillingPeriod": {
      "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/GoogleStandardpaymentsTypesV2Timestamp"
        },
        "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/GoogleStandardpaymentsTypesV2Timestamp"
        }
      }
    },
    "RemittanceStatementNotificationResponse": {
      "description": "Response object for the remittance statement notification method.",
      "type": "object",
      "properties": {
        "responseHeader": {
          "description": "**REQUIRED**: Common header for all responses.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2ResponseHeader"
        },
        "result": {
          "description": "**REQUIRED**: Result of this statement notification.",
          "$ref": "#/definitions/RemittanceStatementNotificationResponseStatementNotificationResult"
        }
      }
    },
    "RemittanceStatementNotificationResponseStatementNotificationResult": {
      "description": "Result of this statement notification.",
      "type": "object",
      "properties": {
        "accepted": {
          "description": "Integrator acknowledges receipt of this notification.",
          "$ref": "#/definitions/GoogleStandardpaymentsTypesV2Empty"
        }
      }
    }
  }
}
