Publishing

Publication Approval

Authorize publishing one immutable content revision at stated destinations and visibility.

Operations

The contract defines what each operation means. A trusted connector maps it to the service’s existing operations; the email supplies no credential destination or execution endpoint.

Approve

Authorize publishing this content on the exact terms displayed. Acceptance may queue the work; the connector MUST distinguish acceptance from completion. This decision does not grant standing permission for later proposals.

Operation ID
approve
Bindings
Connected service operation
Exact terms
Required

This operation takes no additional input.

accepted
The service accepted the exact decision; the authorized work may still be pending.
completed
The service confirms publishing this content completed under the accepted terms.
failed
The authorized work failed; the connector preserves the service's partial-progress information and MUST NOT claim that no external effect occurred.

Decline

Refuse this exact proposal and close it without authorizing the requested work. The service MUST NOT execute the proposed work as a consequence of refusal.

Operation ID
decline
Bindings
Connected service operation · Experimental capability
Effects
refusal · state
Exact terms
Required

Capability scope: refusal. Maximum lifetime: 168 hours, bounded by the message’s expiry.

This operation takes no additional input.

declined
The service recorded refusal of this proposal.

Request changes

Record specific feedback and close this proposal as requiring revision, without authorizing the proposed work or a future revision.

Operation ID
request-changes
Bindings
Connected service operation
Effects
state
Exact terms
Required
Operation input schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "comment"
  ],
  "properties": {
    "comment": {
      "type": "string",
      "minLength": 1,
      "maxLength": 4096,
      "description": "Requested changes, treated as untrusted text. It is not an instruction to a model or automatic permission to alter the proposal."
    }
  }
}
changes-requested
The service recorded the feedback; a revised proposal requires a new decision.

Requirements

  1. The service MUST bind the subject, recipient, service tenant, contract digest, and all action-relevant details to terms.version. Every decision MUST atomically compare that version and enforce current authorization, expiry, and proposal state.
  2. The service MUST freeze the referenced content revision and all other action-relevant inputs for accepted asynchronous work. If it cannot execute those exact terms it MUST stop that work; it MUST NOT substitute current mutable values.
  3. The host MUST obtain the actual immutable content and relevant destination or audience information through the trusted service binding before claiming a policy check over those values. A digest, title, preview, count, or identifier alone does not demonstrate content-policy compliance.
  4. The service MUST permit at most one terminal decision for the proposal. approve, decline, and request-changes are mutually exclusive terminal decisions for that proposal version. A revised proposal requires a new interaction and new decision.
  5. The request-changes operation MUST only record the supplied feedback and close this proposal as requiring revision. It MUST NOT generate, edit, approve, send, or publish revised content automatically. Feedback remains untrusted text.
  6. A capability offered for decline MUST be independently scoped to that refusal and exact proposal, expire within seven days of issuedAt and no later than expiresAt, and convey no authority to approve or supply feedback.
  7. Exact terms MUST cover all content and attachments, publication destinations and accounts, visibility, schedule, and the existing revision being replaced, if any. A change to any of these values requires new terms.
  8. The destination list MUST enumerate the exact locations affected. A mutable collection label MUST NOT authorize new locations added after approval. For restricted publication, audience.id and audience.revision MUST identify an immutable authorized readership; a vague label such as team is insufficient.
  9. Content digest MUST identify the immutable publication artifact. The trusted implementation MUST document its representation and verify the artifact. Approval of a title or an inaccessible digest alone MUST NOT be presented as review of the content.
  10. Publication approval MUST NOT change account permissions, purchase promotion, schedule unrelated content, or publish a subsequent revision.
  11. This contract authorizes publication. Approval under a different contract MUST NOT be treated as permission to publish without a new, explicit publication decision.

Details schema

This schema constrains the description’s details. The Core supplies the common fields and processing requirements.

