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

# Create Payment Link

> Use this API to create a new payment link. The created payment link url will be available in the API response parameter link_url.



## OpenAPI

````yaml /openapi/payments/v2022-09-01.yaml post /links
openapi: 3.0.0
info:
  version: '2022-09-01'
  title: Cashfree Payment Gateway APIs
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
  contact:
    email: developers@cashfree.com
    name: API Support
    url: https://discord.com/invite/QdZkNSxXsB
  description: >-
    Cashfree's Payment Gateway APIs provide developers with a streamlined
    pathway to integrate advanced payment processing capabilities into their
    applications, platforms and websites.
servers:
  - url: https://sandbox.cashfree.com/pg
    description: Sandbox server
  - url: https://api.cashfree.com/pg
    description: Production server
security: []
tags:
  - name: Orders
    description: Collection of APIs to handle orders.
  - name: Payments
    description: Collection of APIs to handle payments.
  - name: Refunds
    description: Collection of APIs to handle refunds.
  - name: Settlements
    description: Collection of APIs to handle settlements.
  - name: Payment Links
    description: Collection of APIs to handle payment links.
  - name: Token Vault
    description: >-
      Collection of APIs to use Cashfree's token Vault. This helps you save
      cards and tokenize them in a PCI complaint manner. We support creation of
      network tokens which can be used across acquiring banks
  - name: softPOS
    description: Collection of APIs to manage softPOS' agent and order
  - name: Offers
    description: Collection of APIs to handle offers
  - name: Eligibility
    description: >-
      Collection of APIs to check eligibile entities - payment methods, offer,
      affordibility
  - name: Settlement Reconciliation
    description: Collection of APIs to handle settlements
  - name: PG Reconciliation
    description: Collection of APIs to handle reconciliation
paths:
  /links:
    post:
      tags:
        - Payment Links
      summary: Create Payment Link
      description: >-
        Use this API to create a new payment link. The created payment link url
        will be available in the API response parameter link_url.
      operationId: PGCreateLink
      parameters:
        - $ref: '#/components/parameters/apiVersionHeader'
        - $ref: '#/components/parameters/xRequestIDHeader'
        - $ref: '#/components/parameters/xIdempotencyKeyHeader'
      requestBody:
        $ref: '#/components/requestBodies/CreateLinkRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LinkEntity'
          headers:
            x-api-version:
              $ref: '#/components/headers/x-api-version'
            x-ratelimit-limit:
              $ref: '#/components/headers/x-ratelimit-limit'
            x-ratelimit-remaining:
              $ref: '#/components/headers/x-ratelimit-remaining'
            x-ratelimit-retry:
              $ref: '#/components/headers/x-ratelimit-retry'
            x-ratelimit-type:
              $ref: '#/components/headers/x-ratelimit-type'
            x-request-id:
              $ref: '#/components/headers/x-request-id'
            x-idempotency-key:
              $ref: '#/components/headers/x-idempotency-key'
            x-idempotency-replayed:
              $ref: '#/components/headers/x-idempotency-replayed'
        '400':
          $ref: '#/components/responses/Response400'
        '401':
          $ref: '#/components/responses/Response401'
        '404':
          $ref: '#/components/responses/Response404'
        '409':
          $ref: '#/components/responses/Response409'
        '422':
          $ref: '#/components/responses/Response422'
        '429':
          $ref: '#/components/responses/Response429'
        '500':
          $ref: '#/components/responses/Response500'
      deprecated: false
      security:
        - XClientID: []
          XClientSecret: []
        - XClientID: []
          XPartnerAPIKey: []
        - XClientID: []
          XClientSignatureHeader: []
        - XPartnerMerchantID: []
          XPartnerAPIKey: []
