Through the Omenpaths added, plus English printed text support

Scryfall has just added Through the Omenpaths (OM1), the digital-only reflavoring of Marvel’s Spider-Man (SPM), as well as its bonus sheet (OMB), the equivalent of Marvel Universe (MAR).

(If this is the first time you’re hearing about this, you’ll want to catch up with the original announcement from Wizards of the Coast: Through the Omenpaths and Digital Universes Beyond Updates)

When we originally added Universes Within, we had to figure out how we’d record those cards, and improvised the following answer: we added the new cards as reprints of the Universes Beyond cards, changed the oracle text to match the Universes Within versions, and assigned flavor names to the Universes Beyond prints. We didn’t have clear answers about what was the right call, but this seemed like the best available answer at the time. However, Spider-Man and Through the Omenpaths required different answers, so we’re changing how we’re handling these cards.

How we’re handling Through the Omenpaths

Each card in Omenpaths will be recorded as a reprint of the corresponding Spider-Man card. For example, Kraza, the Swarm as One is a reprint of Spider-Punk. It has the same oracle ID and will show up in a list of all prints of Spider-Punk. They’re the same card.

This is the new part: we’re recording the actual printed text you see on the card for these prints. Although it’s The Soul Stone in Spider-Man, it’s The Terminus of Return in Omenpaths. It has that name. Its type line reads “Terminus Stone”, not “Infinity Stone”, and its rules text is different, referencing the Terminus by name and featuring the Origin keyword instead of the infinity symbol in both its rules and reminder text.

Because of a fun caveat of printed text, these cards still have their Oracle data as well. You can imagine it there but covered up by the printed text. What this means is that you can find these cards by their Oracle text as well: a search for type:infinity set:om1 will show you The Terminus of Return, even if it doesn’t have the Infinity type in its print qualities. You can also search gwen set:om1 to find out what the various Gwen cards were reflavored as.

This system is still a work in progress, and isn’t perfect. It’s not currently going to be clear whether you’re looking at Oracle or printed text. Additionally, our search tries to avoid matching by printed text in search unless there’s no other option—a side effect of the way we de-prioritise localized cards in favour of English search results. We’re going to be working on improving things, but it’ll take time. Among other things there’s a long-awaited database upgrade we’ve been working on for months that is going to be needed before we can make some of this work.

Right now the main impact of that is you may have to enter an Omenpaths card’s full name to find it. Lively Leap won’t yet show up in a search for just “leap”, but it will show up for “lively leap”, because that’s a printed name, not the Oracle name. That will hopefully change with time, and you shouldn’t have to know which one’s the printed or Oracle name, you should just be able to find it, but we’re not there just yet.

Updating Universes Within

We also applied this retroactively to our Universes Within cards. Will the Wise now has his own name and rules text on his page using his actual name. We’ve opted to keep the oracle text set to the Universes Within versions, and apply printed text to other versions.

Does this mean you’re planning on rolling out English printed text?

Not at this time, or at least not yet. We need better handling for printed text first, and we need to have a way for people to tell whether we’re recording printed text for archival reasons or for reflavoring reasons.

What this means for developers

You are now going to see English cards possibly have a printed_name, printed_type_line, and printed_text. Previously this would only happen for localized prints, but now it can happen for English prints as well.

We’re applying this to “reflavored” prints in Omenpaths, and cards that show up in Universes Within.

What you’ll see is the following:

  • SPM/OM1 printings will share the same oracle card, with the SPM print as the Oracle baseline
  • SPM will not have print-specific fields in English
  • OM1 prints with unique names will have a different printed_name
  • OM1 prints with unique types will have a different printed_type_line
  • OM1 prints with unique rules text will have a different printed_text

The same is true again for MAR/OMB.

Following this change, none of these cards will use the flavor_name field unless they actually have a flavor name — a second name appearing right beside the original on the card itself. You can find cards that actually have flavor names with is:flavorname.

Introducing is:default

Scryfall now offers a search term for cards that use the default frame. That is, cards that aren’t showcases, borderless, extended art, and so on.

  • You can find these cards with is:default. (Aliases: typical, normal, traditional, baseline.)
  • You can find cards that don’t have the default frame with not:default (or its aliases), or with is:nondefault. (Aliases: atypical, abnormal, nontraditional.)

These are inverses of each other. A card is either default or nondefault. It can’t be both or neither.

Some cards exclusively exist in nondefault appearances, e.g. their only print is borderless. These won’t show up if you’re looking for is:default, because there is no default version to find! However, you can instead combine any search with prefer:default, which will try to give you the default version if there is one that matches your search, and otherwise give you a nondefault version. You can also do the inverse with prefer:nondefault. All the above aliases also work here. (Note that a search cannot have more than one prefer: term, and you cannot search for it as the only term.)

What’s the reason?

We’re introducing this filter because it’s becoming increasingly difficult to filter down a search to cards with a normal frame. When project boosterfun started, it was easy enough: just look for things that aren’t showcase or extended art or borderless.

But that’s becoming an increasingly difficult list to enumerate. If you just want to find cards with a normal frame, your search has to exclude showcases, and extended arts, and borderless treatments, and fracture foils, and etched cards, and stamped and datestamped promos, and fullart. Oh yeah, and not surgefoils or galaxyfoils. And not whatever’s going in masterpiece sets. And probably not the future frame or colorshifted frame either. And playtests, don’t forget those. And cards with inverted text. There’s also yellow borders now. Did you get all that down? Okay, good, because there’s just a few more…

Btw, so far we’re up to this search just to find “normal” cards:

not:showcase not:extendedart -border:borderless not:fracturefoil not:etched not:stamped not:datestamped not:fullart not:surgefoil not:galaxyfoil -st:masterpiece -frame:future -frame:colorshifted not:playtest -frame:inverted -border:yellow

Scryfall has so far tried to avoid establishing a criteria for what’s “normal” because we thought it’d wind up too big a problem to tackle, and too subjective a problem at the fine details. But it turns out it’s pretty straightforward for us to define and get exactly what you’d expect.

Technical details: What makes a card “default”?

When we talk about what makes a card “default”, we’re talking about the card frame and border. If it’s got a “normal” frame and border, and it’s available in nonfoil or traditional foil, it’s probably default.

Specifically:

Default-ness is neutral on new retro frames, like timeshifted cards and Brothers’ War Commander. It’s also neutral on buy-a-box mechanical exclusives.

We’ll be adjusting and maintaining these criteria as the future develops and Magic continues to bring us new and interesting edge cases.

User-Agent and Accept header now required on the API

We’ve made a change to our API that hardens requirements on the headers you send. You now must provide a User-Agent header and an Accept header.

  • Your User-Agent header should reflect the name and version of your application, e.g. MtgExampleApp/1.1. Do not allow HTTP libraries to choose the header for you. If you are connecting with browser-based JavaScript, do not change the browser User-Agent.
  • The Accept header must be present, but you can provide a generic preference. For example, both of these are okay: Accept: */* and Accept: application/json;q=0.9,*/*;q=0.8.

You can read these requirements in the API documentation.

Upcoming API changes to Scryfall image URIs and download URIs

Starting in October 2022, Scryfall will be transitioning our image and data origins to new subdomains.

Images and bulk data files will stop being hosted on:

  • Going away: c1.scryfall.com
  • Going away: c2.scryfall.com
  • Going away: c3.scryfall.com

Our new file hosts will be located on:

  • New subdomain wildcard: *.scryfall.io
  • New subdomain example: cards.scryfall.io
  • New subdomain example: data.scryfall.io

Why are you doing this?

Scryfall is transitioning to a new file hosting provider to improve our scalability.

Will this break my existing code?

Only if you’ve been naughty. We don’t recommend that you ever try to manually construct a link to a file on c1.scryfall.com or similar. Instead you should fetch card data using our API or bulk file offerings, those objects always include the correct and up-to-date URI to card images and downloadable files.

As a reminder:

  • If you want to download a card’s image using its set code and collector number, use the /cards/:code/:number method and specify the format=image option. You will receive an HTTP redirect to the correct file.
  • If you want to download a card’s image using its Scryfall ID, use the /cards/:id endpoint and specify the format=image option. You will receive an HTTP redirect to the correct file.
  • If you want to bookmark a direct link to a bulk data item, use the /bulk-data/:type method and specify the format=file option. You will receive an HTTP redirect right to the latest bulk data file of that type.

