# Send agent reply with attachment (deprecated)

Deprecated. Upload media via Upload media for an agent message (v2) then send the returned mediaUrl with Send an agent message (v2). The two-step flow is channel-agnostic and replaces this WhatsApp-oriented multipart endpoint, which is retained only for existing integrations.

Send a message with a file attachment (image, document, video) from an agent.

Endpoint: POST /pl4chat-service/Message/sendMessageWithAttachment
Version: 3.0.0
Security: apikeyAuth

## Request fields (multipart/form-data):

  - `file` (string, required)
    The file to attach (image, document, video).

  - `message` (object, required)

  - `message.id` (string)
    Example: "c9d01234-e5f6-a7b8-c9d0-1234e5f6a7b8"

  - `message.tempId` (string)
    Temporary client-generated ID used to correlate the request with the response.
    Example: "c9f0b308-1a0d-3f3f-7912-464f06677c6b"

  - `message.replyType` (string)
    Enum: "QUICKREPLY", "NOTIFICATION", "SIMPLE"

  - `message.direction` (string)
    Enum: "OUTGOING", "INCOMING"

  - `message.contentType` (string)
    Enum: "BUTTON", "CAROUSEL", "DROPDOWN", "IMAGE", "TEXT", "DATE", "FILE", "MEDIA", "LOCATION", "RATING"

  - `message.text` (string)
    Example: "Hello, I need help with my account."

  - `message.question` (string)
    Example: "What is your account number?"

  - `message.answer` (string)
    Example: "ACC-001234"

  - `message.quickReply` (boolean)

  - `message.createdTime` (string)
    Example: "2026-01-15T10:30:00Z"

  - `message.clientRef` (string)
    Example: "Growthpoint"

  - `message.channel` (string)
    Enum: "WHATSAPP", "WEB", "FACEBOOK"

  - `message.messageOwner` (string)
    Identifies who sent the message.
    Enum: "agent", "customer", "system"

  - `message.userOriginated` (boolean)
    Example: true

  - `message.agent` (object)

  - `message.agent.id` (string)
    Example: "e1f2a3b4-c5d6-7890-e1f2-a3b4c5d67890"

  - `message.agent.email` (string)
    Example: "agent@example.com"

  - `message.agent.password` (string)
    Example: "********"

  - `message.agent.tempPassword` (string,null)
    Example: "********"

  - `message.agent.role` (string)
    Enum: "CLIENT"

  - `message.agent.liveChatRole` (string)
    Enum: "SUPERVISOR", "AGENT"

  - `message.agent.primaryEmailAddress` (string,null)
    Example: "agent@example.com"

  - `message.agent.mobileNumber` (string,null)
    Example: "+27821234567"

  - `message.agent.sentLowerCreditLimitMail` (boolean)

  - `message.agent.sentZeroCreditMail` (boolean)

  - `message.agent.apiKey` (string)
    Example: "64a1b2c3d4e5f67890abcdef"

  - `message.agent.disabled` (boolean)

  - `message.agent.deleted` (boolean)

  - `message.agent.emailVerificationKey` (string,null)

  - `message.agent.passwordResetKey` (string,null)

  - `message.agent.inactivityNodeId` (string,null)
    Example: "node-inactivity-001"

  - `message.agent.publicHolidayInactivityNodeId` (string,null)
    Example: "node-holiday-001"

  - `message.agent.officeClosedInactivityNodeId` (string,null)
    Example: "node-closed-001"

  - `message.agent.autoResponseNodeId` (string,null)
    Example: "node-auto-001"

  - `message.agent.client` (object)

  - `message.agent.client.id` (string)
    Example: "dbdb8809-6fd0-4cd2-8574-502f0f61a69d"

  - `message.agent.client.clientRef` (string)
    Example: "Growthpoint"

  - `message.agent.client.accountType` (string)
    Example: "Postpaid"

  - `message.agent.client.countryCode` (string)
    Example: "ZA"

  - `message.agent.client.countryTimezone` (string)
    Example: "Africa/Johannesburg"

  - `message.agent.client.pricingModel` (string)
    Example: "PMP"

  - `message.agent.client.clientPlatformCharge` (number,null)
    Example: 0.1

  - `message.agent.client.clientNotificationCharge` (number)
    Example: 0.35

  - `message.agent.client.clientSession24HourCharge` (number)
    Example: 0.35

  - `message.agent.client.clientConversationCharge` (number)
    Example: 0.35

  - `message.agent.client.userInitiatedConversationCharge` (number,null)
    Example: 0.2

  - `message.agent.client.businessInitiatedConversationCharge` (number)
    Example: 1.25

  - `message.agent.client.clientWhatsAppBalance` (number)
    Example: 1000

  - `message.agent.client.clientSMSBalance` (number)
    Example: 10

  - `message.agent.client.primaryEmailAddress` (string,null)
    Example: "admin@example.com"

  - `message.agent.client.secondaryEmailAddress` (string,null)
    Example: "backup@example.com"

  - `message.agent.client.clientEmailAddress` (string,null)
    Example: "client@example.com"

  - `message.agent.client.upperNotificationLimit` (number,null)
    Example: 100

  - `message.agent.client.lowerNotificationLimit` (number,null)
    Example: 10

  - `message.agent.client.upperNotificationLimitMailSent` (boolean)

  - `message.agent.client.lowerNotificationLimitMailSent` (boolean)

  - `message.agent.client.zeroBalanceNotificationMailSent` (boolean)

  - `message.agent.client.lastUpperNotificationMailSentTime` (string,null)
    Example: "2026-01-15T10:30:00+02:00"

  - `message.agent.client.lastLowerNotificationMailSentTime` (string,null)
    Example: "2026-01-20T14:00:00+02:00"

  - `message.agent.client.lastZeroBalanceNotificationMailSentTime` (string,null)

  - `message.agent.client.smsMode` (string)
    Example: "fallback"

  - `message.agent.client.smsFallback` (boolean)
    Example: true

  - `message.agent.client.smsUserId` (string)
    Example: "support@ecommunicate.co.za"

  - `message.agent.client.smsPassword` (string)
    Example: "********"

  - `message.agent.client.smsClientRef` (string)
    Example: "ecomtest1"

  - `message.agent.client.reseller` (boolean)

  - `message.agent.client.parentClient` (object,null)

  - `message.agent.client.license` (object,null)

  - `message.agent.client.useParentNumber` (boolean)

  - `message.agent.client.useParentCredit` (boolean)

  - `message.agent.client.userInitiatedConversationBalance` (number)
    Example: 100

  - `message.agent.client.businessInitiatedConversationBalance` (number)
    Example: 973

  - `message.agent.client.popiaComplianceEnabled` (boolean)
    Example: true

  - `message.agent.client.eligible1000Free` (boolean)
    Example: true

  - `message.agent.client.splitConversation` (boolean)
    Example: true

  - `message.agent.client.monthlyFundAllocation` (boolean)
    Example: true

  - `message.agent.client.monthlyBusinessInitiatedBalanceAllocation` (number)
    Example: 1000

  - `message.agent.client.monthlyUserInitiatedBalanceAllocation` (number)
    Example: 100

  - `message.agent.client.useApi` (boolean)
    Example: true

  - `message.agent.client.headerKeyPairsJson` (string)
    JSON array of key-value header pairs.
    Example: "[{\"key\": \"Authorization\", \"value\": \"your-api-key\"}]"

  - `message.agent.clientRef` (string,null)

  - `message.agent.ticketCount` (integer,null)
    Example: 5

  - `message.agent.lastSeen` (string,null)

  - `message.agent.resetPasswordEmailSent` (boolean)

  - `message.agent.emailVerified` (boolean)

  - `message.agent.firstName` (string)
    Example: "Jane"

  - `message.agent.lastName` (string)
    Example: "Doe"

  - `message.agent.agentChatLimit` (integer)
    Max concurrent chats.
    Example: 5

  - `message.agent.availabilityStatus` (boolean)
    Example: true

  - `message.agent.initialPassword` (boolean)

  - `message.agent.tempAccount` (boolean)

  - `message.agent.loginToken` (string)
    Example: "1d368c30-c9f8-4523-b8c2-3824ba72ff5c"

  - `message.agent.validToken` (boolean)

  - `message.agent.avatar` (string)
    Example: "https://example.com/avatars/jane.jpg"

  - `message.agent.shouldGetNotifications` (boolean)
    Example: true

  - `message.agent.applicationKey` (string)
    Example: "a3b4c5d6-e7f8-9012-a3b4-c5d6e7f89012"

  - `message.agent.userId` (string)
    Example: "21c28d3e-bc5c-4bc9-99be-fe283df71653"

  - `message.agent.applicationClientId` (string)
    Example: "1d368c30-c9f8-4523-b8c2-3824ba72ff5c"

  - `message.agent.allowedSharedInbox` (boolean)
    Example: true

  - `message.agent.allowedUnassignedInbox` (boolean)
    Example: true

  - `message.agent.assignmentMessage` (string)
    Custom message sent to the customer when a chat is assigned to this agent. If null, defaults to 'Assigned to ``'.
    Example: "Hi, I'm Jane and I'll be assisting you today."

  - `message.chatParticipant` (object)

  - `message.chatParticipant.id` (string)
    Example: "cp-a1b2c3d4"

  - `message.chatParticipant.firstName` (string)
    Example: "John"

  - `message.chatParticipant.lastName` (string)
    Example: "Doe"

  - `message.chatParticipant.fullName` (string)
    Example: "John Doe"

  - `message.chatParticipant.phoneNumber` (string)
    Example: "27821234567"

  - `message.chatParticipant.userId` (string)
    Customer's durable business-scoped user id (BSUID, alpha usernames), e.g. ZA.1021033720668862. Stable across phone-number changes; present even when the phone is withheld.
    Example: "ZA.1021033720668862"

  - `message.chatParticipant.username` (string)
    Customer's optional WhatsApp username (display only).
    Example: "johndoe"

  - `message.chatParticipant.parentUserId` (string)
    BSUID of the parent WhatsApp Business portfolio, when applicable.
    Example: "ZA.1000000000000000"

  - `message.chatParticipant.email` (string)
    Example: "john.doe@example.com"

  - `message.chatParticipant.subject` (string)
    Example: "Billing Inquiry"

  - `message.chatParticipant.team` (string)
    Example: "Support Team"

  - `message.chatParticipant.whatsAppClientNumber` (string)
    Example: "+27123456789"

  - `message.chatParticipant.conversationClosed` (boolean)

  - `message.chatParticipant.missedConversation` (boolean)

  - `message.chatParticipant.afterHoursConversation` (boolean)

  - `message.chatParticipant.chatBotConversation` (boolean)
    Example: true

  - `message.chatParticipant.sendRatingWidget` (boolean)

  - `message.chatParticipant.clientRef` (string)
    Example: "Growthpoint"

  - `message.chatParticipant.createdTime` (string)
    Example: "2026-01-15T08:00:00Z"

  - `message.chatParticipant.lastMessageTime` (string)
    Example: "2026-01-15T10:35:00Z"

  - `message.chatParticipant.customerLastMessageTime` (string,null)
    Example: "2026-01-15T10:30:00Z"

  - `message.chatParticipant.channel` (string)
    Enum: same as `message.channel` (3 values)

  - `message.chatParticipant.conversationStatus` (string)
    Example: "OPEN"

  - `message.chatParticipant.sender` (string)
    Example: "+27821234567"

  - `message.chatParticipant.assignedTo` (object)

  - `message.chatParticipant.lastAssignedAgent` (object)

  - `message.chatParticipant.openedBy` (string)
    Example: "agent@example.com"

  - `message.chatParticipant.terminatedBy` (string)
    Example: "agent@example.com"

  - `message.chatParticipant.unread` (boolean)
    Example: true

  - `message.chatParticipant.rated` (boolean)

  - `message.chatParticipant.expectingRating` (boolean)

  - `message.chatParticipant.companyName` (string)
    Example: "Acme Corp"

  - `message.chatParticipant.accountNumber` (string)
    Example: "ACC-001234"

  - `message.chatParticipant.activeFlow` (string)
    Example: "main_support_flow"

  - `message.chatParticipant.nodeName` (string)
    Example: "Welcome Node"

  - `message.chatParticipant.botName` (string)
    Example: "Support Bot"

  - `message.chatParticipant.timezone` (string)
    Example: "Africa/Johannesburg"

  - `message.chatParticipant.gstn` (string)
    Global system tracking number
    Example: "a1b2c3d4-e5f6-7890-a1b2-c3d4e5f67890"

  - `message.chatParticipant.ctn` (string)
    Client tracking number
    Example: "b2c3d4e5-f6a7-8901-b2c3-d4e5f6a78901"

  - `message.sentTime` (string)
    Example: "2026-01-15T10:30:01Z"

  - `message.readTime` (string)
    Example: "2026-01-15T10:31:00Z"

  - `message.deliveredTime` (string)
    Example: "2026-01-15T10:30:05Z"

  - `message.sent` (boolean)
    Example: true

  - `message.read` (boolean)

  - `message.delivered` (boolean)
    Example: true

  - `message.errorCode` (string)

  - `message.sender` (string)
    Example: "+27821234567"

  - `message.receiver` (string)
    Example: "+27123456789"

  - `message.ctId` (string)
    Example: "ct-msg-5678"

  - `message.gstId` (string)
    Example: "gst-msg-1234"

  - `message.mediaURL` (string)
    Example: "https://example.com/media/photo.jpg"

  - `message.mediaType` (string)
    Enum: "DOCUMENT", "IMAGE", "VIDEO", "NULL", "BUTTON", "FILE", "AUDIO", "VOICE"

  - `message.latitude` (string)
    Example: "-26.2041"

  - `message.longitude` (string)
    Example: "28.0473"

  - `message.address` (string)
    Example: "123 Main St, Johannesburg"

  - `message.label` (string)
    Example: "Head Office"

  - `message.fileExtension` (string)
    Example: "jpg"

## Response 401 fields (application/json):

  - `status` (string)
    Example: "ERROR"

  - `message` (string)
    Example: "Unauthorized user"

  - `requestId` (string)
    Example: "c3a1f8e2-4b6d-11ee-be56-0242ac120002"

  - `timestamp` (string)
    Example: "2026-01-15T10:30:00Z"


