Skip to Content
Messaging APIQuick Start

Quick Start — End-to-End Endpoint

Generate a personalised message with a single API call.


Before You Start

Complete these 3 steps before making your first request:

  1. Create an API Key — Generate your key at platform.warmai.uk 
  2. Add Users — Share your connect link (connect.warmai.uk ) with users so they can connect their LinkedIn accounts
  3. Configure Webhooks (optional) — Set up webhook URLs to receive real-time notifications when messages are ready

Endpoint

POST https://api.warmai.uk/functions/v1/api-full-request

Required Headers

HeaderTypeDescription
x-access-keyUUIDYour API key from the platform dashboard
x-idempotency-keyUUIDUnique key to prevent duplicate processing
x-user-idUUIDThe ID of the connected user sending the message

Request Body

FieldTypeRequiredDescription
prospect_urlstringYesLinkedIn profile URL of the prospect
product_idstringNoSpecific product to reference in the message
additional_researchstringNoExtra context about the prospect to guide message generation
templateobjectNoOverride default message settings (tone, length, etc.)
research_summarystringNoPre-generated research summary to skip the research step

LinkedIn URL Format: Only personal LinkedIn profile URLs are supported. Company pages, posts, and other URL types will be rejected.

Valid:

  • https://www.linkedin.com/in/johndoe
  • https://linkedin.com/in/johndoe/

Invalid:

  • https://www.linkedin.com/company/acme
  • https://www.linkedin.com/posts/johndoe_some-post
  • https://www.linkedin.com/in/johndoe/detail/recent-activity

Example Request

cURL

curl -X POST https://api.warmai.uk/functions/v1/api-full-request \ -H "Content-Type: application/json" \ -H "x-access-key: your-api-key-uuid" \ -H "x-idempotency-key: unique-request-uuid" \ -H "x-user-id: connected-user-uuid" \ -d '{ "prospect_url": "https://www.linkedin.com/in/johndoe", "product_id": "product-uuid", "additional_research": "Met at SaaS Connect 2026" }'

JavaScript

const response = await fetch( "https://api.warmai.uk/functions/v1/api-full-request", { method: "POST", headers: { "Content-Type": "application/json", "x-access-key": "your-api-key-uuid", "x-idempotency-key": crypto.randomUUID(), "x-user-id": "connected-user-uuid", }, body: JSON.stringify({ prospect_url: "https://www.linkedin.com/in/johndoe", product_id: "product-uuid", additional_research: "Met at SaaS Connect 2026", }), } ); const data = await response.json(); console.log(data);

Example Response

{ "status": "completed", "message_id": "msg-uuid", "generated_message": "Hi John, I noticed your recent work on...", "research_summary": { "recommended_focus": "AI automation for sales teams", "prospect_insights": ["Leads a 50-person sales org", "Recently expanded into EMEA"], "messaging_strategy": "Lead with their EMEA expansion challenges", "product_alignment": "Direct fit with multi-region outreach tooling", "should_send_message": true }, "message_metadata": { "message_type": "connection_request", "word_count": 42, "character_count": 267 } }

Processing State (202)

If the request is still being processed, you will receive a 202 Accepted response. To check the result, poll the same endpoint with the same idempotency key:

{ "status": "processing", "message": "Your request is being processed. Retry with the same idempotency key to check the result." }

Using the same idempotency key for a retry will not create a duplicate request. It will return the result of the original request once processing is complete.


Next Steps

  • Authentication — Detailed guide on API keys and headers
  • Endpoints — Individual endpoints for fine-grained control
  • Webhooks — Set up real-time notifications
Last updated on