{
  "schema_version": "1",
  "name": "nalpay",
  "description": "Card payments, payment links, saved cards and recurring subscriptions for Saudi merchants. Test mode is the default and needs no approval; live money needs an approved business verification.",
  "openapi": "https://paywithnal.com/openapi.json",
  "llms_txt": "https://paywithnal.com/llms.txt",
  "documentation": "https://paywithnal.com/docs",
  "mcp": {
    "url": "https://mcp.paywithnal.com/mcp",
    "transport": "streamable-http",
    "authentication": "bearer"
  },
  "authentication": {
    "type": "bearer",
    "header": "Authorization",
    "format": "Bearer sk_test_… or Bearer sk_live_…",
    "notes": "The key's prefix decides the mode and no header can change it. Start with a test key: it can do everything the live one can, with no real money involved."
  },
  "skills": [
    {
      "name": "one-off-charge",
      "title": "Take a one-off payment",
      "description": "Charge a customer once, by sending them a hosted payment link.",
      "url": "https://paywithnal.com/.well-known/agent-skills/one-off-charge.md",
      "guide": "https://paywithnal.com/docs/one-off-charge",
      "endpoints": [
        "GET /v1/account",
        "POST /v1/payment_links",
        "GET /v1/payment_links/{id}",
        "POST /v1/test/payment_links/{id}/pay",
        "GET /v1/payments",
        "GET /v1/payments/{id}",
        "POST /v1/payments/{id}/refunds"
      ]
    },
    {
      "name": "save-a-card",
      "title": "Save a card for a subscription",
      "description": "Store a customer's card from a payment they made, so the subscription it was saved by can renew on it.",
      "url": "https://paywithnal.com/.well-known/agent-skills/save-a-card.md",
      "guide": "https://paywithnal.com/docs/saving-a-card",
      "endpoints": [
        "POST /v1/customers",
        "GET /v1/customers/{id}",
        "GET /v1/customers",
        "GET /v1/customers/{id}/cards",
        "POST /v1/payment_links",
        "POST /v1/subscriptions",
        "DELETE /v1/cards/{id}"
      ]
    },
    {
      "name": "subscription",
      "title": "Set up a recurring charge",
      "description": "Charge a customer every 30, 90, 180 or 365 days, with retries and cancellation handled for you.",
      "url": "https://paywithnal.com/.well-known/agent-skills/subscription.md",
      "guide": "https://paywithnal.com/docs/subscriptions",
      "endpoints": [
        "GET /v1/account",
        "POST /v1/subscriptions",
        "GET /v1/subscriptions/{id}",
        "GET /v1/subscriptions",
        "GET /v1/subscriptions/{id}/cycles",
        "POST /v1/subscriptions/{id}/cancel",
        "POST /v1/subscriptions/{id}/resume",
        "POST /v1/test/subscriptions/{id}/advance"
      ]
    },
    {
      "name": "webhook-handling",
      "title": "Receive and verify webhooks",
      "description": "Register an endpoint, verify the signature on the raw body, and handle each event exactly once.",
      "url": "https://paywithnal.com/.well-known/agent-skills/webhook-handling.md",
      "guide": "https://paywithnal.com/docs/webhooks",
      "endpoints": [
        "POST /v1/webhook_endpoints",
        "GET /v1/webhook_endpoints",
        "GET /v1/webhook_endpoints/{id}",
        "PATCH /v1/webhook_endpoints/{id}",
        "DELETE /v1/webhook_endpoints/{id}",
        "POST /v1/webhook_endpoints/{id}/rotate_secret",
        "GET /v1/events",
        "GET /v1/events/{id}",
        "POST /v1/events/{id}/resend"
      ]
    }
  ]
}