Project Blue
Project Blue
API Reference
  • Documentation
  • Introduction
    Authentication
    Send Message
    Supported Media
    Voice Memos & Audio
    Webhooks
    Error Handling
API Documentation
v1.0
Project Blue
REST API

Project Blue API

Send iMessages and SMS directly from your application. Integrate messaging into your CRM, workflows, or custom tools with a single API call.

Base URL

https://api.tryprojectblue.com

Authentication

All API requests require a Bearer token in the Authorization header. You can generate API keys from within your Project Blue dashboard under Settings → API Keys.

API Keys settings in the Project Blue dashboard
HTTP Header
Authorization: Bearer YOUR_API_KEY

Keep your API keys secure

Never expose your API key in client-side code or public repositories. Always make API calls from your server.

Send Message

POST

/send-api-message

Send a message to a phone number via iMessage or SMS. If the recipient has iMessage, the message is delivered as an iMessage (blue bubble). Otherwise, it falls back to SMS automatically.

Request Body
ParameterTypeRequiredDescription
message

string

Required

The text content of the message to send.

phone

string

Required

Recipient phone number. Accepts many formats — we normalize to E.164 (e.g. +15551234567).

mediaAttachmentUrl

string

Optional

URL to an image, video, or contact card attachment.

audioAttachmentUrl

string

Optional

URL to an audio file sent as a voice memo.

enableAiVoiceMemo

boolean

Optional

When true, generates an AI voice memo from the message text using text-to-speech.

The phone parameter is flexible — we accept formats like (555) 123-4567, 555.123.4567, +15551234567, and more. All numbers are normalized to E.164 format before sending.

Example Request
cURL
curl -X POST https://api.tryprojectblue.com/send-api-message \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "Hey! Just following up on our conversation.",
    "phone": "+15551234567"
  }'
Example with Media Attachment
cURL
curl -X POST https://api.tryprojectblue.com/send-api-message \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "Check out this property!",
    "phone": "+15551234567",
    "mediaAttachmentUrl": "https://example.com/property-photo.jpg"
  }'
Example with AI Voice Memo
cURL
curl -X POST https://api.tryprojectblue.com/send-api-message \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "Hey, wanted to quickly touch base about your appointment tomorrow.",
    "phone": "+15551234567",
    "enableAiVoiceMemo": true
  }'
Success Response
JSON — 200 OK
{
  "success": true,
  "messageId": "msg_abc123def456"
}

Supported Media Types

Use the mediaAttachmentUrl field to send rich media with your messages. The following formats are supported:

Images
JPEG / JPG
PNG
GIF
WebP
Videos
MP4
MOV
AVI
MKV
FLV
WebM
Contact Cards
VCF / vCard

Voice Memos & Audio

Use audioAttachmentUrl to send audio files as voice memos. The following formats are supported:

M4A
MP3
WAV
OGG
WebM
CAF

AI Voice Memos

Set enableAiVoiceMemo to true and include a message to generate a natural-sounding voice memo via text-to-speech. No audio file needed — we generate it for you.

Webhooks

Webhooks let you receive real-time notifications when messages are sent or received. Configure webhooks from within the Project Blue dashboard alongside your API keys.

Configuration

In the Project Blue app, you can:

  • Paste the webhook URL you want to receive events at

  • Toggle whether the webhook fires for outbound messages, inbound messages, or both

  • Send test payloads to verify your endpoint is working

Webhook configuration in the Project Blue dashboard
Webhook Payload

Every webhook event delivers the same payload structure. The direction field indicates whether the message was inbound or outbound.

ParameterTypeRequiredDescription
message

string

Required

The text content of the message.

destination

string

Required

The phone number the message was sent to, in E.164 format.

receivedAt

string

Required

ISO 8601 timestamp of when the message was received.

direction

string

Required

Either "inbound" or "outbound", based on message direction.

messageId

number

Required

Unique numeric identifier for the message.

guid

string

Required

Globally unique message identifier.

linePhoneNumber

string

Required

The Project Blue line phone number associated with this message.

Example — Inbound
JSON — Inbound Webhook
{
  "message": "Yes, I'm interested! When can we schedule?",
  "destination": "+15551234567",
  "receivedAt": "2026-03-04T18:30:00.000Z",
  "direction": "inbound",
  "messageId": 456,
  "guid": "sample-guid-1234",
  "linePhoneNumber": "+15559876543"
}
Example — Outbound
JSON — Outbound Webhook
{
  "message": "Great! Let's book you in for Thursday at 2pm.",
  "destination": "+15551234567",
  "receivedAt": "2026-03-04T18:31:00.000Z",
  "direction": "outbound",
  "messageId": 789,
  "guid": "sample-guid-5678",
  "linePhoneNumber": "+15559876543"
}

Error Handling

The API uses standard HTTP status codes. All error responses include a JSON body with an error field describing what went wrong.

JSON — 401 Unauthorized
{
  "error": "Missing or invalid Authorization header"
}
200

Message sent successfully

400

Invalid request body or missing required fields

401

Missing or invalid API key

429

Rate limit exceeded

500

Internal server error

© 2026 Project Blue Services LLC

WebsiteContact