Keap File API

The File API from Keap — 2 operation(s) for file.

Operations 5

GET /rest/v1/files/{fileId} Retrieve File #
PUT /rest/v1/files/{fileId} Replace File #
DELETE /rest/v1/files/{fileId} Delete File #
GET /rest/v1/files List Files #
POST /rest/v1/files Upload File #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/keap-file-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

keap-file-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Keap File 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: v1
servers:
- url: https://api.infusionsoft.com/crm
security:
- oauth2: []
tags:
- name: File
  description: File-Endpoint
paths:
  /rest/v1/files/{fileId}:
    get:
      tags:
      - File
      summary: Retrieve File
      description: 'Retrieves metadata about a specific file. Optionally returns the base64 encoded file data.


        **Note:** Files larger than 8MB may cause errors when retrieved via the v1 API due to Base64 encoding overhead. For files approaching or exceeding this size, use the v2 Files endpoint, which returns file data as byte arrays without encoding limitations.'
      operationId: getFile
      parameters:
      - name: fileId
        in: path
        required: true
        schema:
          type: integer
          format: int64
      - name: optional_properties
        in: query
        description: Comma-delimited list of File properties to include in the response. (Some fields such as `file_data` aren't included, by default.)
        schema:
          type: string
      responses:
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '406':
          description: Not Acceptable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '412':
          description: Precondition Failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileInformation'
    put:
      tags:
      - File
      summary: Replace File
      description: Upload a base64 encoded file to replace an existing one. `contact_id` is required only when `file_association` is `CONTACT`.
      operationId: updateFile
      parameters:
      - name: fileId
        in: path
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FileUpload'
        required: true
      responses:
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '406':
          description: Not Acceptable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '412':
          description: Precondition Failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileInformation'
    delete:
      tags:
      - File
      summary: Delete File
      description: Deletes the specified file
      operationId: deleteFile
      parameters:
      - name: fileId
        in: path
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '406':
          description: Not Acceptable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '412':
          description: Precondition Failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '204':
          description: No Content
  /rest/v1/files:
    get:
      tags:
      - File
      summary: List Files
      description: Retrieves a list of all files
      operationId: listFiles
      parameters:
      - name: fileQueryCommand
        in: query
        required: true
        schema:
          $ref: '#/components/schemas/FileQueryCommand'
      responses:
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '406':
          description: Not Acceptable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '412':
          description: Precondition Failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileList'
    post:
      tags:
      - File
      summary: Upload File
      description: Upload a base64 encoded file. `contact_id` is required only when `file_association` is `CONTACT`.
      operationId: createFile
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FileUpload'
        required: true
      responses:
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '406':
          description: Not Acceptable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '412':
          description: Precondition Failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModelAndView'
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileInformation'
components:
  schemas:
    FileDescriptor:
      type: object
      properties:
        category:
          type: string
          enum:
          - Attachments
          - Cart
          - Documents
          - Hidden
          - Invoice
          - Logo
          - Tickets
          - WebForm
          - Funnel
        date_created:
          type: string
          format: date-time
        last_updated:
          type: string
          format: date-time
        file_name:
          type: string
        file_size:
          type: integer
          format: int64
        created_by:
          type: integer
          format: int64
        public:
          type: boolean
        contact_id:
          type: integer
          format: int64
        remote_file_key:
          type: string
        file_box_type:
          type: string
          enum:
          - Application
          - Image
          - Fax
          - Attachment
          - Ticket
          - Contact
          - DigitalProduct
          - Import
          - Hidden
          - WebForm
          - StyledCart
          - ReSampledImage
          - TemplateThumbnail
          - Funnel
          - LogoThumbnail
          - Unlayer
          - BrandingCenterLogo
        download_url:
          type: string
    ModelAndView:
      type: object
      properties:
        view:
          $ref: '#/components/schemas/View'
        model:
          type: object
          additionalProperties: {}
        status:
          oneOf:
          - $ref: '#/components/schemas/DefaultHttpStatusCode'
          - $ref: '#/components/schemas/HttpStatus'
        modelMap:
          type: object
          additionalProperties: {}
          properties:
            empty:
              type: boolean
        reference:
          type: boolean
        empty:
          type: boolean
        viewName:
          type: string
    HttpStatusCode:
      type: object
      properties:
        error:
          type: boolean
        is1xxInformational:
          type: boolean
        is2xxSuccessful:
          type: boolean
        is3xxRedirection:
          type: boolean
        is4xxClientError:
          type: boolean
        is5xxServerError:
          type: boolean
    DefaultHttpStatusCode:
      allOf:
      - $ref: '#/components/schemas/HttpStatusCode'
    FileUpload:
      type: object
      description: fileUpload
      properties:
        file_name:
          type: string
          writeOnly: true
        file_data:
          type: string
          writeOnly: true
        contact_id:
          type: integer
          format: int64
          writeOnly: true
        is_public:
          type: boolean
          writeOnly: true
        file_association:
          type: string
          enum:
          - CONTACT
          - USER
          - COMPANY
          writeOnly: true
        public:
          type: boolean
    View:
      type: object
      properties:
        contentType:
          type: string
    HttpStatus:
      allOf:
      - $ref: '#/components/schemas/HttpStatusCode'
      enum:
      - 100 CONTINUE
      - 101 SWITCHING_PROTOCOLS
      - 102 PROCESSING
      - 103 EARLY_HINTS
      - 200 OK
      - 201 CREATED
      - 202 ACCEPTED
      - 203 NON_AUTHORITATIVE_INFORMATION
      - 204 NO_CONTENT
      - 205 RESET_CONTENT
      - 206 PARTIAL_CONTENT
      - 207 MULTI_STATUS
      - 208 ALREADY_REPORTED
      - 226 IM_USED
      - 300 MULTIPLE_CHOICES
      - 301 MOVED_PERMANENTLY
      - 302 FOUND
      - 303 SEE_OTHER
      - 304 NOT_MODIFIED
      - 307 TEMPORARY_REDIRECT
      - 308 PERMANENT_REDIRECT
      - 400 BAD_REQUEST
      - 401 UNAUTHORIZED
      - 402 PAYMENT_REQUIRED
      - 403 FORBIDDEN
      - 404 NOT_FOUND
      - 405 METHOD_NOT_ALLOWED
      - 406 NOT_ACCEPTABLE
      - 407 PROXY_AUTHENTICATION_REQUIRED
      - 408 REQUEST_TIMEOUT
      - 409 CONFLICT
      - 410 GONE
      - 411 LENGTH_REQUIRED
      - 412 PRECONDITION_FAILED
      - 413 CONTENT_TOO_LARGE
      - 413 PAYLOAD_TOO_LARGE
      - 414 URI_TOO_LONG
      - 415 UNSUPPORTED_MEDIA_TYPE
      - 416 REQUESTED_RANGE_NOT_SATISFIABLE
      - 417 EXPECTATION_FAILED
      - 418 I_AM_A_TEAPOT
      - 421 MISDIRECTED_REQUEST
      - 422 UNPROCESSABLE_CONTENT
      - 422 UNPROCESSABLE_ENTITY
      - 423 LOCKED
      - 424 FAILED_DEPENDENCY
      - 425 TOO_EARLY
      - 426 UPGRADE_REQUIRED
      - 428 PRECONDITION_REQUIRED
      - 429 TOO_MANY_REQUESTS
      - 431 REQUEST_HEADER_FIELDS_TOO_LARGE
      - 451 UNAVAILABLE_FOR_LEGAL_REASONS
      - 500 INTERNAL_SERVER_ERROR
      - 501 NOT_IMPLEMENTED
      - 502 BAD_GATEWAY
      - 503 SERVICE_UNAVAILABLE
      - 504 GATEWAY_TIMEOUT
      - 505 HTTP_VERSION_NOT_SUPPORTED
      - 506 VARIANT_ALSO_NEGOTIATES
      - 507 INSUFFICIENT_STORAGE
      - 508 LOOP_DETECTED
      - 509 BANDWIDTH_LIMIT_EXCEEDED
      - 510 NOT_EXTENDED
      - 511 NETWORK_AUTHENTICATION_REQUIRED
    FileQueryCommand:
      type: object
      properties:
        limit:
          type: integer
          format: int32
        offset:
          type: integer
          format: int32
        viewable:
          type: string
          enum:
          - PUBLIC
          - PRIVATE
          - BOTH
        permission:
          type: string
          enum:
          - USER
          - COMPANY
          - BOTH
        type:
          type: string
          enum:
          - Application
          - Image
          - Fax
          - Attachment
          - Ticket
          - Contact
          - DigitalProduct
          - Import
          - Hidden
          - WebForm
          - StyledCart
          - ReSampledImage
          - TemplateThumbnail
          - Funnel
          - LogoThumbnail
          - Unlayer
          - BrandingCenterLogo
        name:
          type: string
        contact_id:
          type: integer
          format: int64
        contactId:
          type: integer
          format: int64
    FileList:
      type: object
      properties:
        files:
          type: array
          items:
            $ref: '#/components/schemas/FileDescriptor'
        count:
          type: integer
          format: int32
        next:
          type: string
        previous:
          type: string
    FileInformation:
      type: object
      properties:
        file_descriptor:
          $ref: '#/components/schemas/FileDescriptor'
        file_data:
          type: string
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://accounts.infusionsoft.com/app/oauth/authorize
          tokenUrl: https://api.infusionsoft.com/token
          scopes: {}