Contacts
Update a contact
Updates the fields you send and leaves the others unchanged (send null to clear a field; full_name and linkedin_url cannot be cleared). Needs the contacts:write scope.
ready_for_campaign is mainly used for review mode campaigns: true accepts the lead (agent_status becomes qualified), so its lead source agent hands it to the campaign on its next pass without manual review. It needs an agent: the contact's own, or one sent as agent_id in the same call. false takes an accepted lead that has not started a campaign back to review (agent_status new).
intent describes what the contact did (e.g. "Liked our post about outbound") and is saved as a new custom signal on the contact, as with Add a signal to a contact.
https://app.replysparrow.com/api/v1/contacts/{id}Authorizations
Path Parameters
Contact id
Body
application/jsonLinkedIn About section
LinkedIn company page URL
Example: "https://www.linkedin.com/company/techcorp"
What the company does
Profile picture URL
Internal notes about the contact
Workspace member who owns the contact (user id)
Lead source agent to attach the contact to; it is then scored against that agent's ICP
What the contact did that shows interest, e.g. "Liked our post about outbound". Saved as a custom signal on the contact, which raises its intent score
Mainly used for review mode campaigns: true accepts the lead (it needs a lead source agent, already set or sent as agent_id), so its agent hands it to the campaign on its next pass without waiting for an ICP score. false takes an accepted lead back to review (agent_status new)
Response
application/jsonContact successfully updated
Workspace the contact belongs to
First name
Last name
Full name (built from first_name and last_name when not sent)
LinkedIn headline
LinkedIn About section
Current job title
Seniority level
Months in the current role
LinkedIn profile URL
LinkedIn member id (URN)
Profile picture URL
LinkedIn connection degree with your seat (1, 2 or 3)
Location of the contact
City
Country
IANA time zone
Current company name
Linked company record
Employee count of the current company
Industry of the current company
Headquarters of the current company
LinkedIn company page URL
Company logo URL
What the company does
Personal or company website
Dates of the current position
Primary email address
Result of the last email check: valid, invalid, risky, catch_all or unknown
When the email was last verified
1 when the email domain accepts every address
Primary phone number
Buying-signal score from the contact's signals (0-100)
ICP fit score (0-100), set once the contact is scored
ICP verdict, e.g. fit or not_fit
Why the contact does or does not fit the ICP
How sure the ICP verdict is: high, medium or low
Combined lead score (0-100): fit, signals, recency and relevance
When the contact was last scored
Where the contact came from, e.g. api, csv, agent
Lead source agent that sourced the contact
Where the contact is in its agent's pipeline: new, qualified, enrolled, skipped (rejected), ...
Why the contact was rejected or skipped
1 when someone added the contact by hand
Workspace member who owns the contact
Internal notes
When the LinkedIn invitation was sent
When the LinkedIn connection was accepted
Last LinkedIn message sent
Last InMail sent
Last reply on LinkedIn
Last reply by email
How the last reply was classified, e.g. interested, not_interested, out_of_office
When the profile was last enriched
Creation timestamp
Public LinkedIn identifier taken from linkedin_url, e.g. johndoe
Skills from the LinkedIn profile
An email to the contact bounced, or its address was found invalid
The contact unsubscribed from your emails
The person is on your blocklist
The contact's company is on your blocklist
The contact has an email that was found or verified
The contact has a phone number
An email lookup is running for the contact
A phone lookup is running for the contact
The contact's agent accepted it, so its campaign can reach out
The contact is or was enrolled in a campaign
Where the contact stands overall
Available options: newin_campaignfinishedrepliedrejected
When this contact was rejected (null when it is not rejected)
User who rejected this contact
Stable rejection reason code
Available options: company_competitorcompany_wrong_industry_or_typecompany_wrong_sizecompany_wrong_locationcontact_wrong_title_or_functioncontact_wrong_senioritycontact_known_or_duplicatedata_incorrect_or_outdatedsignal_not_relevantothernull
Free-text reason when other was submitted with text
Intent or activity description: the title of the contact's most recent signal
Intent type of the most recent signal, e.g. job_change, funding or custom
Keyword of the most recent signal (its metadata.keyword), e.g. demo_booked
The contact's progress in each campaign and channel
The contact's signals, newest first (up to 50)
Workspace custom field values, by field key
The lead source agent the contact belongs to, as Get a source agent returns it
Lists the contact belongs to
curl --request PATCH \ --url https://app.replysparrow.com/api/v1/contacts/string \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "title": "CTO", "company": "Tech Corp", "notes": "Met at SaaStr", "ready_for_campaign": true}'{ "id": "8f1c2c3e-5b7a-4a51-9d0e-2b6f8f6d9c11", "workspace_id": "ws_123", "first_name": "Ada", "last_name": "Lovelace", "full_name": "Ada Lovelace", "headline": "CTO at Analytical Engines", "summary": null, "title": "CTO", "seniority": null, "tenure_months": null, "linkedin_url": "https://www.linkedin.com/in/ada-lovelace", "sales_nav_url": null, "linkedin_member_urn": null, "profile_image_url": null, "degree": null, "location": "London, UK", "city": null, "country": null, "time_zone": null, "company": "Analytical Engines", "company_id": null, "company_size": 120, "company_industry": "Software Development", "company_location": null, "company_linkedin_url": null, "company_logo_url": null, "company_description": null, "website": null, "position_dates": "2023 - Present", "email": "ada@example.com", "email_status": "valid", "email_verified_at": null, "email_domain_catchall": null, "phone": "+441234567890", "intent_score": 25, "fit_score": 88, "fit_verdict": "fit", "fit_reason": null, "fit_confidence": null, "lead_score": 82, "scored_at": null, "lead_source": "api", "agent_id": null, "agent_status": "qualified", "skip_reason": null, "hand_picked": 0, "owner_id": null, "notes": null, "connection_requested_at": null, "connected_at": null, "message_sent_at": null, "inmail_sent_at": null, "last_replied_at": null, "email_replied_at": null, "reply_kind": null, "enriched_at": null, "created_at": "2026-10-01 09:12:44", "linkedin_identifier": "ada-lovelace", "skills": [ "Mathematics", "Engineering" ], "bounced": false, "unsubscribed": false, "blocked": false, "company_blocked": false, "email_enriched": true, "phone_enriched": true, "enriching_email": false, "enriching_phone": false, "ready_for_campaign": true, "has_started_campaign": true, "state": "in_campaign", "rejected_at": null, "rejected_by_user_id": null, "rejection_reason": null, "rejection_reason_text": null, "intent": "Became CTO at Analytical Engines", "intent_type": "job_change", "intent_keyword": null, "campaign_status": [ { "campaign_id": "a3f1c2d4-0000-4000-8000-000000000001", "campaign_name": "Q4 founders", "track": "linkedin", "state": "in_progress", "current_step": 2, "next_step_at": "2026-10-26 09:00:00" } ], "signals": [ { "id": "c7e0e0a2-2f4b-4c1e-9d55-0b9a4e3f1a10", "contact_id": "8f1c2c3e-5b7a-4a51-9d0e-2b6f8f6d9c11", "type": "job_change", "title": "Became CTO at Analytical Engines", "description": null, "score": 25, "source": "linkedin", "source_url": null, "occurred_at": "2026-09-28T00:00:00.000Z", "metadata": {}, "created_at": "2026-09-28T08:00:00.000Z" } ], "custom_fields": { "favorite_tool": "Notion" }, "agent": { "id": "5b0f3c2e-8a8e-4bd1-9a51-6f1f3c0f2a10", "name": "VP Sales in US SaaS", "target_job_titles": [ "VP Sales", "Head of Sales" ], "target_industries": [ "Software Development" ], "target_company_sizes": [ "51-200", "201-500" ], "target_locations": [ "United States" ], "target_company_types": [], "ignored_companies": [ "Globex" ], "mandatory_keywords": [], "exclude_service_providers": true, "skip_icp_filter": false, "signals": [ { "id": "8e2d…", "type": "competitor_engagement", "values": [ "https://www.linkedin.com/company/globex/" ], "enabled": true } ], "paused": false, "status": "active", "min_lead_score": 70, "list_id": "c1a4…", "last_run": null, "last_error": null, "created_at": "2026-10-24T09:12:44.000Z", "updated_at": "2026-10-24T09:12:44.000Z" }, "lists": [ { "id": "list_1", "name": "Q4 targets", "campaigns": [ { "id": "5b0c6c1e-8a43-4f7e-9d7d-1f8a2b3c4d5e", "name": "Q4 founders", "active": false, "channel": "linkedin", "status": "draft", "goal": "conversations", "tone": "professional", "language": null, "booking_url": null, "exclude_first_degree": true, "split_messages": false, "skip_invitation_after_days": 7, "linkedin_account_id": "acc_123", "email_account_id": null, "linkedin_account_ids": [ "acc_123" ], "email_account_ids": [], "list_id": "9f8e7d6c-0000-4000-8000-000000000001", "list_ids": [ "9f8e7d6c-0000-4000-8000-000000000002" ], "workflow_id": "wf_123", "steps": [ { "id": "st_1", "track": "linkedin", "order": 1, "type": "connect", "delay_days": null, "message": null, "connect_note": null, "email_subject": null, "email_body": null, "ai": true }, { "id": "st_2", "track": "linkedin", "order": 2, "type": "delay", "delay_days": 1, "message": null, "connect_note": null, "email_subject": null, "email_body": null, "ai": false }, { "id": "st_3", "track": "linkedin", "order": 3, "type": "message", "delay_days": null, "message": "Hi {{first_name}}, thanks for connecting!", "connect_note": null, "email_subject": null, "email_body": null, "ai": false } ], "created_at": "2026-10-24T09:12:44.000Z", "updated_at": "2026-10-24T09:12:44.000Z" } ] } ]}