Link a contact to a company
const url = 'https://api.threadkite.app/v1/contacts/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/companies';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"companyId":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","companyName":"Acme Fleet Services","role":"Fleet manager","jobTitle":"Head of Transport","isPrimary":true}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.threadkite.app/v1/contacts/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/companies \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "companyId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "companyName": "Acme Fleet Services", "role": "Fleet manager", "jobTitle": "Head of Transport", "isPrimary": true }'A company by id, or by name (the one with that name, or a new one). Primary when they have no primary company, unless isPrimary says otherwise. Linking a company they left makes it current again. Sends contact.updated with a companies change.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Request Bodyrequired
Section titled “Request Bodyrequired”object
The company. Give this or companyName.
A company by name: the one with that name (ignoring case, punctuation and Ltd), or a new one. Give this or companyId.
Example
Acme Fleet ServicesExample
Fleet managerExample
Head of TransportMake it their primary company. Left out: primary when they have no primary company
Responses
Section titled “Responses”object
object
The company’s picture (uploaded, or its website’s icon); null when none
As the register gives it (active, dissolved, liquidation…); null when not known
What they do for the company, in your words: Director, Accounts…
Their main company (at most one); shown first and with their name
How the link was made: manual (your team), domain (their email address is at one of the company’s domains), form, lead, import, api, integration or assistant
When they left the company; kept for history, not current
Example
{ "company": { "name": "Acme Fleet Services Ltd", "avatarUrl": "https://api.threadkite.com/avatars/6c1f….png", "status": "active" }, "role": "Fleet manager", "jobTitle": "Head of Transport", "source": "manual"}object
Stable machine-readable reason
With code invalid: every problem with the request, by field (message is the first)
object
Dotted path inside the item, e.g. attributes.price.amountMinor
Example
{ "statusCode": 403, "code": "forbidden", "message": "You do not have permission to do that.", "errors": [ { "message": "Enter the make" } ]}Missing or invalid API key
object
Stable machine-readable reason
With code invalid: every problem with the request, by field (message is the first)
object
Dotted path inside the item, e.g. attributes.price.amountMinor
Example
{ "statusCode": 403, "code": "forbidden", "message": "You do not have permission to do that.", "errors": [ { "message": "Enter the make" } ]}The organisation is on the Free plan (code upgrade_required)
object
Stable machine-readable reason
The feature that needs Pro
Where to upgrade or pay, in the web app
Example
{ "statusCode": 402, "code": "upgrade_required", "message": "Connections are part of Pro. Upgrade to connect texts, calls and more.", "feature": "extraSeats", "upgradePath": "/settings/billing"}The key does not have the scope (or the person the permission)
object
Stable machine-readable reason
With code invalid: every problem with the request, by field (message is the first)
object
Dotted path inside the item, e.g. attributes.price.amountMinor
Example
{ "statusCode": 403, "code": "forbidden", "message": "You do not have permission to do that.", "errors": [ { "message": "Enter the make" } ]}object
Stable machine-readable reason
With code invalid: every problem with the request, by field (message is the first)
object
Dotted path inside the item, e.g. attributes.price.amountMinor
Example
{ "statusCode": 403, "code": "forbidden", "message": "You do not have permission to do that.", "errors": [ { "message": "Enter the make" } ]}Rate limit reached
object
Stable machine-readable reason
Seconds until another request will be accepted
Example
{ "statusCode": 429, "code": "rate_limited", "message": "Too many requests. Each key can make 120 requests a minute; try again in 12 seconds.", "retryAfter": 12}