curl --request POST \
--url https://app.govly.com/api/tools/v1/shares \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"id": "<string>",
"subject": "<string>",
"recipients": [
{
"email": "<string>",
"name": "<string>",
"company": "<string>"
}
],
"custom_message": "<string>",
"email_recipient_groups": [
{
"team_id": "<string>"
}
]
}
'import requests
url = "https://app.govly.com/api/tools/v1/shares"
payload = {
"id": "<string>",
"subject": "<string>",
"recipients": [
{
"email": "<string>",
"name": "<string>",
"company": "<string>"
}
],
"custom_message": "<string>",
"email_recipient_groups": [{ "team_id": "<string>" }]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
id: '<string>',
subject: '<string>',
recipients: [{email: '<string>', name: '<string>', company: '<string>'}],
custom_message: '<string>',
email_recipient_groups: [{team_id: '<string>'}]
})
};
fetch('https://app.govly.com/api/tools/v1/shares', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.govly.com/api/tools/v1/shares",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'id' => '<string>',
'subject' => '<string>',
'recipients' => [
[
'email' => '<string>',
'name' => '<string>',
'company' => '<string>'
]
],
'custom_message' => '<string>',
'email_recipient_groups' => [
[
'team_id' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.govly.com/api/tools/v1/shares"
payload := strings.NewReader("{\n \"id\": \"<string>\",\n \"subject\": \"<string>\",\n \"recipients\": [\n {\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"company\": \"<string>\"\n }\n ],\n \"custom_message\": \"<string>\",\n \"email_recipient_groups\": [\n {\n \"team_id\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.govly.com/api/tools/v1/shares")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"<string>\",\n \"subject\": \"<string>\",\n \"recipients\": [\n {\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"company\": \"<string>\"\n }\n ],\n \"custom_message\": \"<string>\",\n \"email_recipient_groups\": [\n {\n \"team_id\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.govly.com/api/tools/v1/shares")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": \"<string>\",\n \"subject\": \"<string>\",\n \"recipients\": [\n {\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"company\": \"<string>\"\n }\n ],\n \"custom_message\": \"<string>\",\n \"email_recipient_groups\": [\n {\n \"team_id\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": [
{
"email": "<string>",
"name": "<string>",
"company": "<string>"
}
],
"meta": {
"entityType": "<string>",
"entityId": "<string>",
"recipientCount": 123
}
}{
"errors": [
{
"status": "<string>",
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>"
}
}
]
}{
"errors": [
{
"status": "<string>",
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>"
}
}
]
}{
"errors": [
{
"status": "<string>",
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>"
}
}
]
}{
"errors": [
{
"status": "<string>",
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>"
}
}
]
}{
"errors": [
{
"status": "<string>",
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>"
}
}
]
}Share an opportunity, award, or contact by email
Send an opportunity, award, or contact to one or more recipients by email. Delivery is queued immediately and is at-least-once, so a transient failure may redeliver to recipients who already received the message.
Recipients can be any email address, including people outside your organization who do not have a Govly account. An address with no Govly account may also receive a separate invitation to join Govly, so a single request can send more than the share itself.
The identifier form depends on the type. Opportunities take the numeric Govly ID. Awards may be addressed by numeric ID or by uniqueKey; the uniqueKey returned from award search is accepted directly.
Sharing an opportunity sends one email per recipient rather than one email addressed to everyone. Award and contact shares send a single email when no teams are named; naming any team in email_recipient_groups gives their remaining recipients one email each as well.
A share may send at most 20 emails per request: each team is one email, and each recipient outside a named team is one more. An ungrouped award or contact share is a single send and is not limited by that count. A second limit applies to addresses rather than emails: a request may name at most 20 recipients outside a named team, which is what bounds an ungrouped award or contact share.
A third limit spans requests: across every share surface, a user may send at most 300 messages per day to addresses outside their organization, counting the join-Govly invitations those shares trigger. A request that would cross that limit is refused with a 422 and sends nothing.
curl --request POST \
--url https://app.govly.com/api/tools/v1/shares \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"id": "<string>",
"subject": "<string>",
"recipients": [
{
"email": "<string>",
"name": "<string>",
"company": "<string>"
}
],
"custom_message": "<string>",
"email_recipient_groups": [
{
"team_id": "<string>"
}
]
}
'import requests
url = "https://app.govly.com/api/tools/v1/shares"
payload = {
"id": "<string>",
"subject": "<string>",
"recipients": [
{
"email": "<string>",
"name": "<string>",
"company": "<string>"
}
],
"custom_message": "<string>",
"email_recipient_groups": [{ "team_id": "<string>" }]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
id: '<string>',
subject: '<string>',
recipients: [{email: '<string>', name: '<string>', company: '<string>'}],
custom_message: '<string>',
email_recipient_groups: [{team_id: '<string>'}]
})
};
fetch('https://app.govly.com/api/tools/v1/shares', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.govly.com/api/tools/v1/shares",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'id' => '<string>',
'subject' => '<string>',
'recipients' => [
[
'email' => '<string>',
'name' => '<string>',
'company' => '<string>'
]
],
'custom_message' => '<string>',
'email_recipient_groups' => [
[
'team_id' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.govly.com/api/tools/v1/shares"
payload := strings.NewReader("{\n \"id\": \"<string>\",\n \"subject\": \"<string>\",\n \"recipients\": [\n {\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"company\": \"<string>\"\n }\n ],\n \"custom_message\": \"<string>\",\n \"email_recipient_groups\": [\n {\n \"team_id\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.govly.com/api/tools/v1/shares")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"<string>\",\n \"subject\": \"<string>\",\n \"recipients\": [\n {\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"company\": \"<string>\"\n }\n ],\n \"custom_message\": \"<string>\",\n \"email_recipient_groups\": [\n {\n \"team_id\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.govly.com/api/tools/v1/shares")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": \"<string>\",\n \"subject\": \"<string>\",\n \"recipients\": [\n {\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"company\": \"<string>\"\n }\n ],\n \"custom_message\": \"<string>\",\n \"email_recipient_groups\": [\n {\n \"team_id\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": [
{
"email": "<string>",
"name": "<string>",
"company": "<string>"
}
],
"meta": {
"entityType": "<string>",
"entityId": "<string>",
"recipientCount": 123
}
}{
"errors": [
{
"status": "<string>",
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>"
}
}
]
}{
"errors": [
{
"status": "<string>",
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>"
}
}
]
}{
"errors": [
{
"status": "<string>",
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>"
}
}
]
}{
"errors": [
{
"status": "<string>",
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>"
}
}
]
}{
"errors": [
{
"status": "<string>",
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>"
}
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Entity type to share. opp is accepted as an opportunity alias.
award, contact, opp, opportunity Govly entity ID. Opportunities take the numeric ID; awards also accept a uniqueKey.
Subject line for the email.
Recipients to email. Any address, including people outside your organization. At most 20 outside a named team.
1Show child attributes
Show child attributes
Optional note included above the record details.
Groups recipients already listed above into one email per team. Does not add recipients.
Show child attributes
Show child attributes
Was this page helpful?