CreatePublisherRequest
Request to create a new publisher
Properties
| Property | Type | Required | Description |
|---|---|---|---|
a2a_endpoint_url |
string,null | No | A2A endpoint base URL (required for compute_type = agent) |
accepted_asset_ids |
array,null | No | Asset IDs the publisher accepts for payment |
allowed_passthrough_headers |
Array<string> | No | Whitelist of agent-provided headers allowed to pass through to upstream |
api_headers |
any | No | Headers for API requests (will be encrypted) |
api_key_header |
string,null | No | Header name to inject upstream_api_key into (e.g., "Authorization", "X-API-Key") |
api_key_query_param |
string,null | No | Query parameter name to inject upstream_api_key into (e.g., "api_key") |
api_url |
string,null | No | External API URL (required for integration_type = api) |
auth_type |
string,null | No | Upstream auth mode ("static", "jwt", or "oauth2_cc") (default: static) |
base_price_per_1000_rows |
string,null | No | |
billing_model |
string,null | No | Billing model ("x402_per_request", "prepaid_credits", "x402_passthrough", "pay_per_use") |
branch_id |
string,null | No | SerenDB branch ID (required for database_type = serendb) |
capabilities |
Array<string> | No | Publisher-declared capabilities for task matching |
categories |
Array<string> | No | |
compute_type |
any | No | |
database_config |
any | No | Provider-specific configuration For connection_string auth: { "connection_string": "postgresql://..." } |
database_name |
string,null | No | Database name within the SerenDB project (default: serendb) |
database_type |
any | No | |
description |
string,null | No | |
email |
string,null | No | Publisher contact email for notifications and support |
endpoints |
array,null | No | Structured endpoint definitions for LLM discoverability and access control |
gateway_fee_percent |
string,null | No | Gateway fee percentage for upstream x402 payments (pass-through). |
grace_period_minutes |
integer,null | No | |
hourly_rate |
string,null | No | |
integration_type |
any | No | |
jwt_access_key |
string,null | No | JWT access key / issuer claim (plaintext) |
jwt_algorithm |
string,null | No | JWT signing algorithm ("HS256", "HS384", "HS512") (default: HS256) |
jwt_expiration_seconds |
integer,null | No | JWT expiration seconds (60-86400, default: 1800) |
jwt_secret_key |
string,null | No | JWT secret key (will be encrypted) |
logo_url |
string,null | No | Optional publisher branding URL |
low_balance_threshold |
string,null | No | |
markup_multiplier |
string,null | No | |
mcp_endpoint |
string,null | No | MCP server endpoint URL (required for integration_type = mcp) |
minimum_balance |
string,null | No | |
name |
string | Yes | |
oauth2_client_id |
string,null | No | OAuth2 client ID for Client Credentials flow |
oauth2_client_secret |
string,null | No | OAuth2 client secret for Client Credentials flow (will be encrypted) |
oauth2_scopes |
Array<string> | No | OAuth2 scopes to request during Client Credentials flow |
oauth2_token_url |
string,null | No | OAuth2 token endpoint URL for Client Credentials flow |
oauth_provider_slug |
string,null | No | OAuth provider slug for BYOC (Bring Your Own Credentials) authentication. When set along with requires_user_oauth=true, users must connect their own OAuth account before using this publisher. |
ownership_tracking_enabled |
boolean,null | No | Enable resource ownership tracking (legacy gateway parity) |
price_per_call |
string,null | No | |
price_per_delete |
string,null | No | |
price_per_execution |
string,null | No | Price per execution for agent templates or usage-based billing |
price_per_get |
string,null | No | |
price_per_patch |
string,null | No | |
price_per_post |
string,null | No | |
price_per_put |
string,null | No | |
project_id |
string,null | No | SerenDB project ID (required for database_type = serendb) |
protected_operations |
any | No | Protected operations configuration - legacy, use endpoints[].is_protected instead |
publisher_category |
PublisherCategory | Yes | Publisher category: database, integration, or compute |
publisher_type |
any | No | |
request_content_type |
string,null | No | Content-Type for upstream API requests (default: application/json) |
requires_user_oauth |
boolean | No | If true, users must connect via OAuth before using this publisher (BYOC mode). Requires oauth_provider_slug to be set. |
reserve_max_charge |
string,null | No | Maximum amount to reserve up-front for pay_per_use pre-authorization. |
resource_description |
string,null | No | |
resource_id_response_path |
string,null | No | JSONPath to resource ID in response body (for ownership tracking) |
resource_id_url_pattern |
string,null | No | URL pattern with :resourceId placeholder (for ownership tracking) |
resource_name |
string,null | No | |
routing |
any | No | |
slug |
string | Yes | |
token_cache_ttl_seconds |
integer,null | No | TTL for cached exchanged tokens in seconds (60-86400, default: 3600) |
token_exchange_method |
string,null | No | HTTP method for exchange endpoint (POST or GET, default: POST) |
token_exchange_mode |
string,null | No | How to send Seren token: header, body, or query (default: header) |
token_exchange_url |
string,null | No | URL to call for exchanging Seren API keys for publisher auth tokens |
token_response_field |
string,null | No | JSON field in exchange response containing the token (default: access_token) |
undocumented_endpoint_policy |
any | No | |
unresolved_fallback_charge |
string,null | No | Fallback charge used when pay_per_use cost cannot be resolved from upstream response or token estimates. |
upstream_api_key |
string,null | No | Upstream static API key (will be encrypted) |
upstream_cost_response_path |
string,null | No | Dot-separated path to upstream cost in response body (for pay_per_use and prepaid passthrough billing). Example: "usage.cost" |
upstream_headers |
any | No | Non-sensitive headers to send to upstream API (e.g., User-Agent) |
usage_examples |
array,null | No | Usage examples showing how to call the publisher's API |
use_cases |
Array<string> | No | Human-readable use case descriptions |
wallet_address |
WalletAddress | Yes | Wallet address for receiving payments |
wallet_network_id |
string | Yes | Network ID for wallet (CAIP-2 format, e.g., "eip155:8453" for Base) |
View JSON Schema
{
"type": "object",
"description": "Request to create a new publisher",
"required": [
"name",
"slug",
"wallet_address",
"wallet_network_id",
"publisher_category"
],
"properties": {
"a2a_endpoint_url": {
"type": [
"string",
"null"
],
"description": "A2A endpoint base URL (required for compute_type = agent)"
},
"accepted_asset_ids": {
"type": [
"array",
"null"
],
"items": {
"type": "string",
"format": "uuid"
},
"description": "Asset IDs the publisher accepts for payment"
},
"allowed_passthrough_headers": {
"type": "array",
"items": {
"type": "string"
},
"description": "Whitelist of agent-provided headers allowed to pass through to upstream"
},
"api_headers": {
"description": "Headers for API requests (will be encrypted)"
},
"api_key_header": {
"type": [
"string",
"null"
],
"description": "Header name to inject upstream_api_key into (e.g., \"Authorization\", \"X-API-Key\")"
},
"api_key_query_param": {
"type": [
"string",
"null"
],
"description": "Query parameter name to inject upstream_api_key into (e.g., \"api_key\")"
},
"api_url": {
"type": [
"string",
"null"
],
"description": "External API URL (required for integration_type = api)"
},
"auth_type": {
"type": [
"string",
"null"
],
"description": "Upstream auth mode (\"static\", \"jwt\", or \"oauth2_cc\") (default: static)"
},
"base_price_per_1000_rows": {
"type": [
"string",
"null"
]
},
"billing_model": {
"type": [
"string",
"null"
],
"description": "Billing model (\"x402_per_request\", \"prepaid_credits\", \"x402_passthrough\", \"pay_per_use\")"
},
"branch_id": {
"type": [
"string",
"null"
],
"format": "uuid",
"description": "SerenDB branch ID (required for database_type = serendb)"
},
"capabilities": {
"type": "array",
"items": {
"type": "string"
},
"description": "Publisher-declared capabilities for task matching"
},
"categories": {
"type": "array",
"items": {
"type": "string"
}
},
"compute_type": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/ComputeType",
"description": "Compute type when publisher_category = compute"
}
]
},
"database_config": {
"description": "Provider-specific configuration\nFor connection_string auth: { \"connection_string\": \"postgresql://...\" }"
},
"database_name": {
"type": [
"string",
"null"
],
"description": "Database name within the SerenDB project (default: serendb)"
},
"database_type": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/DatabaseType",
"description": "Database type when publisher_category = database"
}
]
},
"description": {
"type": [
"string",
"null"
]
},
"email": {
"type": [
"string",
"null"
],
"description": "Publisher contact email for notifications and support"
},
"endpoints": {
"type": [
"array",
"null"
],
"items": {
"$ref": "#/components/schemas/EndpointDefinition"
},
"description": "Structured endpoint definitions for LLM discoverability and access control"
},
"gateway_fee_percent": {
"type": [
"string",
"null"
],
"description": "Gateway fee percentage for upstream x402 payments (pass-through)."
},
"grace_period_minutes": {
"type": [
"integer",
"null"
],
"format": "int32"
},
"hourly_rate": {
"type": [
"string",
"null"
]
},
"integration_type": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/IntegrationType",
"description": "Integration type when publisher_category = integration"
}
]
},
"jwt_access_key": {
"type": [
"string",
"null"
],
"description": "JWT access key / issuer claim (plaintext)"
},
"jwt_algorithm": {
"type": [
"string",
"null"
],
"description": "JWT signing algorithm (\"HS256\", \"HS384\", \"HS512\") (default: HS256)"
},
"jwt_expiration_seconds": {
"type": [
"integer",
"null"
],
"format": "int32",
"description": "JWT expiration seconds (60-86400, default: 1800)"
},
"jwt_secret_key": {
"type": [
"string",
"null"
],
"description": "JWT secret key (will be encrypted)"
},
"logo_url": {
"type": [
"string",
"null"
],
"description": "Optional publisher branding URL"
},
"low_balance_threshold": {
"type": [
"string",
"null"
]
},
"markup_multiplier": {
"type": [
"string",
"null"
]
},
"mcp_endpoint": {
"type": [
"string",
"null"
],
"description": "MCP server endpoint URL (required for integration_type = mcp)"
},
"minimum_balance": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"oauth2_client_id": {
"type": [
"string",
"null"
],
"description": "OAuth2 client ID for Client Credentials flow"
},
"oauth2_client_secret": {
"type": [
"string",
"null"
],
"description": "OAuth2 client secret for Client Credentials flow (will be encrypted)"
},
"oauth2_scopes": {
"type": "array",
"items": {
"type": "string"
},
"description": "OAuth2 scopes to request during Client Credentials flow"
},
"oauth2_token_url": {
"type": [
"string",
"null"
],
"description": "OAuth2 token endpoint URL for Client Credentials flow"
},
"oauth_provider_slug": {
"type": [
"string",
"null"
],
"description": "OAuth provider slug for BYOC (Bring Your Own Credentials) authentication.\nWhen set along with requires_user_oauth=true, users must connect their own\nOAuth account before using this publisher."
},
"ownership_tracking_enabled": {
"type": [
"boolean",
"null"
],
"description": "Enable resource ownership tracking (legacy gateway parity)"
},
"price_per_call": {
"type": [
"string",
"null"
]
},
"price_per_delete": {
"type": [
"string",
"null"
]
},
"price_per_execution": {
"type": [
"string",
"null"
],
"description": "Price per execution for agent templates or usage-based billing"
},
"price_per_get": {
"type": [
"string",
"null"
]
},
"price_per_patch": {
"type": [
"string",
"null"
]
},
"price_per_post": {
"type": [
"string",
"null"
]
},
"price_per_put": {
"type": [
"string",
"null"
]
},
"project_id": {
"type": [
"string",
"null"
],
"format": "uuid",
"description": "SerenDB project ID (required for database_type = serendb)"
},
"protected_operations": {
"description": "Protected operations configuration - legacy, use endpoints[].is_protected instead"
},
"publisher_category": {
"$ref": "#/components/schemas/PublisherCategory",
"description": "Publisher category: database, integration, or compute"
},
"publisher_type": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/PublisherType"
}
]
},
"request_content_type": {
"type": [
"string",
"null"
],
"description": "Content-Type for upstream API requests (default: application/json)"
},
"requires_user_oauth": {
"type": "boolean",
"description": "If true, users must connect via OAuth before using this publisher (BYOC mode).\nRequires oauth_provider_slug to be set."
},
"reserve_max_charge": {
"type": [
"string",
"null"
],
"description": "Maximum amount to reserve up-front for pay_per_use pre-authorization."
},
"resource_description": {
"type": [
"string",
"null"
]
},
"resource_id_response_path": {
"type": [
"string",
"null"
],
"description": "JSONPath to resource ID in response body (for ownership tracking)"
},
"resource_id_url_pattern": {
"type": [
"string",
"null"
],
"description": "URL pattern with :resourceId placeholder (for ownership tracking)"
},
"resource_name": {
"type": [
"string",
"null"
]
},
"routing": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/GeoRoutingConfig",
"description": "Geographic routing configuration for geo-restricted upstream APIs"
}
]
},
"slug": {
"type": "string"
},
"token_cache_ttl_seconds": {
"type": [
"integer",
"null"
],
"format": "int32",
"description": "TTL for cached exchanged tokens in seconds (60-86400, default: 3600)"
},
"token_exchange_method": {
"type": [
"string",
"null"
],
"description": "HTTP method for exchange endpoint (POST or GET, default: POST)"
},
"token_exchange_mode": {
"type": [
"string",
"null"
],
"description": "How to send Seren token: header, body, or query (default: header)"
},
"token_exchange_url": {
"type": [
"string",
"null"
],
"description": "URL to call for exchanging Seren API keys for publisher auth tokens"
},
"token_response_field": {
"type": [
"string",
"null"
],
"description": "JSON field in exchange response containing the token (default: access_token)"
},
"undocumented_endpoint_policy": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/components/schemas/UndocumentedEndpointPolicy",
"description": "Policy for handling requests to paths not in the endpoints catalog (\"allow\" or \"block\")"
}
]
},
"unresolved_fallback_charge": {
"type": [
"string",
"null"
],
"description": "Fallback charge used when pay_per_use cost cannot be resolved from upstream response or token estimates."
},
"upstream_api_key": {
"type": [
"string",
"null"
],
"description": "Upstream static API key (will be encrypted)"
},
"upstream_cost_response_path": {
"type": [
"string",
"null"
],
"description": "Dot-separated path to upstream cost in response body (for pay_per_use and prepaid passthrough billing).\nExample: \"usage.cost\""
},
"upstream_headers": {
"description": "Non-sensitive headers to send to upstream API (e.g., User-Agent)"
},
"usage_examples": {
"type": [
"array",
"null"
],
"items": {
"$ref": "#/components/schemas/UsageExample"
},
"description": "Usage examples showing how to call the publisher's API"
},
"use_cases": {
"type": "array",
"items": {
"type": "string"
},
"description": "Human-readable use case descriptions"
},
"wallet_address": {
"$ref": "#/components/schemas/WalletAddress",
"description": "Wallet address for receiving payments"
},
"wallet_network_id": {
"type": "string",
"description": "Network ID for wallet (CAIP-2 format, e.g., \"eip155:8453\" for Base)"
}
}
}