If you have already been using the API to retrieve image and file URIs, nothing should change for you.

Will this affect any api.scryfall.com method paths?

No, this only affects our file download hosts and the URIs found in image_uris and download_uri and similar fields inside API objects.

Will this affect projects I have that use CORS?

No, the new origins should function the same with Cross Origin Resource Sharing.

We will be creating redirects for c1.scryfall.com , but you should not permanently rely on these redirects. They should be considered temporary band-aids until you are able to update anything affected by the domain changes.

Yes.

Do the new origins have a rate limit?

No, only api.scryfall.com has a rate limit.

Questions?

If you need additional clarification on any of these changes, please don’t hesitate to contact us

Upcoming API changes for etched foils and glossy cards

Hello friends! Scryfall is adding API support for tracking if a card is available in etched foil or glossy treatments.

  • API Card objects now have a finishes attribute, which details if a card is available in nonfoil, foil, etched, or glossy.
  • Etched foil pricing will be reflecting in the pricing fields under prices[usd_etched] and prices[usd_glossy]
    • EUR pricing for etched and glossy will be arriving later
  • When Wizards of the Coast first printed etched foils, we created distinct Scryfall entries for some of these etched foils. We will begin collapsing these entries into their regular entries, marking the regular entry as available in etched, and deleting the separate etched entry from our database.
  • Because some stores may have multiple entries for a card if it is available in etched foil or glossy, we are adding a tcgplayer_etched_id field to card objects to indicate if the etched pricing for a card was pulled from a different product ID.

There’s an example object here for Generous Gift from H1R and more information is available on the Card object documentation.

Deprecation Notice for Nonfoil and Foil Attributes

The foil and nonfoil top level properties on API card objects are now deprecated. Use the new finishes field instead. These old fields will be removed on Nov 1, 2021.

Upcoming API changes to Scryfall image URIs and download URIs

Starting in mid-August, Scryfall will be transitioning our image and data origins to new subdomains. Images and bulk data items will stop being hosted on img.scryfall.com and archive.scryfall.com and they will move to new federated hosts at c1.scryfall.com, c2.scryfall.com , c3.scryfall.com, and so on, with new file paths.

Why are you doing this?

Scryfall is transitioning to a new file hosting provider to improve our scalability and also save money.

Will this break my existing code?

Only if you’ve been naughty. We don’t recommend that you ever try to manually construct a link to a file on img.scryfall.com or archive.scryfall.com. Instead you should fetch card data using our API or bulk file offerings, those objects always include the correct and up-to-date URI to card images and downloadable files.

As a reminder:

  • If you want to download a card’s image using its set code and collector number, use the /cards/:code/:number method and specify the format=image option. You will receive an HTTP redirect to the correct file.
  • If you want to download a card’s image using its Scryfall ID, use the /cards/:id endpoint and specify the format=image option. You will receive an HTTP redirect to the correct file.
  • If you want to bookmark a direct link to a bulk data item, use the /bulk-data/:type method and specify the format=file option. You will receive an HTTP redirect right to the latest bulk data file of that type.

If you have already been using the API to retrieve image and file URIs, nothing should change for you.

Will this affect any api.scryfall.com method paths?

No, this only affects our file download hosts and the URIs found in image_uris and download_uri and similar fields inside API objects.

Will this affect projects I have that use CORS?

No, the new origins should function the same with Cross Origin Resource Sharing.

Yes, we will be creating redirects for img.scryfall.com and archive.scryfall.com, but you should not permanently rely on these redirects. They should be considered temporary band-aids until you are able to update anything affected by the domain changes.

Yes.

Do the new origins have a rate limit?

No, only api.scryfall.com has a rate limit.

Questions?

If you need additional clarification on any of these changes, please don’t hesitate to contact us

Updates to Bulk Data and /cards Deprecation Notice

First and foremost: On June 10, 2020 Scryfall will remove access to the “all cards” /cards API endpoint. This endpoint is now deprecated.

Because this endpoint paginates over our entire database, it has been a long-term source of performance and uptime issues for us. Our database has nearly doubled in size since we implemented it, and this endpoint now has over 1,500 pages and has become unsustainable for the kind of complex data we expose.

We will also have a 24-hour brown-out for the endpoint on May 30, 2020 as an extra alert for downstream consumers.

