## §SELF — miscsubjects capability (paste without context)
**Principle:** Self-explaining payload — no external context required. This _self block is the capability: what it is, how to run it, how to change it, and where to look next.
**Path:** OIP > PAYMENTS > PAYMENTS_SEARCH_STRIPE_RESOURCES
**Capability:** `PAYMENTS_SEARCH_STRIPE_RESOURCES` — This tool can be used to search for specific Stripe resources using a custom Stripe query syntax. It is only able to search for the following resources: customers, payment_intents, charges, invoices,  MCP: https://mcp.stripe.com
**RUN NOW (open this URL):** https://miscsubjects.com/api/dispatch?invoke=PAYMENTS_SEARCH_STRIPE_RESOURCES&body=%3Carg1%3E&share=<TOKEN>
**Example call:** [PAYMENTS_SEARCH_STRIPE_RESOURCES]<arg1>[/PAYMENTS_SEARCH_STRIPE_RESOURCES]
- **type · runner:** tool · fn · payments
- **run it:** Open run_now (URL, fires the example), or POST https://miscsubjects.com/api/dispatch {"key":"PAYMENTS_SEARCH_STRIPE_RESOURCES","body":"<arg1>"}. From the router: null
- **inputs:** {"type":"object","properties":{"query":{"description":"This query string should be formatted as 'resource:query_clause', where 'resource' is one of (customers, payment_intents, charges, invoices, prices, products, subscriptions), and 'query_clause' is the actual query in Stripe's custom query syntax to query metadata for that resource.\n\nFor example, for the query: customers:email:\"jenny.rosen@example.com\"\nresource: `customers`\nquery_clause: `email:\"jenny.rosen@example.com\"`\n\nA query clause consists of a field, operator, and value.\n\n## Query Fields for customers\n* created\n* email\n* metadata\n* name\n* phone\n\n## Query Fields for payment_intents\n* amount\n* created\n* currency\n* customer\n* metadata\n* status\n\n## Query Fields for charges\n* amount\n* billing_details.address.postal_code\n* created\n* currency\n* customer\n* disputed\n* metadata\n* payment_method_details.{{SOURCE}}.last4\n* payment_method_details.{{SOURCE}}.exp_month\n* payment_method_details.{{SOURCE}}.exp_year\n* payment_method_details.{{SOURCE}}.brand\n* payment_method_details.{{SOURCE}}.fingerprint\n* refunded\n* status\n\n## Query Fields for invoices\n* created\n* currency\n* customer\n* last_finalization_error_code\n* last_finalization_error_type\n* metadata\n* number\n* receipt_number\n* status\n* subscription\n* total\n\n## Query Fields for prices\n* active\n* currency\n* lookup_key\n* metadata\n* product\n* type\n\n## Query Fields for products\n* active\n* description\n* metadata\n* name\n* shippable\n* url\n\n## Query Fields for subscriptions\n* created\n* metadata\n* status\n* canceled_at\n\n## Search Operators\nThe following table lists the syntax that you can use to construct a query:\n\n| Syntax | Usage | Description | When to Use | Examples |\n|--------|-------|-------------|-------------|----------|\n| `:` | `field:value` | Exact match operator (case insensitive) | **ONLY when you know the exact complete value** | `currency:\"eur\"` returns records where the currency is exactly \"EUR\" |\n| `~` | `field~value` | Substring match operator (minimum 3 characters) | **ALWAYS use for domain searches, partial names, email parts** | `email~\"foo.com\"` returns emails containing \"foo.com\" |\n| `AND`, `and` | `field:value1 AND field:value2` | Returns records that match both clauses | Combining multiple conditions | `status:\"active\" AND amount:500` |\n| `OR`, `or` | `field:value1 OR field:value2` | Returns records that match either clause | Alternative conditions | `currency:\"usd\" OR currency:\"eur\"` |\n| `-` | `-field:value` | Returns records that don't match the clause | Excluding specific values | `-currency:\"jpy\"` returns records not in JPY |\n| `NULL`, `null` | `field:null` | Checks for field presence (empty/null values) | Finding empty fields | `url:null` returns records where URL field is empty |\n| `>`, `<`, `>=`, `<=`, `=` | `field>value`, `field<value`, etc. | Numeric comparison operators | Amount ranges, dates | `amount>=\"10\"` returns records with amount >= 10 |\n| `` | `\" \"\"\"` | Escape quotes within quotes | When quotes are in the search value | `description:\"the story called \"The Sky and the Sea.\"\"` |\n\n## Query Rules\n* You can combine up to 10 query clauses in a search by separating them with a space or using AND/OR keywords (case insensitive)\n* You cannot combine AND and OR in the same query\n* No parentheses are supported for operator precedence\n* By default, the API combines clauses with AND logic\n* You must use quotation marks around string values (optional for numeric values)\n* You can escape quotes inside quotes with a backslash (\\)\n\n## Examples\n\nInput: Look up charges matching a custom metadata value.\nOutput: charges:metadata['order_id']:'1234567890'\n\nInput: Look up charges matching the last 4 digits of the card used for the payment.\nOutput: charges:payment_method_details.card.last4:4242\n\nInput: Look up customers matching an email.\nOutput: customers:email:'jenny.rosen@example.com'\n\nInput: Look up PaymentIntents not in the USD currency.\nOutput: payment_intents:-currency:'usd'\n\nInput: Filter invoice objects with a total greater than 1000.\nOutput: invoices:total>1000\n\nInput: Filter payments with a amount over $100.\nReasoning: Stripe \"amount\" field is in cents, so we use 1000 instead of 100\nOutput: payment_intents:amount>1000\n\nInput: Look up charges matching a combination of metadata and currency.\nOutput: charges:metadata['key']:'value' AND currency:'usd'\n\nInput: Search for customers with email containing \"john\".\nOutput: customers:email~\"john\"\n\nInput: Find products where the description field is empty.\nOutput: products:description:null\n\nInput: Search for payments with amounts greater than or equal to 5000.\nOutput: payment_intents:amount>=5000\n\nInput: Search for products with description with escaped quotes.\nOutput: products:description:\"The story called \"The Sky and the Sea\".\"\n","type":"string"}},"required":["query"]}
- **outputs:** { ok, result, invocation, yield, _self } — result is this object's output; yield is tokens/cost/material; invocation is the ledgered record.
- **auth · risk:** required · low
### Machine Contract
- Read this article first; do not infer the row shape from memory.
- If acting with a URL-only tool, open run_now after replacing placeholder args.
- If the call returns ran:false or proof.ok:false, read the receipt and repair the failed invocation instead of narrating success.
- If the token denies the call, report the denial exactly; do not switch to a broader action unless the owner supplied a broader token.
### Invocation, Ledger, Repair
- root tree: https://miscsubjects.com/api/dispatch?map=1&format=markdown
- parent system article: https://miscsubjects.com/api/dispatch?map=PAYMENTS&format=markdown
- append-only ledger: https://miscsubjects.com/api/invocations?object_id=PAYMENTS_SEARCH_STRIPE_RESOURCES
- receipt pattern: https://miscsubjects.com/api/dispatch?receipt=inv_ID&share=<TOKEN>
- replay: POST /api/dispatch {"replay":"inv_ID"}
- repair: POST /api/dispatch {"key":"PAYMENTS_SEARCH_STRIPE_RESOURCES","body":"corrected args","repairs":"inv_ID"}
### Troubleshooting
- **unknown key** — Use the did_you_mean links or ask URL; never guess another key. · https://miscsubjects.com/api/dispatch?ask=PAYMENTS_SEARCH_STRIPE_RESOURCES
- **argument/body mismatch** — Read inputs/example_args here, then retry with repairs: inv_ID so lineage closes. · https://miscsubjects.com/api/dispatch?key=PAYMENTS_SEARCH_STRIPE_RESOURCES
- **expired or corrupted token** — Report token_expired/token_corrupted from the response; owner mints a fresh scoped link. · https://miscsubjects.com/api/dispatch?explain=1&share=<TOKEN>
- **tool returned ok:false / exit nonzero** — Do not call it sent. Read the receipt, correct the body, fire a repair. · https://miscsubjects.com/api/dispatch?receipt=inv_ID&share=<TOKEN>
### Logical proof (verify each step)
1. Every capability is an invokable object with its own _self — this block. → https://miscsubjects.com/api/dispatch?key=PAYMENTS_SEARCH_STRIPE_RESOURCES
2. You run it by POSTing to /api/dispatch; in a model turn the router tag is [PAYMENTS_SEARCH_STRIPE_RESOURCES]args[/PAYMENTS_SEARCH_STRIPE_RESOURCES]. → https://miscsubjects.com/api/dispatch?registry=1
3. Every invocation is ledgered with actor, cost, and material/waste. → https://miscsubjects.com/api/invocations?object_id=PAYMENTS_SEARCH_STRIPE_RESOURCES
4. You can ask the build for capabilities in plain language. → https://miscsubjects.com/api/dispatch?ask=PAYMENTS_SEARCH_STRIPE_RESOURCES
5. The whole build is one self-describing map, with the terminal key. → https://miscsubjects.com/api/dispatch?build=1
### Where to look next
- **registry** — Every capability, self-describing · https://miscsubjects.com/api/dispatch?registry=1
- **ask** — Ask the build what to use, in plain language · https://miscsubjects.com/api/dispatch?ask=<question>
- **history** — This capability's invocation history — its edges · https://miscsubjects.com/api/invocations?object_id=PAYMENTS_SEARCH_STRIPE_RESOURCES
- **build** — The whole build as one map (terminal key) · https://miscsubjects.com/api/dispatch?build=1
*Self-explaining. Not project knowledge — fetch specifics from the links above.*