Our Partner & Developer boards on the community are moving to a brand new home: the .dev community forums! While you can still access past discussions here, for all your future app and storefront building questions, head over to the new forums.

Re: Checkout API / DraftOrder API - Presentment currency not applied

Checkout API / DraftOrder API - Presentment currency not applied

DiscountNinja
Shopify Partner
104 0 67

I have Shopify Payments set up in my development store.

The checkout is configured to support multiple currencies, which works well when checking out via the standard checkout. The shop is configured in EUR, and I'm able to check out in USD after changing the currency via the currency switcher built in to the Debut theme.

 

However, when I create a checkout via the Checkout API I'm unable to get the checkout to show in a presentment currency. It always shows in the default shop currency.

 

The payload includes a presentment_currency.

Here's the anonymized POST for a shop with default currency set to EUR.

I'm attempting to request a checkout in USD, but it generates a link to a checkout in EUR:

 

POST https://[shop].myshopify.com/admin/checkouts.json HTTP/1.1
X-Shopify-Access-Token: [ACCESSTOKEN]
Accept: application/json
Content-Type: application/json
Host: [shop].myshopify.com
Cookie: __cfduid=db46f8a2697c32efd861be690364e65591570279904
Request-Context: appId=cid-v1:[APP]
Request-Id: |a766b2d3-4bf8d561e71d2d78.
Content-Length: 101
Expect: 100-continue

{"checkout":{"line_items":[{"quantity":3,"variant_id":28327434256477}],"presentment_currency":"USD"}}

 

I'm using the presentment_currency in line with the documentation found here:

https://help.shopify.com/en/api/reference/sales-channels/checkout 

 

I've also tried to do the same using the Draft Order API, setting the currency field.

This also fails to display in USD, and also displays in EUR:

 

POST https://[SHOP]/admin/draft_orders.json HTTP/1.1
X-Shopify-Access-Token: [ACCESS TOKEN]
Accept: application/json
Content-Type: application/json
Host: [SHOP].myshopify.com
Cookie: __cfduid=db46f8a2697c32efd861be690364e65591570279904
Request-Context: appId=cid-v1:[APP]
Request-Id: |a766b2ec-4bf8d561e71d2d78.
Content-Length: 129
Expect: 100-continue

{"draft_order":{"currency":"USD","line_items":[{"quantity":3,"variant_id":28327434256477}],"use_customer_default_address":false}}

 

What am I missing?

Bart Coppens | Limoni Apps | Building apps for Shopify since 2016
Replies 29 (29)

DiscountNinja
Shopify Partner
104 0 67

Any news on this?

According to the documentation this should work.

I'm probably missing something.

Can anyone point me in the right direction?

Bart Coppens | Limoni Apps | Building apps for Shopify since 2016
Alex
Shopify Staff
1561 81 343

This does not appear to be working as intended, so thank you for the report. I've logged this as an issue internally and will keep this thread posted on any significant developments.

 

Cheers.

Alex | Shopify 
 - Was my reply helpful? Click Like to let me know! 
 - Was your question answered? Mark it as an Accepted Solution
 - To learn more visit the Shopify Help Center or the Shopify Blog

Ultrabender
Excursionist
25 2 14

Hello,

 

We have the same problem.

Do you have any idea when the problem will be fixed? It is very important for us.

 

Thanks.

JanLaussmann
Shopify Partner
1 0 1

One of our Shopify apps is also affected by this problem. Is there a time frame until when the problem will be fixed?

aruninnoppl
Tourist
12 0 2

Hello,

 

Is there any update or timeframe on this? I'm also facing the same issue & couldn't pass the currency value.

Ultrabender
Excursionist
25 2 14

@Alex, any news? It's been a long time, and still no fix. Thanks!

Derek_Morin
Shopify Partner
216 1 35

Hello?

DiscountNinja
Shopify Partner
104 0 67

Is it me you're looking for?

Bart Coppens | Limoni Apps | Building apps for Shopify since 2016
Busfox
Shopify Staff (Retired)
628 49 110

Hi folks,

 