components:
  parameters:
    apiVersionHeader:
      in: header
      name: x-api-version
      required: true
      description: API version to be used. Format is in YYYY-MM-DD
      schema:
        type: string
        description: API version to be used
        default: '2022-09-01'
      example: '2022-09-01'
    xRequestIDHeader:
      in: header
      name: x-request-id
      description: >-
        Request id for the API call. Can be used to resolve tech issues.
        Communicate this in your tech related queries to cashfree
      required: false
      schema:
        type: string
      example: 4dfb9780-46fe-11ee-be56-0242ac120002
    xIdempotencyKeyHeader:
      in: header
      name: x-idempotency-key
      required: false
      description: >
        Idempotency works by saving the resulting status code and body of the
        first request made for any given idempotency key, regardless of whether
        it succeeded or failed. Subsequent requests with the same key return the
        same result, including 500 errors.


        Currently supported on all POST calls that uses x-client-id &
        x-client-secret. To use enable, pass x-idempotency-key in the request
        header. The value of this header must be unique to each operation you
        are trying to do. One example can be to use the same order_id that you
        pass while creating orders 
      schema:
        type: string
        format: UUID
      example: 47bf8872-46fe-11ee-be56-0242ac120002
  requestBodies:
    CreateLinkRequest:
      description: Request Body to Create Payment Links
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CreateLinkRequest'
  schemas:
    LinkEntity:
      title: LinkEntity
      description: Payment link success creation response object
      type: object
      example:
        cf_link_id: 1996567
        link_id: my_link_id
        link_status: ACTIVE
        link_currency: INR
        link_amount: 100
        link_amount_paid: 0
        link_partial_payments: true
        link_minimum_partial_amount: 20
        link_purpose: Payment for PlayStation 11
        link_created_at: '2021-09-30T17:05:01+05:30'
        customer_details:
          customer_name: John Doe
          customer_phone: '9999999999'
          customer_email: john@example.com
        link_meta:
          $ref: '#/components/schemas/LinkMetaResponseEntity'
        link_url: https://payments-test.cashfree.com/links/o1tf1nvcvjhg
        link_expiry_time: '2021-10-14T15:04:05+05:30'
        link_notes:
          $ref: '#/components/schemas/LinkNotesEntity'
        link_auto_reminders: true
        link_notify:
          $ref: '#/components/schemas/LinkNotifyEntity'
      properties:
        cf_link_id:
          type: integer
          format: int64
        link_id:
          type: string
        link_status:
          type: string
        link_currency:
          type: string
        link_amount:
          type: number
        link_amount_paid:
          type: number
        link_partial_payments:
          type: boolean
        link_minimum_partial_amount:
          type: number
        link_purpose:
          type: string
        link_created_at:
          type: string
        customer_details:
          $ref: '#/components/schemas/LinkCustomerDetailsEntity'
        link_meta:
          $ref: '#/components/schemas/LinkMetaResponseEntity'
        link_url:
          type: string
        link_expiry_time:
          type: string
        link_notes:
          $ref: '#/components/schemas/LinkNotesEntity'
        link_auto_reminders:
          type: boolean
        link_notify:
          $ref: '#/components/schemas/LinkNotifyEntity'
    CreateLinkRequest:
      title: CreateLinkRequest
      description: Request paramenters for link creation
      example:
        link_amount: 100
        link_currency: INR
        link_minimum_partial_amount: 20
        link_id: my_link_id
        link_partial_payments: true
        customer_details:
          customer_name: John Doe
          customer_phone: '9999999999'
          customer_email: john@cashfree.com
        link_expiry_time: '2021-10-14T15:04:05+05:30'
        link_purpose: Payment for PlayStation 11
        link_notify:
          $ref: '#/components/schemas/LinkNotifyEntity'
        link_auto_reminders: true
        link_notes:
          $ref: '#/components/schemas/LinkNotesEntity'
        link_meta:
          $ref: '#/components/schemas/LinkMetaEntity'
      type: object
      properties:
        link_id:
          type: string
          description: >-
            Unique Identifier (provided by merchant) for the Link. Alphanumeric
            and only - and _ allowed (50 character limit). Use this for other
            link-related APIs.
          maxLength: 50
        link_amount:
          type: number
          format: double
          description: >-
            Amount to be collected using this link. Provide upto two decimals
            for paise.
        link_currency:
          type: string
          description: >-
            Currency for the payment link. Default is INR. Fill out the [Support
            Form](https://merchant.cashfree.com/merchants/landing?env=prod&raise_issue=1)
            to enable new currencies.
          minimum: 1
        link_purpose:
          type: string
          description: >-
            A brief description for which payment must be collected. This is
            shown to the customer.
          maxLength: 500
        customer_details:
          $ref: '#/components/schemas/LinkCustomerDetailsEntity'
        link_partial_payments:
          type: boolean
          description: If "true", customer can make partial payments for the link.
        link_minimum_partial_amount:
          type: number
          format: double
          description: >-
            Minimum amount in first installment that needs to be paid by the
            customer if partial payments are enabled. This should be less than
            the link_amount.
        link_expiry_time:
          type: string
          description: >-
            Time after which the link expires. Customers will not be able to
            make the payment beyond the time specified here. You can provide
            them in a valid ISO 8601 time format. Default is 30 days.
        link_notify:
          $ref: '#/components/schemas/LinkNotifyEntity'
        link_auto_reminders:
          type: boolean
          description: >-
            If "true", reminders will be sent to customers for collecting
            payments.
        link_notes:
          $ref: '#/components/schemas/LinkNotesEntity'
        link_meta:
          $ref: '#/components/schemas/LinkMetaEntity'
      required:
        - link_amount
        - link_currency
        - link_id
        - customer_details
        - link_purpose
    LinkCustomerDetailsEntity:
      title: customer_details
      description: Payment link customer entity
      type: object
      example:
        customer_name: John Doe
        customer_phone: '9999999999'
        customer_email: john@cashfree.com
      properties:
        customer_phone:
          type: string
          description: Customer phone number
        customer_email:
          type: string
          description: Customer email address
        customer_name:
          type: string
          description: Customer name
      required:
        - customer_phone
    LinkMetaResponseEntity:
      title: link_meta
      type: object
      description: Payment link meta information object.
      example:
        key_1: value_1
        key_2: value_2
      additionalProperties:
        type: string
    LinkNotesEntity:
      title: link_notes
      type: object
      description: >-
        Key-value pair that can be used to store additional information about
        the entity. Maximum 5 key-value pairs
      example:
        key_1: value_1
        key_2: value_2
      additionalProperties:
        type: string
    LinkNotifyEntity:
      title: link_notify
      type: object
      description: Payment link Notify Object for SMS and Email
      example:
        send_sms: false
        send_email: true
      properties:
        send_sms:
          type: boolean
          description: If "true", Cashfree will send sms on customer_phone
        send_email:
          type: boolean
          description: If "true", Cashfree will send email on customer_email
    BadRequestError:
      title: BadRequestError
      description: Invalid request received from client
      example:
        message: bad URL, please check API documentation
        code: request_failed
        type: invalid_request_error
      type: object
      properties:
        message:
          type: string
        code:
          type: string
        type:
          type: string
          enum:
            - invalid_request_error
    AuthenticationError:
      title: AuthenticationError
      description: Error if api keys are wrong
      example:
        message: authentication Failed
        code: request_failed
        type: authentication_error
      type: object
      properties:
        message:
          type: string
        code:
          type: string
        type:
          type: string
          description: authentication_error
    ApiError404:
      title: ApiError404
      description: Error when resource requested is not found
      example:
        message: something is not found
        code: somethind_not_found
        type: invalid_request_error
      type: object
      properties:
        message:
          type: string
        code:
          type: string
        type:
          type: string
          enum:
            - invalid_request_error
          description: invalid_request_error
    ApiError409:
      title: ApiError409
      description: duplicate request
      example:
        message: order with same id is already present
        code: order_already_exists
        type: invalid_request_error
      type: object
      properties:
        message:
          type: string
        code:
          type: string
        type:
          type: string
          enum:
            - invalid_request_error
          description: invalid_request_error
    IdempotencyError:
      title: IdempotencyError
      description: >-
        Error when idempotency fails. Different request body with the same
        idempotent key
      example:
        message: something is not found
        code: request_invalid
        type: idempotency_error
      type: object
      properties:
        message:
          type: string
        code:
          type: string
        type:
          type: string
          enum:
            - idempotency_error
          description: idempotency_error
    RateLimitError:
      title: RateLimitError
      description: Error when rate limit is breached for your api
      example:
        message: Too many requests from IP. Check headers
        code: request_failed
        type: rate_limit_error
      type: object
      properties:
        message:
          type: string
        code:
          type: string
        type:
          type: string
          enum:
            - rate_limit_error
          description: rate_limit_error
    ApiError:
      title: ApiError
      description: Error at cashfree's server
      example:
        message: internal Server Error
        code: internal_error
        type: api_error
      type: object
      properties:
        message:
          type: string
        code:
          type: string
        type:
          type: string
          enum:
            - api_error
          description: api_error
    LinkMetaEntity:
      title: link_meta
      description: Payment link meta information object
      type: object
      example:
        notify_url: https://ee08e626ecd88c61c85f5c69c0418cb5.m.pipedream.net
        upi_intent: false
        return_url: https://b8af79f41056.eu.ngrok.io
      properties:
        notify_url:
          type: string
          description: >-
            Notification URL for server-server communication. It should be an
            https URL.
        upi_intent:
          type: boolean
          description: >-
            If "true", link will directly open UPI Intent flow on mobile, and
            normal link flow elsewhere
        return_url:
          type: string
          description: >-
            The URL to which user will be redirected to after the payment is
            done on the link. Maximum length: 250.
        payment_methods:
          type: string
          description: >-
            Allowed payment modes for this link. Pass comma-separated values
            among following options - "cc", "dc", "ccc", "ppc", "nb", "upi",
            "paypal", "app". Leave it blank to show all available payment
            methods
  headers:
    x-api-version:
      schema:
        type: string
        format: YYYY-MM-DD
        enum:
          - '2022-09-01'
      description: >-
        This header has the version of the API. The current version is
        `2022-09-01`.
    x-ratelimit-limit:
      schema:
        type: integer
      example: 200
      description: Ratelimit set for your account for this API per minute
    x-ratelimit-remaining:
      schema:
        type: integer
      example: 2
      description: >-
        Rate limit remaning for your account for this API in the next minute.
        Uses sliding window
    x-ratelimit-retry:
      schema:
        type: integer
      example: 4
      description: |
        Contains number of seconds to wait if rate limit is breached
        - Is 0 if withing the limit
        - Is between 1 and 59 if breached
    x-ratelimit-type:
      schema:
        type: string
        enum:
          - app_id
          - ip
      example: ip
      description: >
        either ip or app_id

        - `ip` if making a call from the browser. True for api where you don't
        need `x-client-id` and `x-client-secret`

        - `app_id` for authenticated api calls i.e using `x-client-id` and
        `x-client-secret`
    x-request-id:
      schema:
        type: string
      example: some-req-id
      description: >-
        Request id for your api call. Is blank or null if no `x-request-id` is
        sent during the request
    x-idempotency-key:
      schema:
        type: string
      example: some-idem-id
      description: Idempotency key used during the request. Applicable for POST only
    x-idempotency-replayed:
      schema:
        type: string
        format: boolean
      example: 'true'
      description: |-
        In conjunction with `x-idempotency-key` this means
        - `true` if the response was replayed
        - `false` if the response has not been replayed
  responses:
    Response400:
      description: Bad request error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/BadRequestError'
      headers:
        x-api-version:
          $ref: '#/components/headers/x-api-version'
        x-ratelimit-limit:
          $ref: '#/components/headers/x-ratelimit-limit'
        x-ratelimit-remaining:
          $ref: '#/components/headers/x-ratelimit-remaining'
        x-ratelimit-retry:
          $ref: '#/components/headers/x-ratelimit-retry'
        x-ratelimit-type:
          $ref: '#/components/headers/x-ratelimit-type'
        x-request-id:
          $ref: '#/components/headers/x-request-id'
        x-idempotency-key:
          $ref: '#/components/headers/x-idempotency-key'
        x-idempotency-replayed:
          $ref: '#/components/headers/x-idempotency-replayed'
    Response401:
      description: Authentication Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/AuthenticationError'
      headers:
        x-api-version:
          $ref: '#/components/headers/x-api-version'
        x-ratelimit-limit:
          $ref: '#/components/headers/x-ratelimit-limit'
        x-ratelimit-remaining:
          $ref: '#/components/headers/x-ratelimit-remaining'
        x-ratelimit-retry:
          $ref: '#/components/headers/x-ratelimit-retry'
        x-ratelimit-type:
          $ref: '#/components/headers/x-ratelimit-type'
        x-request-id:
          $ref: '#/components/headers/x-request-id'
        x-idempotency-key:
          $ref: '#/components/headers/x-idempotency-key'
        x-idempotency-replayed:
          $ref: '#/components/headers/x-idempotency-replayed'
    Response404:
      description: Resource Not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError404'
      headers:
        x-api-version:
          $ref: '#/components/headers/x-api-version'
        x-ratelimit-limit:
          $ref: '#/components/headers/x-ratelimit-limit'
        x-ratelimit-remaining:
          $ref: '#/components/headers/x-ratelimit-remaining'
        x-ratelimit-retry:
          $ref: '#/components/headers/x-ratelimit-retry'
        x-ratelimit-type:
          $ref: '#/components/headers/x-ratelimit-type'
        x-request-id:
          $ref: '#/components/headers/x-request-id'
        x-idempotency-key:
          $ref: '#/components/headers/x-idempotency-key'
        x-idempotency-replayed:
          $ref: '#/components/headers/x-idempotency-replayed'
    Response409:
      description: Resource already present
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError409'
      headers:
        x-api-version:
          $ref: '#/components/headers/x-api-version'
        x-ratelimit-limit:
          $ref: '#/components/headers/x-ratelimit-limit'
        x-ratelimit-remaining:
          $ref: '#/components/headers/x-ratelimit-remaining'
        x-ratelimit-retry:
          $ref: '#/components/headers/x-ratelimit-retry'
        x-ratelimit-type:
          $ref: '#/components/headers/x-ratelimit-type'
        x-request-id:
          $ref: '#/components/headers/x-request-id'
        x-idempotency-key:
          $ref: '#/components/headers/x-idempotency-key'
        x-idempotency-replayed:
          $ref: '#/components/headers/x-idempotency-replayed'
    Response422:
      description: Idempotency error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/IdempotencyError'
      headers:
        x-api-version:
          $ref: '#/components/headers/x-api-version'
        x-ratelimit-limit:
          $ref: '#/components/headers/x-ratelimit-limit'
        x-ratelimit-remaining:
          $ref: '#/components/headers/x-ratelimit-remaining'
        x-ratelimit-retry:
          $ref: '#/components/headers/x-ratelimit-retry'
        x-ratelimit-type:
          $ref: '#/components/headers/x-ratelimit-type'
        x-request-id:
          $ref: '#/components/headers/x-request-id'
        x-idempotency-key:
          $ref: '#/components/headers/x-idempotency-key'
        x-idempotency-replayed:
          $ref: '#/components/headers/x-idempotency-replayed'
    Response429:
      description: Rate Limit Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RateLimitError'
      headers:
        x-api-version:
          $ref: '#/components/headers/x-api-version'
        x-ratelimit-limit:
          $ref: '#/components/headers/x-ratelimit-limit'
        x-ratelimit-remaining:
          $ref: '#/components/headers/x-ratelimit-remaining'
        x-ratelimit-retry:
          $ref: '#/components/headers/x-ratelimit-retry'
        x-ratelimit-type:
          $ref: '#/components/headers/x-ratelimit-type'
        x-request-id:
          $ref: '#/components/headers/x-request-id'
        x-idempotency-key:
          $ref: '#/components/headers/x-idempotency-key'
        x-idempotency-replayed:
          $ref: '#/components/headers/x-idempotency-replayed'
    Response500:
      description: API related Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
      headers:
        x-api-version:
          $ref: '#/components/headers/x-api-version'
        x-ratelimit-limit:
          $ref: '#/components/headers/x-ratelimit-limit'
        x-ratelimit-remaining:
          $ref: '#/components/headers/x-ratelimit-remaining'
        x-ratelimit-retry:
          $ref: '#/components/headers/x-ratelimit-retry'
        x-ratelimit-type:
          $ref: '#/components/headers/x-ratelimit-type'
        x-request-id:
          $ref: '#/components/headers/x-request-id'
        x-idempotency-key:
          $ref: '#/components/headers/x-idempotency-key'
        x-idempotency-replayed:
          $ref: '#/components/headers/x-idempotency-replayed'
  securitySchemes:
    XClientID:
      type: apiKey
      in: header
      name: x-client-id
      description: >-
        Client app ID. You can find your app id in the [Merchant
        Dashboard](https://merchant.cashfree.com/auth/login/pg/developers/api-keys?env=prod).
    XClientSecret:
      type: apiKey
      in: header
      name: x-client-secret
      description: >-
        Client secret key. You can find your secret in the [Merchant
        Dashboard](https://merchant.cashfree.com/auth/login/pg/developers/api-keys?env=prod).
    XPartnerAPIKey:
      type: apiKey
      in: header
      name: x-partner-apikey
      description: >-
        If you are partner and you are making an api call on behalf of a
        merchant
    XClientSignatureHeader:
      type: apiKey
      in: header
      name: x-client-signature
      description: >-
        Use this if you do not want to pass the secret key and instead want to
        use signature
    XPartnerMerchantID:
      type: apiKey
      in: header
      name: x-partner-merchantid
      description: >-
        If you are partner use this to specify the merchant id if you don't have
        the merchant client app id

````