AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Stripe Recipes

skill-workato-devs-recipe-skills-stripe-recipes · by workato-devs

Stripe payment integration recipes for Workato. Enables AI agents to generate valid recipe JSON for Stripe operations including customer management, payment processing, and refunds.

No reviews yet
0 installs
32 views
0.0% view→install

Install

$ agentstack add skill-workato-devs-recipe-skills-stripe-recipes

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-workato-devs-recipe-skills-stripe-recipes)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
2mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Stripe Recipes? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Stripe Recipes Skill - Agent Instructions

> ⚠️ DEPENDENCY: Load /workato-recipes first if not already loaded. > This skill requires the base Workato knowledge for triggers, control flow, datapills, and recipe structure.

This skill provides Stripe-specific knowledge for generating Workato recipes. It extends the workato-recipes base skill and focuses on Stripe-specific patterns.


Table of Contents

  1. [When to Use This Skill](#when-to-use-this-skill)
  2. [Stripe Config Requirements](#stripe-config-requirements)
  3. [Native Connector Guidance](#native-connector-guidance)
  4. [Stripe Custom HTTP Actions](#stripe-custom-http-actions)
  5. [Stripe Datapill Exception](#stripe-datapill-exception)
  6. [Stripe Patterns](#stripe-patterns)
  7. [Pre-Push Checklist (Stripe)](#pre-push-checklist-stripe)

When to Use This Skill

Use this skill when building Workato recipes that:

  • Create, search, or manage Stripe customers
  • Create and confirm PaymentIntents
  • Handle 3D Secure authentication flows
  • Process refunds for completed payments
  • Retrieve payment, subscription, or charge status

Prerequisites:

  • workato-recipes base skill loaded
  • Workato workspace with Stripe connection configured

Stripe Config Requirements

Every Stripe recipe requires the stripe provider in the config section:

{
  "keyword": "application",
  "provider": "stripe",
  "skip_validation": false,
  "account_id": {
    "zip_name": "Workspace Connections/stripe_connection.connection.json",
    "name": "Stripe Connection Name",
    "folder": "Workspace Connections"
  }
}

Combined with trigger provider:

For API endpoint trigger:

"config": [
  { "provider": "workato_api_platform", "account_id": null, ... },
  { "provider": "stripe", "account_id": { ... }, ... }
]

For callable recipe trigger:

"config": [
  { "provider": "workato_recipe_function", "account_id": null, ... },
  { "provider": "stripe", "account_id": { ... }, ... }
]

Native Connector Guidance

The Stripe connector provides 7 native actions and 4 triggers. See lint-rules.json for the authoritative list of valid action and trigger names.

Choosing the Right Trigger

  • new_object — Generic trigger for new Stripe objects (customers, charges, invoices, etc.).
  • new_charge — Trigger specifically on new charges.
  • new_event — Trigger on Stripe webhook events.
  • new_objects_batch — Batch trigger for processing multiple new objects.

Choosing the Right Action

Customer operations:

  • create_customer — Create a new Stripe customer natively.
  • update_customer — Update an existing customer.

Charges & invoices:

  • create_charge — Create a charge.
  • create_invoice — Create an invoice.
  • create_invoice_item — Add a line item to an invoice.

Generic lookups:

  • get_object_by_id — Retrieve any Stripe object by ID (customer, charge, invoice, subscription, etc.).
  • list_objects — List objects of any type with optional filters.

Adhoc HTTP required for: PaymentIntents (create/confirm), refunds, subscriptions, payment methods, customer search, and other Stripe API operations not covered by the 7 native actions. See [Stripe Custom HTTP Actions](#stripe-custom-http-actions) below.


Stripe Custom HTTP Actions

When to Use Custom HTTP Actions

While the connector provides 7 native actions for basic customer, charge, and invoice operations, many Stripe workflows still require __adhoc_http_action. Common adhoc operations:

| Endpoint | Use Case | |----------|----------| | /v1/customers/search | Search customers by email | | /v1/payment_intents | Create PaymentIntents | | /v1/payment_intents/{id}/confirm | Confirm payments with 3D Secure | | /v1/refunds | Create refunds |

Custom HTTP Action Structure

{
  "number": 2,
  "provider": "stripe",
  "name": "__adhoc_http_action",
  "as": "search_customer",
  "keyword": "action",
  "input": {
    "mnemonic": "Search customers",
    "path": "/v1/customers/search",
    "verb": "get",
    "response_type": "json",
    "input": {
      "schema": "[{\"name\":\"query\",\"type\":\"string\",\"optional\":false,...}]",
      "data": {
        "query": "email:'#{email_datapill}'",
        "limit": "1"
      }
    },
    "output": "[{\"name\":\"data\",\"type\":\"array\",...}]"
  },
  "extended_output_schema": [...],
  "extended_input_schema": [...],  // CRITICAL: See warning below
  "uuid": "search-customer-001"
}

> CRITICAL: extendedinputschema Requirement > > Custom HTTP actions have nested input.data structures. The extended_input_schema MUST fully define this nested structure or Workato will silently drop the input data. See workato-recipes base skill for complete documentation. > > Always copy extended_input_schema from validated templates rather than creating simplified versions.

HTTP Methods

GET requests - Parameters in input.data:

{
  "verb": "get",
  "input": {
    "data": { "query": "...", "limit": "1" }
  }
}

POST requests - Parameters in input.data (form-encoded by Stripe):

{
  "verb": "post",
  "input": {
    "data": { "amount": "5000", "currency": "usd", "customer": "cus_xxx" }
  }
}

Idempotency Headers (CRITICAL)

All create/confirm operations MUST include idempotency headers:

{
  "request_headers": [
    {
      "name": "Idempotency-Key",
      "value": "#{idempotency_token_datapill}"
    }
  ]
}

Why: Retries without idempotency create duplicate customers/charges.

API Versioning (Recommended)

{
  "request_headers": [
    { "name": "Stripe-Version", "value": "2024-11-20.acacia" }
  ]
}

Stripe Datapill Exception

CRITICAL: No Body Wrapper

Stripe custom HTTP actions do NOT use the ["body"] wrapper in datapill paths.

This is different from other connectors:

// CORRECT for Stripe
"path": ["id"]
"path": ["status"]
"path": ["data", {"path_element_type":"current_item"}, "id"]
"path": ["last_payment_error", "code"]

// WRONG for Stripe - Do NOT use
"path": ["body", "id"]

Stripe Datapill Examples

Customer ID from search:

"#{_dp('{\"pill_type\":\"output\",\"provider\":\"stripe\",\"line\":\"search_customer\",\"path\":[\"data\",{\"path_element_type\":\"current_item\"},\"id\"]}')}"

Customer ID from create:

"#{_dp('{\"pill_type\":\"output\",\"provider\":\"stripe\",\"line\":\"create_customer\",\"path\":[\"id\"]}')}"

PaymentIntent status:

"#{_dp('{\"pill_type\":\"output\",\"provider\":\"stripe\",\"line\":\"create_payment\",\"path\":[\"status\"]}')}"

Error code from failed payment:

"#{_dp('{\"pill_type\":\"output\",\"provider\":\"stripe\",\"line\":\"confirm_payment\",\"path\":[\"last_payment_error\",\"code\"]}')}"

Stripe Patterns

1. Search-Before-Create (Customer Deduplication)

Always search for existing customer before creating:

// Step 1: Search
{
  "provider": "stripe",
  "name": "__adhoc_http_action",
  "as": "search_customer",
  "input": {
    "path": "/v1/customers/search",
    "verb": "get",
    "input": {
      "data": { "query": "email:'#{email}'", "limit": "1" }
    }
  }
}

// Step 2: Check if found
{
  "keyword": "if",
  "input": {
    "conditions": [{
      "operand": "present",
      "lhs": "#{search_customer.data[].id}"
    }]
  },
  "block": [
    // Return existing
    { "name": "return/response", "input": { "customer_id": "#{existing}", "created": "false" } },
    // Else: Create new
    { "keyword": "else", "block": [ /* create customer */ ] }
  ]
}

2. Error Response Flattening

Stripe errors have nested structure. Flatten for responses:

// Stripe returns:
{ "error": { "code": "card_declined", "message": "...", "decline_code": "..." } }

// Flatten in your response schema:
{ "success": false, "error_code": "card_declined", "error_message": "...", "decline_code": "..." }

3. Amount Validation

Stripe requires minimum $0.50 (50 cents):

{
  "keyword": "if",
  "input": {
    "conditions": [{ "operand": "less_than", "lhs": "#{amount}", "rhs": "50" }]
  },
  "block": [
    { "name": "response", "input": { "error": "Amount must be at least 50 cents" } }
  ]
}

4. 3D Secure Handling

PaymentIntent status after confirm indicates auth requirement:

| Status | Meaning | Action | |--------|---------|--------| | succeeded | Payment complete | Return success | | requires_action | 3D Secure needed | Return next_action.redirect_to_url.url | | requires_payment_method | Failed | Return error |


Pre-Push Checklist (Stripe)

Stripe-Specific Checks

  • [ ] Config includes stripe provider with connection reference
  • [ ] Action name matches a valid name in lint-rules.json or is __adhoc_http_action
  • [ ] Create/confirm actions include Idempotency-Key header
  • [ ] Datapill paths do NOT include ["body"] wrapper
  • [ ] Search results use ["data", {"path_element_type":"current_item"}, "id"]
  • [ ] CRITICAL: extended_input_schema fully defines nested input.data structure (see base skill)

Common Stripe Errors

| Error | Cause | Solution | |-------|-------|----------| | "invalid step" | Wrong datapill path | Remove ["body"] wrapper | | Duplicate customers | Missing idempotency | Add Idempotency-Key header | | Empty search results | Wrong array access | Use {"path_element_type":"current_item"} | | Missing API params | Incomplete extended_input_schema | Ensure schema defines all nested input.data fields | | Input silently dropped | Schema missing nested objects | Copy complete schema from templates |


Templates

See templates/ directory:

  • create-customer.json - Search-before-create pattern
  • confirm-payment.json - PaymentIntent confirmation with 3D Secure
  • create-refund.json - Refund processing

References

  • Base Skill: workato-recipes - Recipe structure, triggers, control flow
  • Templates: templates/ directory
  • Patterns: patterns/ directory
  • Stripe API: https://stripe.com/docs/api

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.