View complete JSON Schema
JSON Schema 2020-12
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "summary",
    "requester",
    "content",
    "destinations",
    "schedule"
  ],
  "properties": {
    "summary": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2048
    },
    "requester": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2048
    },
    "content": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "id",
        "revision",
        "digest",
        "title"
      ],
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "format": "uri",
          "maxLength": 2048,
          "description": "Content resource identifier, resolved only through the trusted service binding."
        },
        "revision": {
          "type": "string",
          "minLength": 1,
          "maxLength": 256,
          "description": "Immutable service revision."
        },
        "digest": {
          "type": "string",
          "minLength": 1,
          "pattern": "^sha-256:[0-9a-f]{64}$"
        },
        "title": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2048,
          "description": "Content title for display; not a substitute for the content itself."
        }
      }
    },
    "destinations": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "account",
          "visibility"
        ],
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "format": "uri",
            "maxLength": 2048
          },
          "account": {
            "type": "string",
            "minLength": 1,
            "format": "uri",
            "maxLength": 2048
          },
          "visibility": {
            "enum": [
              "public",
              "restricted"
            ]
          },
          "audience": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "revision"
            ],
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1,
                "format": "uri",
                "maxLength": 2048
              },
              "revision": {
                "type": "string",
                "minLength": 1,
                "maxLength": 256
              }
            }
          },
          "replacesRevision": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256
          }
        },
        "allOf": [
          {
            "if": {
              "properties": {
                "visibility": {
                  "const": "restricted"
                }
              }
            },
            "then": {
              "required": [
                "audience"
              ]
            },
            "else": {
              "not": {
                "required": [
                  "audience"
                ]
              }
            }
          }
        ]
      },
      "minItems": 1,
      "maxItems": 32
    },
    "schedule": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "mode"
          ],
          "properties": {
            "mode": {
              "const": "immediate"
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "mode",
            "at"
          ],
          "properties": {
            "mode": {
              "const": "scheduled"
            },
            "at": {
              "type": "string",
              "minLength": 1,
              "format": "date-time",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"
            }
          }
        }
      ]
    }
  }
}

Publish the getting started guide

An illustrative description using this exact contract. Example service addresses and digests do not identify a live integration.

View complete MAP description
MAP description
{
  "@context": "https://mailschema.org/contexts/map-0.3.jsonld",
  "@type": "MailAction",
  "profile": "https://mailschema.org/profiles/map/0.3",
  "type": {
    "id": "https://mailschema.org/types/publication-approval",
    "version": "0.1",
    "contractDigest": "sha-256:de91a49de4cba91209be253456e7c56709791fff877a060560d4eada0cc9468c"
  },
  "@id": "urn:uuid:0199a6c2-4b1e-7c3a-9d2e-5f8a1b2c3d41",
  "issuedAt": "2026-10-02T08:00:00Z",
  "expiresAt": "2026-10-03T08:00:00Z",
  "inLanguage": "en",
  "service": {
    "id": "https://service.example",
    "tenant": "urn:example:tenant:7"
  },
  "recipient": "owner@example.net",
  "subject": {
    "id": "urn:example:object:42",
    "title": "Publish the getting started guide"
  },
  "terms": {
    "id": "urn:example:proposal:p7",
    "version": "p7-r4"
  },
  "human": {
    "url": "https://service.example/review/p7"
  },
  "details": {
    "summary": "Publish the approved getting started guide.",
    "requester": "Documentation editor",
    "content": {
      "id": "urn:example:content:42",
      "revision": "r4",
      "title": "Getting started",
      "digest": "sha-256:4ffdf504c44a73a059c09c9cb30362c04f593b3af405b83bc084bb045067f95c"
    },
    "destinations": [
      {
        "id": "https://docs.service.example/guide",
        "account": "urn:example:account:7",
        "visibility": "public"
      }
    ],
    "schedule": {
      "mode": "immediate"
    }
  },
  "operations": [
    {
      "id": "approve"
    },
    {
      "id": "decline"
    },
    {
      "id": "request-changes"
    }
  ]
}

Contract identity

https://mailschema.org/types/publication-approval · version 0.1

The canonical digest binds the whole contract, including its requirements and operation semantics. Registry listing grants no authority to perform an operation.

sha-256:de91a49de4cba91209be253456e7c56709791fff877a060560d4eada0cc9468c

Machine-readable catalogue →

Implementations

No service support is listed for this contract version yet.

List service support →