---
updatedAt: 2026-04-29T12:20:04.000Z
agentTools:
  projectIndex: https://developers.signwell.com/llms.txt
---

# Validate Bulk Send CSV

Validates a Bulk Send CSV file before creating the Bulk Send. It will check the structure of the CSV and the data it contains, and return any errors found.

# OpenAPI definition

```json
{
  "openapi": "3.0.1",
  "info": {
    "title": "SignWell Developer API",
    "description": "API for creating, managing, and tracking electronic signature workflows.",
    "version": "v1",
    "termsOfService": "https://www.signwell.com/terms/",
    "contact": {
      "email": "support@signwell.com"
    }
  },
  "tags": [
    {
      "name": "Bulk Send",
      "description": "Send a document to multiple recipients in batch using templates."
    }
  ],
  "paths": {
    "/api/v1/bulk_sends/validate_csv": {
      "post": {
        "summary": "Validate Bulk Send CSV",
        "description": "Validates a Bulk Send CSV file before creating the Bulk Send. It will check the structure of the CSV and the data it contains, and return any errors found.",
        "parameters": [],
        "tags": [
          "Bulk Send"
        ],
        "security": [
          {
            "api_key": []
          }
        ],
        "operationId": "validateBulkSendCsv",
        "responses": {
          "200": {
            "description": "successful",
            "content": {
              "application/json": {
                "example": {
                  "bulk_send_csv": "IkRvY3VtZW50IFNlbmRlciBFbWFpbCIsJ0RvY3VtZW50IFNlbmRlciBOYW1lJywvXERvY3VtZW50LSBTZW5kZXIgPUxhYmVsLEBSZWNpcGllbnRfIEVtYWlsLFJlY2lwaWVudCAqTmFtZSxgUmVjaXBpZW50fiFAIyQlXiYqKCl7fVtdPD4uPyBMYWJlbGAKc2VuZGVyQHNpZ253ZWxsLmNvbSxTZW5kZXIsU2VuZGVyLHJlY2lwaWVudEBzaWdud2VsbC5jb20sUmVjaXBpZW50LFJlY2lwaWVudAplbWFpbEBzb21lLmNvbSwsLGVtYWlsMkBzb21lLmNvbQo=",
                  "template_ids": [
                    "bf75dfe8-485e-43f1-8df4-36114e614593"
                  ],
                  "skip_row_errors": false,
                  "api_application_id": null,
                  "name": "exaggerate-kidnap/qui.js",
                  "subject": "Please complete exaggerate-kidnap/qui.js",
                  "message": "<p>Hey there,</p><p>&nbsp;</p><p>Please review and complete this document. You can click on the document below to get started.</p>",
                  "apply_signing_order": false
                },
                "schema": {
                  "$ref": "#/components/schemas/BulkSendValidateCsvResponse"
                }
              }
            }
          },
          "401": {
            "description": "unauthorized",
            "content": {
              "application/json": {
                "example": {
                  "message": "Missing or invalid authorization key",
                  "meta": {
                    "error": "api_key_unauthorized_error",
                    "message": "Not valid authorization token",
                    "messages": [
                      "Not valid authorization token"
                    ]
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "unprocessable entity",
            "content": {
              "application/json": {
                "example": {
                  "errors": {
                    "bulk_send_csv": [
                      {
                        "row": 2,
                        "data": {
                          "document_sender_email": "not an email",
                          "document_sender_name": "email@signwell.com",
                          "document_sender_label": "Label",
                          "recipient_email": "recipient@signwell.com",
                          "recipient_name": "Recipient",
                          "recipient_label": "Recipient"
                        },
                        "errors": [
                          "The following columns have an email address invalid: document_sender_email."
                        ]
                      }
                    ]
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitErrorResponse"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkSendCsvRequest"
              }
            }
          },
          "required": true
        },
        "x-readme": {
          "code-samples": [
            {
              "language": "ruby",
              "name": "Ruby SDK",
              "install": "gem install signwell_sdk",
              "code": "require 'signwell_sdk'\nrequire 'base64'\n\nSignWell.configure do |config|\n  config.api_key['X-Api-Key'] = ENV['SIGNWELL_API_KEY']\nend\n\napi = SignWell::Resources::BulkSendApi.new\n\n# signers.csv columns must match the template's CSV headers —\n# download them with the Get Bulk Send CSV Template endpoint\ncsv = Base64.strict_encode64(File.read('signers.csv'))\n\nrequest = SignWell::Models::BulkSendCsvRequest.new(\n  template_ids: ['template_id'],\n  bulk_send_csv: csv\n)\n\nvalidation = api.validate_bulk_send_csv(request)\nputs validation.to_hash"
            }
          ]
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "api_key": {
        "type": "apiKey",
        "name": "X-Api-Key",
        "in": "header"
      }
    },
    "schemas": {
      "BulkSendCsvRequest": {
        "type": "object",
        "properties": {
          "template_ids": {
            "type": "array",
            "description": "Specify one or more templates to generate a single blank CSV file that will contain available columns for your recipient data. The template_ids[] parameter is an array of template IDs (e.g.,`/?template_ids[]=5a67dbd7-928a-4ea0-a7e2-e476a0eb045f&template_ids[]=d7315111-c671-4b15-8354-c9a19bbaefa0`). Each ID should be a separate parameter in the query string.",
            "items": {
              "type": "string",
              "format": "uuid",
              "example": "00000000-0000-0000-0000-000000000000"
            }
          },
          "bulk_send_csv": {
            "type": "string",
            "description": "A RFC 4648 base64 string of the template CSV file to be validated. While 21 CFR Part 11 is enabled, every recipient needs a name: the CSV must carry a name column next to each placeholder email column (for example `signer_name` alongside `signer_email`), and each row must fill that name in wherever it carries the matching email, otherwise it returns a 422. A row that leaves both the email and the name blank sends nothing to that placeholder, so no name is needed there.",
            "example": "bmFtZSxlbWFpbApUZXN0LHRlc3RAZXhhbXBsZS5jb20K"
          }
        },
        "required": [
          "template_ids",
          "bulk_send_csv"
        ]
      },
      "BulkSendValidateCsvResponse": {
        "type": "object",
        "description": "Validated bulk send CSV response with defaults applied",
        "properties": {
          "bulk_send_csv": {
            "type": "string",
            "description": "Base64-encoded CSV content"
          },
          "template_ids": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "skip_row_errors": {
            "type": "boolean"
          },
          "api_application_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "name": {
            "type": "string"
          },
          "subject": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "apply_signing_order": {
            "type": "boolean"
          }
        },
        "required": [
          "bulk_send_csv",
          "template_ids"
        ]
      },
      "ErrorResponse": {
        "type": "object",
        "description": "Standard error response",
        "properties": {
          "message": {
            "type": "string",
            "description": "Human-readable error message"
          },
          "meta": {
            "type": "object",
            "properties": {
              "error": {
                "type": "string",
                "description": "Error code identifier"
              },
              "message": {
                "type": "string",
                "description": "Detailed error message"
              },
              "messages": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "List of error messages"
              }
            },
            "required": [
              "error",
              "message"
            ]
          }
        }
      },
      "ValidationErrorResponse": {
        "type": "object",
        "description": "Validation error response. The errors object contains field-specific error details with dynamic keys.",
        "properties": {
          "errors": {
            "type": "object",
            "additionalProperties": true,
            "description": "Field-specific validation errors. Keys are field names (e.g., recipients, fields, files). Values can be strings, arrays of strings, or nested objects with further field-specific errors."
          }
        },
        "required": [
          "errors"
        ]
      },
      "RateLimitErrorResponse": {
        "type": "object",
        "description": "Rate limit exceeded error response (HTTP 429)",
        "properties": {
          "error": {
            "type": "string",
            "description": "Rate limit error message indicating the limit and reset time"
          }
        },
        "required": [
          "error"
        ]
      }
    }
  },
  "servers": [
    {
      "url": "https://www.signwell.com"
    }
  ]
}
```