(This change applies only to the “all cards” pagination endpoint https://api.scryfall.com/cards. Our more specific card endpoints such as /cards/search, /cards/named, /cards/:id and so on are not affected.)

If you previously used the /cards endpoint, you should migrate to using the Bulk Data endpoints.

We’ve made several improvements to the bulk data files:

  • Bulk data files now include price information (but you should still be careful about trusting prices more than 24 hours old)
  • Bulk data files are now updated twice per day
  • You can now fetch bulk data objects individually or by type
  • Each bulk data file is now available at a timestamped URL, rather than replacing the same un-timestamped URL as before. Use the download_uri property of the Bulk Data objects to get the new URI. The old-style URIs without a timestamp will no longer be updated.

More information is available in the Bulk Data article, and if you have any questions don’t hesitate to contact us.

New Preview Field, and Frame Effect Deprecation Notice

Scryfall Card objects now include new preview[previewed_at], preview[source], and preview[source_uri] fields, which contains information about who previewed/spoiled this card, updated as soon as we enter the card during a preview season.

Deprecation Notice: Frame Effect Field

On Oct 1, 2019, Scryfall will be removing the frame_effect field from Card objects, use the new frame_effects field (plural), which can contain multiple values.

Deprecation Notice: Frontier Support

On July 15, 2019, Scryfall will be removing support for the Frontier format.

Keeping format data current is a nontrivial task for the Scryfall team. Frontier has not recieved enough momentum and excitement from the community to continue maintaining it.

Scryfall API objects will lose the legalities[frontier] property on July 15, 2019.

If you have questions about this update, please don’t hesitate to contact us.

Deprecation Notice: Old Price Fields and Old Image URLs

Foil Prices and Old Price Fields

On April 1, 2019, Scryfall will be removing the usd, eur, and tix fields from API Card objects. You should use the new prices[usd], prices[usd_foil], prices[eur], and prices[tix] properties instead.

Note that the new prices property includes separate foil price data in prices[usd_foil].

Previously, Scryfall’s API overloaded the usd field: If a card was only available in foil, the foil price would appear in usd. If a card was available in both foil and nonfoil, only the nonfoil price would appear in usd. The new prices[usd] and prices[usd_foil] properties will now always keep these prices separate.

Old Image URLs

Scryfall has changed the URL pattern for new card images:

Previously, card images on img.scryfall.com used a path pattern like /cards/{size}/{lang}/{set}/{number}.jpg. New card images now use a pattern like /cards/{size}/{face}/{uuid-parts}.jpg. This new URL is much more stable, it will not change if a card is renumbered or moved to a new set.

We are slowly migrating all card images on img.scryfall.com to use this new URL structure. Scryfall does not recommend that you ever try to guess or interpolate a card’s image URL yourself. If you need to access a card image by set code or collector number, use the /cards/:code/:number API method with format=image. Our API always returns the correct URL to a card’s image in API Card objects.

Questions?

If you have questions about this update, please don’t hesitate to contact us.

Deprecation Notice: 1v1 and Brawl support

On February 1, 2019, Scryfall will be removing support for the 1v1 Commander and Brawl formats.

Maintaining format data is a nontrivial task for the Scryfall team, and we have come to this decision based on changes to WotC’s support for these formats. (Brawl, 1v1 Commander)

Scryfall API objects will lose the legalities[brawl] and legalities[1v1] properties on February 1, 2019.

If you have questions about this update, please don’t hesitate to contact us.

Deprecation Notice: *shifted fields

On Dec 31, 2018, Scryfall will be removing the colorshifted, futureshifted, and timeshifted properties from API Card objects.

  • For determining if a card is colorshifted, look for the value "colorshifted" in the new frame_effect field
  • For determining if a card is futureshifted, look for the value "future" in the frame field
  • For determining if a card is timeshifted, look for the value "tsb" in the set field

If you have questions about this update, please don’t hesitate to contact us.

Deprecation Notice: Multiple API Affiliate Links

On November 16, Scryfall will be removing the following fields from API Card Objects:

  • purchase_uris[amazon]
  • purchase_uris[ebay]
  • purchase_uris[card_kingdom]
  • purchase_uris[coolstuffinc]
  • purchase_uris[mtgo_traders]

Other related fields, like usd and tix, will not change. If you have questions about this update, please don’t hesitate to contact us.

Update: This change is now complete.

Masters Edition has moved to the ME1 set code ⇢

Arena IDs are now available via the API ⇢

The /cards/search endpoint now allows specifying unique modes ⇢

Additional Un-card Gatherer updates

We’ve completed syncing new Gatherer updates for Unglued and Unhinged, and there have been a few non-trivial changes:

MTGO foil IDs and set codes

Some additional MTGO data and functionality is now available:

Data updates for Unstable

Unstable has caused us to make a few API changes to card objects:

  • Cards can now have borderless as their border_color, example cards
  • Cards can now have augment or host as their layout, example cards
  • A large amount of watermark field data was added
  • has:watermark will find cards with any watermark

Illustration identifiers

We’ve started rolling out unique illustration identifiers as part of card JSON data. You can now reference the illustration_id field to identify card artwork across printing editions. Cards with the same illustration_id have the same artwork.

Note that assigning unique identifiers isn’t a fully automated process, so there may be some delay in this information for new sets.

A version can now be specified with the card image format ⇢

You can now submit a set parameter to the /cards/named endpoint to scope your search to a specific set ⇢

New API documentation and September 2017 update

Our API documentation pages have been redesigned and split into multiple pages for easy linking and reading. We hope you like it. ❤️

Of particular interest, we now have image guidelines and a full list of colors and symbol formatting we support.

Object Updates

  • Set objects now include their uri linking to themselves and a scryfall_uri linking to that set on Scryfall’s website.
  • Card objects now have a color_indicator field describing the contents of their color indicators.
  • Cards that transform now have a correctly-scoped colors fields in their particular card_face objects.
  • Cards that transform now have a correctly-scoped color_indicator field in their particular card_face objects if that face of the card has a color indicator.
  • It’s now possible for double-faced cards to have multiple Multiverse IDs. These are made available in the new multiverse_ids property.
  • Card objects now include information about their future (Future Standard) legality.
  • Card objects now include a prints_search_uri which links where you can begin paginating all re/prints for this card on Scryfall’s API

Method Updates

  • New catalog: /catalog/artifact-types
  • New catalog: /catalog/spell-types
  • The /cards/autocomplete now returns up to 20 items (down from 25) but it is more accurate. It’s more likely to return a full list of 20 items and it favors results that start with your term (also known as “anchoring front”)
  • The /cards and /cards/search endpoint now returns 175 items per page (up from 150), to match the checklist pages on the main website.
  • /catalog/word-bank now includes words of length 2, so it covers some of our favorite words like Ob

Deprecated Features

  • The multiverse_id field on cards is now deprecated. It will be removed on December 1, 2017. Use the new multiverse_ids field instead.

Removed Features

  • The deprecated (and long-hidden) methods /catalogs/banned-formats, /catalogs/restricted-formats, and /catalogs/legal-formats have been removed. A list of all supported formats are available on every card object.
  • The foil property on Card objects has been disabled. The value of this property was misleading and inaccurate for many cards. It will return when we can better support foil card data.

API: Recent double-sided card and image updates

Mirroring the previous update made to flip and split cards, we have merged each side of transforming cards into a single record.

Transforming card objects now include two card_face objects describing their distinct face. Each card_face object will have its own image_uris property linking to the images for that face.

In addition, a new layout double_faced_token has been added to handle the new promotional double-sided token cards available with Ixalan. These card objects will have the same two-image system as transforming cards.

New Images

We’re rolling out two new image types:

  • border_crop is a 480×680 JPEG image where the borders of the card are cut close and the rounded corners removed.
  • art_crop will attempt to isolate the card’s artwork into its own rectangular image file. This will likely not be perfect for outlier card designs. Art crops for different frames and layouts may be different rectangular sizes. As this image is the first where we don’t include the copyright line and artist credit, you are heavily encouraged to show a copyright, disclaimer, and artist credit wherever you display this image.

URIs to both of these images will be part of the image_uris field for card objects when available. Recent sets already have these images, and older sets will receive them progressively over the coming weeks.

image_uri is Deprecated

The image_uri property on card objects is now deprecated. We will be removing this field from objects on November 1, 2017. Instead, you should choose an image that works best for your project from the keys in the image_uris (plural) property on card or card_face objects.

Questions?

If you have any questions or feedback about these changes, you can always DM us on Twitter or submit an issue on GitHub. Thanks so much for using our API!

API: CSV format now available for /cards/search

The /cards/search endpoint can now return results as a CSV. Example: http://api.scryfall.com/cards/search?q=cmc:7&format=csv

Review the full documentation for more information.

Notice of upcoming changes to images, split cards, and flip cards

This post is to provide advance warning to developers that Scryfall’s data model will soon change how we present split cards, flip cards, and card images. The changes will unfortunately be backwards-incompatible with the previous API.

High-Resolution Images

We will be slowly rolling out higher resolution images for cards!

👇 Click to ENHANCE.

  • Our current cards are available at 336×469px.
  • New images will be double that size, at 672×938px. 😱😍

A new field images will be added to the card object with normal and large properties with URIs to each version.

The image property will continue pointing to the normal version of the image, but is now deprecated.

Not all cards will have high-res images immediately. This change will likely creep out to newer sets and expansion sets first, then to all supplemental sets. When a card doesn’t have a high-res image, its images.large property will be null.

The system we’re building to make this change opens up a bunch of future possibilities with card images: art crops, square crops, consistently rounded corners, and more. Let us know what you want to see out of this. Stay tuned!

Split Cards and Flip Cards

Because users so often search for the combined name of split cards or search “across” the two halves of split cards (to discover casting loopholes, etc) we will be combining split cards and flip cards into a single object representing both halves of the card.

  • The name field for a split/flip card object will contain both names of the card. For example Wear // Tear
  • The mana_cost field for a split/flip card object will contain both values on the card. For example {1}{R} // {W}
  • A new faces field will contain two card_face objects that will have the distinct name, mana_cost, type_line, oracle_text, power, and toughness information for each face of the split/flip card.
  • The parent-level fields type_line, oracle_text, power, and toughness will be null for split/flip cards.
  • Other parent fields such as multiverse_id, prices, set information, etc will be unchanged.

These new combined card objects will replace the previous left-side/top-side object in our results. The object for the other side will be deleted.

  • For example, our current object for DGM Wear has ID d169a3b2… and the object for DGM Tear has ID bd0f7a22…. When this update occurs there will be only one object with ID d169a3b2… called Wear // Tear.

We will be updating split cards to adhere to the new Magic rules update:

  • The converted_mana_cost will now be the sum of the converted mana cost of both halves.
  • The color will now be the union of the colors of both halves.
  • The color_identity will now be the union of the color identity of both halves.

When searching for split/flip cards, API endpoints that use either part of the name or the combined // name will work:

  • Searching for a card named exactly Wear will find Wear // Tear.
  • Searching for a card named exactly Tear will find Wear // Tear.
  • Searching for cards named Wear/Tear, Wear // Tear, or Wear //\\/\/ Tear will find Wear // Tear.
  • Partial name searches will now match either side of the card or both. For example searching for we tea will now include Wear // Tear.

In addition, our chat bots will now return both halves of a split/flip card when you search for one or both sizes. For example [[Wear]] and [[Wear//Tear]] will now find Wear // Tear.

Transform and meld cards are unaffected by this update. They will remain distinct cards with an all_parts field as usual.

Thank you!

Thank you so much from the bottom of our hearts for using our API. We’ve been delighted by the things we’re seeing people build. If you have any questions or feedback about these changes, please send us a message.

API: /catalog/card-names now available

A new API method is now available: /catalog/card-names.

Returns a collection of all English Magic card names. The names are drawn from Scryfall’s database. This method will return a name as soon as we have the card entered for “spoiler season.” 😎

Early sets renumbered

Many older sets have been renumbered to more closely match the standardized color/name order that newer sets usually have.

Note that none of the following sets have official collector numbers, so our re-assigned numbers continue to be chosen “arbitrarily” and/or not from WOTC:

In addition, the following sets were renumbered to match either the partial or full list of collector numbers we have for that set from Magic Online. The rest of the set numbers were assigned “arbitrarily” as with the above list.

API: Find cards by MTGO ID

A new API endpoint is now available to find cards by MTGO ID (also known as the Cat ID). Example, for Ghost Quarter from Commander 2014: https://api.scryfall.com/cards/mtgo/54957