The AgentMart shop with a shorter tool list: the same sign-in, balance and items as /mcp.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Run one AgentMart tool that only reads and is not in your list: give tool, its ack from agentmart_tools, and arguments. Call a tool in your list, such as buy, directly. At /mcp/core, reads and changes that destroy nothing run through agentmart_read and agentmart_write, so a block on one of those single tools does not apply there; block the run tool, or connect to /mcp, where every tool is its own tool.
The tool to run (agentmart_tools finds it).
The ack agentmart_tools gives for this tool. Without the right one nothing runs, and the answer gives the tool's description, input_schema and ack.
The tool's own arguments, as its input_schema says.
Your amp_ token, only if you have no app sign-in and cannot send a header.
Run one AgentMart tool that only reads and is not in your list: give tool, its ack from agentmart_tools, and arguments. Call a tool in your list, such as buy, directly. At /mcp/core, reads and changes that destroy nothing run through agentmart_read and agentmart_write, so a block on one of those single tools does not apply there; block the run tool, or connect to /mcp, where every tool is its own tool.
| Argument | Type | Description |
|---|---|---|
| ack | string | The ack agentmart_tools gives for this tool. Without the right one nothing runs, and the answer gives the tool's description, input_schema and ack. |
| tool* | string | The tool to run (agentmart_tools finds it). |
| arguments | object | The tool's own arguments, as its input_schema says. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{
"ack": "0123456789ab",
"tool": "locker_get",
"arguments": {
"key": "notes/plan.md",
"instance_id": "lkr_exampleexampleexample2"
}
}
],
"required": [
"tool"
],
"properties": {
"ack": {
"type": "string",
"maxLength": 64,
"description": "The ack agentmart_tools gives for this tool. Without the right one nothing runs, and the answer gives the tool's description, input_schema and ack."
},
"tool": {
"enum": [
"list_passports",
"top_up_status",
"get_order",
"list_orders",
"list_jobs",
"get_job",
"quote_human_service",
"get_email_check",
"list_email_checks",
"list_utilities",
"get_utility",
"inbox_messages",
"locker_get",
"locker_list",
"wakeup_list",
"get_ask",
"uptime_status",
"schedule_list",
"heartbeat_status",
"reminder_list",
"inbox_pro_get",
"queue_status",
"get_sender_check",
"list_sender_checks",
"unsubscribe_links",
"suppression_check",
"suppression_export",
"starter_status",
"share_get",
"form_submissions",
"list_reviews",
"trust",
"blueprint_method",
"blueprint_tasks",
"my_feedback",
"roadmap",
"get_owner_picks"
],
"type": "string",
"description": "The tool to run (agentmart_tools finds it)."
},
"arguments": {
"type": "object",
"description": "The tool's own arguments, as its input_schema says.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}Find AgentMart tools not in your list: memory, webhook inbox, wake-ups, uptime and heartbeat watch, queues, forms, share links, asking your human, orders, jobs, feedback. Pass words or a group, or a tool's name for its arguments, ack and run tool. Call a tool in your list, such as buy, directly.
| Argument | Type | Description |
|---|---|---|
| tool | string | A tool's exact name: its description, input_schema, ack and run_with. Wins over words and group. |
| group | string | Only the tools of this group (with words: searched within it). |
| words | string | What you need, in a few words. |
| passport_token | string | Not needed on this public tool; accepted and ignored. |
{
"type": "object",
"examples": [
{
"words": "memory between sessions"
}
],
"properties": {
"tool": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "A tool's exact name: its description, input_schema, ack and run_with. Wins over words and group."
},
"group": {
"enum": [
"catalog",
"account",
"owner",
"shop_window",
"utilities",
"memory",
"inbox",
"wakeups",
"watch",
"ask",
"queue",
"share_and_forms",
"blueprint",
"mail",
"human_services",
"site_check",
"feedback"
],
"type": "string",
"description": "Only the tools of this group (with words: searched within it)."
},
"words": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "What you need, in a few words."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Not needed on this public tool; accepted and ignored."
}
},
"additionalProperties": false
}Run one AgentMart tool that is not in your list and changes something or reaches outside; it never runs one that destroys or spends. Give tool, its ack from agentmart_tools, and arguments. Call a tool in your list, such as buy, directly. At /mcp/core, reads and changes that destroy nothing run through agentmart_read and agentmart_write, so a block on one of those single tools does not apply there; block the run tool, or connect to /mcp, where every tool is its own tool.
| Argument | Type | Description |
|---|---|---|
| ack | string | The ack agentmart_tools gives for this tool. Without the right one nothing runs, and the answer gives the tool's description, input_schema and ack. |
| tool* | string | The tool to run (agentmart_tools finds it). |
| arguments | object | The tool's own arguments, as its input_schema says. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{
"ack": "0123456789ab",
"tool": "ask_human",
"arguments": {
"options": [
"Monday",
"Friday"
],
"question": "Release on Monday or Friday?",
"instance_id": "ask_exampleexampleexample2"
}
}
],
"required": [
"tool"
],
"properties": {
"ack": {
"type": "string",
"maxLength": 64,
"description": "The ack agentmart_tools gives for this tool. Without the right one nothing runs, and the answer gives the tool's description, input_schema and ack."
},
"tool": {
"enum": [
"invite_agent",
"join_owner",
"confirm_owner_email",
"answer_job_question",
"verify_job_sites",
"dispute_job",
"new_download_link",
"inbox_ack",
"wakeup_schedule",
"ask_human",
"uptime_add",
"schedule_create",
"schedule_run",
"heartbeat_add",
"heartbeat_test",
"reminder_create",
"queue_put",
"queue_claim",
"queue_nack",
"suppression_add",
"start_free",
"make_wish",
"send_feedback",
"vote_roadmap",
"check_site",
"prove_domain"
],
"type": "string",
"description": "The tool to run (agentmart_tools finds it)."
},
"arguments": {
"type": "object",
"description": "The tool's own arguments, as its input_schema says.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}Save one stage of your blueprint, in order: concept, features, pages, database, tech_spec, tasks. We check it against its schema and your earlier stages (the database DDL really runs on PostgreSQL). Problems come back with their path and nothing is saved; fix them all and call again. For tasks, send {"tasks": []} to let us build the list.
| Argument | Type | Description |
|---|---|---|
| data* | object | The stage JSON, shaped like the stage's schema in blueprint_method. |
| stage* | string | Stage name, in order: concept, features, pages, database, tech_spec, tasks. |
| instance_id* | string | Utility instance id from buy or list_utilities. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{
"data": {
"tasks": []
},
"stage": "tasks",
"instance_id": "bpr_exampleexampleexample2"
}
],
"required": [
"instance_id",
"stage",
"data"
],
"properties": {
"data": {
"type": "object",
"description": "The stage JSON, shaped like the stage's schema in blueprint_method.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"stage": {
"enum": [
"concept",
"features",
"pages",
"database",
"tech_spec",
"tasks"
],
"type": "string",
"description": "Stage name, in order: concept, features, pages, database, tech_spec, tasks."
},
"instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Utility instance id from buy or list_utilities."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}Set a blueprint task to doing when you start it and done when its tests pass (todo undoes). Your human sees the progress on the plan page.
| Argument | Type | Description |
|---|---|---|
| status* | string | doing when you start, done when its tests pass, todo to undo. |
| task_id* | string | Task id from blueprint_tasks. |
| instance_id* | string | Utility instance id from buy or list_utilities. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{
"status": "doing",
"task_id": "build-signup",
"instance_id": "bpr_exampleexampleexample2"
}
],
"required": [
"instance_id",
"task_id",
"status"
],
"properties": {
"status": {
"enum": [
"todo",
"doing",
"done"
],
"type": "string",
"description": "doing when you start, done when its tests pass, todo to undo."
},
"task_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Task id from blueprint_tasks."
},
"instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Utility instance id from buy or list_utilities."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}Buy an item from your balance. Utilities start immediately; kits return a single-use download link. Pass instance_id to renew a utility you own. Above what is left of today's spending limit, the order waits (status pending_approval, HTTP 202, nothing taken) and your owner gets one email to approve it within 24 hours; get_order then shows paid, declined, expired, cancelled or approval_failed. Retry with the same idempotency_key: never a second order. Human services (shelf human, done by our own team): quote_human_service first (free), then pass brief (get_item: details.brief_schema), max_price_cents, and any login only as secret; then get_job with delivery.job_id. A website test first waits for your proof that each site is yours (verify_job_sites). More: /llms/human-services.md. A kit your owner already bought is a free update in every later version with the same main version number (1.0.2 to 1.2.0 costs 0, no balance, limit or approval); a new main version (2.0.0) is a new purchase.
| Argument | Type | Description |
|---|---|---|
| item* | string | Item slug from search_catalog |
| brief | object | Human services only: what our team needs, in the service's schema (get_item shows details.brief_schema). |
| secret | string | Human services only: a test login or access key. Write-only: encrypted, shown only to the one team member doing the job, deleted when it closes. Never put it in brief. |
| instance_id | string | To renew: the utility instance id you own. Leave out for a new one. |
| passport_token |
Spends the balance: $5 for 30 days; renew with buy and the badge's instance_id ($3 per 30 days). Needs the domain proved with prove_domain in the last 7 days. We check the site daily and publish the result on a public page with a badge image and a signed copy; get_utility shows the first one within about 10 minutes. Above the daily limit it waits for your owner's approval. One idempotency_key, one order. Not a security audit.
| Argument | Type | Description |
|---|---|---|
| domain* | string | The proved domain. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
| idempotency_key | string | Same key and domain: a retry, never a second order. |
| max_price_cents | integer | The most this may cost, in US cents. |
| inbox_instance_id | string | Your owner's webhook inbox for the order's events. |
{
"type": "object",
"examples": [
{
"domain": "example.com",
"idempotency_key": "example-badge-1",
"max_price_cents": 500
}
],
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "The proved domain."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
},
"idempotency_key": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Same key and domain: a retry, never a second order."
},
"max_price_cents": {
"type": "integer",
"maximum": 10000000,
"minimum": 0,
"description": "The most this may cost, in US cents."
},
"inbox_instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Your owner's webhook inbox for the order's events."
}
},
"additionalProperties": false
}Cancel a website test still waiting for its sites' proof (status needs_verification): the whole price comes back to your owner's balance as store credit at once, the job closes (closed_reason cancelled_unproved), and cancel_jws is our signed statement of it. Safe to repeat. Any other status: 409 job_not_cancellable.
| Argument | Type | Description |
|---|---|---|
| job_id* | string | Job id (job_...) from buy (delivery.job_id) or list_jobs. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{
"job_id": "job_exampleexampleexample2"
}
],
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Job id (job_...) from buy (delivery.job_id) or list_jobs."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}Check up to 1000 of your owner's own email addresses before sending ($1 for up to 100 addresses, $4 for up to 1,000, counted by different entries; a list where no address needs the mail server costs $1, the rest credited). Each comes back valid, invalid, risky or unknown with a reason; nothing is ever sent to the addresses. consent "own_opt_in_contacts" is required, only when it is true: These addresses are my owner's own contacts, who agreed to hear from my owner (opt-in). The list was not bought, rented, scraped, harvested or guessed, and it will not be used for spam. We check a list your owner already has. We never supply, find, guess, enrich or sell addresses, and we never send anything to them. Then call get_email_check about once a minute until completed. A bigger order waits for your owner's approval by email (status pending_approval). Limits: 2 lists open at once per owner and 10 lists per 24 hours. Retries, refusals and credits: /llms/email-check.md.
| Argument | Type | Description |
|---|---|---|
| label | string | Your own short name for the list (a plain name, up to 60 characters), shown to your owner in the approval email. |
| emails* | array | Your owner's own contacts, plain addresses. |
| consent | string | Required: "own_opt_in_contacts", your statement, only when it is true. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
| idempotency_key | string |
Check how the domain your owner sends email from is set up ($1 per domain, from the balance): MX, SPF, DKIM, DMARC, MTA-STS, TLS-RPT, BIMI, reverse DNS and a blocklist. The answer usually holds the whole report: a score, pass, warn or fail per check, a plain summary and the exact DNS records to add. provider ADDS that provider's DKIM selectors and return path to the search (the common selectors are always tried too); for Amazon SES send the three Easy DKIM tokens in dkim_selectors. A bigger order waits for your owner's approval (pending_approval). Limits: 30 checks per owner per 24 hours, one domain at most 5 times an hour per owner. Public DNS only; nothing is sent. This report checks your DNS setup only. Passing every check does not guarantee that mail reaches the inbox: receivers also judge your sending reputation, your content and how people react to your mail. More: /llms/sender-health-check.md.
| Argument | Type | Description |
|---|---|---|
| domain* | string | The sending domain, like example.com. |
| provider | string | Your sending provider, if you know it: adds its selectors and return path to the search. |
| dkim_selectors | array | Your DKIM selectors (the part before ._domainkey); for Amazon SES, the three Easy DKIM tokens. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
| idempotency_key | string | Reuse with the same domain, provider and selectors to retry safely without paying twice; a retry without it is a new purchase. |
Claim store credit for a purchase that did not work. Within 24 hours. We verify on our side (our own test run or our service logs) before crediting. Our guarantee pays store credit, not card refunds; your owner's legal rights are not limited by it.
| Argument | Type | Description |
|---|---|---|
| detail | string | What did not work, in plain words. |
| order_id* | string | Order id from buy (order_id). |
| test_output | string | For a kit: the failing test output. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{
"detail": "The kit tests fail on a clean install.",
"order_id": "ord_exampleexampleexample2"
}
],
"required": [
"order_id"
],
"properties": {
"detail": {
"type": "string",
"maxLength": 2000,
"description": "What did not work, in plain words."
},
"order_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Order id from buy (order_id)."
},
"test_output": {
"type": "string",
"maxLength": 16000,
"description": "For a kit: the failing test output."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}Close a pick link you made with show_shop_to_owner before it expires, for example when your human already told you what they want or you shared it by mistake. The link then shows a closed page and takes no more picks (also in the in-chat cards); the picks made so far stay readable with get_owner_picks (status closed). Closing again changes nothing. Only the passport that made it.
| Argument | Type | Description |
|---|---|---|
| window_id* | string | id from show_shop_to_owner (shw_...). |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{
"window_id": "shw_exampleshopwindowaaaaa"
}
],
"required": [
"window_id"
],
"properties": {
"window_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "id from show_shop_to_owner (shw_...)."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}Only for MCP apps that cannot sign in to AgentMart: create your passport (your identity here). Call once and KEEP the returned token: it is shown only once. No email, no password. When your app signed in (whoami works without a token), you already have a passport: do not call this.
| Argument | Type | Description |
|---|---|---|
| nickname | string | A name for this agent, shown to your owner's other agents. |
| passport_token | string | Not needed on this public tool; accepted and ignored. |
{
"type": "object",
"examples": [
{
"nickname": "example-agent"
}
],
"properties": {
"nickname": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "A name for this agent, shown to your owner's other agents."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Not needed on this public tool; accepted and ignored."
}
},
"additionalProperties": false
}Full details of one item by slug. With your passport (your app's sign-in, the Authorization header or passport_token), a kit your owner bought also shows update_available: the newer version with the same main version number that is free for your owner, and the one buy call that gets it (null when nothing newer is free). The project blueprint read with your passport shows your owner's promo: used true once your owner had the free one (search_catalog always shows the general offer).
| Argument | Type | Description |
|---|---|---|
| slug* | string | Item slug from search_catalog. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{
"slug": "webhook-inbox"
}
],
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Item slug from search_catalog."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}Stop watching a job. Its ping address stops answering.
| Argument | Type | Description |
|---|---|---|
| instance_id* | string | Utility instance id from buy or list_utilities. |
| heartbeat_id* | string | heartbeat id (hbc_...) from heartbeat_add or heartbeat_status. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{
"instance_id": "hbt_exampleexampleexample2",
"heartbeat_id": "hbc_exampleexampleexample2"
}
],
"required": [
"instance_id",
"heartbeat_id"
],
"properties": {
"instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Utility instance id from buy or list_utilities."
},
"heartbeat_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "heartbeat id (hbc_...) from heartbeat_add or heartbeat_status."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}Set your webhook inbox pro plan: inbox_instance_id (the inbox to upgrade, same address), forward ({url} or null), verify ({preset: github|stripe|slack|zoom|hmac, secret, ...} or null), handshakes ({slack, zoom, meta_verify_token}). Fields left out stay. The forwarding key comes back once, as forward_secret: keep it to check our forwards.
| Argument | Type | Description |
|---|---|---|
| verify | any | Sender signature check; null turns it off. |
| forward | any | Where to forward every message; null turns it off. |
| handshakes | object | Answer the Slack, Zoom or Meta URL checks. |
| instance_id* | string | Utility instance id from buy or list_utilities. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
| inbox_instance_id | string | The inbox to upgrade (one of yours). |
| rotate_forward_secret | boolean | true: a new forwarding key (returned once). |
{
"type": "object",
"examples": [
{
"verify": {
"preset": "github",
"secret": "example-secret"
},
"instance_id": "ipr_exampleexampleexample2",
"inbox_instance_id": "inb_exampleexampleexample2"
}
],
"required": [
"instance_id"
],
"properties": {
"verify": {
"anyOf": [
{
"type": "object",
"required": [
"preset",
"secret"
],
"properties": {
"header": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "hmac only: the signature header."
},
"prefix": {
"type": "string",
"maxLength": 20,
"description": "hmac only: text before the signature, for example \"sha256=\"."
},
"preset": {
"enum": [
"github",
"stripe",
"slack",
"zoom",
"hmac"
],
"type": "string",
"description": "The sender: github, stripe, slack or zoom, or hmac for any other sender that signs with HMAC."
},
"secret": {
"type": "string",
"maxLength": 256,
"minLength": 1,
"description": "The sender's signing secret (stored encrypted, never shown)."
},
"encoding": {
"enum": [
"hex",
"base64"
],
"type": "string",
"description": "hmac only, default hex."
},
"algorithm": {
"enum": [
"sha256",
"sha512",
"sha1"
],
"type": "string",
"description": "hmac only, default sha256."
},
"reject_unverified": {
"type": "boolean",
"description": "true: a message that fails is refused with 401 and not stored."
},
"forward_only_verified": {
"type": "boolean",
"description": "true: forward only messages whose signature verified; the rest stay in the inbox (forward status skipped, not_verified)."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Sender signature check; null turns it off."
},
"forward": {
"anyOf": [
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Public https URL."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Where to forward every message; null turns it off."
},
"handshakes": {
"type": "object",
"properties": {
"zoom": {
"type": "boolean",
"description": "Answer Zoom's endpoint.url_validation (needs verify preset zoom)."
},
"slack": {
"type": "boolean",
"description": "Answer Slack's url_verification (needs verify preset slack)."
},
"meta_verify_token": {
"anyOf": [
{
"type": "string",
"maxLength": 256,
"minLength": 1
},
{
"type": "null"
}
],
"description": "Answer Meta's GET hub.challenge when hub.verify_token equals this (8 to 256 characters). null turns it off."
}
},
"description": "Answer the Slack, Zoom or Meta URL checks.",
"additionalProperties": false
},
"instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Utility instance id from buy or list_utilities."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
},
"inbox_instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The inbox to upgrade (one of yours)."
},
"rotate_forward_secret": {
"type": "boolean",
"const": true,
"description": "true: a new forwarding key (returned once)."
}
},
"additionalProperties": false
}Delete a key from your memory locker.
| Argument | Type | Description |
|---|---|---|
| key* | string | Key, 1 to 200 characters from A-Z a-z 0-9 . _ : / - (no spaces; "/" separates folders). |
| instance_id* | string | Utility instance id from buy or list_utilities. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{
"key": "notes/plan.md",
"instance_id": "lkr_exampleexampleexample2"
}
],
"required": [
"instance_id",
"key"
],
"properties": {
"key": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Key, 1 to 200 characters from A-Z a-z 0-9 . _ : / - (no spaces; \"/\" separates folders)."
},
"instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Utility instance id from buy or list_utilities."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}Store a value in your memory locker under a key (survives between sessions). Send exactly one of value (text) or value_base64 (bytes). The answer holds the value's etag: pass it as if_match next time so that a run that overlaps yours cannot be overwritten without notice.
| Argument | Type | Description |
|---|---|---|
| key* | string | Key, 1 to 200 characters from A-Z a-z 0-9 . _ : / - (no spaces; "/" separates folders). |
| value | string | The value as text (UTF-8). "" stores an empty value. |
| if_match | string | Store only if the current value has this etag (from locker_get or locker_put); "*": only if the key exists. Otherwise 412 precondition_failed and nothing is stored. |
| instance_id* | string | Utility instance id from buy or list_utilities. |
| content_type | string | Stored and returned on read. Default text/plain; charset=utf-8 for value, application/octet-stream for value_base64. |
| value_base64 | string | The value as bytes, in standard base64 with = padding. |
| if_none_match | string | "*": store only if the key does not exist yet (create only), else 412 precondition_failed. |
Done: the messages of these leases are deleted. A lease that ran out and was claimed again is listed in lost.
| Argument | Type | Description |
|---|---|---|
| queue* | string | Queue name: 1 to 64 characters from a-z 0-9 . _ -. |
| leases* | array | Leases from queue_claim. |
| instance_id* | string | Utility instance id from buy or list_utilities. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{
"queue": "jobs",
"leases": [
"lse_0123456789abcdef0123456789abcdef"
],
"instance_id": "que_exampleexampleexample2"
}
],
"required": [
"instance_id",
"queue",
"leases"
],
"properties": {
"queue": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Queue name: 1 to 64 characters from a-z 0-9 . _ -."
},
"leases": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"maxItems": 100,
"minItems": 1,
"description": "Leases from queue_claim."
},
"instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Utility instance id from buy or list_utilities."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}More time for long work: each lease that has not run out ends visibility_timeout_seconds from now (a shorter time than is left shortens it).
| Argument | Type | Description |
|---|---|---|
| queue* | string | Queue name: 1 to 64 characters from a-z 0-9 . _ -. |
| leases* | array | Leases from queue_claim. |
| instance_id* | string | Utility instance id from buy or list_utilities. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
| visibility_timeout_seconds* | integer | The lease ends this many seconds from now. |
{
"type": "object",
"examples": [
{
"queue": "jobs",
"leases": [
"lse_0123456789abcdef0123456789abcdef"
],
"instance_id": "que_exampleexampleexample2",
"visibility_timeout_seconds": 300
}
],
"required": [
"instance_id",
"queue",
"leases",
"visibility_timeout_seconds"
],
"properties": {
"queue": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Queue name: 1 to 64 characters from a-z 0-9 . _ -."
},
"leases": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"maxItems": 100,
"minItems": 1,
"description": "Leases from queue_claim."
},
"instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Utility instance id from buy or list_utilities."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
},
"visibility_timeout_seconds": {
"type": "integer",
"maximum": 43200,
"minimum": 5,
"description": "The lease ends this many seconds from now."
}
},
"additionalProperties": false
}Delete a reminder to your human.
| Argument | Type | Description |
|---|---|---|
| instance_id* | string | Utility instance id from buy or list_utilities. |
| reminder_id* | string | reminder id (rem_...) from reminder_create or reminder_list. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{
"instance_id": "orm_exampleexampleexample2",
"reminder_id": "rem_exampleexampleexample2"
}
],
"required": [
"instance_id",
"reminder_id"
],
"properties": {
"instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Utility instance id from buy or list_utilities."
},
"reminder_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "reminder id (rem_...) from reminder_create or reminder_list."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}End your passport for good: its token, sessions and app sign-ins stop working at once and cannot be restored. Your owner's balance and utilities stay with your owner. Safe to repeat. Your MCP app's own sign-in may do this. A passport made over MCP (no key) may do this with its own token, a kill switch if the token leaked; a passport with a key must send a signed request (a token gets signature_required).
| Argument | Type | Description |
|---|---|---|
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{}
],
"properties": {
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}Only for the AgentMart shop window view (the in-chat cards call it when your human presses Send to my agent). Agents: never call it yourself; read the picks with get_owner_picks.
| Argument | Type | Description |
|---|---|---|
| picks* | array | The slugs your human ticked (empty: none of these). |
| chat_token* | string | The chat token from the tool result's _meta (never the pick link). |
| passport_token | string | Not needed on this public tool; accepted and ignored. |
{
"type": "object",
"examples": [
{
"picks": [
"memory-locker"
],
"chat_token": "shc_EXAMPLE_chat_token_example_EXAMPLE_example_"
}
],
"required": [
"chat_token",
"picks"
],
"properties": {
"picks": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"maxItems": 200,
"description": "The slugs your human ticked (empty: none of these)."
},
"chat_token": {
"type": "string",
"pattern": "^shc_[A-Za-z0-9_-]{43}$",
"description": "The chat token from the tool result's _meta (never the pick link)."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Not needed on this public tool; accepted and ignored."
}
},
"additionalProperties": false
}Delete a repeating wake-up and its runs.
| Argument | Type | Description |
|---|---|---|
| instance_id* | string | Utility instance id from buy or list_utilities. |
| schedule_id* | string | schedule id (wsc_...) from schedule_create or schedule_list. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{
"instance_id": "wkp_exampleexampleexample2",
"schedule_id": "wsc_exampleexampleexample2"
}
],
"required": [
"instance_id",
"schedule_id"
],
"properties": {
"instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Utility instance id from buy or list_utilities."
},
"schedule_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "schedule id (wsc_...) from schedule_create or schedule_list."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}Search the shelves. Each item shows its price and verified agent reviews; every digital product also shows what building it took our own agents (counted by our published method), and every kit its test results.
| Argument | Type | Description |
|---|---|---|
| q | string | The same as query (the REST name); query wins when both are given. |
| query | string | What you need, in a few words. Matches whole words. |
| shelf | string | utility: always-on services; kit: tested code to download; human: work by AgentMart's own team. |
| passport_token | string | Not needed on this public tool; accepted and ignored. |
| max_price_cents | integer | Only items whose smallest order costs at most this, in US cents (price_cents). An item priced per unit or per block (pricing.model) costs more for a bigger order. |
{
"type": "object",
"examples": [
{
"query": "webhook inbox",
"shelf": "utility"
}
],
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "The same as query (the REST name); query wins when both are given."
},
"query": {
"type": "string",
"maxLength": 200,
"description": "What you need, in a few words. Matches whole words."
},
"shelf": {
"enum": [
"utility",
"kit",
"human"
],
"type": "string",
"description": "utility: always-on services; kit: tested code to download; human: work by AgentMart's own team."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Not needed on this public tool; accepted and ignored."
},
"max_price_cents": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only items whose smallest order costs at most this, in US cents (price_cents). An item priced per unit or per block (pricing.model) costs more for a bigger order.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}Change your form inbox's settings: the daily digest email to your owner (digest on or off: at most one email a day for all their forms, only while new entries arrive) and the site name its thank-you page shows visitors (site_name, 1 to 60 characters, null clears it). Send either or both. The answer says whether email can reach your owner right now (email: ready, unconfirmed, no_address, not_configured or owner_opted_out; unconfirmed means your owner gets one confirmation email, only once until they confirm, and digests start after they confirm) and when digests go out (digest_schedule).
| Argument | Type | Description |
|---|---|---|
| digest | boolean | true: daily digest email on; false: off. |
| site_name | any | The name of your site, shown as plain text on the thank-you page after a visitor sends the form. null clears it. |
| instance_id* | string | Utility instance id from buy or list_utilities. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{
"digest": true,
"site_name": "Example Site",
"instance_id": "frm_exampleexampleexample2"
}
],
"required": [
"instance_id"
],
"properties": {
"digest": {
"type": "boolean",
"description": "true: daily digest email on; false: off."
},
"site_name": {
"anyOf": [
{
"type": "string",
"maxLength": 240
},
{
"type": "null"
}
],
"description": "The name of your site, shown as plain text on the thank-you page after a visitor sends the form. null clears it."
},
"instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Utility instance id from buy or list_utilities."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}Publish content on your share link so a human can see it (HTML, plain text, Markdown, PNG, JPEG or PDF, up to 4 MB). Use content for text or content_base64 for images and PDFs. With content_base64 the file can be about 3 MB at most: base64 adds a third and requests are limited to 4.5 MB.
| Argument | Type | Description |
|---|---|---|
| lang | string | Markdown: the language of your text as a language tag (en, de, pt-BR), for screen readers. Without it we guess from the text, else en. |
| title | string | Page title humans see in the browser tab and link previews. |
| content | string | Text content (HTML, plain text, Markdown). Send this or content_base64. |
| instance_id* | string | Utility instance id from buy or list_utilities. |
| content_type* | string | What you publish. |
| content_base64 | string | Image or PDF bytes, in standard base64 with = padding. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
Show your human what AgentMart sells, as cards in plain words with prices, and let them pick. Makes a pick link, your human's own page for it (7 days; your human presses Open my page, ticks items and presses Send to my agent). Send pick_url to your human only, in a private message. It opens in the first browser where they press Open my page, and then only there. Never open pick_url yourself or press Open in your own browser. For another device, reopen it (reopen_shop_window (at /mcp only)). In chats that show MCP Apps, the cards appear right here and the picks come back as a chat message. Put up to 12 items you recommend first, with a short note (plain words, no links). Picking never buys anything: read the picks with get_owner_picks (find it with agentmart_tools), and confirm with your human before you buy (on the link, only the first browser that presses Open my page can pick, and that may not be your human if the link was passed on; the in-chat cards pick too). 20 links per day.
| Argument | Type | Description |
|---|---|---|
| note | string | Only when your passport has an active paying owner: a short note to your human, up to 300 characters of plain words about why you suggest these. No links, codes, contact details, requests for data or payments. |
| items | array | Up to 12 slugs you recommend (from search_catalog), shown first. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
| inbox_instance_id | string | One of your webhook inboxes: every change of the picks also arrives there. |
{
"type": "object",
"examples": [
{
"items": [
"memory-locker",
"webhook-inbox"
]
}
],
"properties": {
"note": {
"type": "string",
"maxLength": 2000,
"description": "Only when your passport has an active paying owner: a short note to your human, up to 300 characters of plain words about why you suggest these. No links, codes, contact details, requests for data or payments."
},
"items": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"maxItems": 12,
"description": "Up to 12 slugs you recommend (from search_catalog), shown first."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
},
"inbox_instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "One of your webhook inboxes: every change of the picks also arrives there."
}
},
"additionalProperties": false
}Create a payment link to fund your balance. Give pay_link to your human owner: it works for 7 days; they tick a box to agree to the waiver, then pay on Stripe's page (USD). Humans always use pay_link. Only for a machine payment by your own agent wallet set for_agent_wallet: true to also get url, the direct Stripe page (about 30 minutes). Then poll top_up_status.
| Argument | Type | Description |
|---|---|---|
| amount_cents* | any | 500, 1000, 2000, 5000 or 10000 US cents. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
| for_agent_wallet | boolean | true only when your own agent wallet pays (machine payment): the answer then also holds url. Never give url to a human. |
{
"type": "object",
"examples": [
{
"amount_cents": 500
}
],
"required": [
"amount_cents"
],
"properties": {
"amount_cents": {
"anyOf": [
{
"type": "number",
"const": 500
},
{
"type": "number",
"const": 1000
},
{
"type": "number",
"const": 2000
},
{
"type": "number",
"const": 5000
},
{
"type": "number",
"const": 10000
}
],
"description": "500, 1000, 2000, 5000 or 10000 US cents."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
},
"for_agent_wallet": {
"type": "boolean",
"description": "true only when your own agent wallet pays (machine payment): the answer then also holds url. Never give url to a human."
}
},
"additionalProperties": false
}Stop watching a URL. Its results and incidents are deleted.
| Argument | Type | Description |
|---|---|---|
| check_id* | string | check_id from uptime_add or uptime_status. |
| instance_id* | string | Utility instance id from buy or list_utilities. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{
"check_id": "chk_exampleexampleexample2",
"instance_id": "upt_exampleexampleexample2"
}
],
"required": [
"instance_id",
"check_id"
],
"properties": {
"check_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "check_id from uptime_add or uptime_status."
},
"instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Utility instance id from buy or list_utilities."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}Cancel a wake-up call that has not fired yet (scheduled or retrying).
| Argument | Type | Description |
|---|---|---|
| wakeup_id* | string | wakeup_id from wakeup_schedule or wakeup_list. |
| instance_id* | string | Utility instance id from buy or list_utilities. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{
"wakeup_id": "wak_exampleexampleexample2",
"instance_id": "wkp_exampleexampleexample2"
}
],
"required": [
"instance_id",
"wakeup_id"
],
"properties": {
"wakeup_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "wakeup_id from wakeup_schedule or wakeup_list."
},
"instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Utility instance id from buy or list_utilities."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}Your passport, how strong this sign-in is (credential), balance (owner.balance_expires_at: when it expires without a top-up or purchase; tell your human in time), spend limit, notices, pending reviews, and at most one optional question from us (answer it once with send_feedback and its prompt_id). owner.email_hint (who paid, masked) and owner.passport_count show who is behind your balance: if they are not your human's, tell your human (as your owner's only agent you may also call leave_owner). owner.notices lists agents that joined (also with a code from your owner's email), tokens that spent from a new network, and lockdowns.
| Argument | Type | Description |
|---|---|---|
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{}
],
"properties": {
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}Withdraw a question to your owner that is still waiting for an answer, because you no longer need it. Its answer links then tell your owner you withdrew it, and record nothing. It counts as done (status withdrawn) but keeps its place in your ask limits until its expires_at, so withdrawing never lets you ask more. Withdrawing again changes nothing; an answered question cannot be withdrawn.
| Argument | Type | Description |
|---|---|---|
| ask_id* | string | ask_id from ask_human. |
| instance_id* | string | Utility instance id from buy or list_utilities. |
| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{
"ask_id": "qst_exampleexampleexample2",
"instance_id": "ask_exampleexampleexample2"
}
],
"required": [
"instance_id",
"ask_id"
],
"properties": {
"ask_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "ask_id from ask_human."
},
"instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Utility instance id from buy or list_utilities."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}| string |
| Your amp_ token, only if you have no app sign-in and cannot send a header. |
| idempotency_key | string | Reuse to retry safely without paying twice |
| max_price_cents | integer | The most this order may cost, in US cents: a higher price (as we count it) is refused and nothing is taken. |
| inbox_instance_id | string | One of your owner's webhook inboxes: what happens to this order (approved, declined, expired) and its job is written there. |
{
"type": "object",
"examples": [
{
"item": "memory-locker",
"idempotency_key": "example-key-1",
"max_price_cents": 100
}
],
"required": [
"item"
],
"properties": {
"item": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Item slug from search_catalog"
},
"brief": {
"type": "object",
"description": "Human services only: what our team needs, in the service's schema (get_item shows details.brief_schema).",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"secret": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "Human services only: a test login or access key. Write-only: encrypted, shown only to the one team member doing the job, deleted when it closes. Never put it in brief."
},
"instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "To renew: the utility instance id you own. Leave out for a new one."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
},
"idempotency_key": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Reuse to retry safely without paying twice"
},
"max_price_cents": {
"type": "integer",
"maximum": 10000000,
"minimum": 0,
"description": "The most this order may cost, in US cents: a higher price (as we count it) is refused and nothing is taken."
},
"inbox_instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "One of your owner's webhook inboxes: what happens to this order (approved, declined, expired) and its job is written there."
}
},
"additionalProperties": false
}| Reuse with the same list to retry safely without paying twice. |
| max_price_cents | integer | The most this may cost, in US cents. |
| inbox_instance_id | string | One of your owner's webhook inboxes: the completion event (counts only) is written there. |
{
"type": "object",
"examples": [
{
"emails": [
"[email protected]"
],
"consent": "own_opt_in_contacts",
"idempotency_key": "example-list-1",
"max_price_cents": 100
}
],
"required": [
"emails"
],
"properties": {
"label": {
"type": "string",
"maxLength": 240,
"minLength": 1,
"description": "Your own short name for the list (a plain name, up to 60 characters), shown to your owner in the approval email."
},
"emails": {
"type": "array",
"items": {
"type": "string",
"maxLength": 320
},
"maxItems": 1000,
"minItems": 1,
"description": "Your owner's own contacts, plain addresses."
},
"consent": {
"enum": [
"own_opt_in_contacts"
],
"type": "string",
"description": "Required: \"own_opt_in_contacts\", your statement, only when it is true."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
},
"idempotency_key": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Reuse with the same list to retry safely without paying twice."
},
"max_price_cents": {
"type": "integer",
"maximum": 10000000,
"minimum": 0,
"description": "The most this may cost, in US cents."
},
"inbox_instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "One of your owner's webhook inboxes: the completion event (counts only) is written there."
}
},
"additionalProperties": false
}| max_price_cents | integer | The most this may cost, in US cents. |
| inbox_instance_id | string | One of your owner's webhook inboxes: the completion event (domain, score, counts) is written there. |
{
"type": "object",
"examples": [
{
"domain": "example.com",
"idempotency_key": "example-check-1",
"max_price_cents": 100
}
],
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "The sending domain, like example.com."
},
"provider": {
"enum": [
"resend",
"amazon_ses",
"google_workspace",
"microsoft_365",
"postmark",
"sendgrid",
"mailgun",
"other"
],
"type": "string",
"description": "Your sending provider, if you know it: adds its selectors and return path to the search."
},
"dkim_selectors": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 10,
"description": "Your DKIM selectors (the part before ._domainkey); for Amazon SES, the three Easy DKIM tokens."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
},
"idempotency_key": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Reuse with the same domain, provider and selectors to retry safely without paying twice; a retry without it is a new purchase."
},
"max_price_cents": {
"type": "integer",
"maximum": 10000000,
"minimum": 0,
"description": "The most this may cost, in US cents."
},
"inbox_instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "One of your owner's webhook inboxes: the completion event (domain, score, counts) is written there."
}
},
"additionalProperties": false
}| passport_token | string | Your amp_ token, only if you have no app sign-in and cannot send a header. |
{
"type": "object",
"examples": [
{
"key": "notes/plan.md",
"value": "Step 1 done.",
"instance_id": "lkr_exampleexampleexample2"
}
],
"required": [
"instance_id",
"key"
],
"properties": {
"key": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Key, 1 to 200 characters from A-Z a-z 0-9 . _ : / - (no spaces; \"/\" separates folders)."
},
"value": {
"type": "string",
"description": "The value as text (UTF-8). \"\" stores an empty value."
},
"if_match": {
"type": "string",
"pattern": "^[\\x20-\\x7e]+$",
"maxLength": 200,
"minLength": 1,
"description": "Store only if the current value has this etag (from locker_get or locker_put); \"*\": only if the key exists. Otherwise 412 precondition_failed and nothing is stored."
},
"instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Utility instance id from buy or list_utilities."
},
"content_type": {
"type": "string",
"maxLength": 100,
"description": "Stored and returned on read. Default text/plain; charset=utf-8 for value, application/octet-stream for value_base64."
},
"value_base64": {
"type": "string",
"description": "The value as bytes, in standard base64 with = padding."
},
"if_none_match": {
"type": "string",
"const": "*",
"description": "\"*\": store only if the key does not exist yet (create only), else 412 precondition_failed."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}{
"type": "object",
"examples": [
{
"content": "# Status\n\nAll tests pass.",
"instance_id": "shr_exampleexampleexample2",
"content_type": "text/markdown"
}
],
"required": [
"instance_id",
"content_type"
],
"properties": {
"lang": {
"type": "string",
"maxLength": 20,
"description": "Markdown: the language of your text as a language tag (en, de, pt-BR), for screen readers. Without it we guess from the text, else en."
},
"title": {
"type": "string",
"maxLength": 120,
"description": "Page title humans see in the browser tab and link previews."
},
"content": {
"type": "string",
"description": "Text content (HTML, plain text, Markdown). Send this or content_base64."
},
"instance_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Utility instance id from buy or list_utilities."
},
"content_type": {
"enum": [
"text/html",
"text/plain",
"text/markdown",
"image/png",
"image/jpeg",
"application/pdf"
],
"type": "string",
"description": "What you publish."
},
"content_base64": {
"type": "string",
"description": "Image or PDF bytes, in standard base64 with = padding."
},
"passport_token": {
"type": "string",
"maxLength": 200,
"description": "Your amp_ token, only if you have no app sign-in and cannot send a header."
}
},
"additionalProperties": false
}