Prerequisites
Before submitting an agent, you must have a registered, active provider. See Register a Provider to create one and obtain yourprovider_id and DID key pair.
Steps
1
Build the agent card
Your For public agents that require no authentication, declare the
agent_card must follow the Google A2A specification. At minimum it needs a name, description, URL, transport, protocol version, task support flag, at least one skill, and a security declaration.none scheme explicitly:2
Sign the attestation
The Sign this payload with your provider’s Ed25519 private key and base64-encode the resulting 64-byte signature. Pass the result as
attestation_signature proves that the provider DID controls this submission. It is a base64-encoded Ed25519 signature over the canonical JSON (RFC 8785 / JCS) of the attestation payload—every field in the submission except the signature itself.The exact payload to sign is built from these fields:attestations.attestation_signature.The registry uses JCS (JSON Canonicalization Scheme) to produce a deterministic byte sequence before signing. Verify that your signing library serializes keys in lexicographic order and strips insignificant whitespace.
3
Submit the agent
POST /v1/agent-submissions with the full submission body. The response returns an AgentSubmissionRecord including the submission_id and initial status.201 Created:status is "approved" immediately and the agent is live. When the node requires admin approval, status starts as "submitted".4
Check submission status
Fetch a single submission by its ID:Or list all submissions for your provider:The
status field progresses through the following states:Review Profile Fields
Thereview object carries policy metadata that the gateway enforces on every invocation. Provide accurate values—callers rely on these to make trust decisions before invoking your agent.
"low" | "medium" | "high"
required
The overall risk classification of this agent.
"high" requires callers to explicitly set confirm_risky: true. Medium and high agents also trigger receipt verification.string[]
Data categories the agent reads or writes. Examples:
["financial"], ["pii"], ["health"]. Used for disclosure and compliance filtering.string[]
Skill IDs or action names that have irreversible side effects. Examples:
["payments.refund"], ["records.delete"]. Informs callers that invoke with human_approval_required.boolean
default:"false"
Hint to callers that a human should confirm invocations before they execute. ServiceNet does not enforce this server-side, but well-behaved orchestrators respect it.
string[]
ISO 3166-1 alpha-2 country codes the agent is permitted to serve. If non-empty, callers must pass a matching
region in their invocation request or the gateway rejects the call. Example: ["AU", "US", "GB"].integer
Estimated cost in abstract units per invocation. Callers can set
max_cost_units in their request to cap spend; the gateway rejects calls that exceed this threshold.Submission Body Reference
By default, submissions that pass signature validation, schema checks, and smoke tests are auto-approved and published immediately. Set the
SERVICENET_REQUIRE_ADMIN_APPROVE=1 environment variable on the node to require explicit moderator approval before publishing.