openapi: 3.2.0 info: title: Keap Payment Methods API description: Keap Public API Documentation termsOfService: https://www.thryv.com/terms-of-use contact: name: Keap url: https://developer.keap.com/get-support email: api.keap@thryv.com license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0 version: v2 servers: - url: https://api.infusionsoft.com/crm security: - oauth2: [] tags: - name: Payment Methods paths: /rest/v2/contacts/{contact_id}/paymentMethods/{payment_method_id}:deactivate: post: tags: - Payment Methods summary: Deactivate a Contact Payment Method description: Deactivate the specified payment method operationId: deactivatePaymentMethod parameters: - name: contact_id in: path description: ID of the contact to which the payment method belongs. required: true schema: type: string - name: payment_method_id in: path description: ID of the payment method to be deactivated. required: true schema: type: string responses: '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Error' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Error' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/Error' '501': description: Method Not Implemented content: application/json: schema: $ref: '#/components/schemas/Error' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '405': description: Method Not Allowed content: application/json: schema: $ref: '#/components/schemas/Error' '204': description: No Content /rest/v2/paymentMethods: get: tags: - Payment Methods summary: List of Payment Methods description: Retrieves a list of Payment Methods operationId: listPaymentMethods parameters: - name: filter in: query description: 'Filter to apply, allowed fields are: - (String) `payment_method_id` - (String) `credit_card_id` - (String) `contact_id` - (String) `merchant_account_id` - (String) `since_time` - (String) `until_time` You will need to apply the `==` operator to check the equality of one of the filters with your searched word, in the encoded form `%3D%3D`. - `filter=payment_method_id%3D%3D123` - `filter=contact_id%3D%3D123%3Bmerchant_account_id%3D%3D567` ' required: false schema: type: string - name: page_token in: query description: Page token required: false schema: type: string - name: order_by in: query description: 'Attribute and direction to order items. One of the following fields: - `payment_method_id` - `created_time` - `contact_id` - `merchant_account_id` One of the following directions: - `desc` - `asc`' required: false schema: type: string - name: page_size in: query description: Total number of items to return per page required: false schema: type: integer format: int32 maximum: 1000 minimum: 0 example: 0 responses: '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Error' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Error' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/Error' '501': description: Method Not Implemented content: application/json: schema: $ref: '#/components/schemas/Error' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '405': description: Method Not Allowed content: application/json: schema: $ref: '#/components/schemas/Error' '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ListPaymentMethodsResponse' /rest/v2/contacts/{contact_id}/paymentMethods: get: tags: - Payment Methods summary: List of Contact Payment Methods description: Retrieves a list of Contact Payment Methods operationId: listPaymentMethods_1 parameters: - name: contact_id in: path description: ID of the contact to which the payment method belongs. required: true schema: type: string - name: filter in: query description: 'Filter to apply, allowed fields are: - (String) `merchant_account_id` You will need to apply the `==` operator to check the equality of one of the filters with your searched word, in the encoded form `%3D%3D`. - `filter=merchant_account_id%3D%3D123` ' required: false schema: type: string - name: page_token in: query description: Page token required: false schema: type: string - name: order_by in: query description: 'Attribute and direction to order items. One of the following fields: - `created_time` One of the following directions: - `desc` - `asc`' required: false schema: type: string - name: page_size in: query description: Total number of items to return per page required: false schema: type: integer format: int32 maximum: 1000 minimum: 0 example: 0 responses: '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Error' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Error' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/Error' '501': description: Method Not Implemented content: application/json: schema: $ref: '#/components/schemas/Error' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '405': description: Method Not Allowed content: application/json: schema: $ref: '#/components/schemas/Error' '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ListContactPaymentMethodsResponse' /rest/v2/contacts/{contact_id}/paymentMethods/{payment_method_id}: delete: tags: - Payment Methods summary: Delete a Contact Payment Method description: Deletes the specified payment method operationId: deletePaymentMethod parameters: - name: contact_id in: path description: ID of the contact to which the payment method belongs. required: true schema: type: string - name: payment_method_id in: path description: ID of the payment method to be deleted. required: true schema: type: string responses: '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Error' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Error' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/Error' '501': description: Method Not Implemented content: application/json: schema: $ref: '#/components/schemas/Error' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' '405': description: Method Not Allowed content: application/json: schema: $ref: '#/components/schemas/Error' '204': description: No Content components: schemas: ErrorDetails: type: object properties: domain: type: string resource: type: string CardInfo: type: object properties: brand: type: string fingerprint: type: string description: A token that uniquely identifies the card info card_type: type: string description: 'The card type. Valid values are: CREDIT, DEBIT, PREPAID.' enum: - CREDIT - DEBIT - PREPAID - ACH last_four: type: string expiration_year: type: string description: Four-digit expiration year expiration_month: type: string description: Two-digit expiration month PaymentMethod: type: object properties: contact_id: type: string description: The id of the contact the payment method is associated with. example: 123 payment_method_id: type: string description: The unique identifier of the payment method. example: 123 credit_card_id: type: string description: For backward-compatibility with v1 endpoints. If present, it's the credit card id this payment method refers to. merchant_account_type: type: string description: The merchant account type through which the payment method was tokenized. enum: - PAYPAL - UNSUPPORTED - AUTHORIZE - EWAY - WEPAY - STRIPE - KEAP_PAY example: STRIPE merchant_account_id: type: string description: The merchant account id through which the payment method was tokenize. payment_method_type: type: string description: The type of payment method. For now, only CARD is supported. enum: - CARD created_time: type: string format: date-time description: When this payment method was made. In ISO-8601 format. example: '2024-05-21T14:30:00Z' card_info: $ref: '#/components/schemas/CardInfo' description: If present, it provides additional details for payment methods of payment_method_type CARD. status: type: string description: Status of the payment method. Fow now, only EXPIRED is supported. enum: - EXPIRED ListContactPaymentMethodsResponse: type: object properties: records: type: array items: $ref: '#/components/schemas/PaymentMethod' next_page_token: type: string ListPaymentMethodsResponse: type: object properties: payment_methods: type: array items: $ref: '#/components/schemas/PaymentMethod' next_page_token: type: string Error: type: object properties: code: type: integer format: int32 message: type: string status: type: string details: type: array items: $ref: '#/components/schemas/ErrorDetails' securitySchemes: oauth2: type: oauth2 flows: authorizationCode: authorizationUrl: https://accounts.infusionsoft.com/app/oauth/authorize tokenUrl: https://api.infusionsoft.com/token scopes: {}