Query structured spec data via REST or MCP. Get exactly what your agent needs.
http://api.sendgrid.com/v3
/api_keys/{api_key_id}
This endpoint allows you to update the name of an existing API Key.
You must pass this endpoint a JSON request body with a name property, which will be used to rename the key associated with the api_key_id passed in the URL.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| api_key_id | path | required | string | — |
| on-behalf-of | header | optional | string | — |
application/json
ApiKeysUpdateKeyNameRequest
| Property | Type | Required |
|---|---|---|
| name | string | required |
PATCH /api_keys/{api_key_id}
/alerts/{alert_id}
This endpoint allows you to update an alert.
Alerts allow you to specify an email address to receive notifications regarding your email usage or statistics.
For more information about alerts, please see our Alerts documentation.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| alert_id | path | required | integer | The ID of the alert you would like to retrieve. |
| on-behalf-of | header | optional | string | — |
application/json
AlertsUpdateAlertRequest
| Property | Type | Required |
|---|---|---|
| email_to | string | optional |
| frequency | string | optional |
| percentage | integer | optional |
PATCH /alerts/{alert_id}
/campaigns/{campaign_id}
This endpoint allows you to update a specific campaign.
This is especially useful if you only set up the campaign using POST /campaigns, but didn’t set many of the parameters.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| campaign_id | path | required | integer | The id of the campaign you would like to retrieve. |
| on-behalf-of | header | optional | string | — |
application/json
CampaignsApiUpdateSpecificCampaignRequest
| Property | Type | Required |
|---|---|---|
| title | string | required |
| subject | string | required |
| categories | array | required |
| html_content | string | required |
| plain_content | string | required |
“title”: “title can’t be blank”
“title”: “title is too long (maximum is 100 characters)”
“categories”: “categories exceeds 10 category limit”
“html_content”: “html_content exceeds the 1MB limit”
“plain_content”: “plain_content exceeds the 1MB limit”
“sender_id”: “sender_id does not exist”
“sender_id”: “sender_id is not a verified sender identity”
“list_ids”: “list_ids do not all exist”
“segment_ids”: “segment_ids do not all exist”
“ip_pool”: “The ip pool you provided is invalid”
“suppression_group_id”: “suppression_group_id does not exist”
“unsubscribes”: “Either suppression_group_id or custom_unsubscribe_url may be set/used, but not both. Please remove one before setting the other.”
“”: “The JSON you have submitted cannot be parsed.”
””: “You may only update a campaign when it is in draft mode.”
””: “not found”
PATCH /campaigns/{campaign_id}
/campaigns/{campaign_id}/schedules
This endpoint allows to you change the scheduled time and date for a campaign to be sent.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| campaign_id | path | required | integer | — |
| on-behalf-of | header | optional | string | — |
application/json
CampaignsApiUpdateScheduledTimeRequest
| Property | Type | Required |
|---|---|---|
| send_at | integer | required |
””: “The JSON you have submitted cannot be parsed.”
“send_at”: “Please choose a future time for sending your campaign.”
“”:”You do not have enough credits to send this campaign. Upgrade your plan to send more: https://app.sendgrid.com/settings/billing”
“send_at”: “You cannot update the send_at value of non-scheduled campaign.”
””: “not found”
PATCH /campaigns/{campaign_id}/schedules
/user/scheduled_sends/{batch_id}
This endpoint allows you to update the status of a scheduled send for the given batch_id.
If you have already set a cancel or pause status on a scheduled send using the “Cancel or pause a scheduled send” endpoint, you can update it’s status using this endpoint. Attempting to update a status once it has been set with the “Cancel or pause a scheduled send” endpoint will result in a 400 error.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| batch_id | path | required | string | — |
| on-behalf-of | header | optional | string | — |
application/json
CancelScheduledSendsUpdateStatusRequest
| Property | Type | Required |
|---|---|---|
| status | string | required |
PATCH /user/scheduled_sends/{batch_id}
/sso/certificates/{cert_id}
This endpoint allows you to update an existing certificate by ID.
You can retrieve a certificate’s ID from the response provided by the “Get All SSO Integrations” endpoint.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| cert_id | path | required | string | — |
application/json
CertificatesUpdateByIdRequest
| Property | Type | Required |
|---|---|---|
| enabled | boolean | optional |
| integration_id | string | optional |
| public_certificate | string | optional |
OK
PATCH /sso/certificates/{cert_id}
/contactdb/lists/{list_id}
This endpoint allows you to update the name of one of your recipient lists.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| list_id | path | required | string | — |
| list_id | query | required | integer | The ID of the list you are updating. |
| on-behalf-of | header | optional | string | — |
application/json
ContactsApiListsUpdateListNameRequest
| Property | Type | Required |
|---|---|---|
| name | string | required |
“name” : “Returned if list name is a duplicate of existing list or segment”
“name” : “Returned if list name is invalid or not provided”
“list_id” : “Returned if list_id is not valid”
“” : “Returned if request body is invalid JSON”
“list_id” : “Returned if list_id does not exist”
PATCH /contactdb/lists/{list_id}
/contactdb/recipients
This endpoint allows you to update one or more recipients.
The body of an API call to this endpoint must include an array of one or more recipient objects.
It is of note that you can add custom field data as parameters on recipient objects. We have provided an example using some of the default custom fields SendGrid provides.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| on-behalf-of | header | optional | string | — |
application/json
ContactsApiRecipientsUpdateMultipleRecipientsRequest
of object
| Property | Type | Required |
|---|---|---|
| string | required | |
| last_name | string | optional |
| first_name | string | optional |
”” : “Returned if request body is not valid json”
PATCH /contactdb/recipients
/contactdb/segments/{segment_id}
This endpoint allows you to update a segment.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| segment_id | path | required | string | — |
| segment_id | query | optional | string | The ID of the segment you are updating. |
| on-behalf-of | header | optional | string | — |
application/json
ContactsApiSegmentsUpdateSegmentRequest
| Property | Type | Required |
|---|---|---|
| name | string | required |
| list_id | number | optional |
| conditions | array | optional |
| └ field | string | required |
| └ value | string | required |
| └ and_or | string | optional |
| └ operator | string | required |
PATCH /contactdb/segments/{segment_id}
/marketing/field_definitions/{custom_field_id}
This endopoint allows you to update a defined Custom Field.
Only your Custom fields can be modified; Reserved Fields cannot be updated.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| custom_field_id | path | required | string | — |
application/json
CustomFieldsUpdateDefinitionRequest
| Property | Type | Required |
|---|---|---|
| name | string | required |
PATCH /marketing/field_definitions/{custom_field_id}
/designs/{id}
This endpoint allows you to edit a design.
The Design API supports PATCH requests, which allow you to make partial updates to a single design. Passing data to a specific field will update only the data stored in that field; all other fields will be unaltered.
For example, updating a design’s name requires that you make a PATCH request to this endpoint with data specified for the name field only.
{
"name": "<Updated Name>"
}
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| id | path | required | string | The ID of the Design you want to duplicate. |
application/json
DesignsApiUpdateDesignByIdRequest
| Property | Type | Required |
|---|---|---|
| name | string | optional |
| subject | string | optional |
| categories | array | optional |
| html_content | string | optional |
| plain_content | string | optional |
| generate_plain_content | boolean | optional |
PATCH /designs/{id}
/whitelabel/domains/{domain_id}
This endpoint allows you to update the settings for an authenticated domain.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| domain_id | path | required | string | — |
| on-behalf-of | header | optional | string | — |
application/json
DomainAuthenticationUpdateDomainSettingsRequest
| Property | Type | Required |
|---|---|---|
| default | boolean | optional |
| custom_spf | boolean | optional |
PATCH /whitelabel/domains/{domain_id}
/whitelabel/links/{id}
This endpoint allows you to update a specific branded link. You can use this endpoint to change a branded link’s default status.
You can submit this request as one of your subusers if you include their ID in the on-behalf-of header in the request.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| id | path | required | integer | The ID of the branded link you want to retrieve. |
| on-behalf-of | header | optional | string | — |
application/json
LinkBrandingUpdateBrandedLinkRequest
| Property | Type | Required |
|---|---|---|
| default | boolean | optional |
PATCH /whitelabel/links/{id}
/marketing/lists/{id}
This endpoint updates the name of a list.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| id | path | required | string | — |
application/json
ListsUpdateNameRequest
| Property | Type | Required |
|---|---|---|
| name | string | optional |
PATCH /marketing/lists/{id}
/marketing/segments/{segment_id}
This endpoint allows you to update a segment.
Segment name needs to be unique. A user can not update a segment name to an existing one.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| segment_id | path | required | string | — |
application/json
segment_write_v2
| Property | Type | Required |
|---|---|---|
| name | string | required |
| query_dsl | string | required |
| parent_list_ids | array | optional |
PATCH /marketing/segments/{segment_id}
/marketing/segments/2.0/{segment_id}
The Segmentation V2 API is currently in private beta. If you’d like to be added to the beta, please fill out this form
Segment name has to be unique. A user can not create a new segment with an existing segment name.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| segment_id | path | required | string | — |
application/json
segment_update
| Property | Type | Required |
|---|---|---|
| name | string | optional |
| query_dsl | string | optional |
PATCH /marketing/segments/2.0/{segment_id}
/senders/{sender_id}
This endpoint allows you to update a sender identity.
Updates to from.email require re-verification.
Partial updates are allowed, but fields that are marked as “required” in the POST (create) endpoint must not be nil if that field is included in the PATCH request.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| sender_id | path | required | integer | The ID of the sender identity that you want to retrieve. |
| on-behalf-of | header | optional | string | — |
application/json
sender-id-request
| Property | Type | Required |
|---|---|---|
| zip | string | optional |
| city | string | optional |
| from | object | optional |
| └ name | string | optional |
| string | optional | |
| state | string | optional |
| address | string | optional |
| country | string | optional |
| nickname | string | optional |
| reply_to | object | optional |
| └ name | string | optional |
| string | optional | |
| address_2 | string | optional |
PATCH /senders/{sender_id}
/verified_senders/{id}
This endpoint allows you to update an existing Sender Identity.
Pass the id assigned to a Sender Identity to this endpoint as a path parameter. Include any fields you wish to update in the request body in JSON format.
You can retrieve the IDs associated with Sender Identities by passing a GET request to the Get All Verified Senders endpoint, /verified_senders.
Note: Unlike a PUT request, PATCH allows you to update only the fields you wish to edit. Fields that are not passed as part of a request will remain unaltered.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| id | path | required | string | — |
application/json
verified-sender-request-schema
| Property | Type | Required |
|---|---|---|
| zip | string | optional |
| city | string | optional |
| state | string | optional |
| address | string | optional |
| country | string | optional |
| address2 | string | optional |
| nickname | string | required |
| reply_to | string | required |
| from_name | string | optional |
| from_email | string | required |
| reply_to_name | string | optional |
PATCH /verified_senders/{id}
/user/settings/enforced_tls
This endpoint allows you to update your Enforced TLS settings.
To require TLS from recipients, set require_tls to true. If either require_tls or require_valid_cert is set to true, the recipient must support TLS 1.1 or higher or have a valid certificate. If these conditions are not met, Twilio SendGrid will drop the message and send a block event with “TLS required but not supported” as the description.
Twilio SendGrid supports TLS 1.1 and higher and does not support older versions of TLS due to security vulnerabilities.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| on-behalf-of | header | optional | string | — |
application/json
enforced-tls-request-response
| Property | Type | Required |
|---|---|---|
| require_tls | boolean | optional |
| require_valid_cert | boolean | optional |
PATCH /user/settings/enforced_tls
/user/webhooks/parse/settings/{hostname}
This endpoint allows you to update a specific inbound parse setting by hostname.
You can retrieve all your Inbound Parse settings and their associated host names with the “Retrieve all parse settings” endpoint.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| hostname | path | required | string | The hostname associated with the inbound parse setting that you would like to retrieve. |
| on-behalf-of | header | optional | string | — |
application/json
parse-setting
| Property | Type | Required |
|---|---|---|
| url | string | optional |
| hostname | string | optional |
| send_raw | boolean | optional |
| spam_check | boolean | optional |
PATCH /user/webhooks/parse/settings/{hostname}
/mail_settings/address_whitelist
This endpoint allows you to update your current email address whitelist settings.
You can select whether or not this setting should be enabled by assigning the enabled field a true or false value.
Passing only the enabled field to this endpoint will not alter your current list of whitelist entries. However, any modifications to your list of entries will overwrite the entire list. For this reason, you must included all existing entries you wish to retain in your list in addition to any new entries you intend to add. To remove one or more list entries, pass a list with only the entries you wish to retain.
You should not add generic domains such as gmail.com or yahoo.com in your list because your emails will not honor recipients’ unsubscribes. This may cause a legal violation of CAN-SPAM and could damage your sending reputation.
The Address Whitelist setting allows you to specify email addresses or domains for which mail should never be suppressed.
For example, if you own the domain example.com, and one or more of your recipients use email@example.com addresses, placing example.com in the address whitelist setting instructs Twilio SendGrid to ignore all bounces, blocks, and unsubscribes logged for that domain. In other words, all bounces, blocks, and unsubscribes will still be sent to example.com as if they were sent under normal sending conditions.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| on-behalf-of | header | optional | string | — |
application/json
SettingsMailUpdateAddressWhitelistMailSettingsRequest
| Property | Type | Required |
|---|---|---|
| list | array | optional |
| enabled | boolean | optional |
PATCH /mail_settings/address_whitelist
/mail_settings/bounce_purge
This endpoint allows you to update your current bounce and purge settings.
The Bounce Perge setting allows you to set a schedule that Twilio SendGrid will use to automatically delete contacts from your soft and hard bounce suppression lists. The schedule is set in full days by assigning the number of days, an integer, to the soft_bounces and/or hard_bounces fields.
A hard bounce occurs when an email message has been returned to the sender because the recipient’s address is invalid. A hard bounce might occur because the domain name doesn’t exist or because the recipient is unknown.
A soft bounce occurs when an email message reaches the recipient’s mail server but is bounced back undelivered before it actually reaches the recipient. A soft bounce might occur because the recipient’s inbox is full.
You can also manage this setting in the Mail Settings section of the Twilio SendGrid App. You can manage your bounces manually using the Bounces API or the Bounces menu in the Twilio SendGrid App.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| on-behalf-of | header | optional | string | — |
application/json
mail_settings_bounce_purge
| Property | Type | Required |
|---|---|---|
| enabled | boolean | optional |
| hard_bounces | integer | optional |
| soft_bounces | integer | optional |
PATCH /mail_settings/bounce_purge
/mail_settings/footer
This endpoint allows you to update your current Footer mail settings.
The Footer setting will insert a custom footer at the bottom of your text and HTML email message bodies.
You can insert your HTML or plain text directly using this endpoint, or you can create the footer using the Mail Settings menu in the Twilio SendGrid App.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| on-behalf-of | header | optional | string | — |
application/json
mail_settings_footer
| Property | Type | Required |
|---|---|---|
| enabled | boolean | optional |
| html_content | string | optional |
| plain_content | string | optional |
PATCH /mail_settings/footer
/mail_settings/forward_bounce
This endpoint allows you to update your current bounce forwarding mail settings.
Enabling the Forward Bounce setting allows you to specify an email address to which bounce reports will be forwarded.
You can also configure the Forward Spam mail settings in the Mail Settings section of the Twilio SendGrid App.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| on-behalf-of | header | optional | string | — |
application/json
mail_settings_forward_bounce
| Property | Type | Required |
|---|---|---|
| string | optional | |
| enabled | boolean | optional |
PATCH /mail_settings/forward_bounce
/mail_settings/forward_spam
This endpoint allows you to update your current Forward Spam mail settings.
Enabling the Forward Spam setting allows you to specify email addresses to which spam reports will be forwarded. You can set multiple addresses by passing this endpoint a comma separated list of emails in a single string.
{
"email": "address1@example.com, address2@exapmle.com",
"enabled": true
}
The Forward Spam setting may also be used to receive emails sent to abuse@ and postmaster@ role addresses if you have authenticated your domain.
For example, if you authenticated example.com as your root domain and set a custom return path of sub for that domain, you could turn on Forward Spam, and any emails sent to abuse@sub.example.com or postmaster@sub.example.com would be forwarded to the email address you entered in the email field.
You can authenticate your domain using the “Authenticate a domain” endpoint or in the Sender Authentication section of the Twilio SendGrid App. You can also configure the Forward Spam mail settings in the Mail Settings section of the Twilio SendGrid App.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| on-behalf-of | header | optional | string | — |
application/json
mail_settings_forward_spam
| Property | Type | Required |
|---|---|---|
| string | optional | |
| enabled | boolean | optional |
PATCH /mail_settings/forward_spam
/mail_settings/template
This endpoint allows you to update your current legacy email template settings.
This setting refers to our original email templates. We currently support more fully featured Dynamic Transactional Templates.
The legacy email template setting wraps an HTML template around your email content. This can be useful for sending out marketing email and/or other HTML formatted messages. For instructions on using legacy templates, see how to “Create and Edit Legacy Transactional Templates. For help migrating to our current template system, see “Migrating from Legacy Templates”.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| on-behalf-of | header | optional | string | — |
application/json
SettingsMailUpdateLegacyTemplateSettingsRequest
| Property | Type | Required |
|---|---|---|
| enabled | boolean | optional |
| html_content | string | optional |
PATCH /mail_settings/template
/partner_settings/new_relic
This endpoint allows you to update or change your New Relic partner settings.
Our partner settings allow you to integrate your SendGrid account with our partners to increase your SendGrid experience and functionality. For more information about our partners, and how you can begin integrating with them, please visit our Partners documentation.
By integrating with New Relic, you can send your SendGrid email statistics to your New Relic Dashboard. If you enable this setting, your stats will be sent to New Relic every 5 minutes. You will need your New Relic License Key to enable this setting. For more information, please see our SendGrid for New Relic documentation.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| on-behalf-of | header | optional | string | — |
application/json
SettingsPartnerUpdateNewRelicPartnerSettingsRequest
| Property | Type | Required |
|---|---|---|
| enabled | boolean | optional |
| license_key | string | optional |
| enable_subuser_statistics | boolean | optional |
PATCH /partner_settings/new_relic
/tracking_settings/click
This endpoint allows you to enable or disable your current click tracking setting.
Click Tracking overrides all the links and URLs in your emails and points them to either SendGrid’s servers or the domain with which you branded your link. When a customer clicks a link, SendGrid tracks those clicks.
Click tracking helps you understand how users are engaging with your communications. SendGrid can track up to 1000 links per email
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| on-behalf-of | header | optional | string | — |
application/json
SettingsTrackingUpdateClickTrackingSettingRequest
| Property | Type | Required |
|---|---|---|
| enabled | boolean | optional |
PATCH /tracking_settings/click
/tracking_settings/google_analytics
This endpoint allows you to update your current setting for Google Analytics.
Google Analytics helps you understand how users got to your site and what they’re doing there. For more information about using Google Analytics, please refer to Google’s URL Builder and their article on “Best Practices for Campaign Building”.
We default the settings to Google’s recommendations. For more information, see Google Analytics Demystified.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| on-behalf-of | header | optional | string | — |
application/json
google_analytics_settings
| Property | Type | Required |
|---|---|---|
| enabled | boolean | optional |
| utm_term | string | optional |
| utm_medium | string | optional |
| utm_source | string | optional |
| utm_content | string | optional |
| utm_campaign | string | optional |
PATCH /tracking_settings/google_analytics
/tracking_settings/open
This endpoint allows you to update your current settings for open tracking.
Open Tracking adds an invisible image at the end of the email which can track email opens.
If the email recipient has images enabled on their email client, a request to SendGrid’s server for the invisible image is executed and an open event is logged.
These events are logged in the Statistics portal, Email Activity interface, and are reported by the Event Webhook.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| on-behalf-of | header | optional | string | — |
application/json
SettingsTrackingUpdateOpenTrackingSettingsRequest
| Property | Type | Required |
|---|---|---|
| enabled | boolean | optional |
PATCH /tracking_settings/open
/tracking_settings/subscription
This endpoint allows you to update your current settings for subscription tracking.
Subscription tracking adds links to the bottom of your emails that allows your recipients to subscribe to, or unsubscribe from, your emails.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| on-behalf-of | header | optional | string | — |
application/json
subscription_tracking_settings
| Property | Type | Required |
|---|---|---|
| url | string | optional |
| enabled | boolean | optional |
| landing | string | optional |
| replace | string | optional |
| html_content | string | optional |
| plain_content | string | optional |
PATCH /tracking_settings/subscription
/marketing/singlesends/{id}
This endpoint allows you to update a Single Send using a Single Send ID.
You only need to pass the fields you want to update. Any blank/missing fields will remain unaltered.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| id | path | required | string | — |
application/json
singlesend_request
| Property | Type | Required |
|---|---|---|
| name | string | required |
| send_at | string | optional |
| send_to | object | optional |
| └ all | boolean | optional |
| └ list_ids | array | optional |
| └ segment_ids | array | optional |
| categories | array | optional |
| email_config | object | optional |
| └ editor | string | optional |
| └ ip_pool | string | optional |
| └ subject | string | optional |
| └ design_id | string | optional |
| └ sender_id | integer | optional |
| └ html_content | string | optional |
| └ plain_content | string | optional |
| └ suppression_group_id | integer | optional |
| └ custom_unsubscribe_url | string | optional |
| └ generate_plain_content | boolean | optional |
PATCH /marketing/singlesends/{id}
/sso/integrations/{id}
This endpoint allows you to modify an exisiting SSO integration.
You can retrieve the IDs for your configurations from the response provided by the “Get All SSO Integrations” endpoint.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| id | path | required | string | — |
| si | query | optional | boolean | If this parameter is set to |
application/json
create-integration-request
| Property | Type | Required |
|---|---|---|
| name | string | required |
| enabled | boolean | required |
| entity_id | string | required |
| signin_url | string | required |
| signout_url | string | required |
| completed_integration | boolean | optional |
PATCH /sso/integrations/{id}
/sso/teammates/{username}
This endpoint allows you to modify an existing SSO Teammate.
To turn a teammate into an admin, the request body should contain the is_admin field set to true. Otherwise, set is_admin to false and pass in all the scopes that a teammate should have.
Only the parent user and Teammates with admin permissions can update another Teammate’s permissions. Admin users can only update permissions.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| username | path | required | string | This email address must be the same address assigned to the teammate in your IdP |
application/json
SingleSignOnTeammatesEditTeammateRequest
| Property | Type | Required |
|---|---|---|
| scopes | array | optional |
| is_admin | boolean | optional |
| last_name | string | optional |
| first_name | string | optional |
PATCH /sso/teammates/{username}
/subusers/{subuser_name}
This endpoint allows you to enable or disable a subuser.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| subuser_name | path | required | string | — |
application/json
SubusersApiUpdateSubuserEnableStateRequest
| Property | Type | Required |
|---|---|---|
| disabled | boolean | optional |
PATCH /subusers/{subuser_name}
/asm/groups/{group_id}
This endpoint allows you to update or change a suppression group.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| group_id | path | required | string | The ID of the suppression group you would like to retrieve. |
| on-behalf-of | header | optional | string | — |
application/json
suppression-group-request-base
| Property | Type | Required |
|---|---|---|
| name | string | optional |
| is_default | boolean | optional |
| description | string | optional |
PATCH /asm/groups/{group_id}
/teammates/{username}
This endpoint allows you to update a teammate’s permissions.
To turn a teammate into an admin, the request body should contain an is_admin set to true. Otherwise, set is_admin to false and pass in all the scopes that a teammate should have.
Only the parent user or other admin teammates can update another teammate’s permissions.
Admin users can only update permissions.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| username | path | required | string | The username of the teammate that you want to retrieve. |
| on-behalf-of | header | optional | string | — |
application/json
TeammatesUpdatePermissionsRequest
| Property | Type | Required |
|---|---|---|
| scopes | array | required |
| is_admin | boolean | required |
PATCH /teammates/{username}
/scopes/requests/{request_id}/approve
This endpoint allows you to approve an access attempt.
Note: Only teammate admins may approve another teammate’s access request.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| request_id | path | required | string | The ID of the request that you want to approve. |
PATCH /scopes/requests/{request_id}/approve
/templates/{template_id}
This endpoint allows you to edit the name of a transactional template.
To edit the template itself, create a new transactional template version.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| template_id | path | required | string | — |
| on-behalf-of | header | optional | string | — |
application/json
TransactionalTemplatesEditTemplateNameRequest
| Property | Type | Required |
|---|---|---|
| name | string | optional |
PATCH /templates/{template_id}
/templates/{template_id}/versions/{version_id}
This endpoint allows you to edit the content of your template version.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| template_id | path | required | string | The ID of the original template |
| version_id | path | required | string | The ID of the template version |
| on-behalf-of | header | optional | string | — |
application/json
transactional_template_version_create
| Property | Type | Required |
|---|---|---|
| name | string | required |
| active | integer | optional |
| editor | string | optional |
| subject | string | required |
| test_data | string | optional |
| html_content | string | optional |
| plain_content | string | optional |
| generate_plain_content | boolean | optional |
PATCH /templates/{template_id}/versions/{version_id}
/user/profile
This endpoint allows you to update your current profile details.
Any one or more of the parameters can be updated via the PATCH /user/profile endpoint. You must include at least one when you PATCH.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| on-behalf-of | header | optional | string | — |
application/json
user_profile
| Property | Type | Required |
|---|---|---|
| zip | string | optional |
| city | string | optional |
| phone | string | optional |
| state | string | optional |
| address | string | optional |
| company | string | optional |
| country | string | optional |
| website | string | optional |
| address2 | string | optional |
| last_name | string | optional |
| first_name | string | optional |
PATCH /user/profile
/user/webhooks/event/settings
This endpoint allows you to update your current event webhook settings.
If an event type is marked as true, then the event webhook will include information about that event.
SendGrid’s Event Webhook will notify a URL of your choice via HTTP POST with information about events that occur as SendGrid processes your email.
Common uses of this data are to remove unsubscribes, react to spam reports, determine unengaged recipients, identify bounced email addresses, or create advanced analytics of your email program.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| on-behalf-of | header | optional | string | — |
application/json
event-webhook-update-oauth-request
| Property | Type | Required |
|---|---|---|
| url | string | required |
| open | boolean | required |
| click | boolean | required |
| bounce | boolean | required |
| dropped | boolean | required |
| enabled | boolean | required |
| deferred | boolean | required |
| delivered | boolean | required |
| processed | boolean | required |
| spam_report | boolean | required |
| unsubscribe | boolean | required |
| oauth_client_id | string | optional |
| oauth_token_url | string | optional |
| group_resubscribe | boolean | required |
| group_unsubscribe | boolean | required |
| oauth_client_secret | string | optional |
PATCH /user/webhooks/event/settings
/user/webhooks/event/settings/signed
This endpoint allows you to enable or disable signing of the Event Webhook.
This endpoint takes a single boolean request parameter, enabled. You may either enable or disable signing of the Event Webhook using this endpoint. Once enabled, you can retrieve your public key using the /webhooks/event/settings/signed endpoint.
For more information about cryptographically signing the Event Webhook, see Getting Started with the Event Webhook Security Features.
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| on-behalf-of | header | optional | string | — |
application/json
WebhooksEnableSignedWebhookRequest
| Property | Type | Required |
|---|---|---|
| enabled | boolean | required |
PATCH /user/webhooks/event/settings/signed
AlertsDeleteAlertByIdResponse
{
"type": "object",
"properties": {}
}
AlertsGetSpecificAlertResponse
{
"type": "object",
"required": [
"created_at",
"email_to",
"id",
"type",
"updated_at"
],
"properties": {
"id": {
"type": "integer",
"description": "The ID of the alert."
},
"type": {
"enum": [
"usage_alert",
"stats_notification"
],
"type": "string",
"description": "The type of alert."
},
"email_to": {
"type": "string",
"description": "The email address that the alert will be sent to."
},
"frequency": {
"type": "string",
"description": "If the alert is of type stats_notification, this indicates how frequently the stats notifications will be sent. For example: \"daily\", \"weekly\", or \"monthly\"."
},
"created_at": {
"type": "integer",
"description": "A Unix timestamp indicating when the alert was created."
},
"percentage": {
"type": "integer",
"description": "If the alert is of type usage_limit, this indicates the percentage of email usage that must be reached before the alert will be sent."
},
"updated_at": {
"type": "integer",
"description": "A Unix timestamp indicating when the alert was last modified."
}
}
}
AlertsUpdateAlertRequest
{
"type": "object",
"example": {
"email_to": "example@example.com"
},
"properties": {
"email_to": {
"type": "string",
"description": "The new email address you want your alert to be sent to.\nExample: test@example.com"
},
"frequency": {
"type": "string",
"description": "The new frequency at which to send the stats_notification alert.\nExample: monthly"
},
"percentage": {
"type": "integer",
"description": "The new percentage threshold at which the usage_limit alert will be sent.\nExample: 90"
}
}
}
AlertsUpdateAlertResponse
{
"type": "object",
"required": [
"created_at",
"email_to",
"id",
"type",
"updated_at"
],
"properties": {
"id": {
"type": "integer",
"description": "The ID of the alert."
},
"type": {
"enum": [
"usage_alert",
"stats_notification"
],
"type": "string",
"description": "The type of alert."
},
"email_to": {
"type": "string",
"description": "The email address that the alert will be sent to."
},
"frequency": {
"type": "string",
"description": "If the alert is of type stats_notification, this indicates how frequently the stats notifications will be sent. For example: \"daily\", \"weekly\", or \"monthly\"."
},
"created_at": {
"type": "integer",
"description": "A Unix timestamp indicating when the alert was created."
},
"percentage": {
"type": "integer",
"description": "If the alert is of type usage_limit, this indicates the percentage of email usage that must be reached before the alert will be sent."
},
"updated_at": {
"type": "integer",
"description": "A Unix timestamp indicating when the alert was last modified."
}
}
}
ApiKeysCreateKeyRequest
{
"type": "object",
"example": {
"name": "My API Key",
"scopes": [
"mail.send",
"alerts.create",
"alerts.read"
]
},
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "The name you will use to describe this API Key."
},
"scopes": {
"type": "array",
"items": {
"type": "string"
},
"description": "The individual permissions that you are giving to this API Key."
}
}
}
ApiKeysCreateKeyResponse
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"scopes": {
"type": "array",
"items": {
"type": "string"
}
},
"api_key": {
"type": "string"
},
"api_key_id": {
"type": "string"
}
}
}
ApiKeysGetAllResponse
{
"type": "object",
"properties": {
"result": {
"type": "array",
"items": {
"$ref": "#/components/schemas/api_key_name_id"
}
}
}
}
ApiKeysGetByKeyIdResponse
{
"type": "object",
"properties": {
"result": {
"type": "array",
"items": {
"$ref": "#/components/schemas/api_key_name_id_scopes"
}
}
}
}
ApiKeysUpdateKeyNameRequest
{
"type": "object",
"example": {
"name": "A New Hope"
},
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "The new name of the API Key."
}
}
}
ApiKeysUpdateNameAndScopesRequest
{
"type": "object",
"example": {
"name": "Profiles key",
"scopes": [
"user.profile.read",
"user.profile.update"
]
},
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"scopes": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
BlocksApiDeleteAllBlockedEmailsRequest
{
"type": "object",
"example": {
"emails": [
"example1@example.com",
"example2@example.com"
],
"delete_all": false
},
"properties": {
"emails": {
"type": "array",
"items": {
"type": "string"
},
"description": "The specific blocked email addresses that you want to delete."
},
"delete_all": {
"type": "boolean",
"description": "Indicates if you want to delete all blocked email addresses."
}
}
}
BlocksApiDeleteAllBlockedEmailsResponse
{
"type": "object",
"properties": {}
}
BlocksApiDeleteSpecificBlockResponse
{
"type": "object",
"properties": {}
}
BouncesApiDeleteBouncesRequest
{
"type": "object",
"example": {
"emails": [
"example@example.com",
"example2@example.com"
],
"delete_all": false
},
"properties": {
"emails": {
"type": "array",
"items": {
"type": "string"
},
"description": "Delete multiple emails from your bounce list at the same time. This should not be used with the delete_all parameter."
},
"delete_all": {
"type": "boolean",
"description": "This parameter allows you to delete **every** email in your bounce list. This should not be used with the emails parameter."
}
}
}
BouncesApiDeleteBouncesResponse
{
"type": "object",
"example": {},
"properties": {}
}
BouncesApiGetAllBouncesResponse
{
"type": "array",
"items": {
"$ref": "#/components/schemas/bounce_response"
}
}
BouncesApiGetByEmailAddressResponse
{
"type": "array",
"items": {
"$ref": "#/components/schemas/bounce_response"
}
}
BouncesApiRemoveBounceResponse
{
"type": "object",
"example": {},
"properties": {}
}
CampaignsApiDeleteCampaignById401Response
{
"type": "object",
"example": {
"errors": [
{
"field": null,
"message": "authorization required"
}
]
},
"properties": {
"errors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string",
"nullable": true,
"x-konfig-null-placeholder": true
},
"message": {
"type": "string",
"example": "authorization required"
}
}
}
}
}
}
CampaignsApiDeleteCampaignById404Response
{
"type": "object",
"example": {},
"properties": {}
}
CampaignsApiDeleteCampaignByIdResponse
{
"type": "object",
"example": {},
"properties": {}
}
CampaignsApiGetScheduledTimeResponse
{
"type": "object",
"title": "View Scheduled Time of a Campaign response",
"required": [
"send_at"
],
"properties": {
"send_at": {
"type": "integer",
"format": "int64"
}
}
}
CampaignsApiGetSingleCampaign401Response
{
"type": "object",
"example": {
"errors": [
{
"field": null,
"message": "authorization required"
}
]
},
"properties": {
"errors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string",
"nullable": true,
"x-konfig-null-placeholder": true
},
"message": {
"type": "string",
"example": "authorization required"
}
}
}
}
}
}
CampaignsApiGetSingleCampaign404Response
{
"type": "object",
"example": {
"errors": [
{
"field": null,
"message": "not found"
}
]
},
"properties": {
"errors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string",
"nullable": true,
"x-konfig-null-placeholder": true
},
"message": {
"type": "string",
"example": "not found"
}
}
}
}
}
}
CampaignsApiGetSingleCampaignResponse
{
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"title": {
"type": "string"
},
"status": {
"type": "string"
},
"ip_pool": {
"type": "string"
},
"subject": {
"type": "string"
},
"list_ids": {
"type": "array",
"items": {
"type": "integer"
}
},
"sender_id": {
"type": "integer"
},
"categories": {
"type": "array",
"items": {
"type": "string"
}
},
"segment_ids": {
"type": "array",
"items": {
"type": "integer"
}
},
"html_content": {
"type": "string"
},
"plain_content": {
"type": "string"
},
"suppression_group_id": {
"type": "integer"
},
"custom_unsubscribe_url": {
"type": "string"
}
}
}
CampaignsApiScheduleCampaignRequest
{
"type": "object",
"title": "Schedule a Campaign request",
"example": {
"send_at": 1489771528
},
"required": [
"send_at"
],
"properties": {
"send_at": {
"type": "integer",
"description": "The unix timestamp for the date and time you would like your campaign to be sent out."
}
}
}
CampaignsApiScheduleCampaignResponse
{
"type": "object",
"title": "Schedule a Campaign response",
"required": [
"id",
"send_at",
"status"
],
"properties": {
"id": {
"type": "integer",
"description": "The campaign ID."
},
"status": {
"enum": [
"Scheduled"
],
"type": "string",
"description": "The status of your campaign."
},
"send_at": {
"type": "integer",
"description": "The date time you scheduled your campaign to be sent."
}
}
}
CampaignsApiSendCampaignNowResponse
{
"type": "object",
"title": "Send a Campaign response",
"required": [
"id",
"status"
],
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"status": {
"type": "string"
}
}
}
CampaignsApiSendTestCampaignRequest
{
"type": "object",
"example": {
"to": "your.email@example.com"
},
"required": [
"to"
],
"properties": {
"to": {
"type": "string",
"format": "email",
"description": "The email address that should receive the test campaign."
}
}
}
CampaignsApiSendTestCampaignResponse
{
"type": "object",
"title": "Send a Test Campaign request",
"required": [
"to"
],
"properties": {
"to": {
"type": "string"
}
}
}
CampaignsApiUnscheduleCampaignResponse
{
"type": "object",
"example": {},
"properties": {}
}
CampaignsApiUpdateScheduledTimeRequest
{
"type": "object",
"title": "Update a Scheduled Campaign request",
"example": {
"send_at": 1489451436
},
"required": [
"send_at"
],
"properties": {
"send_at": {
"type": "integer",
"format": "int64"
}
}
}
CampaignsApiUpdateScheduledTimeResponse
{
"type": "object",
"title": "Update a Scheduled Campaign response",
"required": [
"id",
"send_at",
"status"
],
"properties": {
"id": {
"type": "integer",
"description": "The campaign ID"
},
"status": {
"type": "string",
"description": "The status of the schedule."
},
"send_at": {
"type": "integer",
"description": "The unix timestamp to send the campaign."
}
}
}
CampaignsApiUpdateSpecificCampaign403Response
{
"type": "object",
"example": {
"errors": [
{
"field": null,
"message": "You may only update a campaign when it is in draft mode."
}
]
},
"properties": {
"errors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string",
"nullable": true,
"x-konfig-null-placeholder": true
},
"message": {
"type": "string",
"example": "You may only update a campaign when it is in draft mode."
}
}
}
}
}
}
CampaignsApiUpdateSpecificCampaignRequest
{
"type": "object",
"title": "Update a Campaign request",
"example": {
"title": "May Newsletter",
"subject": "New Products for Summer!",
"categories": [
"summer line"
],
"html_content": "<html><head><title></title></head><body><p>Check out our summer line!</p></body></html>",
"plain_content": "Check out our summer line!"
},
"required": [
"title",
"subject",
"categories",
"html_content",
"plain_content"
],
"properties": {
"title": {
"type": "string",
"description": "The title of the campaign."
},
"subject": {
"type": "string",
"description": "The subject line for your campaign."
},
"categories": {
"type": "array",
"items": {
"type": "string"
},
"description": "The categories you want to tag on this campaign."
},
"html_content": {
"type": "string",
"description": "The HTML content of this campaign."
},
"plain_content": {
"type": "string",
"description": "The plain content of this campaign."
}
}
}
CampaignsApiUpdateSpecificCampaignResponse
{
"type": "object",
"example": {
"errors": [
{
"field": "title",
"message": "title can't be blank"
},
{
"field": "title",
"message": "title is too long (maximum is 100 characters)"
},
{
"field": "categories",
"message": "categories exceeds 10 category limit"
},
{
"field": "html_content",
"message": "html_content exceeds the 1MB limit"
},
{
"field": "plain_content",
"message": "plain_content exceeds the 1MB limit"
},
{
"field": "sender_id",
"message": "sender_id does not exist"
},
{
"field": "sender_id",
"message": "sender_id is not a verified sender identity"
},
{
"field": "list_ids",
"message": "list_ids do not all exist"
},
{
"field": "segment_ids",
"message": "segment_ids do not all exist"
},
{
"field": "ip_pool",
"message": "The ip pool you provided is invalid"
},
{
"field": "suppression_group_id",
"message": "suppression_group_id does not exist"
},
{
"field": "unsubscribes",
"message": "Either suppression_group_id or custom_unsubscribe_url may be set/used, but not both. Please remove one before setting the other."
},
{
"field": null,
"message": "The JSON you have submitted cannot be parsed."
}
]
},
"properties": {
"errors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string",
"example": "title",
"nullable": true
},
"message": {
"type": "string",
"example": "title can't be blank"
}
}
}
}
}
}
CancelScheduledSendsAllScheduledSendsResponse
{
"type": "array",
"items": {
"$ref": "#/components/schemas/user_scheduled_send_status"
}
}
CancelScheduledSendsByBatchIdResponse
{
"type": "array",
"items": {
"$ref": "#/components/schemas/user_scheduled_send_status"
},
"title": "Retrieve scheduled send response"
}
CancelScheduledSendsByBatchIdStatusRequest
{
"type": "object",
"title": "Cancel or pause a scheduled send request",
"example": {
"status": "pause",
"batch_id": "YOUR_BATCH_ID"
},
"required": [
"batch_id",
"status"
],
"properties": {
"status": {
"enum": [
"pause",
"cancel"
],
"type": "string",
"default": "pause",
"description": "The status of the send you would like to implement. This can be pause or cancel. To delete a pause or cancel status see DELETE /v3/user/scheduled_sends/{batch_id}"
},
"batch_id": {
"type": "string",
"pattern": "^[a-zA-Z0-9]",
"description": "The batch ID is the identifier that your scheduled mail sends share."
}
}
}
CancelScheduledSendsRequestResponse
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"errors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"help": {
"type": "object"
},
"field": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
}
}
}
CancelScheduledSendsUpdateStatusRequest
{
"type": "object",
"example": {
"status": "pause"
},
"required": [
"status"
],
"properties": {
"status": {
"enum": [
"cancel",
"pause"
],
"type": "string",
"description": "The status you would like the scheduled send to have."
}
}
}
CancelScheduledSendsUpdateStatusResponse
{
"type": "object",
"example": {},
"properties": {}
}
CategoriesGetEmailStatisticsForResponse
{
"type": "array",
"items": {
"$ref": "#/components/schemas/category_stats"
}
}
CertificatesCreateSsoCertificateRequest
{
"type": "object",
"example": {
"enabled": false,
"integration_id": "b0b98502-9408-4b24-9e3d-31ed7cb15312",
"public_certificate": "<your x509 certificate>"
},
"required": [
"public_certificate",
"integration_id"
],
"properties": {
"enabled": {
"type": "boolean",
"description": "Indicates if the certificate is enabled."
},
"integration_id": {
"type": "string",
"description": "An ID that matches a certificate to a specific IdP integration. This is the `id` returned by the \"Get All SSO Integrations\" endpoint."
},
"public_certificate": {
"type": "string",
"description": "This public certificate allows SendGrid to verify that SAML requests it receives are signed by an IdP that it recognizes."
}
},
"description": ""
}
CertificatesGetByIdpConfigurationsResponse
{
"type": "array",
"items": {
"$ref": "#/components/schemas/sso-certificate-body"
}
}
CertificatesUpdateByIdRequest
{
"type": "object",
"example": {
"enabled": false,
"intergration_id": "b0b98502-9408-4b24-9e3d-31ed7cb15312",
"public_certificate": "<your x509 certificate>"
},
"properties": {
"enabled": {
"type": "boolean",
"description": "Indicates whether or not the certificate is enabled."
},
"integration_id": {
"type": "string",
"description": "An ID that matches a certificate to a specific IdP integration."
},
"public_certificate": {
"type": "string",
"description": "This public certificate allows SendGrid to verify that SAML requests it receives are signed by an IdP that it recognizes."
}
}
}
ContactsApiCustomFieldsCreateNewFieldRequest
{
"type": "object",
"example": {
"name": "pet",
"type": "text"
},
"properties": {
"name": {
"type": "string"
},
"type": {
"type": "string"
}
}
}
ContactsApiCustomFieldsGetAllResponse
{
"type": "object",
"title": "List All Custom Fields response",
"required": [
"custom_fields"
],
"properties": {
"custom_fields": {
"type": "array",
"items": {
"$ref": "#/components/schemas/contactdb_custom_field_with_id"
}
}
}
}
ContactsApiCustomFieldsGetReservedFieldsResponse
{
"type": "object",
"properties": {
"reserved_fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"type": {
"type": "string"
}
}
}
}
}
}
ContactsApiListsAddMultipleRecipientsToListRequest
{
"type": "array",
"items": {
"type": "integer"
},
"example": [
"recipient_id1",
"recipient_id2"
]
}
| Version | Endpoints | Schemas | Ingested | Status |
|---|---|---|---|---|
| 1.0.0 | 334 | 545 | 2026-05-11 | current |
| 1.0.0 | 334 | 545 | 2026-04-16 |