Sorry for the delay in response! Alex switched roles, and this must have fallen between the cracks.

 

I can see a fix was shipped back in January that added the support of presentment_currency in the admin api checkout creation flow. Considering the date of the recent comments on this thread, can someone confirm if this is not the case when using this endpoint?

To learn more visit the Shopify Help Center or the Community Blog.

Derek_Morin
Shopify Partner
216 1 35

Hi @Busfox , unfortunately, Draft Orders are still always in the store's default currency (https://help.shopify.com/en/manual/payments/shopify-payments/multi-currency/limitations

 

Selling in multiple currencies is currently supported on just the Online Store sales channel. Draft orders are always in the shop's currency. This doc contains more information about our multi-currency feature and some of the limitations.

Ultrabender
Excursionist
25 2 14

@Busfox@Alex any news... ?

DiscountNinja
Shopify Partner
104 0 67

Hi @Busfox,

 

I can confirm this does not work in the Checkout API (and not supported in the DraftOrder API).

When passing in a presentment_currency in the checkout API:

checkout api request.png

 

The response still defaults to the base currency of the shop:

checkout api response.png

 

So, not fixed.

 

Regards,

Bart

Bart Coppens | Limoni Apps | Building apps for Shopify since 2016
DiscountNinja
Shopify Partner
104 0 67

@Busfox Do you have any news on the status of this issue? Do you have an ETA on a fix and can you let us know on which APIs this scenario will be supported?

Bart Coppens | Limoni Apps | Building apps for Shopify since 2016
LumberjackBeard
Tourist
9 1 2

Still not working into August. Is there any update on the issue?

Ultrabender
Excursionist
25 2 14

@Alex, any news? It's been a long time, and still no fix. Thanks!

DiscountNinja
Shopify Partner
104 0 67

I have heard back from Shopify on this:

"We shipped a fix that should have resolved this but it looks like the issue still persists. I was able to reproduce this and I've contacted the team in charge to let them know. I don't have a timeline for when this could be fixed but I'd keep you updated."

Bart Coppens | Limoni Apps | Building apps for Shopify since 2016
Ultrabender
Excursionist
25 2 14

@Alex and @Busfox

Do you have any news regarding this problem? It has now been over a year since this request has been open, over a year since you said the problem was going to be fixed. It's really shameful, it totally blocks our international development on our side. We are at a standstill because of this stupid bug.

Can you please update us on this subject?

Thank you.

Ultrabender
Excursionist
25 2 14

This lack of responsiveness is mind-blowing 😔

Hello8
Visitor
2 0 2

We are also waiting for a fix... The wait is starting to be long.

sebastiandev
Shopify Partner
72 1 24

Any updates?

aruninnoppl
Tourist
12 0 2

Hey @DiscountNinja 

 

Did you find any solution to pass the currency value?

 

Best regards,

-Arun

DiscountNinja
Shopify Partner
104 0 67

@aruninnoppl Shopify confirmed this is a bug on their end (see above). We're waiting for feedback from the Shopify team now.

Bart Coppens | Limoni Apps | Building apps for Shopify since 2016
aruninnoppl
Tourist
12 0 2

Thanks @DiscountNinja.

 

-Arun

Derek_Morin
Shopify Partner
216 1 35

Any update/fix yet? 
@DiscountNinja were you able to solve this?
Checkout API is still restricted to Shopify Plus, right?

traceisme
Shopify Partner
9 0 2

Any update on this? Please!

rhen-violet
Shopify Partner
3 0 1

It's been 3 years now since this bug was confirmed. How is it still not fixed?

JamesGilmore
Shopify Partner
10 1 2

I've found a working solution, but only when using their new shiny Storefront GraphQL API, that Shopify are pushing for everyone to use.

https://shopify.dev/api/storefront/2022-10/input-objects/CheckoutCreateInput

 

Example Usage

Query

