SendPulse Attachments API

The Attachments API from SendPulse — 3 operation(s) for attachments.

Operations 4

POST /attachments Attach file #
POST /attachments/batch Create attachment #
PUT /attachments/{attachmentId} Update file attachment #
DELETE /attachments/{attachmentId} Delete file attachment #

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/sendpulse-attachments-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 email required.

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

OpenAPI Specification

sendpulse-attachments-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: Using the API for the CRM service, you can integrate your system with CRM from SendPulse and receive detailed information on pipelines, deals, contacts and their attributes and users. You can also create deals and contacts, assign and remove fields, tags, contact details and instant messengers. On the right, there is a button for authorizing requests made on this page. Click “Authorize,” then insert the ID and Secret from your account. To perform a request directly from the page, click the "Try it out" button within each method block. Then fill in input fields if any (for URL parameters, the description is right below the URL request; for body parameters, the description is under the “Scheme” button to the right of the example), and click “Run.” You will find the server response and description of received parameters below.
  title: SendPulse CRM Public Attachments API
  version: 0.1.0
servers:
- url: https://api.sendpulse.com/crm/v1
security:
- apiKey: []
- oauth2: []
tags:
- name: Attachments
paths:
  /attachments:
    post:
      tags:
      - Attachments
      summary: Attach file
      description: First, the file must be uploaded to the file manager, and then the file can be attached.
      requestBody:
        $ref: '#/components/requestBodies/AttachmentBody'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                properties:
                  data:
                    $ref: '#/components/schemas/EntityAttachment'
      operationId: createAttachment
      x-ai-role: file_management_specialist
      x-ai-description: 'Attaches a previously uploaded file to an entity (e.g., email campaign or message). This is a two-step process: the file must first exist in the File Manager before it can be referenced here. This endpoint acts as the binding layer between a stored asset and its intended usage context.'
      x-ai-reasoning-instructions:
      - Confirm the file has already been uploaded to the File Manager before calling this endpoint — attachment will fail if the file does not exist.
      - Retrieve the file URL or identifier from the File Manager response prior to invoking this operation.
      - Validate that the file type is compatible with the target entity (e.g., supported MIME types for email attachments).
      - Be aware of size limits that may apply to attachments depending on the delivery channel.
      x-ai-responding-instructions:
      - Confirm the attachment was created by referencing the returned attachment ID or entity details.
      - If the file was not found or upload was incomplete, instruct the user to complete the file upload step first.
      - Suggest the next logical action, such as linking the attachment to a specific campaign or message.
      x-ai-suggestions:
      - Use `uploadFile` (File Manager) first to obtain the file reference before calling this endpoint.
      - After attaching, associate the attachment with the target resource using its returned ID.
      x-ai-capabilities:
        confirmation:
          type: None
        security_info:
          data_handling:
          - ResourceStateUpdate
  /attachments/batch:
    post:
      tags:
      - Attachments
      summary: Create attachment
      description: First, the file must be uploaded to the file manager, and then the file can be attached.
      requestBody:
        content:
          application/json:
            schema:
              properties:
                attachments:
                  type: array
                  items:
                    type: object
                    properties:
                      link:
                        type: string
                      entityId:
                        type: integer
                      entityType:
                        type: string
                        enum:
                        - deal
                        - task
                        - contact
                        - dealComment
                        - taskComment
                        - contactComment
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/EntityAttachment'
      operationId: createAttachmentsBatch
      x-ai-role: crm_data_manager
      x-ai-description: 'Batch-links previously uploaded files (from the File Manager) to CRM entities such as deals, tasks, or contacts. This is a two-step flow: upload file → attach to entity. The endpoint supports heterogeneous batches — a single request can attach files to different entity types simultaneously, reducing round-trips in automation scenarios.'
      x-ai-reasoning-instructions:
      - Remind the user that files must be uploaded to the File Manager first — attachment without a valid file link will fail.
      - Validate that each item in the batch has a `link`, `entityId`, and `entityType` before submitting.
      - If attaching to multiple entity types in one batch, confirm the user intends mixed-entity attachment — it is valid but uncommon.
      - Check that `entityId` values correspond to existing CRM records; attaching to a non-existent entity may silently fail or return a partial success.
      x-ai-responding-instructions:
      - Confirm how many attachments were successfully created from the response `data` array.
      - If the batch is partially successful, clearly indicate which items succeeded and which did not.
      - Suggest verifying attachments by fetching the entity (deal, contact, etc.) and checking its attachment list.
      x-ai-suggestions:
      - Upload files via the File Manager endpoint first, then use the returned links here.
      - Group attachments by entity type for clarity, even though mixed batches are supported.
      x-ai-capabilities:
        confirmation:
          type: None
        security_info:
          data_handling:
          - ResourceStateUpdate
  /attachments/{attachmentId}:
    put:
      tags:
      - Attachments
      summary: Update file attachment
      description: First, the file must be uploaded to the file manager, and then the file can be attached.
      parameters:
      - name: attachmentId
        in: path
        required: true
        schema:
          type: integer
      requestBody:
        $ref: '#/components/requestBodies/AttachmentUpdateBody'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                properties:
                  data:
                    $ref: '#/components/schemas/EntityAttachment'
      operationId: updateAttachment
      x-ai-role: content_asset_manager
      x-ai-description: 'Updates an existing file attachment by linking it to a new or different file from the file manager. This is a two-phase operation: the file must first exist in the file manager before it can be referenced here. Use this to replace the underlying file of an attachment without changing the attachment reference downstream.'
      x-ai-reasoning-instructions:
      - Before calling this endpoint, ensure the target file has already been uploaded via the file manager — this endpoint does not accept raw file data.
      - Verify the attachmentId exists and belongs to the current account to avoid 404 errors.
      - If the goal is to swap a file used in active campaigns, warn the user that the change may affect in-flight or scheduled sends depending on timing.
      x-ai-responding-instructions:
      - Confirm the update was applied by referencing the attachmentId and the new file details from the response.
      - If the file manager upload step was skipped, guide the user to upload the file first before retrying.
      - Suggest verifying the updated attachment is still correctly referenced in any campaigns or templates that use it.
      x-ai-suggestions:
      - Use `uploadFile` (file manager) to obtain a file reference before calling this endpoint.
      - After updating, call the relevant campaign endpoint to confirm the attachment is still correctly linked.
      x-ai-capabilities:
        confirmation:
          type: Recommended
          message: Updating an attachment will replace the file for all entities referencing this attachmentId.
        security_info:
          data_handling:
          - ResourceStateUpdate
    delete:
      tags:
      - Attachments
      summary: Delete file attachment
      parameters:
      - name: attachmentId
        in: path
        required: true
        schema:
          type: integer
      responses:
        '204':
          description: Successfully detached
      operationId: deleteAttachment
      x-ai-role: file_management_specialist
      x-ai-description: Permanently detaches and removes a file attachment by its ID. Use this to clean up uploaded files that are no longer needed, free storage, or revoke file access linked to a specific attachment record.
      x-ai-reasoning-instructions:
      - Confirm the attachmentId exists before attempting deletion to avoid misleading 404 errors.
      - Warn the user that deletion is irreversible — the file cannot be recovered after this call.
      - Check if the attachment is referenced by active campaigns or messages before deleting to prevent broken links.
      x-ai-responding-instructions:
      - Confirm successful deletion with a clear message since the response body is empty (204 No Content).
      - If a 404 is returned, clarify that the attachment may have already been deleted or the ID is incorrect.
      - Suggest uploading a replacement file if the deletion was accidental.
      x-ai-suggestions:
      - Use `listAttachments` first to retrieve valid attachmentId values.
      - After deletion, verify removal by attempting to fetch the attachment — expect a 404.
      x-ai-capabilities:
        confirmation:
          type: Required
          message: This action permanently deletes the attachment and cannot be undone.
        security_info:
          data_handling:
          - IrreversibleDelete
