Save handover details
Save the sales-to-onboarding handover details on one contracted product line: the systems in use, platforms, website, markets, languages and notes.
The call updates one product line record. Only the fields you send change:
website_url,spyne_rooftops,potential_rooftops,markets_serving,languages_spokenandnotesare merged into the stored onboarding data,input_mediumandoutput_mediumreplace the stored input or output side,platformsreplaces the stored platform list.
It makes no other calls and sends no events.
Send the bearer token of a signed-in Spyne Console user in Authorization: Bearer YOUR_TOKEN. The token is checked against the user validation endpoint on every call. There is no extra permission check.
Before you call it
- The contract must be
Contracted, so the product line record exists. - You need the product line ID (
product_line_details_id). The contracted-stage dashboard rows carry it. - In the console, this call runs when the handover sub-stage is set to "Meet Scheduled" or "Meet Rescheduled", before the meeting details are entered. The console also uses it with only
platformsto change the platform list. - The call is synchronous: one read and one update of the product line record. The rate limit is not documented.
Request
- Authenticate: send the
Authorization: Bearer YOUR_TOKENandContent-Type: application/jsonheaders. - Name the product line: send
product_line_details_id. - Complete the mediums: if you send
input_mediumoroutput_medium, include bothims_dmsandwebsite_providerkeys in it. - Send only changes: send only the fields you want to change.
Headers
| Parameter | Type | Required | Description |
|---|---|---|---|
Authorization | string | Required | Bearer YOUR_TOKEN |
Content-Type | string | Required | application/json |
Body
| Parameter | Type | Required | Description |
|---|---|---|---|
product_line_details_id | string | Required | Product line ID. |
input_medium | object | Optional | Systems the rooftop's data comes from. Must contain ims_dms and website_provider. Value types are not documented in code. |
output_medium | object | Optional | Systems the output goes to. Must contain ims_dms and website_provider. |
platforms | string[] | Optional | Platform list. Allowed values are not documented in code. |
website_url | string | Optional | Dealer website URL. |
spyne_rooftops | number | Optional | Number of rooftops on Spyne. |
potential_rooftops | number | Optional | Number of potential rooftops. |
markets_serving | string | Optional | Markets the dealer serves. |
languages_spoken | string[] | Optional | Languages spoken. |
notes | string | Optional | Handover notes. |
Sample request
curl -X POST "https://api.spyne.ai/console/v1/contracting/onboarding/update-handover-details-v2" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"product_line_details_id": "PRODUCT_LINE_ID",
"input_medium": { "ims_dms": "IMS_DMS", "website_provider": "WEBSITE_PROVIDER" },
"output_medium": { "ims_dms": "IMS_DMS", "website_provider": "WEBSITE_PROVIDER" },
"platforms": ["PLATFORM"],
"website_url": "https://www.example.com",
"spyne_rooftops": 1,
"potential_rooftops": 1,
"markets_serving": "Example City",
"languages_spoken": ["English"],
"notes": "Example handover notes"
}'import requests
res = requests.post(
"https://api.spyne.ai/console/v1/contracting/onboarding/update-handover-details-v2",
json={
"product_line_details_id": "PRODUCT_LINE_ID",
"input_medium": {"ims_dms": "IMS_DMS", "website_provider": "WEBSITE_PROVIDER"},
"output_medium": {"ims_dms": "IMS_DMS", "website_provider": "WEBSITE_PROVIDER"},
"platforms": ["PLATFORM"],
"website_url": "https://www.example.com",
"languages_spoken": ["English"],
"notes": "Example handover notes",
},
headers={"Authorization": "Bearer YOUR_TOKEN"},
)
print(res.status_code, res.json())const res = await fetch(
"https://api.spyne.ai/console/v1/contracting/onboarding/update-handover-details-v2",
{
method: "POST",
headers: { Authorization: "Bearer YOUR_TOKEN", "Content-Type": "application/json" },
body: JSON.stringify({
product_line_details_id: "PRODUCT_LINE_ID",
platforms: ["PLATFORM"],
notes: "Example handover notes",
}),
}
);
console.log(res.status, await res.json());Sample response
{ "message": "Success", "error": false, "code": "", "details": null, "data": null }{ "message": "No fields provided to update", "error": false, "code": "", "details": null, "data": null }{ "message": "Invalid Token", "error": true, "code": "ERROR_AUTH_401", "details": null, "data": null }{ "message": "Product line details not found", "error": true, "code": "", "details": null, "data": null }{ "message": "General API error. Please try again later.", "error": true, "code": "ERROR_SERVER_500", "details": {} }Response parameters
| Parameter | Type | Description |
|---|---|---|
message | string | Success, or No fields provided to update when only the ID was sent. |
error | boolean | false on success. |
data | null | No data is returned. |
Errors
| Status | Reason | When it happens |
|---|---|---|
200 | No fields provided to update | Only product_line_details_id was sent. Nothing changes. |
400 | (framework) | product_line_details_id is missing, a field has the wrong type, or input_medium / output_medium lacks ims_dms or website_provider. The body is not documented in code. |
401 | Invalid or missing token | No Bearer token, or the token failed validation. |
404 | Product line details not found | No product line has this ID. |
408 | Request timed out | The token validation call could not connect. |
500 | General API error | A database error. |
What happens next
In the console, the user then enters the meeting details, and the sub-stage is set with Update handover sub-stage. When the sub-stage reaches "Meet Done" (with an onboarding manager assigned), the product line moves to Onboarding and the checklist is created by Create the onboarding checklist.
Called before: Receive DocuSign events. Called after: Update handover sub-stage, Schedule an onboarding meeting.
Updated about 1 hour ago
