Search
Look up objects in your Stripe data.
Some top level API resources support retrieval with search API methods. You can use the search APIs to retrieve your Stripe objects in a flexible manner. Using search is a faster alternative to paginating through all resources. To create a search query, review the Search query language and reference the query fields of the resource:
- Query fields for Charges
- Query fields for Customers
- Query fields for Invoices
- Query fields for PaymentIntents
- Query fields for Prices
- Query fields for Products
- Query fields for Subscriptions
Limitations
Minimum API version
The minimum supported API Version to use search is 2020-08-27
. Read our API upgrades guide to learn more about upgrades. To use search without upgrading your account API version, you can override the API version on a single request by setting the Stripe-Version
request header:
-H "Stripe-Version: 2024-10-28.acacia"
Read our SDKs guide on how to override an API version when using a library.
Data freshness
Don’t use search for read-after-write flows (for example, searching immediately after a charge is made) because the data won’t be immediately available to search. Under normal operating conditions, data is searchable in under 1 minute. Propagation of new or updated data could be delayed during an outage.
Rate limits
We apply a rate limit of up to 20 read operations per second which applies for all search endpoints in both live mode and test mode. Live mode and test mode limits are separate. Keeping the rate limit in mind, for workloads where you need to run analytics on one or more API resource(s), Sigma is much more efficient. For workloads where you need to export a large portion of your API resource, our Data Pipeline product is more efficient.
Regional availability
Search isn’t available to merchants in India.
Test clock objects omitted in list all results
Stripe list APIs (such as List invoices) omit results generated by test clocks for list all requests. To see results generated by test clocks in these cases, you must request results within a specific parent, such as test_
, customer
, or subscription
.
For example, GET /v1/invoices
won’t return test clock generated invoices, but GET /v1/invoices/{customer_
returns all invoices for that customer, including those that are test clock generated.
Similarly, you can specify a test clock ID in this example to get all invoices related to that test clock, or you can specify a subscription ID to return all invoices billed for that subscription, including test clock generated invoices.
Examples
Here are some examples of what you can do with the Search charges API and Search PaymentIntents API:
Charges metadata search
Look up charges matching a custom metadata value.
Charges last4 search
Look up charges matching the last 4 digits of the card used for the payment.
Customers email search
Look up customers matching an email.
Negation filter
Look up PaymentIntents not in the USD currency.
Numeric filter
Filter invoice objects with a total
greater than 1000.
Combining multiple filters
Look up charges matching a combination of metadata and currency.
Search query language
Query structure and terminology
A query clause
consists of a field
followed by an operator
followed by a value
:
clause | email:"amy@rocketrides. |
field | email |
operator | : |
value | amy@rocketrides. |
You can combine multiple query clauses in a search by either separating them with a space, or using the AND
or OR
keywords (case insensitive). You can’t combine AND
and OR
in the same query. Furthermore, there’s no option to use parentheses to give priority to certain logic operators. By default, the API combines clauses with AND
logic.
The example query email:"amy@rocketrides.
matches records where both the email address is amy@rocketrides.io, and the metadata in the record includes key
with a value of value
.
Creating a query which does not match a clause
You can negate query clauses using a -
character. For example, the following search returns records that don’t match the email amy@rocketrides.
.
-email:"amy@rocketrides.
Field types, substring matching, and numeric comparators
Every search field supports exact matching with a :
. Certain fields such as email
and name
support substring matching. Certain other fields such as amount
support numeric comparators like >
and <
.
Each field includes a type that defines the operations you can use in the field. For a full list of available fields, see supported query fields for each resource.
Using an unsupported operator, such as specifying greater than (>
) on a string, returns an error.
type | operators |
---|---|
token | exact match (case insensitive) |
string | exact match, substring (case insensitive) An exact match on a string type returns any record where that record contains all of the words from the query in the same order. For example the query |
numeric | exact match, greater than and less than |
Quotes
You must use quotation marks around string values. Quotation marks are optional for numeric values. For example:
currency:"usd"
means quotes are required.payment_
means quotes are optional.method_ details. card. last4:1234
You can escape quotes inside of quotes with a backslash (\
).
description:"the story called \"The Sky and the Sea.
Metadata
You can perform searches on metadata that you’ve added to objects that support it.
Use the following format to construct a clause for a metadata search: metadata["<field>"]:"<value>"
.
The following clause demonstrates how to create a clause that queries for records with a donation ID of “asdf-jkl”: metadata["donation-id"]:"asdf-jkl"
.
You can query for the presence of a metadata key on an object. The following clause would match all records where donation-id
is a metadata key. -metadata["donation-id"]:null
Search Syntax
The following table lists the syntax that you can use to construct a query.
Syntax | Usage | Description | Examples |
---|---|---|---|
: | field:value | Exact match operator (case insensitive) | currency:"eur" returns records where the currency is exactly “EUR” in a case-insensitive comparison |
AND , and | field:value1 AND field:value2 | The query returns only records that match both clauses (case insensitive) | status:"active" AND amount:500 |
OR , or | field:value1 OR field:value2 | The query returns records that match either of the clauses (case insensitive) | currency:"usd" OR currency:"eur" |
- | -field:value | Returns records that don’t match the clause | -currency:"jpy" returns records that aren’t in JPY |
NULL , null | field:null | A special token used for field presence (case insensitive) | url:null returns records where a URL field is empty |
\ | " \"\"" | Escape quotes within quotes | description:"the story called \"The Sky and the Sea. |
~ | field~value | Substring match operator (substrings must be a minimum of 3 characters) | email~"amy" returns matches for amy@rocketrides.io and xamy |
> , < , = |
| Greater than/less than operators | amount>="10" brings up objects where the amount is 10 or greater |
Supported query fields for each resource
Query fields for Charges
Field | usage | Type (token, string, numeric) |
---|---|---|
amount | amount>1000 | numeric |
billing_details.address.postal_code | billing_ | token |
created | created>1620310503 | numeric |
currency | currency:"usd" | token |
customer | customer:"cus_ | token |
disputed | disputed:"true" | token |
metadata | metadata["key"]:"value" | token |
payment_method_details.{{SOURCE}}.last4 | payment_ | token |
payment_method_details.{{SOURCE}}.exp_month | payment_ | token |
payment_method_details.{{SOURCE}}.exp_year | payment_ | token |
payment_method_details.{{SOURCE}}.brand | payment_ | token |
payment_method_details.{{SOURCE}}.fingerprint | payment_ | token |
refunded | refunded:"true" | token |
status | status:"succeeded" | token |
For SOURCE
, use card
, card_
, or interac_
. Use card
for online charges, interac_
for Terminal card present charges for the Interac network, and card_
for other Terminal card present charges.
The disputed
field accepts only the tokens “true” and “false”, indicating the presence of disputes.
refunded:"true"
filters for fully-refunded charges, refunded:"false"
filters for partially-refunded charges, and refunded:null
filters for non-refunded charges.
Query fields for Customers
Field | usage | Type (token, string, numeric) |
---|---|---|
created | created>1620310503 | numeric |
email~"amyt" | string | |
metadata | metadata["key"]:"value" | token |
name | name~"amy" | string |
phone | phone:"+19999999999" | string |
Query fields for Invoices
Field | usage | Type (token, string, numeric) |
---|---|---|
created | created>1620310503 | numeric |
currency | currency:"usd" | token |
customer | customer:"cus_ | token |
last_finalization_error_code | last_ | token |
last_finalization_error_type | last_ | token |
metadata | metadata["key"]:"value" | token |
number | number:"MYSHOP-123" | string |
receipt_number | receipt_ | string |
status | status:"open" | string |
subscription | subscription:"SUBS-123" | string |
total | total>1000 | numeric |
Query fields for PaymentIntents
Field | usage | Type (token, string, numeric) |
---|---|---|
amount | amount>1000 | numeric |
created | created>1620310503 | numeric |
currency | currency:"usd" | token |
customer | customer:"cus_ | token |
metadata | metadata["key"]:"value" | token |
status | status:"succeeded" | token |
Query fields for Prices
Field | usage | Type (token, string, numeric) |
---|---|---|
active | active:"true" | token |
currency | currency:"usd" | token |
lookup_key | lookup_ | string |
metadata | metadata["key"]:"value" | token |
product | product:"prod_ | string |
type | type:"recurring" | token |
Query fields for Products
Field | usage | Type (token, string, numeric) |
---|---|---|
active | active:"true" | token |
description | description~"t-shirts" | string |
metadata | metadata["key"]:"value" | token |
name | name~"amy" | string |
shippable | shippable:"true" | token |
url | url~"/dinosaur_ | string |
Query fields for Subscriptions
Field | usage | Type (token, string, numeric) |
---|---|---|
created | created>1620310503 | numeric |
metadata | metadata["key"]:"value" | token |
status | status:"active" | token |
canceled_at | canceled_ | numeric |