Request and Response Data Contracts
These source-derived declarations complement the endpoint guides. Public HTTP JSON uses camel-case names. Domain enums can serialize as names; invocation lifecycle DTOs explicitly use lower snake-case status strings. C# nullable fields are marked with ?. Requiredness also depends on validators, so consult the endpoint notes and deployed OpenAPI document.
ApprovalDto
public sealed record ApprovalDto(string Id, string Status);
DecisionDto
public sealed record DecisionDto(string Outcome, IReadOnlyList<string> ReasonCodes, string PolicyRevision);
ExecutionDto
public sealed record ExecutionDto(
string Status,
string? UpstreamReference = null,
int? ResponseStatusCode = null,
string? ResponsePayload = null,
string? ErrorMessage = null,
DateTimeOffset? DispatchedAt = null,
DateTimeOffset? RespondedAt = null);
InvocationContext
public sealed record InvocationContext
{
public string? WorkflowId { get; init; } // untrusted evidence
public string? DeclaredPurpose { get; init; } // untrusted evidence
}
InvocationRequest
using System.Text.Json;
public sealed record InvocationRequest
{
public string SchemaVersion { get; init; } = "synentra.invocation.v2";
public required string OperationId { get; init; }
public string? BindingId { get; init; }
public string? TaskGrantId { get; init; }
public required JsonElement Arguments { get; init; }
public InvocationContext? Context { get; init; }
}
InvocationResultDto
public sealed record InvocationResultDto
{
public string SchemaVersion { get; init; } = "synentra.invocation-result.v2";
public required string InvocationId { get; init; }
public required DecisionDto Decision { get; init; }
public ApprovalDto? Approval { get; init; }
public required ExecutionDto Execution { get; init; }
public required OutcomeDto Outcome { get; init; }
}
OutcomeDto
public sealed record OutcomeDto(string Status);
GrantLimitDto
public sealed record GrantLimitDto(
string Measure,
string Unit,
int Scale,
long? PerInvocation,
long? Aggregate);
GrantLimitStateDto
public sealed record GrantLimitStateDto(
string Measure,
string Unit,
long AuthorizedAggregate,
long Settled,
long ActiveReserved,
long Available);
ResourceScopeDto
public sealed record ResourceScopeDto(
string Role,
string Type,
IReadOnlyList<string> Ids);
TaskGrantRequest
public sealed record TaskGrantRequest(
string AgentId,
IReadOnlyList<string> OperationIds,
IReadOnlyList<ResourceScopeDto> ResourceScopes,
IReadOnlyList<GrantLimitDto> Limits,
DateTimeOffset ExpiresAt,
string? ExternalReference);
TaskGrantResponse
public sealed record TaskGrantResponse(
string Id,
string State,
DateTimeOffset ExpiresAt,
IReadOnlyList<GrantLimitStateDto> LimitStates);
ActivationResult
public sealed record ActivationResult(
bool Activated,
string? PreviousRevision,
string NewRevision,
IReadOnlyList<ValidationIssue> Issues);
ValidationIssue
public sealed record ValidationIssue(
string Severity,
string Code,
string Message,
string? Path = null);
ValidationResult
public sealed record ValidationResult(bool IsValid, IReadOnlyList<ValidationIssue> Issues)
{
public static ValidationResult Ok() => new(true, Array.Empty<ValidationIssue>());
}
GetCapabilitiesResponse
public sealed record GetCapabilitiesResponse(IReadOnlyList<GetCapabilityDto> Adapters);
public sealed record GetCapabilityDto(
string AdapterId,
string Version,
IReadOnlyList<string> SupportedExecutionModels,
IReadOnlyList<string> SupportedSchemaVersions,
IReadOnlyList<string> EnforcementCapabilities,
IReadOnlyList<string> SupportedModalities);
OperationDto
public sealed record OperationDto(
string Id,
string Version,
string Family,
string Action,
string Mutability,
string ExecutionModel,
bool TaskGrantRequired,
IReadOnlyList<string> PolicyRefs,
IReadOnlyList<string> BindingIds);
AuditEntry
public sealed record AuditEntry(
string Id,
string Category,
string ActorId,
string SecurityScope,
string? OperationId,
string? BindingId,
string? TargetId,
string? InvocationId,
string? InputDigest,
string? PolicyRevision,
string? ApprovalId,
IReadOnlyDictionary<string, string> Details,
DateTimeOffset Timestamp);
AuditQuery
public sealed record AuditQuery(
string? SecurityScope,
string? ActorId,
string? InvocationId,
string? Category,
DateTimeOffset? From,
DateTimeOffset? To);