Skip to content
Back to SingleFax

Card snapshot

singlefax.com · 2026-10-15 05:58:44 UTC · a5390a5496190847b79a16a60c897a64b817b3bdbeabbe129d3f71b46ebf37d0

This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.

{
  "name": "SingleFax",
  "description": "Send and track faxes for a SingleFax account: quote, upload, create a fax draft with hosted Stripe Checkout, and read fax history and credit balance. AP2 credit-pack purchases use signed mandates, separate account-owner passkey approval and a scoped Stripe Shared Payment Token. Uses the MCP OAuth server with explicit scopes. Not for PHI.",
  "supportedInterfaces": [
    {
      "url": "https://singlefax.com/a2a",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "1.0"
    }
  ],
  "provider": {
    "organization": "Monocube LLC (SingleFax)",
    "url": "https://singlefax.com"
  },
  "version": "1.3.0",
  "documentationUrl": "https://singlefax.com/auth.md",
  "iconUrl": "https://singlefax.com/favicon.ico",
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "extendedAgentCard": false,
    "extensions": [
      {
        "uri": "https://github.com/google-agentic-commerce/AP2/tree/v0.1.0",
        "required": true,
        "description": "Required for AP2 credit-pack payment skills. Explicit passkey approval precedes any charge.",
        "params": {
          "roles": [
            "merchant"
          ],
          "version": "0.1.0",
          "checkout_modes": [
            "human_present"
          ],
          "payment_methods": [
            "stripe_shared_payment_token"
          ],
          "documentation_url": "https://singlefax.com/ap2.md",
          "jwks_uri": "https://singlefax.com/.well-known/ap2/jwks.json"
        }
      }
    ]
  },
  "securitySchemes": {
    "oauth2": {
      "oauth2SecurityScheme": {
        "description": "Same authorization server as https://singlefax.com/mcp. Register a client (RFC 7591), use authorization code + PKCE (S256) and request resource https://singlefax.com/mcp. Bearer tokens only on /a2a.",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://api.singlefax.com/api/auth/oauth2/authorize",
            "tokenUrl": "https://api.singlefax.com/api/auth/oauth2/token",
            "refreshUrl": "https://api.singlefax.com/api/auth/oauth2/token",
            "scopes": {
              "fax:read": "Read fax status and history",
              "fax:draft": "Create fax drafts (MCP Checkout or page-pool send)",
              "fax:send": "Upload documents and send faxes",
              "inbox:read": "Read received faxes (non-HIPAA transcripts and fields)",
              "credits:read": "Read prepaid credit balance",
              "credits:checkout": "Start credit purchases; AP2 charges require separate passkey approval",
              "offline_access": "Refresh token for long-lived agent sessions"
            },
            "pkceRequired": true
          }
        },
        "oauth2MetadataUrl": "https://api.singlefax.com/.well-known/oauth-authorization-server/api/auth"
      }
    }
  },
  "securityRequirements": [
    {
      "schemes": {
        "oauth2": {
          "list": [
            "fax:read"
          ]
        }
      }
    }
  ],
  "defaultInputModes": [
    "application/json"
  ],
  "defaultOutputModes": [
    "application/json",
    "text/plain"
  ],
  "skills": [
    {
      "id": "quote_fax",
      "name": "Quote a fax",
      "description": "Price a fax before sending. Arguments: to (destination fax number, E.164), pages (1-50, default 10) or base64 of a small original document with optional contentType. Read-only: never charges or sends.",
      "tags": [
        "fax",
        "pricing",
        "read-only"
      ],
      "examples": [
        "{\"skill\":\"quote_fax\",\"arguments\":{\"to\":\"+12025551234\",\"pages\":3}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ],
      "securityRequirements": [
        {
          "schemes": {
            "oauth2": {
              "list": [
                "fax:read"
              ]
            }
          }
        }
      ]
    },
    {
      "id": "create_upload",
      "name": "Upload a document",
      "description": "Get a one-time upload link for a document too large to inline (about 20 KB or more). Returns uploadPageUrl (a person drops the file in a browser, no login), uploadUrl (HTTP PUT of the raw bytes) and uploadToken. Call again with { uploadToken } to check stored. Send the original Word, Excel, PDF or image; do not convert to PDF first.",
      "tags": [
        "fax",
        "upload"
      ],
      "examples": [
        "{\"skill\":\"create_upload\",\"arguments\":{}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ],
      "securityRequirements": [
        {
          "schemes": {
            "oauth2": {
              "list": [
                "fax:send"
              ]
            }
          }
        }
      ]
    },
    {
      "id": "create_fax_draft",
      "name": "Create a fax draft with a checkout link",
      "description": "Create a fax to one destination from an uploadToken (or base64 for a file under about 20 KB). Over A2A this never spends account credit or plan pages: it returns status awaiting_payment with a Stripe Checkout link (checkoutUrl) and an orderId. The fax is sent only after a person pays at that link. Task state is input-required until then; poll with GetTask.",
      "tags": [
        "fax",
        "send",
        "checkout"
      ],
      "examples": [
        "{\"skill\":\"create_fax_draft\",\"arguments\":{\"to\":\"+12025551234\",\"uploadToken\":\"<from create_upload>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ],
      "securityRequirements": [
        {
          "schemes": {
            "oauth2": {
              "list": [
                "fax:draft"
              ]
            }
          }
        }
      ]
    },
    {
      "id": "create_checkout",
      "name": "Get a checkout link for a product",
      "description": "Get a Stripe Checkout link for a catalog SKU: credit_pack, inbound_30day, monthly-basic, annual-basic, monthly-business, annual-business, lifetime-basic or lifetime-pro. Over A2A it always returns a checkout link and never spends existing credit. HIPAA, EIN and IRS products are website-only. Not for sending a document; use create_fax_draft.",
      "tags": [
        "checkout",
        "numbers",
        "credits"
      ],
      "examples": [
        "{\"skill\":\"create_checkout\",\"arguments\":{\"sku\":\"inbound_30day\",\"country\":\"US\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ],
      "securityRequirements": [
        {
          "schemes": {
            "oauth2": {
              "list": [
                "fax:draft"
              ]
            }
          }
        }
      ]
    },
    {
      "id": "get_fax_status",
      "name": "Fax status",
      "description": "Read fulfillmentStatus and paymentStatus of one outbound fax order this account owns. Argument: id (the orderId UUID from create_fax_draft). Read-only.",
      "tags": [
        "fax",
        "status",
        "read-only"
      ],
      "examples": [
        "{\"skill\":\"get_fax_status\",\"arguments\":{\"id\":\"<orderId>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ],
      "securityRequirements": [
        {
          "schemes": {
            "oauth2": {
              "list": [
                "fax:read"
              ]
            }
          }
        }
      ]
    },
    {
      "id": "list_outbound_faxes",
      "name": "List sent faxes",
      "description": "List this account's outbound fax orders, newest first (id, destination, fulfillmentStatus, paymentStatus). Optional limit (default 20, max 50) and offset. Read-only.",
      "tags": [
        "fax",
        "history",
        "read-only"
      ],
      "examples": [
        "{\"skill\":\"list_outbound_faxes\",\"arguments\":{\"limit\":10}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ],
      "securityRequirements": [
        {
          "schemes": {
            "oauth2": {
              "list": [
                "fax:read"
              ]
            }
          }
        }
      ]
    },
    {
      "id": "list_inbound_faxes",
      "name": "List received faxes",
      "description": "List faxes received on this account's numbers (envelope and AI summary state). Optional cursor and limit (max 50). HIPAA Secure and held faxes return the envelope only. Read-only.",
      "tags": [
        "fax",
        "inbox",
        "read-only"
      ],
      "examples": [
        "{\"skill\":\"list_inbound_faxes\",\"arguments\":{\"limit\":10}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ],
      "securityRequirements": [
        {
          "schemes": {
            "oauth2": {
              "list": [
                "inbox:read"
              ]
            }
          }
        }
      ]
    },
    {
      "id": "get_inbound_fax",
      "name": "Read a received fax",
      "description": "Read one received fax: extracted fields and a bounded transcript slice for released non-HIPAA faxes. Arguments: id, optional offset. HIPAA Secure content stays on the website. Read-only.",
      "tags": [
        "fax",
        "inbox",
        "read-only"
      ],
      "examples": [
        "{\"skill\":\"get_inbound_fax\",\"arguments\":{\"id\":\"<received fax id>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ],
      "securityRequirements": [
        {
          "schemes": {
            "oauth2": {
              "list": [
                "inbox:read"
              ]
            }
          }
        }
      ]
    },
    {
      "id": "get_credits",
      "name": "Credit balance",
      "description": "Read the prepaid credit balance (availableCents, reservedCents). Read-only.",
      "tags": [
        "credits",
        "read-only"
      ],
      "examples": [
        "{\"skill\":\"get_credits\",\"arguments\":{}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ],
      "securityRequirements": [
        {
          "schemes": {
            "oauth2": {
              "list": [
                "credits:read"
              ]
            }
          }
        }
      ]
    },
    {
      "id": "ap2_create_cart",
      "name": "ap2 create cart",
      "description": "ap2_create_cart: human-present AP2 v0.1 credit-pack purchase. Requires the AP2 extension and credits:checkout. Signed carts, passkey-bound approval and Stripe Shared Payment Tokens. See /ap2.md for the mandate schemas, arguments and approval flow.",
      "tags": [
        "ap2",
        "credits",
        "payments"
      ],
      "examples": [
        "{\"skill\":\"ap2_create_cart\",\"arguments\":{\"product_id\":\"credit-pack-20\",\"idempotency_key\":\"<unique key>\",\"intent_mandate\":\"<AP2 IntentMandate object>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ],
      "securityRequirements": [
        {
          "schemes": {
            "oauth2": {
              "list": [
                "credits:checkout"
              ]
            }
          }
        }
      ]
    },
    {
      "id": "ap2_prepare_payment",
      "name": "ap2 prepare payment",
      "description": "ap2_prepare_payment: human-present AP2 v0.1 credit-pack purchase. Requires the AP2 extension and credits:checkout. Signed carts, passkey-bound approval and Stripe Shared Payment Tokens. See /ap2.md for the mandate schemas, arguments and approval flow.",
      "tags": [
        "ap2",
        "credits",
        "payments"
      ],
      "examples": [
        "{\"skill\":\"ap2_prepare_payment\",\"arguments\":{\"id\":\"<cart id>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ],
      "securityRequirements": [
        {
          "schemes": {
            "oauth2": {
              "list": [
                "credits:checkout"
              ]
            }
          }
        }
      ]
    },
    {
      "id": "ap2_complete_payment",
      "name": "ap2 complete payment",
      "description": "ap2_complete_payment: human-present AP2 v0.1 credit-pack purchase. Requires the AP2 extension and credits:checkout. Signed carts, passkey-bound approval and Stripe Shared Payment Tokens. See /ap2.md for the mandate schemas, arguments and approval flow.",
      "tags": [
        "ap2",
        "credits",
        "payments"
      ],
      "examples": [
        "{\"skill\":\"ap2_complete_payment\",\"arguments\":{\"id\":\"<cart id>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ],
      "securityRequirements": [
        {
          "schemes": {
            "oauth2": {
              "list": [
                "credits:checkout"
              ]
            }
          }
        }
      ]
    },
    {
      "id": "ap2_get_cart",
      "name": "ap2 get cart",
      "description": "ap2_get_cart: human-present AP2 v0.1 credit-pack purchase. Requires the AP2 extension and credits:checkout. Signed carts, passkey-bound approval and Stripe Shared Payment Tokens. See /ap2.md for the mandate schemas, arguments and approval flow.",
      "tags": [
        "ap2",
        "credits",
        "payments"
      ],
      "examples": [
        "{\"skill\":\"ap2_get_cart\",\"arguments\":{\"id\":\"<cart id>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ],
      "securityRequirements": [
        {
          "schemes": {
            "oauth2": {
              "list": [
                "credits:checkout"
              ]
            }
          }
        }
      ]
    },
    {
      "id": "ap2_cancel_cart",
      "name": "ap2 cancel cart",
      "description": "ap2_cancel_cart: human-present AP2 v0.1 credit-pack purchase. Requires the AP2 extension and credits:checkout. Signed carts, passkey-bound approval and Stripe Shared Payment Tokens. See /ap2.md for the mandate schemas, arguments and approval flow.",
      "tags": [
        "ap2",
        "credits",
        "payments"
      ],
      "examples": [
        "{\"skill\":\"ap2_cancel_cart\",\"arguments\":{\"id\":\"<cart id>\"}}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ],
      "securityRequirements": [
        {
          "schemes": {
            "oauth2": {
              "list": [
                "credits:checkout"
              ]
            }
          }
        }
      ]
    }
  ]
}