Splitit Installment Plans API

Create, initiate, fetch, update, refund, and cancel installment plans

OpenAPI Specification

splitit-installment-plans-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Splitit Account Management System Authentication Installment Plans API
  description: API for onboarding and managing sub-merchants on the Splitit platform. Enables payment facilitators and marketplace operators to add merchant partners, upload compliance documents, send onboarding invitations, monitor approval status, retrieve pending accounts, and generate time-limited secure login links for merchant portal access.
  version: '1.0'
  contact:
    name: Splitit Developer Support
    url: https://developers.splitit.com/
  license:
    name: Proprietary
servers:
- url: https://webapi.production.splitit.com
  description: Production
- url: https://web-api-v3.sandbox.splitit.com
  description: Sandbox
security:
- bearerAuth: []
tags:
- name: Installment Plans
  description: Create, initiate, fetch, update, refund, and cancel installment plans
paths:
  /installmentplans:
    post:
      tags:
      - Installment Plans
      operationId: createInstallmentPlan
      summary: Create Installment Plan
      description: Establish an installment plan with immediate authorization. This is the primary endpoint for merchants using direct API integration with full PCI DSS compliance. The plan is created and authorized in a single call. Requires SAQ-D certification.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateInstallmentPlanRequest'
      responses:
        '200':
          description: Installment plan created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstallmentPlanResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /installmentplans/initiate:
    post:
      tags:
      - Installment Plans
      operationId: initiateInstallmentPlan
      summary: Initiate Installment Plan
      description: Establish an installment plan without finalizing it. Designed for use with Splitit's pre-built checkout solutions (Payment Form, Flex Form). Requires only SAQ-A certification. Multiple calls for the same plan update existing data.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InitiateInstallmentPlanRequest'
      responses:
        '200':
          description: Installment plan initiated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InitiateInstallmentPlanResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /installmentplans/{installmentPlanNumber}/verifyauthorization:
    get:
      tags:
      - Installment Plans
      operationId: verifyAuthorization
      summary: Verify Authorization
      description: Confirm authorization of an installment plan when authorization and order closure do not occur simultaneously. Used after Payment Form, Flex Form checkout, or 3DS redirection to verify the plan has been properly authorized before fulfilling the order.
      parameters:
      - name: installmentPlanNumber
        in: path
        required: true
        description: The unique installment plan number returned from initiate
        schema:
          type: string
      responses:
        '200':
          description: Authorization verified successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VerifyAuthorizationResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /installmentplans/{installmentPlanNumber}:
    get:
      tags:
      - Installment Plans
      operationId: fetchPlanByNumber
      summary: Fetch Plan by Number
      description: Retrieve the details of an installment plan using the plan number.
      parameters:
      - name: installmentPlanNumber
        in: path
        required: true
        description: The unique installment plan number
        schema:
          type: string
      responses:
        '200':
          description: Installment plan details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstallmentPlanResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    put:
      tags:
      - Installment Plans
      operationId: updatePlanByNumber
      summary: Update Plan by Number
      description: Modify installment plan details after authorization. Use to update order details, shipping information, or other plan attributes post-authorization.
      parameters:
      - name: installmentPlanNumber
        in: path
        required: true
        description: The unique installment plan number
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateInstallmentPlanRequest'
      responses:
        '200':
          description: Installment plan updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstallmentPlanResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /installmentplans/search:
    post:
      tags:
      - Installment Plans
      operationId: fetchPlansByAlternateField
      summary: Fetch Plan(s) by Alternate Field
      description: Retrieve installment plan(s) using alternate identifiers such as RefOrderNumber or ExtendedParams when the installment plan number is not available.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchInstallmentPlanRequest'
      responses:
        '200':
          description: Installment plan(s) matching search criteria
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchInstallmentPlanResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /installmentplans/updatebyalternatefield:
    put:
      tags:
      - Installment Plans
      operationId: updatePlanByAlternateField
      summary: Update Plan By Alternate Field
      description: Modify installment plan details using alternate identifiers such as RefOrderNumber or ExtendedParams instead of the plan number.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateByAlternateFieldRequest'
      responses:
        '200':
          description: Installment plan updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstallmentPlanResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /installmentplans/{installmentPlanNumber}/refund:
    post:
      tags:
      - Installment Plans
      operationId: refundPlan
      summary: Refund a Plan
      description: Process a partial or complete refund for an installment plan. Supports both full refunds and partial refunds for installment transactions.
      parameters:
      - name: installmentPlanNumber
        in: path
        required: true
        description: The unique installment plan number
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RefundRequest'
      responses:
        '200':
          description: Refund processed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RefundResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  schemas:
    UpdateInstallmentPlanRequest:
      type: object
      properties:
        refOrderNumber:
          type: string
          description: Updated merchant reference order number
        extendedParams:
          type: object
          additionalProperties:
            type: string
          description: Updated key-value parameters
        shippingAddress:
          $ref: '#/components/schemas/BillingAddress'
        captureServiceTrackingInfo:
          type: string
          description: Tracking information for shipped orders
    CreateInstallmentPlanRequest:
      type: object
      required:
      - planData
      - creditCardDetails
      - consumerData
      properties:
        planData:
          $ref: '#/components/schemas/PlanData'
        creditCardDetails:
          $ref: '#/components/schemas/CreditCardDetails'
        billingAddress:
          $ref: '#/components/schemas/BillingAddress'
        consumerData:
          $ref: '#/components/schemas/ConsumerData'
        redirectUrls:
          $ref: '#/components/schemas/RedirectUrls'
    RedirectUrls:
      type: object
      properties:
        succeeded:
          type: string
          format: uri
          description: URL to redirect to on successful payment
        failed:
          type: string
          format: uri
          description: URL to redirect to on payment failure
        cancelled:
          type: string
          format: uri
          description: URL to redirect to if the shopper cancels
    Installment:
      type: object
      properties:
        installmentNumber:
          type: integer
          description: Sequential installment number
        amount:
          $ref: '#/components/schemas/Money'
        processDateTime:
          type: string
          format: date-time
          description: Scheduled or actual processing date/time
        status:
          type: string
          description: Status of this installment
    InitiateInstallmentPlanRequest:
      type: object
      required:
      - planData
      properties:
        planData:
          $ref: '#/components/schemas/PlanData'
        billingAddress:
          $ref: '#/components/schemas/BillingAddress'
        consumerData:
          $ref: '#/components/schemas/ConsumerData'
        redirectUrls:
          $ref: '#/components/schemas/RedirectUrls'
        ux:
          $ref: '#/components/schemas/UXSettings'
    Money:
      type: object
      properties:
        value:
          type: number
          format: float
          description: Monetary amount
        currency:
          type: string
          description: ISO 4217 currency code
          example: USD
    PlanData:
      type: object
      properties:
        totalAmount:
          $ref: '#/components/schemas/Money'
        numberOfInstallments:
          type: integer
          description: Number of monthly installments
          example: 3
        refOrderNumber:
          type: string
          description: Merchant's reference order number
        extendedParams:
          type: object
          additionalProperties:
            type: string
          description: Additional merchant-defined key-value parameters
        firstInstallmentAmount:
          $ref: '#/components/schemas/Money'
        firstChargeDate:
          type: string
          format: date
          description: Date of the first installment charge
    InitiateInstallmentPlanResponse:
      type: object
      properties:
        installmentPlanNumber:
          type: string
          description: Unique identifier for the installment plan
        checkoutUrl:
          type: string
          format: uri
          description: URL to redirect the shopper to complete checkout
        status:
          type: string
          description: Current status of the plan
    UXSettings:
      type: object
      properties:
        returnUrl:
          type: string
          format: uri
          description: Return URL after checkout completion
    RefundResponse:
      type: object
      properties:
        refundId:
          type: string
          description: Unique identifier for the refund
        installmentPlanNumber:
          type: string
          description: The plan that was refunded
        refundedAmount:
          $ref: '#/components/schemas/Money'
        status:
          type: string
          description: Status of the refund
    BillingAddress:
      type: object
      properties:
        addressLine1:
          type: string
          description: Street address line 1
        addressLine2:
          type: string
          description: Street address line 2
        city:
          type: string
          description: City
        state:
          type: string
          description: State or province code
        country:
          type: string
          description: ISO 3166-1 alpha-2 country code
          example: US
        zip:
          type: string
          description: Postal/ZIP code
    VerifyAuthorizationResponse:
      type: object
      properties:
        isPlanApproved:
          type: boolean
          description: Whether the installment plan has been approved
        installmentPlanNumber:
          type: string
          description: The plan number being verified
        status:
          type: string
          description: Authorization status
    ErrorResponse:
      type: object
      properties:
        errorCode:
          type: string
          description: Splitit error code (e.g., 400-542, 400-563)
        message:
          type: string
          description: Human-readable error description
        additionalInfo:
          type: string
          description: Additional context about the error
    RefundRequest:
      type: object
      required:
      - amount
      properties:
        amount:
          $ref: '#/components/schemas/Money'
        refundStrategy:
          type: string
          enum:
          - FutureInstallmentsFirst
          - FutureInstallmentsLast
          - FutureInstallmentsLast_PaidFirstInstallmentsFirst
          description: Strategy for applying partial refunds against installments
    CreditCardDetails:
      type: object
      properties:
        cardNumber:
          type: string
          description: Full credit card number (PAN)
        cardExpYear:
          type: integer
          description: Card expiration year (4 digits)
        cardExpMonth:
          type: integer
          description: Card expiration month (1-12)
        cardCvv:
          type: string
          description: Card security code (CVV/CVC)
        cardHolderFullName:
          type: string
          description: Name as it appears on the card
    SearchInstallmentPlanResponse:
      type: object
      properties:
        installmentPlans:
          type: array
          items:
            $ref: '#/components/schemas/InstallmentPlanResponse'
        totalCount:
          type: integer
    ConsumerData:
      type: object
      properties:
        fullName:
          type: string
          description: Shopper's full name
        email:
          type: string
          format: email
          description: Shopper's email address
        phoneNumber:
          type: string
          description: Shopper's phone number
        civilId:
          type: string
          description: National identification number if applicable
        billingAddress:
          $ref: '#/components/schemas/BillingAddress'
    UpdateByAlternateFieldRequest:
      type: object
      required:
      - identifier
      properties:
        identifier:
          type: object
          properties:
            refOrderNumber:
              type: string
              description: Merchant reference order number to identify the plan
            extendedParams:
              type: object
              additionalProperties:
                type: string
        updateData:
          $ref: '#/components/schemas/UpdateInstallmentPlanRequest'
    SearchInstallmentPlanRequest:
      type: object
      properties:
        refOrderNumber:
          type: string
          description: Merchant reference order number
        extendedParams:
          type: object
          additionalProperties:
            type: string
          description: Key-value pairs to match against
    InstallmentPlanResponse:
      type: object
      properties:
        installmentPlanNumber:
          type: string
          description: Unique identifier for the installment plan
        status:
          type: string
          description: Current plan status (e.g., Active, Cancelled, Cleared)
        planData:
          $ref: '#/components/schemas/PlanData'
        consumerData:
          $ref: '#/components/schemas/ConsumerData'
        installments:
          type: array
          items:
            $ref: '#/components/schemas/Installment'
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorResponse'
  responses:
    Forbidden:
      description: Forbidden - merchant has no right to access this resource
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Unauthorized:
      description: Unauthorized - token is not authorized or is expired
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: Not Found - resource does not exist
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    InternalServerError:
      description: Internal Server Error - unexpected server condition
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    UnprocessableEntity:
      description: Unprocessable Entity - validation error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT