> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ecrypt.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Sale

> Sale combines 'AUTHORIZATION' and 'CAPTURE' into a single endpoint. 
***Supported Payment Methods***
- `Credit Card`
- `Terminal/Cloud EMV`
- `Check/ACH`
- `Customer`
- `Wallet`



## OpenAPI

````yaml https://cdn.ecrypt.dev/swagger/gateway-swagger-v30.json post /v1/transactions/sale
openapi: 3.0.4
info:
  title: Ecrypt.Gateway.Api
  description: Ecrypt API
  contact:
    name: Ecrypt
    url: https://www.ecrypt.com/
    email: Engineering@Ecrypt.com
  version: 1.0.0.0
servers: []
security: []
paths:
  /v1/transactions/sale:
    post:
      tags:
        - Transactions
      summary: Sale
      description: "Sale combines 'AUTHORIZATION' and 'CAPTURE' into a single endpoint. \r\n***Supported Payment Methods***\r\n- `Credit Card`\r\n- `Terminal/Cloud EMV`\r\n- `Check/ACH`\r\n- `Customer`\r\n- `Wallet`"
      requestBody:
        description: ''
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/Ecrypt.Gateway.Api.Core.Model.Transactions.TransactionSaleRequest
          text/json:
            schema:
              $ref: >-
                #/components/schemas/Ecrypt.Gateway.Api.Core.Model.Transactions.TransactionSaleRequest
          application/*+json:
            schema:
              $ref: >-
                #/components/schemas/Ecrypt.Gateway.Api.Core.Model.Transactions.TransactionSaleRequest
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/Ecrypt.Gateway.Api.Core.Model.Transactions.TransactionResponse
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Ecrypt.Gateway.Api.Core.Model.BadRequest'
        '429':
          description: Too Many Requests
components:
  schemas:
    Ecrypt.Gateway.Api.Core.Model.Transactions.TransactionSaleRequest:
      required:
        - amount
        - payment
      type: object
      properties:
        payment:
          $ref: >-
            #/components/schemas/Ecrypt.Gateway.Api.Core.Model.Transactions.Payment
        amount:
          $ref: >-
            #/components/schemas/Ecrypt.Gateway.Api.Core.Model.Transactions.Amount
        order:
          $ref: >-
            #/components/schemas/Ecrypt.Gateway.Api.Core.Model.Transactions.Order
      additionalProperties: false
    Ecrypt.Gateway.Api.Core.Model.Transactions.TransactionResponse:
      required:
        - requestId
      type: object
      properties:
        transaction_id:
          type: string
          description: Ecrypt Transaction Identifier
          nullable: true
        auth_code:
          type: string
          description: >-
            Authorization Code is the underlying payment networks approval code.
            For credit card/terminal transactions this is a 6 character string.
          nullable: true
        response_code:
          type: string
          description: "*** Supported Values ***\r\n- `APPROVED` transaction was approved\r\n- `DECLINED` transaction was declined, review response text\r\n- `ERROR` error processing the transaction"
          nullable: true
        response_text:
          type: string
          description: Text description of the network response.
          nullable: true
        latency:
          type: integer
          description: Latency for request in milliseconds.
          format: int32
        avs:
          $ref: >-
            #/components/schemas/Ecrypt.Gateway.Api.Core.Model.Transactions.AvsResponse
        cvv:
          $ref: >-
            #/components/schemas/Ecrypt.Gateway.Api.Core.Model.Transactions.CvvResponse
        amount:
          type: number
          description: Amount transaction was attempted for.
          format: double
        metadata:
          type: object
          additionalProperties: {}
          description: "Metadata for the transaction.\r\n*** Possible Fields ***\r\n- `credit_card_network` for credit card/terminal transactions only\r\n- `credit_card_number` for credit card/terminal transactions only, masked card number\r\n- `credit_card_expires` for credit card/terminal transactions only, expiry formatted as MMyy\r\n- `bank_name` for check/ach transactions only\r\n- `account_number` for check/ach transactions only\r\n- `routing_number` for check/ach transactions only\r\n- `order_tax` when supplied\r\n- `order_tip` when supplied"
          nullable: true
        request_id:
          maxLength: 100
          minLength: 1
          type: string
          description: Ecrypt Request Identifier.
          default: ABCDEF000000000000010
      additionalProperties: false
    Ecrypt.Gateway.Api.Core.Model.BadRequest:
      required:
        - requestId
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Ecrypt.Gateway.Api.Core.Model.BadRequestError'
          nullable: true
        request_id:
          maxLength: 100
          minLength: 1
          type: string
          description: Ecrypt Request Identifier.
          default: ABCDEF000000000000010
      additionalProperties: false
    Ecrypt.Gateway.Api.Core.Model.Transactions.Payment:
      type: object
      properties:
        token:
          maxLength: 64
          minLength: 8
          pattern: ^[0-9A-Za-z-]*$
          type: string
          description: "Token ID generated from the iframe or the tokens endpoint.\r\n\r\nExample: 00000000-0000-0000-0000-000000000000"
          nullable: true
        stored:
          $ref: >-
            #/components/schemas/Ecrypt.Gateway.Api.Core.Model.Transactions.Stored
        terminal:
          $ref: >-
            #/components/schemas/Ecrypt.Gateway.Api.Core.Model.Terminals.PaymentTerminal
        check:
          $ref: '#/components/schemas/Ecrypt.Gateway.Api.Core.Model.Check'
        cash:
          type: boolean
          nullable: true
      additionalProperties: false
      description: "Payment requires that you submit only one of the below options:\r\n- `Token`\r\n- `Stored`\r\n- `Terminal`\r\n- `Check`\r\n- `Cash`"
    Ecrypt.Gateway.Api.Core.Model.Transactions.Amount:
      required:
        - value
      type: object
      properties:
        currency:
          $ref: >-
            #/components/schemas/Ecrypt.Gateway.Api.Core.Model.WebAPI.Enums.CurrencyCode
        value:
          maximum: 999999999.99
          minimum: 0.01
          type: number
          description: "Values is the full amount to be processed.  The value is inclusive of all tax, discounts, shipping, fees ect.\r\n\r\nExample: 127.55"
          format: double
      additionalProperties: false
    Ecrypt.Gateway.Api.Core.Model.Transactions.Order:
      type: object
      properties:
        bill_to:
          $ref: >-
            #/components/schemas/Ecrypt.Gateway.Api.Core.Model.Transactions.Address
        ship_to:
          $ref: >-
            #/components/schemas/Ecrypt.Gateway.Api.Core.Model.Transactions.Address
        discount:
          type: number
          format: double
          nullable: true
        surcharge:
          type: number
          format: double
          nullable: true
        shipping:
          type: number
          format: double
          nullable: true
        email:
          type: string
          nullable: true
        tip:
          type: number
          format: double
          nullable: true
        tax:
          type: number
          format: double
          nullable: true
        total:
          type: number
          format: double
          nullable: true
        date:
          type: string
          format: date-time
        lines:
          type: array
          items:
            $ref: >-
              #/components/schemas/Ecrypt.Gateway.Api.Core.Model.Transactions.Line
          nullable: true
        metadata:
          type: object
          additionalProperties:
            type: string
          nullable: true
      additionalProperties: false
    Ecrypt.Gateway.Api.Core.Model.Transactions.AvsResponse:
      type: object
      properties:
        code:
          type: string
          description: Network address verification response code.
          nullable: true
        text:
          type: string
          description: Text for the code returned.
          nullable: true
      additionalProperties: false
    Ecrypt.Gateway.Api.Core.Model.Transactions.CvvResponse:
      type: object
      properties:
        code:
          type: string
          description: "Card verification value response from the network.\r\n\r\n*** Supported Values ***\r\n- `M` is Card Verification value matches\r\n- `N` is Card Verification value does not match\r\n- `P` is Not Processed\r\n- `S` is Service not supported\r\n- `U` is Issuer is not certified\r\n- `X` is Service is not available\r\n- `E` is Unrecognized or unknown response"
          nullable: true
        text:
          type: string
          description: Text for the code returned.
          nullable: true
      additionalProperties: false
    Ecrypt.Gateway.Api.Core.Model.BadRequestError:
      type: object
      properties:
        type:
          type: string
          nullable: true
        message:
          nullable: true
        exception_name:
          type: string
          nullable: true
      additionalProperties: false
    Ecrypt.Gateway.Api.Core.Model.Transactions.Stored:
      type: object
      properties:
        customer:
          maxLength: 64
          minLength: 8
          pattern: ^[0-9A-Za-z-]*$
          type: string
          description: >-
            Ecrypt Customer Identifier, this will use the customers default
            payment method on file.  This can be found under Customer Vault/Api
            User Id
          nullable: true
        wallet:
          maxLength: 64
          minLength: 8
          pattern: ^[0-9A-Za-z-]*$
          type: string
          description: >-
            Ecrypt Customer Wallet Identifier, this will use the specified
            payment method.
          nullable: true
        initiated_by:
          $ref: >-
            #/components/schemas/Ecrypt.Gateway.Api.Core.Model.Transactions.INITIATED_BY
        initial:
          $ref: >-
            #/components/schemas/Ecrypt.Gateway.Api.Core.Model.Transactions.INITIAL
      additionalProperties: false
    Ecrypt.Gateway.Api.Core.Model.Terminals.PaymentTerminal:
      required:
        - id
      type: object
      properties:
        id:
          maxLength: 64
          minLength: 8
          pattern: ^[0-9A-Za-z-]*$
          type: string
          description: "Payment Terminal Identifier, this can be found on your Ecrypt Dashboard under Setting/Device Management.\r\n\r\nExample: 00000000-0000-0000-0000-000000000000"
        prompt_tip:
          type: boolean
          description: >-
            Prompt for Tip will display tip at time of sale options.  If your
            account does not support tip at time of sale this option will be
            ignored.
          nullable: true
        tip_amounts:
          type: array
          items:
            type: number
            format: double
          description: "Tip amounts in dollar format.  Terminals can support 3 or 4 tip amounts depending on the terminal.  Any extra items will be ignored.  This is required if you set Prompt for Tip to true.\r\n\r\nExample: [28.23, 33.88, 37.65, 41.41]"
          nullable: true
        prompt_cvv:
          type: boolean
          description: >-
            Prompt for CVV/CVC will attempt to override the card verification
            requirement and force CVV/CVC input.
          nullable: true
        prompt_postal_code:
          type: boolean
          description: >-
            Prompt for Postal Code will allow the customer to enter their
            billing postal code.
          nullable: true
        prompt_amount_confirmation:
          type: boolean
          description: >-
            Prompt for Amount Confirmation will force the customer to approve
            the transaction amount.
          nullable: true
        prompt_signature:
          type: boolean
          description: >-
            Prompt for Signature will show the signature screen on compatible
            terminals.
          nullable: true
        key_card:
          type: boolean
          description: Prompt Key Card will allow you to manually enter the card details.
          nullable: true
      additionalProperties: false
    Ecrypt.Gateway.Api.Core.Model.Check:
      required:
        - accountNumber
        - routingNumber
      type: object
      properties:
        name:
          maxLength: 100
          minLength: 0
          pattern: ^[0-9A-Za-z _\-\.,`'()@#!?\/\\:;|+=@%&]*$
          type: string
          description: "Name as it appears on the check.\r\n\r\nExample: John Doe"
          nullable: true
        account_number:
          maxLength: 20
          minLength: 7
          pattern: ^[0-9]*$
          type: string
          description: "Account Number as it appears on the check.\r\n\r\nExample: 123123123"
        routing_number:
          maxLength: 20
          minLength: 8
          pattern: ^[0-9]*$
          type: string
          description: "Routing Number as it appears on the check.\r\n\r\nExample: 123123123"
        check_number:
          maxLength: 8
          minLength: 0
          pattern: ^[0-9]*$
          type: string
          description: "Check Number\r\n\r\nExample: 100"
          nullable: true
        account_type:
          $ref: >-
            #/components/schemas/Ecrypt.Gateway.Api.Core.Model.WebAPI.Enums.AccountType
        verification:
          $ref: '#/components/schemas/Ecrypt.Gateway.Api.Core.Model.CheckVerification'
      additionalProperties: false
    Ecrypt.Gateway.Api.Core.Model.WebAPI.Enums.CurrencyCode:
      enum:
        - 8
        - 12
        - 32
        - 36
        - 44
        - 48
        - 50
        - 51
        - 52
        - 60
        - 64
        - 68
        - 72
        - 84
        - 90
        - 96
        - 104
        - 108
        - 116
        - 124
        - 132
        - 136
        - 144
        - 152
        - 156
        - 170
        - 174
        - 188
        - 192
        - 203
        - 208
        - 214
        - 222
        - 230
        - 232
        - 238
        - 242
        - 262
        - 270
        - 292
        - 320
        - 324
        - 328
        - 332
        - 340
        - 344
        - 348
        - 352
        - 356
        - 360
        - 364
        - 368
        - 376
        - 388
        - 392
        - 398
        - 400
        - 404
        - 408
        - 410
        - 414
        - 417
        - 418
        - 422
        - 426
        - 430
        - 434
        - 446
        - 454
        - 458
        - 462
        - 480
        - 484
        - 496
        - 498
        - 504
        - 512
        - 516
        - 524
        - 532
        - 533
        - 548
        - 554
        - 558
        - 566
        - 578
        - 586
        - 590
        - 598
        - 600
        - 604
        - 608
        - 634
        - 643
        - 646
        - 654
        - 682
        - 690
        - 702
        - 704
        - 706
        - 710
        - 728
        - 748
        - 752
        - 756
        - 760
        - 764
        - 776
        - 780
        - 784
        - 788
        - 800
        - 807
        - 818
        - 826
        - 834
        - 840
        - 858
        - 860
        - 882
        - 886
        - 901
        - 925
        - 926
        - 929
        - 930
        - 931
        - 932
        - 933
        - 934
        - 936
        - 937
        - 938
        - 940
        - 941
        - 943
        - 944
        - 946
        - 947
        - 948
        - 949
        - 950
        - 951
        - 952
        - 953
        - 960
        - 965
        - 967
        - 968
        - 969
        - 970
        - 971
        - 972
        - 973
        - 975
        - 976
        - 977
        - 978
        - 979
        - 980
        - 981
        - 984
        - 985
        - 986
        - 990
        - 994
        - 997
      type: integer
      format: int32
    Ecrypt.Gateway.Api.Core.Model.Transactions.Address:
      type: object
      properties:
        name:
          type: string
          nullable: true
        line1:
          type: string
          nullable: true
        line2:
          type: string
          nullable: true
        city:
          type: string
          nullable: true
        state:
          type: string
          nullable: true
        postal_code:
          type: string
          nullable: true
        country:
          type: string
          nullable: true
      additionalProperties: false
    Ecrypt.Gateway.Api.Core.Model.Transactions.Line:
      type: object
      properties:
        product_code:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
        commodity_code:
          type: string
          nullable: true
        unit_of_measure:
          type: string
          nullable: true
        unit_cost:
          type: number
          format: double
        quantity:
          type: integer
          format: int32
        total:
          type: number
          format: double
        tax:
          type: number
          format: double
        tax_rate:
          type: number
          format: double
        discount:
          type: number
          format: double
        discount_rate:
          type: number
          format: double
        tax_type:
          type: string
          nullable: true
        alternate_tax_id:
          type: string
          nullable: true
      additionalProperties: false
    Ecrypt.Gateway.Api.Core.Model.Transactions.INITIATED_BY:
      enum:
        - 0
        - 1
      type: integer
      description: "*** Supported Values ***\r\n- `[NULL]`\r\n- `MERCHANT` recurring payments, installments, or other scenarios where the merchant start then transaction\r\n- `CUSTOMER` customer started the transaction"
      format: int32
    Ecrypt.Gateway.Api.Core.Model.Transactions.INITIAL:
      enum:
        - 0
        - 1
      type: integer
      description: "Initial Transaction type\r\n\r\n*** Supported Values ***\r\n- `[NULL]`\r\n- `RECURRING`\r\n- `INSTALLMENT`"
      format: int32
    Ecrypt.Gateway.Api.Core.Model.WebAPI.Enums.AccountType:
      enum:
        - 0
        - 1
      type: integer
      description: "Type of account\r\n\r\nExample: CHECKING\r\n*** Supported Values ***\r\n- `CHECKING`\r\n- `SAVINGS`"
      format: int32
    Ecrypt.Gateway.Api.Core.Model.CheckVerification:
      type: object
      properties:
        dob:
          maxLength: 14
          minLength: 8
          pattern: ^[0-9A-Za-z _\-\.\/]*$
          type: string
          description: "Date of Birth\r\n\r\nFormat: MM/DD/YYYY\r\nExample: 01/17/2006 = January 17th 2006"
          nullable: true
        ssn:
          maxLength: 14
          minLength: 8
          pattern: ^[0-9A-Za-z _\-\.\/]*$
          type: string
          description: "Social Security Number\r\n\r\nFormat: DDD-DD-DDDD\r\nExample: 123-45-6789"
          nullable: true
        drivers_license:
          $ref: >-
            #/components/schemas/Ecrypt.Gateway.Api.Core.Model.CheckVerificationDriversLicense
      additionalProperties: false
    Ecrypt.Gateway.Api.Core.Model.CheckVerificationDriversLicense:
      type: object
      properties:
        number:
          maxLength: 100
          minLength: 0
          pattern: ^[0-9A-Za-z _\-\.\/]*$
          type: string
          description: "Number\r\n\r\nExample: A123456789"
          nullable: true
        state:
          maxLength: 100
          minLength: 0
          pattern: ^[0-9A-Za-z _\-\.\/]*$
          type: string
          description: "State\r\n\r\nFormat: CC\r\nExample: CA = California"
          nullable: true
      additionalProperties: false

````