/me
read permission
The key and its workspace
curl https://wigrow.widevelop.us/api/v1/me \
-H "Authorization: Bearer wg_your_key"
Developers · API v1.0.0
Read your leads, companies, campaigns, conversations, deals, meetings and balances, add leads, and receive signed webhooks. JSON over HTTPS.
read permission (add write to add leads or manage webhooks). Copy it: it is shown once.curl https://wigrow.widevelop.us/api/v1/me \
-H "Authorization: Bearer wg_your_key"
Every request needs Authorization: Bearer wg_…. A key belongs to one business and only ever sees that business's data. Keys are stored as a one-way hash; if you lose one, create a new one. A missing, wrong, revoked or expired key gets 401; a key without the needed permission gets 403 insufficient_scope.
Errors always look like this, with a stable code you can program against:
{"error": {"code": "validation_failed", "message": "Some fields are not valid.", "details": {"email": ["…"]}}}
| Status | Codes |
|---|---|
| 400 | bad_request, invalid_idempotency_key |
| 401 | unauthenticated |
| 403 | insufficient_scope, plan_required, account_suspended |
| 404 | not_found (also for records of another business) |
| 409 | duplicate, idempotency_mismatch, idempotency_in_progress |
| 422 | validation_failed, suppressed |
| 429 | rate_limited |
| 5xx | server_error, api_disabled |
Each key may make a set number of requests per minute (60 by default; the exact number is in X-RateLimit-Limit). Every response has X-RateLimit-Limit and X-RateLimit-Remaining. Over the limit you get 429 with Retry-After (seconds).
Lists take page and per_page (1–100, default 25) and return data, meta (page, per_page, total, last_page) and links (next, prev). Follow links.next until it is null.
Send Idempotency-Key: <any unique string> with a POST to retry it safely. Within 24 hours, the same key with the same body returns the first response again (with Idempotent-Replayed: true); the same key with a different body is refused with 409.
The version is part of the path: /api/v1. Within v1 we may add fields and endpoints; we never remove or rename them. Ignore fields you do not know.
Add an endpoint (a public https:// address) in the app or with POST /webhooks. We send a JSON POST for each event you chose:
contact.created — A lead was added (research, import, the API or by hand).reply.received — A lead replied to an email.meeting.scheduled — A meeting was confirmed in the calendar.opportunity.won — A deal was marked won.Each delivery has Wi-Grow-Event, Wi-Grow-Delivery (also the id in the body; it stays the same on retries) and Wi-Grow-Signature: t=<unix time>,v1=<signature>. Verify it before trusting the body:
// PHP
[$t, $v1] = sscanf($_SERVER['HTTP_WI_GROW_SIGNATURE'], 't=%d,v1=%s');
$expected = hash_hmac('sha256', $t.'.'.file_get_contents('php://input'), $secret);
$valid = hash_equals($expected, $v1) && abs(time() - $t) < 300;
Answer with any 2xx within 10 seconds. Otherwise we retry after 1 minute, 5 minutes, 30 minutes, 2 hours and 6 hours. After 15 failed deliveries in a row the endpoint is switched off; you can switch it back on in the app.
In Developer API, Revoke stops a key at once. Rotate creates a new secret with the same name and permissions and stops the old one at once, so update your systems first. Key changes appear in your account's security history.
Bearer, one space) and that the key was not revoked or expired./me
read permission
The key and its workspace
curl https://wigrow.widevelop.us/api/v1/me \
-H "Authorization: Bearer wg_your_key"
/balances
read permission
Lead, credit and pay-as-you-go balances
curl https://wigrow.widevelop.us/api/v1/balances \
-H "Authorization: Bearer wg_your_key"
/usage
read permission
Usage transactions (balance history)
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | integer | |
per_page | query | integer | |
kind | query | string: leads, credits, balance | Only leads, credits or the pay-as-you-go balance (amounts in minor units). |
since | query | string (date-time) | Entries on or after this time. |
curl https://wigrow.widevelop.us/api/v1/usage \
-H "Authorization: Bearer wg_your_key"
/business-profile
read permission
Your business profile
curl https://wigrow.widevelop.us/api/v1/business-profile \
-H "Authorization: Bearer wg_your_key"
/customer-profiles
read permission
Ideal customer profiles
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | integer | |
per_page | query | integer |
curl https://wigrow.widevelop.us/api/v1/customer-profiles \
-H "Authorization: Bearer wg_your_key"
/contacts
read permission
Leads (contacts)
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | integer | |
per_page | query | integer | |
lead_status | query | string: new, qualified, needs_review, disqualified | Filter by lead status. |
company_id | query | integer | Only leads at this company. |
q | query | string | Search name or email. |
updated_since | query | string (date-time) | Changed on or after this time (for syncing). |
curl https://wigrow.widevelop.us/api/v1/contacts \
-H "Authorization: Bearer wg_your_key"
/contacts
write permission
Add a lead
Same checks as a CSV import: email format, your do-not-contact list and duplicates. No leads or credits are charged. Send an Idempotency-Key header to retry safely.
| Parameter | In | Type | Description |
|---|---|---|---|
Idempotency-Key | header | string | Any unique string (1–120 visible ASCII characters) to make retries safe. |
first_name | string | |
last_name | string | |
full_name | string | |
email | string | |
job_title | string | |
company_name | string | |
website | string | |
industry | string | |
company_size | string | |
country | string | |
linkedin | string | |
icp_id | integer | Score the lead against this customer profile. |
curl -X POST https://wigrow.widevelop.us/api/v1/contacts \
-H "Authorization: Bearer wg_your_key" \
-H "Content-Type: application/json" -H "Idempotency-Key: 6f1c…" \
-d '{"full_name":"Ana Ramdial","email":"ana@example.tt","company_name":"Coral Bay Foods","country":"TT"}'
/contacts/{contact}
read permission
One lead
| Parameter | In | Type | Description |
|---|---|---|---|
contact * | path | integer |
curl https://wigrow.widevelop.us/api/v1/contacts/{contact} \
-H "Authorization: Bearer wg_your_key"
/companies
read permission
Companies
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | integer | |
per_page | query | integer | |
q | query | string | Search by name. |
domain | query | string | Exact domain, e.g. acme.com. |
curl https://wigrow.widevelop.us/api/v1/companies \
-H "Authorization: Bearer wg_your_key"
/companies/{company}
read permission
One company
| Parameter | In | Type | Description |
|---|---|---|---|
company * | path | integer |
curl https://wigrow.widevelop.us/api/v1/companies/{company} \
-H "Authorization: Bearer wg_your_key"
/campaigns
read permission
Campaigns
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | integer | |
per_page | query | integer | |
status | query | string: draft, active, paused, completed, cancelled | Filter by status. |
curl https://wigrow.widevelop.us/api/v1/campaigns \
-H "Authorization: Bearer wg_your_key"
/campaigns/{campaign}
read permission
One campaign
| Parameter | In | Type | Description |
|---|---|---|---|
campaign * | path | string (uuid) |
curl https://wigrow.widevelop.us/api/v1/campaigns/{campaign} \
-H "Authorization: Bearer wg_your_key"
/conversations
read permission
Conversations (sales inbox)
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | integer | |
per_page | query | integer | |
needs_reply | query | boolean | Only conversations waiting for your answer. |
contact_id | query | integer | Only this lead. |
curl https://wigrow.widevelop.us/api/v1/conversations \
-H "Authorization: Bearer wg_your_key"
/conversations/{conversation}
read permission
One conversation with its messages
| Parameter | In | Type | Description |
|---|---|---|---|
conversation * | path | string (uuid) |
curl https://wigrow.widevelop.us/api/v1/conversations/{conversation} \
-H "Authorization: Bearer wg_your_key"
/opportunities
read permission
Opportunities (deals)
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | integer | |
per_page | query | integer | |
status | query | string: open, won, lost | Filter by status. |
curl https://wigrow.widevelop.us/api/v1/opportunities \
-H "Authorization: Bearer wg_your_key"
/opportunities/{opportunity}
read permission
One opportunity
| Parameter | In | Type | Description |
|---|---|---|---|
opportunity * | path | string (uuid) |
curl https://wigrow.widevelop.us/api/v1/opportunities/{opportunity} \
-H "Authorization: Bearer wg_your_key"
/meetings
read permission
Meetings
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | integer | |
per_page | query | integer | |
from | query | string (date-time) | Starting on or after. |
to | query | string (date-time) | Starting before. |
curl https://wigrow.widevelop.us/api/v1/meetings \
-H "Authorization: Bearer wg_your_key"
/meetings/{meeting}
read permission
One meeting
| Parameter | In | Type | Description |
|---|---|---|---|
meeting * | path | string (uuid) |
curl https://wigrow.widevelop.us/api/v1/meetings/{meeting} \
-H "Authorization: Bearer wg_your_key"
/webhooks
read permission
Webhook endpoints
| Parameter | In | Type | Description |
|---|---|---|---|
page | query | integer | |
per_page | query | integer |
curl https://wigrow.widevelop.us/api/v1/webhooks \
-H "Authorization: Bearer wg_your_key"
/webhooks
write permission
Add a webhook endpoint
The URL must be a public https address. The response contains the signing secret, shown only this once.
| Parameter | In | Type | Description |
|---|---|---|---|
Idempotency-Key | header | string | Any unique string (1–120 visible ASCII characters) to make retries safe. |
url | string (uri) | |
events | array of string: contact.created, reply.received, meeting.scheduled, opportunity.won |
curl -X POST https://wigrow.widevelop.us/api/v1/webhooks \
-H "Authorization: Bearer wg_your_key" \
-H "Content-Type: application/json" -H "Idempotency-Key: 6f1c…" \
-d '{"url":"https://example.com/hooks/wigrow","events":["contact.created"]}'
/webhooks/{webhook}
read permission
One endpoint with its last 20 deliveries
| Parameter | In | Type | Description |
|---|---|---|---|
webhook * | path | string (uuid) |
curl https://wigrow.widevelop.us/api/v1/webhooks/{webhook} \
-H "Authorization: Bearer wg_your_key"
/webhooks/{webhook}
write permission
Remove a webhook endpoint
| Parameter | In | Type | Description |
|---|---|---|---|
webhook * | path | string (uuid) |
curl -X DELETE https://wigrow.widevelop.us/api/v1/webhooks/{webhook} \
-H "Authorization: Bearer wg_your_key"
id | integer | |
kind | string: leads, credits, balance | |
type | string: grant, consume, reserve, release, expire, revoke, adjust | |
quantity | integer | Positive adds to the balance, negative spends. |
balance_after | integer | |
reference_type | string | null | |
reason | string | null | |
created_at | string | null (date-time) |
id | integer | |
name | string | |
domain | string | null | |
website | string | null | |
industry | string | null | |
size_range | string | null | |
country_code | string | null | |
location | string | null | |
linkedin_url | string | null | |
created_at | string | null (date-time) | |
updated_at | string | null (date-time) |
id | integer | |
full_name | string | |
first_name | string | null | |
last_name | string | null | |
job_title | string | null | |
seniority | string | null | |
email | string | null | |
linkedin_url | string | null | |
location | string | null | |
stage | string | null | |
email_status | string | null: verified, accept_all, unverified, invalid, unknown, none | |
lead_status | string: new, qualified, needs_review, disqualified | |
score | integer | null | |
acquisition | string: research, credits, import, manual, duplicate_review, api | |
company | object | |
last_interaction_at | string | null (date-time) | |
created_at | string | null (date-time) | |
updated_at | string | null (date-time) |
id | string (uuid) | |
name | string | |
objective | string | null | |
status | string: draft, active, paused, completed, cancelled | |
timezone | string | |
send_days | array of integer | |
window_start | string | |
window_end | string | |
daily_limit | integer | |
paused_reason | string | null | |
launched_at | string | null (date-time) | |
completed_at | string | null (date-time) | |
created_at | string | null (date-time) |
id | string (uuid) | |
subject | string | null | |
status | string | |
label | string | null | |
needs_reply | boolean | |
unread | boolean | |
contact_id | integer | null | |
campaign_id | string | null (uuid) | |
last_message_at | string | null (date-time) | |
created_at | string | null (date-time) |
id | string (uuid) | |
name | string | |
status | string: open, won, lost | |
stage | string | null | |
currency | string | |
estimated_value | integer | null | Minor units (cents). |
actual_value | integer | null | Agreed amount in minor units, won deals only. |
expected_close_date | string | null (date) | |
company_id | integer | null | |
contact_id | integer | null | |
closed_at | string | null (date-time) | |
lost_reason | string | null | |
created_at | string | null (date-time) | |
updated_at | string | null (date-time) |
id | string (uuid) | |
title | string | |
status | string: pending, scheduled, unknown, failed, cancelled, logged | |
starts_at | string | null (date-time) | |
ends_at | string | null (date-time) | |
timezone | string | |
location | string | null | |
conference_url | string | null | |
contact_id | integer | null | |
opportunity_id | string | null (uuid) | |
attendees | array of object | |
created_at | string | null (date-time) |
id | string (uuid) | |
url | string (uri) | |
events | array of string: contact.created, reply.received, meeting.scheduled, opportunity.won | |
active | boolean | |
disabled_reason | string | null | |
last_delivery_at | string | null (date-time) | |
created_at | string | null (date-time) |