Submit data to a form (supporting authentication)
curl --request POST \
--url https://api.hsforms.com/submissions/v3/integration/secure/submit/{portalId}/{formGuid} \
--header 'Content-Type: application/json' \
--data '
{
"fields": [
{
"objectTypeId": "<string>",
"name": "<string>",
"value": "<string>"
}
],
"submittedAt": "<string>",
"context": {
"hutk": "<string>",
"ipAddress": "<string>",
"pageName": "<string>",
"pageUri": "<string>",
"pageId": "<string>",
"sfdcCampaignId": "<string>",
"goToWebinarWebinarKey": "<string>"
},
"legalConsentOptions": {},
"skipValidation": true
}
'import requests
url = "https://api.hsforms.com/submissions/v3/integration/secure/submit/{portalId}/{formGuid}"
payload = {
"fields": [
{
"objectTypeId": "<string>",
"name": "<string>",
"value": "<string>"
}
],
"submittedAt": "<string>",
"context": {
"hutk": "<string>",
"ipAddress": "<string>",
"pageName": "<string>",
"pageUri": "<string>",
"pageId": "<string>",
"sfdcCampaignId": "<string>",
"goToWebinarWebinarKey": "<string>"
},
"legalConsentOptions": {},
"skipValidation": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
fields: [{objectTypeId: '<string>', name: '<string>', value: '<string>'}],
submittedAt: '<string>',
context: {
hutk: '<string>',
ipAddress: '<string>',
pageName: '<string>',
pageUri: '<string>',
pageId: '<string>',
sfdcCampaignId: '<string>',
goToWebinarWebinarKey: '<string>'
},
legalConsentOptions: {},
skipValidation: true
})
};
fetch('https://api.hsforms.com/submissions/v3/integration/secure/submit/{portalId}/{formGuid}', 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://api.hsforms.com/submissions/v3/integration/secure/submit/{portalId}/{formGuid}",
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([
'fields' => [
[
'objectTypeId' => '<string>',
'name' => '<string>',
'value' => '<string>'
]
],
'submittedAt' => '<string>',
'context' => [
'hutk' => '<string>',
'ipAddress' => '<string>',
'pageName' => '<string>',
'pageUri' => '<string>',
'pageId' => '<string>',
'sfdcCampaignId' => '<string>',
'goToWebinarWebinarKey' => '<string>'
],
'legalConsentOptions' => [
],
'skipValidation' => true
]),
CURLOPT_HTTPHEADER => [
"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://api.hsforms.com/submissions/v3/integration/secure/submit/{portalId}/{formGuid}"
payload := strings.NewReader("{\n \"fields\": [\n {\n \"objectTypeId\": \"<string>\",\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"submittedAt\": \"<string>\",\n \"context\": {\n \"hutk\": \"<string>\",\n \"ipAddress\": \"<string>\",\n \"pageName\": \"<string>\",\n \"pageUri\": \"<string>\",\n \"pageId\": \"<string>\",\n \"sfdcCampaignId\": \"<string>\",\n \"goToWebinarWebinarKey\": \"<string>\"\n },\n \"legalConsentOptions\": {},\n \"skipValidation\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
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://api.hsforms.com/submissions/v3/integration/secure/submit/{portalId}/{formGuid}")
.header("Content-Type", "application/json")
.body("{\n \"fields\": [\n {\n \"objectTypeId\": \"<string>\",\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"submittedAt\": \"<string>\",\n \"context\": {\n \"hutk\": \"<string>\",\n \"ipAddress\": \"<string>\",\n \"pageName\": \"<string>\",\n \"pageUri\": \"<string>\",\n \"pageId\": \"<string>\",\n \"sfdcCampaignId\": \"<string>\",\n \"goToWebinarWebinarKey\": \"<string>\"\n },\n \"legalConsentOptions\": {},\n \"skipValidation\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hsforms.com/submissions/v3/integration/secure/submit/{portalId}/{formGuid}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"fields\": [\n {\n \"objectTypeId\": \"<string>\",\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"submittedAt\": \"<string>\",\n \"context\": {\n \"hutk\": \"<string>\",\n \"ipAddress\": \"<string>\",\n \"pageName\": \"<string>\",\n \"pageUri\": \"<string>\",\n \"pageId\": \"<string>\",\n \"sfdcCampaignId\": \"<string>\",\n \"goToWebinarWebinarKey\": \"<string>\"\n },\n \"legalConsentOptions\": {},\n \"skipValidation\": true\n}"
response = http.request(request)
puts response.read_body{
"redirectUri": "<string>",
"inlineMessage": "<string>"
}{
"errors": [
{
"message": "<string>",
"errorType": "BLOCKED_EMAIL"
}
]
}{
"category": "<string>",
"correlationId": "<string>",
"message": "<string>",
"subCategory": "<string>",
"errors": [
{
"message": "<string>",
"in": "<string>",
"code": "<string>",
"subCategory": "<string>",
"context": {}
}
],
"context": {},
"links": {}
}{
"category": "<string>",
"correlationId": "<string>",
"message": "<string>",
"subCategory": "<string>",
"errors": [
{
"message": "<string>",
"in": "<string>",
"code": "<string>",
"subCategory": "<string>",
"context": {}
}
],
"context": {},
"links": {}
}v3 legacy
Submit data to a form (supporting authentication)
Send form submission data to a HubSpot form, specified by form ID. This endpoint requires authentication and has higher rate limits.
POST
/
submissions
/
v3
/
integration
/
secure
/
submit
/
{portalId}
/
{formGuid}
Submit data to a form (supporting authentication)
curl --request POST \
--url https://api.hsforms.com/submissions/v3/integration/secure/submit/{portalId}/{formGuid} \
--header 'Content-Type: application/json' \
--data '
{
"fields": [
{
"objectTypeId": "<string>",
"name": "<string>",
"value": "<string>"
}
],
"submittedAt": "<string>",
"context": {
"hutk": "<string>",
"ipAddress": "<string>",
"pageName": "<string>",
"pageUri": "<string>",
"pageId": "<string>",
"sfdcCampaignId": "<string>",
"goToWebinarWebinarKey": "<string>"
},
"legalConsentOptions": {},
"skipValidation": true
}
'import requests
url = "https://api.hsforms.com/submissions/v3/integration/secure/submit/{portalId}/{formGuid}"
payload = {
"fields": [
{
"objectTypeId": "<string>",
"name": "<string>",
"value": "<string>"
}
],
"submittedAt": "<string>",
"context": {
"hutk": "<string>",
"ipAddress": "<string>",
"pageName": "<string>",
"pageUri": "<string>",
"pageId": "<string>",
"sfdcCampaignId": "<string>",
"goToWebinarWebinarKey": "<string>"
},
"legalConsentOptions": {},
"skipValidation": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
fields: [{objectTypeId: '<string>', name: '<string>', value: '<string>'}],
submittedAt: '<string>',
context: {
hutk: '<string>',
ipAddress: '<string>',
pageName: '<string>',
pageUri: '<string>',
pageId: '<string>',
sfdcCampaignId: '<string>',
goToWebinarWebinarKey: '<string>'
},
legalConsentOptions: {},
skipValidation: true
})
};
fetch('https://api.hsforms.com/submissions/v3/integration/secure/submit/{portalId}/{formGuid}', 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://api.hsforms.com/submissions/v3/integration/secure/submit/{portalId}/{formGuid}",
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([
'fields' => [
[
'objectTypeId' => '<string>',
'name' => '<string>',
'value' => '<string>'
]
],
'submittedAt' => '<string>',
'context' => [
'hutk' => '<string>',
'ipAddress' => '<string>',
'pageName' => '<string>',
'pageUri' => '<string>',
'pageId' => '<string>',
'sfdcCampaignId' => '<string>',
'goToWebinarWebinarKey' => '<string>'
],
'legalConsentOptions' => [
],
'skipValidation' => true
]),
CURLOPT_HTTPHEADER => [
"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://api.hsforms.com/submissions/v3/integration/secure/submit/{portalId}/{formGuid}"
payload := strings.NewReader("{\n \"fields\": [\n {\n \"objectTypeId\": \"<string>\",\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"submittedAt\": \"<string>\",\n \"context\": {\n \"hutk\": \"<string>\",\n \"ipAddress\": \"<string>\",\n \"pageName\": \"<string>\",\n \"pageUri\": \"<string>\",\n \"pageId\": \"<string>\",\n \"sfdcCampaignId\": \"<string>\",\n \"goToWebinarWebinarKey\": \"<string>\"\n },\n \"legalConsentOptions\": {},\n \"skipValidation\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
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://api.hsforms.com/submissions/v3/integration/secure/submit/{portalId}/{formGuid}")
.header("Content-Type", "application/json")
.body("{\n \"fields\": [\n {\n \"objectTypeId\": \"<string>\",\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"submittedAt\": \"<string>\",\n \"context\": {\n \"hutk\": \"<string>\",\n \"ipAddress\": \"<string>\",\n \"pageName\": \"<string>\",\n \"pageUri\": \"<string>\",\n \"pageId\": \"<string>\",\n \"sfdcCampaignId\": \"<string>\",\n \"goToWebinarWebinarKey\": \"<string>\"\n },\n \"legalConsentOptions\": {},\n \"skipValidation\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hsforms.com/submissions/v3/integration/secure/submit/{portalId}/{formGuid}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"fields\": [\n {\n \"objectTypeId\": \"<string>\",\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"submittedAt\": \"<string>\",\n \"context\": {\n \"hutk\": \"<string>\",\n \"ipAddress\": \"<string>\",\n \"pageName\": \"<string>\",\n \"pageUri\": \"<string>\",\n \"pageId\": \"<string>\",\n \"sfdcCampaignId\": \"<string>\",\n \"goToWebinarWebinarKey\": \"<string>\"\n },\n \"legalConsentOptions\": {},\n \"skipValidation\": true\n}"
response = http.request(request)
puts response.read_body{
"redirectUri": "<string>",
"inlineMessage": "<string>"
}{
"errors": [
{
"message": "<string>",
"errorType": "BLOCKED_EMAIL"
}
]
}{
"category": "<string>",
"correlationId": "<string>",
"message": "<string>",
"subCategory": "<string>",
"errors": [
{
"message": "<string>",
"in": "<string>",
"code": "<string>",
"subCategory": "<string>",
"context": {}
}
],
"context": {},
"links": {}
}{
"category": "<string>",
"correlationId": "<string>",
"message": "<string>",
"subCategory": "<string>",
"errors": [
{
"message": "<string>",
"in": "<string>",
"code": "<string>",
"subCategory": "<string>",
"context": {}
}
],
"context": {},
"links": {}
}Scope requirements
Scope requirements
Paramètres de chemin
The HubSpot portal the form belongs to.
The ID of the form you're sending data to.
Corps
application/json
A list of form field names and the values for those fields, up to 1000 fields can be included.
Maximum array length:
1000Show child attributes
Show child attributes
A millisecond timestamp representing the time of the form submission. This can be used to backdate the submission, but using a time more than one month old will result in an error.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Whether or not to skip validation based on the form settings. Defaults to false. Note: This parameter is deprecated.
Réponse
Form submission successful
Dernière modification le 1 avril 2026