Identity & platformcontact
POST/contact
Send a message to a person at Gitmoap
submit_contact_message
Public
This operation declares no security requirement: it takes no token.Quota · contact messages per source hour
x-gitmoap-quota: {"kind":"enforced","arg":"contact_messages_per_source_hour"}
Choose what it is about — support, privacy, a legal notice, a report of illegal content or a security vulnerability — and a person at that desk replies by email to the address you give. Nothing is sent to that address before the reply: the response, and the reference it carries, is the acknowledgement. No sign-in is needed. Each network address may send five messages in an hour; past that, or when the platform has received as many as it takes in a day, the answer says how long to wait, and the addresses in the Entity Details still reach the same desks.
Request body
application/json- emailContactReplyAddress (string)Where the reply goes. Nothing is sent to it until a person replies.
- messageContactMessageBody (string)What you want to say.
- topicContactTopicsupportprivacylegalabusesecurityWhat the message is about, which chooses the desk a person answers it from.
- nameContactName (string) or nulloptionalThe name to address the reply to, when you want to give one.
- websitestring or nulloptionalLeave empty. A form a person fills in never sets it.
Request body exampleSynthesized example
{
"email": "mara@acme.example",
"message": "Stream pipeline status into the run header",
"topic": "support"
}
Responses
202Received: a person will reply to the address givenapplication/json
- message_idContactMessageId (string · uuid)The reference to quote if you write again about the same thing.
- received_atstringWhen the message arrived.
202 exampleSynthesized example
{
"message_id": "84a2c17f-59fa-40ee-8f43-33c244b8c166",
"received_at": "2026-10-14T03:12:56Z"
}
400A field is not validapplication/json
Error codes
- BAD_REQUESTThe request is malformed: a parameter or a body field is not a well-formed value of its type
errorErrorBody
- The ErrorBody schema
- codestringThe coarse category, tied to the status:
NOT_FOUND,CONFLICT,INSUFFICIENT_SCOPE. Every error has one; the API reference's error catalogue lists them all. - messagestringWhat went wrong, for a person. Written to be read, not parsed: match on
reasonorcode. - fieldstring or nulloptionalOn a
400that refused one field's value, the field, as its JSON path:email,items[0].name. Put the message under that input. Absent on every other error. - reasonstring or nulloptionalThe specific code, when the error has one:
LAST_ORGANIZATION_OWNER,BRANCH_PROTECTED. The message starts with it too. Match on this when it is present, and oncodeotherwise. - required_scopestring or nulloptionalThe scope the access token was missing, on
INSUFFICIENT_SCOPE. - violationsanyoptionalPresent on the structured-validation errors (
PROVIDER_VALIDATION_FAILEDper-node,PIPELINE_VALIDATION_FAILEDDAG): a JSON array of the offending elements, so a caller can fix every one in a single round-trip. Absent (omitted) on every other error.
400 exampleSynthesized example
{
"error": {
"code": "code-e586",
"message": "Stream pipeline status into the run header"
}
}
413The request body is too largeapplication/json
Error codes
- PAYLOAD_TOO_LARGEThe request body is larger than this operation accepts
errorErrorBody
- The ErrorBody schema
- codestringThe coarse category, tied to the status:
NOT_FOUND,CONFLICT,INSUFFICIENT_SCOPE. Every error has one; the API reference's error catalogue lists them all. - messagestringWhat went wrong, for a person. Written to be read, not parsed: match on
reasonorcode. - fieldstring or nulloptionalOn a
400that refused one field's value, the field, as its JSON path:email,items[0].name. Put the message under that input. Absent on every other error. - reasonstring or nulloptionalThe specific code, when the error has one:
LAST_ORGANIZATION_OWNER,BRANCH_PROTECTED. The message starts with it too. Match on this when it is present, and oncodeotherwise. - required_scopestring or nulloptionalThe scope the access token was missing, on
INSUFFICIENT_SCOPE. - violationsanyoptionalPresent on the structured-validation errors (
PROVIDER_VALIDATION_FAILEDper-node,PIPELINE_VALIDATION_FAILEDDAG): a JSON array of the offending elements, so a caller can fix every one in a single round-trip. Absent (omitted) on every other error.
413 exampleSynthesized example
{
"error": {
"code": "code-8504",
"message": "Stream pipeline status into the run header"
}
}
429Several messages were sent recently; try again laterapplication/json
Error codes
- TOO_MANY_REQUESTSRetryableA quota, a rate limit or a transfer budget is spent. When the response carries
Retry-After, retry after that many seconds
errorErrorBody
- The ErrorBody schema
- codestringThe coarse category, tied to the status:
NOT_FOUND,CONFLICT,INSUFFICIENT_SCOPE. Every error has one; the API reference's error catalogue lists them all. - messagestringWhat went wrong, for a person. Written to be read, not parsed: match on
reasonorcode. - fieldstring or nulloptionalOn a
400that refused one field's value, the field, as its JSON path:email,items[0].name. Put the message under that input. Absent on every other error. - reasonstring or nulloptionalThe specific code, when the error has one:
LAST_ORGANIZATION_OWNER,BRANCH_PROTECTED. The message starts with it too. Match on this when it is present, and oncodeotherwise. - required_scopestring or nulloptionalThe scope the access token was missing, on
INSUFFICIENT_SCOPE. - violationsanyoptionalPresent on the structured-validation errors (
PROVIDER_VALIDATION_FAILEDper-node,PIPELINE_VALIDATION_FAILEDDAG): a JSON array of the offending elements, so a caller can fix every one in a single round-trip. Absent (omitted) on every other error.
429 exampleSynthesized example
{
"error": {
"code": "code-7ef5",
"message": "Pin a page's payload to the build that rendered it"
}
}
501The contact form is not available on this deploymentapplication/json
Error codes
- NOT_IMPLEMENTEDThis deployment has not configured the feature the operation needs; the message names it
errorErrorBody
- The ErrorBody schema
- codestringThe coarse category, tied to the status:
NOT_FOUND,CONFLICT,INSUFFICIENT_SCOPE. Every error has one; the API reference's error catalogue lists them all. - messagestringWhat went wrong, for a person. Written to be read, not parsed: match on
reasonorcode. - fieldstring or nulloptionalOn a
400that refused one field's value, the field, as its JSON path:email,items[0].name. Put the message under that input. Absent on every other error. - reasonstring or nulloptionalThe specific code, when the error has one:
LAST_ORGANIZATION_OWNER,BRANCH_PROTECTED. The message starts with it too. Match on this when it is present, and oncodeotherwise. - required_scopestring or nulloptionalThe scope the access token was missing, on
INSUFFICIENT_SCOPE. - violationsanyoptionalPresent on the structured-validation errors (
PROVIDER_VALIDATION_FAILEDper-node,PIPELINE_VALIDATION_FAILEDDAG): a JSON array of the offending elements, so a caller can fix every one in a single round-trip. Absent (omitted) on every other error.
501 exampleSynthesized example
{
"error": {
"code": "code-bdc9",
"message": "Draw the region map from operation density"
}
}
CLI
gitmoap contact submit-contact-message
- --emailstringWhere the reply goes. Nothing is sent to it until a person replies.
- --messagestringWhat you want to say.
- --namestringoptional
- --topicsupport | privacy | legal | abuse | securityWhat the message is about, which chooses the desk a person answers it from.
- --websitestringoptionalLeave empty. A form a person fills in never sets it.