components:
  requestBodies:
    AttachmentBody:
      content:
        application/json:
          schema:
            type: object
            properties:
              link:
                type: string
                example: /contacts/sendPulse_crm_report.pdf
                description: First, the file must be uploaded to the file manager, and then the file can be attached.
              entityId:
                type: number
                description: ID of entityType (example - id of task, if entityType=task)
              entityType:
                type: string
                description: 'One of entity types: task, deal, contact'
    AttachmentUpdateBody:
      content:
        application/json:
          schema:
            type: object
            properties:
              link:
                type: string
                example: /contacts/sendPulse_crm_report.pdf
                description: First, the file must be uploaded to the file manager, and then the file can be attached.
  schemas:
    EntityAttachment:
      type: object
      properties:
        id:
          type: integer
        link:
          type: string
        entityId:
          type: number
        entityType:
          type: string
        createdAt:
          type: string
        updatedAt:
          type: string
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: 'Static API Key authentication.  A long-lived token generated manually in the SendPulse account settings.

        '
      x-ai-description: 'Permanent authentication token. Ideal for simple integrations without token refresh logic.

        '
    outh2:
      type: oauth2
      description: OAuth 2.0 Client Credentials flow for temporary access tokens.
      flows:
        clientCredentials:
          tokenUrl: https://api.sendpulse.com/oauth/access_token
          scopes: {}
      x-ai-description: 'Standard OAuth 2.0 flow using Client ID and Client Secret.  Provides temporary tokens (valid for 1 hour) for enhanced security.

        '