New You can now run your Gelee campaigns from Claude, ChatGPT or Cursor. Read the docs →

Switching from another tool

From Valley

Valley's API calls, webhooks, terms and message variables, each mapped to its Gelee equivalent.

Last updated 25 October 2026

Deciding whether to switch?

The plain-English guide covers what you gain, what you give up and when to stay on Valley: Switching from Valley to Gelee.

What Valley offers

Valley has a JSON REST API at api.joinvalley.co (x-api-key header, OpenAPI schema) covering campaigns, prospects, approvals, inbox, warm lists and analytics, an MCP server, and webhooks it describes as 19 event types (replies, accepted connections, interest changes, prospects added or removed, new outreach and more). Its site says AI agents cannot send outreach on their own: changes need approval.

Their words, our words

ValleyGeleeNotes
CampaignCampaign
ProspectLead
ApprovalsDraftsGET /drafts, approve or skip.
Warm listCampaign leads
LinkedIn accountSeat

API calls

Every Valley call we found in its docs, and the Gelee call that does the same job. Gelee's base URL, keys and limits are in Keys and limits.

ValleyGeleeNotes
ProspectsGET /prospects, /people, POST /campaigns/{id}/leads
ApprovalsGET /drafts, POST /drafts/{id}/approve, /skipOn the Gelee API, your request is the approval.
InboxGET /inbox, GET /inbox/{chat_id}/messages, POST …/messages
AnalyticsGET /analytics/daily, /campaigns/{id}/performance, /health

Webhooks

Gelee signs every delivery and retries failures. Setup and signature checks are in Webhooks.

ValleyGelee webhookNotes
Reply eventsreply_received, reply_positive, reply_negative
Accepted connectionconnection_accepted
Interest changelead_updated, reply_positive
Prospect added / removedlead_accepted, lead_updated (removed)
New outreachinvite_sent, message_sentPick by name.

Message variables

ValleyGelee
First name{{firstName}}
Company{{company}}
A custom field{{custom.field_name}}

Every Gelee variable:

ValueGelee variable
First name{{firstName}}
Full name{{fullName}}
Company{{company}}
Job title{{role}}
Industry{{industry}}
Your own per-lead field{{custom.your_field}}
A fallback when empty{{custom.your_field|default text}}
Sender's name{{senderName}}

Code from the guide

Push the blocklist
curl -X POST "https://www.gelee.ai/api/v1/blacklist" \
  -H "Authorization: Bearer gk_your_key" \
  -H "Content-Type: application/json" \
  -d '{"entries":[
        {"value":"https://www.linkedin.com/in/janedoe","type":"account"},
        {"value":"Acme Corp","type":"company"}
      ]}'
Push leads with your own fields
curl -X POST "https://www.gelee.ai/api/v1/campaigns/CAMPAIGN_ID/leads" \
  -H "Authorization: Bearer gk_your_key" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: import-batch-1" \
  -d '{"leads":[{"linkedin_url":"https://www.linkedin.com/in/janedoe",
                "first_name":"Jane","company":"Acme","title":"VP Sales",
                "custom_fields":{"report_link":"https://acme.example/r/5d70"},
                "tags":["imported"]}]}'

Valley's docs