Skip to content

Share deal with a user by email

POST
/api/canvas/{deal_id}/share
curl --request POST \
--url https://example.com/api/canvas/example/share \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "email": "example", "role": "viewer" }'

Grant another user access to this deal. If the user doesn’t have an account, sends an invitation email. Requires owner role.

deal_id
required
Deal Id
string
Media type application/json
ShareByEmailRequest
object
email
required
Email
string
role
Role
string
default: viewer

Successful Response

Media type application/json
ShareDealResponse

Response from POST /canvas/{deal_id}/share (email path).

P2 (2026-04-27) routes all email-based shares through the pending-invite flow, so every successful share creates an invite — expires_at, invite_id, email, email_sent, and share_url are unconditionally emitted. warning is set only when email delivery fails (D7 fix, May 2026).

object
success
required
Success
boolean
status
required
Status
string
deal_id
required
Deal Id
string
role
required
Role
string
email
required
Email
string
invite_id
required
Invite Id
string
expires_at
required
Expires At
string
email_sent
required
Email Sent
boolean
org_invite_created
required
Org Invite Created
boolean
share_url
required
Share Url
string
warning
Any of:
string
Example generated
{
"success": true,
"status": "example",
"deal_id": "example",
"role": "example",
"email": "example",
"invite_id": "example",
"expires_at": "example",
"email_sent": true,
"org_invite_created": true,
"share_url": "example",
"warning": "example"
}

Validation Error

Media type application/json
HTTPValidationError
object
detail
Detail
Array<object>
ValidationError
object
loc
required
Location
Array
msg
required
Message
string
type
required
Error Type
string
input
Input
ctx
Context
object
Example generated
{
"detail": [
{
"loc": [
"example"
],
"msg": "example",
"type": "example",
"input": "example",
"ctx": {}
}
]
}