mutation checkoutCreate($input: CheckoutCreateInput!) {
  checkoutCreate(input: $input) {
    checkout {
      id
      email
      createdAt
      currencyCode
      paymentDue
      shippingAddress {
          address1
      }
      requiresShipping
      availableShippingRates {
          ready
          shippingRates {
              handle
              price
              title
          }
      }
    }
  }
}

 Variables

{
  "input": {
    "email": "sf-test@bla.co",
    "lineItems": [
      {
        "quantity": 1,
        "variantId": "{{storefront_variant_id}}"  
      }
    ],
    "shippingAddress": {
      "firstName":  "John",
      "lastName": "Doe",
      "address1": "123 Test Street",
      "province": "Quebec",
      "country": "Canada",
      "city": "Montreal",
      "zip": "H3K0X2"
    },
    "presentmentCurrencyCode": "EUR"
  }
}
Steve_Robbins
Shopify Partner
11 0 1

I get error "CheckoutCreateInput isn't a defined input type (on $input)".  Maybe they got rid of it after v2022-10, even though it's still documented in v2023-10.

Full response

{
    "errors": [
        {
            "message": "CheckoutCreateInput isn't a defined input type (on $input)",
            "locations": [
                {
                    "line": 1,
                    "column": 25
                }
            ],
            "path": [
                "mutation checkoutCreate"
            ],
            "extensions": {
                "code": "variableRequiresValidType",
                "typeName": "CheckoutCreateInput",
                "variableName": "input"
            }
        },
        {
            "message": "Field 'checkoutCreate' doesn't exist on type 'Mutation'",
            "locations": [
                {
                    "line": 2,
                    "column": 3
                }
            ],
            "path": [
                "mutation checkoutCreate",
                "checkoutCreate"
            ],
            "extensions": {
                "code": "undefinedField",
                "typeName": "Mutation",
                "fieldName": "checkoutCreate"
            }
        },
        {
            "message": "Variable $input is declared by checkoutCreate but not used",
            "locations": [
                {
                    "line": 1,
                    "column": 1
                }
            ],
            "path": [
                "mutation checkoutCreate"
            ],
            "extensions": {
                "code": "variableNotUsed",
                "variableName": "input"
            }
        }
    ]
}

Headers

HTTP/2 200 
date: Tue, 21 Nov 2023 21:14:28 GMT
x-sorting-hat-podid: 88
x-sorting-hat-shopid: 6870368307
x-shopid: 6870368307
x-shopify-api-version: 2023-10
x-shopify-stage: production
x-dc: gcp-us-west2,gcp-us-east1,gcp-us-east1
x-request-id: d5e18696-094e-4b32-b3bc-9ac2d9aac098
cf-cache-status: DYNAMIC
server-timing: cfRequestDuration;dur=213.000059
server: cloudflare
cf-ray: 829bf1485f037cf7-LAX


So back to square one.  Documented feature doesn't work.

Steve_Robbins
Shopify Partner
11 0 1

This doesn't appear to work anymore.  Maybe it was abandoned after 2022-10, though it's still listed in the 2023-10 docs.  The error I get is below

{
    "errors": [
    {
        "message": "CheckoutCreateInput isn't a defined input type (on $input)",
        "locations": [
        {
            "line": 1,
            "column": 25
        }],
        "path": ["mutation checkoutCreate"],
        "extensions":
        {
            "code": "variableRequiresValidType",
            "typeName": "CheckoutCreateInput",
            "variableName": "input"
        }
    },
    {
        "message": "Field 'checkoutCreate' doesn't exist on type 'Mutation'",
        "locations": [
        {
            "line": 2,
            "column": 3
        }],
        "path": ["mutation checkoutCreate", "checkoutCreate"],
        "extensions":
        {
            "code": "undefinedField",
            "typeName": "Mutation",
            "fieldName": "checkoutCreate"
        }
    },
    {
        "message": "Variable $input is declared by checkoutCreate but not used",
        "locations": [
        {
            "line": 1,
            "column": 1
        }],
        "path": ["mutation checkoutCreate"],
        "extensions":
        {
            "code": "variableNotUsed",
            "variableName": "input"
        }
    }]
}

 
Documented feature does not work.  Back to square one.