Closed tokicnikolaus closed 6 months ago
Confirmed there seem to be multiple bugs here.
The API is returning error strings for "cartonIdList", when it seems to be referring to "PackageLabelsToPrint" in the docs. Which is wrong, the API or the doc?
Is the "carton ID" that "U000" string, or an integer, or something else? I tried a few guesses and nothing worked. In any case it needs to be documented.
(I thought I'd try to download the BoxContent for the shipment to see what IDs it used there, but I can't find an API to download (OR CREATE!) BoxContent. Is that critical feature totally missing right now? Seems impossible to actually create a real shipment without it.)
I'm also not sure which is wrong but when I provide PackageLabelsToPrint
parameter returning message is different.
From the docs PackageLabelsToPrint
should be array of strings. I also tried a lot different options and nothing worked.
Not sure why I can't find cartonId
in Seller Central so I think we first need to upload BoxContent
over feeds api here
I assume that after that we get cartonIds which could be used to get labels.
Please let me know if you find something that makes sense :)
When the API returns:
'message': "1 validation error detected: Value null at 'cartonIdList' failed to satisfy constraint: Member must not be null",
I think it's just a typo. It should say:
'message': "1 validation error detected: Value null at 'PackageLabelsToPrint' failed to satisfy constraint: Member must not be null",
(That would be pretty sad if they make this better JSON API, but still require that archaic "feeds" thing for box content.)
I have no previous experience with Amazon MWS so maybe I'm not understanding the whole process flow. Now I'm trying to get labels for shipments I manually created over the Seller Central UI. Shipments I created are successfully fetched (Operation: getShipments) and now I have issue when getting the labels.
Here is my error response from API:
{'errors': [{'code': 'InvalidInput', 'message': 'Provided SellerCartonIds are not valid: [[FBAxxxxxxxxxU000001]] for Shipment: [FBAxxxxxxxxx]', 'details': ''}]}
If I print labels from UI FBAxxxxxxxxxU000001 label is printed in pdf - also found out about naming here
In general, I don't know where to find parameter of package labels
PackageLabelsToPrint
from GetLabelDocs also I'm not sure if this parameter is same ascartonIdList
parameter?Here are data if you don't provide
PackageLabelsToPrint
(in docs not required! ) query param in request: Headers and url:url : 'https://sellingpartnerapi-eu.amazon.com/fba/inbound/v0/shipments/FBA1xxxxx/labels?PageType=PackageLabel_A4_2&LabelType=UNIQUE' { 'User-Agent': 'python-requests/2.25.1 auth-aws-sigv4/0.6', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'x-amz-access-token': 'Atza|Ixxxxw', 'Host': 'sellingpartnerapi-eu.amazon.com', 'X-AMZ-Date': '20210122T130603Z', 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8', 'X-Amz-Security-Token': 'xxxx', 'Authorization': 'AWS4-HMAC-SHA256 Credential=Axxx/20210122/eu-west-1/execute-api/aws4_request, SignedHeaders=content-type;host;x-amz-date;x-amz-security-token, Signature=c580d12b684bcaf54c9076afaa01441f17cab301ba8af360a99b38717aec554c' }
response: {'errors': [{'code': 'InvalidInput', 'message': "1 validation error detected: Value null at 'cartonIdList' failed to satisfy constraint: Member must not be null", 'details': ''}]}
I spent a LOT of time on this already and it gets a bit annoying!
Thanks!
Could you check LabelType, If your LabelType is UNIQUE, first submit feed XML file.
Here is the XML template:
https://images-na.ssl-images-amazon.com/images/G/01/rainier/help/xsd/release_4_1/CartonContentsRequest.xsd
feedType: POST_FBA_INBOUND_CARTON_CONTENTS
It is FEED API doc https://github.com/amzn/selling-partner-api-docs/blob/main/references/feeds-api/feeds_2020-09-04.md
In my case I've been doing the BoxContents step manually on the web, because the whole "FEED" thing seems like a ridiculous overly-complicated archaic hack, and hopefully that's all going away soon once MWS goes away and SP-API is the one and only API. I wonder if doing BoxContents on the web means it's impossible to download labels via SP-API? That would sure be a strange limitation, and one worth documenting and fixing.
I got this to work after using a FEED.
The undocumented thing that it wants is a comma-separated string of whatever you used in <CartonId>
for the POST_FBA_INBOUND_CARTON_CONTENTS
.
In our case a working query pre-urlencode is: 'PackageLabelsToPrint':'1,2,3,4,5'
since we named the cartons as counting integer strings in the XML feed.
Apparently when you create the box content on the web it's either impossible to then use the API to get labels, or maybe it's possible, but there's some hidden secret carton ID strings like "sellercentral1,sellercentral2,..."
Quite a complicated API for this one. It sure would be good if PackageLabelsToPrint
was an optional field. Also there really needs to be a way to retrieve those carton strings later.
One simple API improvement to start would be to require the carton IDs to be counting integers starting with 1. If you don't use that convention, then it's incredibly difficult to associate your carton with the PDF label. This flaw in the API was laid out in the stackoverflow linked in comment 0 of this bug.
This is not mentioned at all on https://github.com/amzn/selling-partner-api-docs/blob/main/references/fulfillment-inbound-api/fulfillmentInboundV0.md#getlabels - at the very least it should be immediately documented as a best practice to always specify carton IDs as counting integers starting with 1.
Hello, has this problem been solved? I can download the PDF document with labelType=PALLET, but the document is blank
It works - it's just not very user-friendly.
它可以工作-并不是非常用户友好。
Must use labelType=UNIQUE and combine it with feed XML?
I wanna download the Japanese PDF file, but the pdf was only in English.
My marketplaceId is [A1VC38T7YXB528]
I have followed these steps.
**1. Create Feed document
I could download the pdf file but it's not Japanese.
Here is my downloaded PDF file in English
but I wanna the PDF file in Japanese.
How I can download the Japanese pdf file? Thanks!
Here is my code and solved this problem Carton upload and PDF download https://stackoverflow.com/questions/66098473/amazon-selling-partner-api-feed-encrypt-file-with-python/66361095#66361095
On Sat, May 22, 2021 at 4:11 PM kingsun-he @.***> wrote:
I wanna download the Japanese PDF file, but the pdf was only in English.
My marketplaceId is [A1VC38T7YXB528]
I have followed these steps.
1. Create Feed document 2. Create Feed with an XML file 3. Get Labels with PageType, LabelType, and PackageLabelsToPrint.
I could download the pdf file but it's not Japanese.
Here is my downloaded PDF file in English* [image: Screen Shot 2021-02-24 at 16 52 38] https://user-images.githubusercontent.com/25072337/109441594-fcbf6d00-7a78-11eb-8677-25fa2dbefd9f.png
but I wanna the PDF file in Japanese.* [image: Screen Shot 2021-03-01 at 10 29 40] https://user-images.githubusercontent.com/25072337/109441666-342e1980-7a79-11eb-9761-02f3e0bf63ee.png
How I can download the Japanese pdf file? Thanks!
Hi educatornum, Can you download the PDF file directly by browser? I called the function. I can get the DownloadURL. But when I try to download it by browser, it return "Expired" Error. Like this
AccessDenied
Request has expired 15 2021-05-22T02:53:01Z 2021-05-22T02:53:04Z 5GxxxxxxxYD I+OzRajJtTBkH3uFBwKxxxxxxxxxxxQTON8l+MmUqAi3PSyQ= — You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/amzn/selling-partner-api-models/issues/371, or unsubscribe https://github.com/notifications/unsubscribe-auth/AF7JFUITVYMYDNEJRDA2USLTO5KLDANCNFSM4WOPAXIQ .
Here is my code and solved this problem Carton upload and PDF download https://stackoverflow.com/questions/66098473/amazon-selling-partner-api-feed-encrypt-file-with-python/66361095#66361095
In your code, I don’t understand how the cartonid is obtained.
Hi, @jason1004
I followed these steps and could download a PDF file.
<?xml version="1.0" ?>
<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
<Header>
<DocumentVersion>1.01</DocumentVersion>
<MerchantIdentifier>ARI9W*****</MerchantIdentifier>
</Header>
<MessageType>CartonContentsRequest</MessageType>
<Message>
<MessageID>1</MessageID>
<CartonContentsRequest>
<ShipmentId>FBA15****</ShipmentId>
<NumCartons>1</NumCartons>
<Carton>
<CartonId>5555</CartonId>
<Item>
<SKU>TEST-001</SKU>
<QuantityShipped>1</QuantityShipped>
<QuantityInCase>1</QuantityInCase>
</Item>
</Carton>
</CartonContentsRequest>
</Message>
</AmazonEnvelope>
{'payload': {
'createdTime': '2021-02-24T07:43:22+00:00',
'feedId': '14795****',
'feedType': 'POST_FBA_INBOUND_CARTON_CONTENTS',
'marketplaceIds': ['A1VC38T7****'],
'processingStatus': 'DONE'}
}
Then I used the cartonID, I can download the get labels PDF file's URL
PackageLabelsToPrint is your cartonID you must set the CartonID here, looks like:
Good luck dude!
Hi , @educatornum
I understand. The cartonId comes from the box information submitted through the feeds api. But this design of SP API is not very reasonable. It is very different from GetPackageLabels in MWS:
In MWS, the cartonId is not required to be passed in, and the label can be obtained without the box information. SP API must upload the box information before getting the label.
If the seller uploads the box information in Amazon Center, where can I get the carton id?
Hi , @jason1004
I understand. The cartonId comes from the box information submitted through the feeds api. But this design of SP API is not very reasonable. It is very different from GetPackageLabels in MWS:
- In MWS, the cartonId is not required to be passed in, and the label can be obtained without the box information. SP API must upload the box information before getting the label.
- We submit box information through feed type: POST_FLAT_FILE_FROM_EXCEL_FBA_CREATE_CARTON_INFO. What is the cartonid in this case, and there is no cartonid in Excel.
Can you describe POST_FLAT_FILE_FROM_EXCEL_FBA_CREATE_CARTON_INFO in detail? thank you very much. I did not see the feed type in the official document: POST_FLAT_FILE_FROM_EXCEL_FBA_CREATE_CARTON_INFO
Hi, @jason1004
I agree with this SPA design.
I wish them to design better and easier to use
As I mentioned above, seemingly doing BoxContents on the web (or via another user) seemingly means it's impossible to download labels via SP-API. That's the core issue in bug amzn/selling-partner-api-models#371. That API needs a way to select cartonIds so @tokicnikolaus would know what IDs are valid as per his original bug report. (And the error message should point to exactly that.)
There is too much back-and-forth discussion in this ticket that would better belong in a forum, not a bug report. It would be helpful if you would delete most of the above discussion so hopefully the SPAPI maintainers can eventually read the core issue for this bug and understand it without being distracted.
I wanna download the Japanese PDF file, but the pdf was only in English.
My marketplaceId is [A1VC38T7YXB528]
I have followed these steps.
1. Create Feed document 2. Create Feed with an XML file 3. Get Labels with PageType, LabelType, and PackageLabelsToPrint.
I could download the pdf file but it's not Japanese.
Here is my downloaded PDF file in English
but I wanna the PDF file in Japanese.
How I can download the Japanese pdf file? Thanks! Hi, @educatornum Did you solve this problem?
Is there a resolution on this when using the web (UI), and without having to create a document feed? I'm getting the same error when attempting to retrieve LabelType.UNIQUE.
I get the following error message: "Provided SellerCartonIds are not valid: [[FBA165C4PL2FU000001]] for Shipment: [FBA165C4PL2F]".
I read in the comment above by @educatornum that the cartonId (aka PackageLabelsToPrint), according the link here, is constructed using the ShipmentId and adding U with six digit number characters (e.g. U000001). Does this apply to SP-API as well? Using this pattern as cartonId gave an error as mentioned above.
Is that where you mentioned that there's currently no way to print the label in SP-API when creating box contents on the Web (UI)?
Thank you for sharing that. Any comments from the SP-API development team?
No problem. FYI, I deleted my above comments that were responses to off-topic comments. I would reiterate to everyone on this ticket: can you please move these discussions to some other forum, or open a ticket about internationalization of labels? All these Japanese comments should be deleted from this ticket.
why has not the last anwser
I found a solution to get the download link for the shipments prepared using seller central web interface. When I requested the shipments from GET /fba/inbound/v0/shipments
endpoint, there is a field "LabelPrepType": "SELLER_LABEL"
. Instead of passing UNIQUE
to the LabelType
parameter, pass SELLER_LABEL
Sending the parameters like below worked for me. I downloaded the labels only having the shipment ID.
labelParams = {
"PageType": "PackageLabel_Plain_Paper",
"LabelType": "SELLER_LABEL",
"PageSize": 16,
"PageStartIndex": 0
}
These parameters are for the GET /fba/inbound/v0/shipments/{shipmentId}/labels
endpoint
I know "SELLER_LABEL" is not in the documentation but at this point, we all know this documentation is not well prepared 😄
Documentation states there are three options for LabelType
: BARCODE_2D
, UNIQUE
, PALLET
.
The problem of getting the shipment labels starts when we enter UNIQUE
into the LabelType
field. It asks for cartonIdList
aka PackageLabelsToPrint
which makes it impossible to retrieve the shipping labels if you only have the shipping id.
I'm saying that there is a fourth option, SELLER_LABEL
, which solves the problem of downloading the shipment labels only with the shipment ID.
Oh wow - neat find! So {'LabelType':'SELLER_LABEL','PageType':'PackageLabel_Thermal_NonPCP','PageSize': 1000, 'PageStartIndex':0}
returns every label in the shipment onto a single PDF. (Actually it even returns stickers for boxes that don't exist in the shipment if "1000" is greater than your actual box count. Strange bug.)
So SELLER_LABEL
is indeed a workaround or fix for this bug. It's a strange method though, because you have no control over which SKUs get printed etc.
Of special note, this SELLER_LABEL
method is seemingly also a workaround for bug amzn/selling-partner-api-models#406.
Oh wow - neat find! So
{'LabelType':'SELLER_LABEL','PageType':'PackageLabel_Thermal_NonPCP','PageSize': 1000, 'PageStartIndex':0}
returns every label in the shipment onto a single PDF. (Actually it even returns stickers for boxes that don't exist in the shipment if "1000" is greater than your actual box count. Strange bug.)So
SELLER_LABEL
is indeed a workaround or fix for this bug. It's a strange method though, because you have no control over which SKUs get printed etc.
Yes, I noticed that bug. And to work around that I used GET /fba/inbound/v0/shipmentItems
endpoint to get QuantityShipped
for each SKU. From there I calculated the exact PageSize
of the shipment. However, this works because we also ship a preset quantity for each SKU and never change it 😄
After obtaining the pdf, I parse the pdf and read the SKU on a page of the shipping label. Then I match the shipping label with the box belonging to that SKU. I know it's for a somewhat specific case. I just wanted to mention this in case it applies to someone else too.
Alright, I've been spending way too much time figuring this out. I kinda explain how this works. This feeds api is kinda annoying.
So to get the labels with labelType: "UNIQUE"
you need to submit a feed document namely POST_FBA_INBOUND_CARTON_CONTENTS
as others mentioned previously.
Now people. You need to realize that amazon needs couple of minutes to PROCESS this xml document. And then wait for the result and verify that amazon accepted this feed. If that did not happen then your feed is likely invalid.
收到,谢谢!!!(自动回复)
That encrypt/decrypt stuff is outdated. The new feed API doesn't use that anymore.
That encrypt/decrypt stuff is outdated. The new feed API doesn't use that anymore.
that might be, Anyhow I just provided the explanation (Probably should post a mental health helpline as well at this point lol) on why the UNIQUE labelType doesn't work and what the Provided SellerCartonIds are not valid:
error message actually means and how you can figure out the reason.
I am fairly sure it will help some finding this thread through google. As there's no explanation what so ever on the process.
收到,谢谢!!!(自动回复)
Oh wow - neat find! So
{'LabelType':'SELLER_LABEL','PageType':'PackageLabel_Thermal_NonPCP','PageSize': 1000, 'PageStartIndex':0}
returns every label in the shipment onto a single PDF. (Actually it even returns stickers for boxes that don't exist in the shipment if "1000" is greater than your actual box count. Strange bug.) SoSELLER_LABEL
is indeed a workaround or fix for this bug. It's a strange method though, because you have no control over which SKUs get printed etc.Yes, I noticed that bug. And to work around that I used
GET /fba/inbound/v0/shipmentItems
endpoint to getQuantityShipped
for each SKU. From there I calculated the exactPageSize
of the shipment. However, this works because we also ship a preset quantity for each SKU and never change it 😄After obtaining the pdf, I parse the pdf and read the SKU on a page of the shipping label. Then I match the shipping label with the box belonging to that SKU. I know it's for a somewhat specific case. I just wanted to mention this in case it applies to someone else too.
thank you very much , it's important information for me
@AisxLee that has nothing to do with this issue. Please delete that comment and move it to a new ticket.
ok, I created a new issue amzn/selling-partner-api-models#2925
Thank you @AisxLee for deleting the off-topic stuff. It would sure help if @shane186 @educatornum would also delete and move all the off-topic Japanese comments, if we're ever going to have any hope of an admin seeing the importance of the original issue.
I wanna download the Japanese PDF file, but the pdf was only in English. My marketplaceId is [A1VC38T7YXB528] I have followed these steps. 1. Create Feed document 2. Create Feed with an XML file 3. Get Labels with PageType, LabelType, and PackageLabelsToPrint. I could download the pdf file but it's not Japanese.
Here is my downloaded PDF file in English
but I wanna the PDF file in Japanese.
How I can download the Japanese pdf file? Thanks! Hi, @educatornum Did you solve this problem?
I met the same problem. I can't see the Japanese characters. There is blank.
I just was looking in to using the @ugurduzel above 'SELLER_LABEL'
undocumented workaround for bug amzn/selling-partner-api-models#387. It's worth noting that it won't work for inbound shipment with an "Exp" date, because 'SELLER_LABEL'
PDfs are missing that line (and also the SKU line). For any products that are required to have production dates on them (such as food and vitamins), the "Exp" is a required part of the label. I'm not sure if the SKU line is also required, but FBA has specifically confirmed the "Exp" line must be there.
(It's possible it could be added manually on top of Amazon's label, but now we're dealing with multiple levels of hacks upon hacks to workaround the bug amzn/selling-partner-api-models#387 issue.)
Also @kingsun-he please delete the off-topic comments regarding internationalization. That has nothing to do with this ticket.
收到,谢谢!!!(自动回复)
I just was looking in to using the @ugurduzel above
'SELLER_LABEL'
undocumented workaround for bug amzn/selling-partner-api-models#387. It's worth noting that it won't work for inbound shipment with an "Exp" date, because'SELLER_LABEL'
PDfs are missing that line (and also the SKU line). For any products that are required to have production dates on them (such as food and vitamins), the "Exp" is a required part of the label. I'm not sure if the SKU line is also required, but FBA has specifically confirmed the "Exp" line must be there.(It's possible it could be added manually on top of Amazon's label, but now we're dealing with multiple levels of hacks upon hacks to workaround the bug amzn/selling-partner-api-models#387 issue.)
Also @kingsun-he please delete the off-topic comments regarding internationalization. That has nothing to do with this ticket.
It may be worth noting that using 'SELLER_LABEL'
seems equivalent to the 'BARCODE_2D'
option where carton labels will come out in any order, and not tied to the order that you had packaged them in (and/or not tied to any Exp date as you noted). I tried both options (SELLER_LABEL vs BARCODE_2D) and the PDF labels were identical. My situation is that I package everything up on the front end, and assign each carton an ID. From what I've gathered I would need to submit an xml feed document via POST_FBA_INBOUND_CARTON_CONTENTS, and then wait for this to be processed, before I would be able to use the UNIQUE option and specify my own carton ID's (aka PackageLabelsToPrint) that I want to print. Does that sound right, @johnkw ?
收到,谢谢!!!(自动回复)
Yeah only the XML submit works correctly right now AFAIK.
@johnkw From what I've gathered, the XML submit via the feeds api is what assigns the carton ID's and assigns SKU's/qty to those cartons.
However, the disconnect seems to be that putTransportDetails sp-api call doesn't take a carton ID. So, how can we assign weights and dims to specific cartons if we cannot pass the carton ID in the putTransportDetails call? I know that specific carton ID's can be requested via the getLabels endpoint, but how are the weights and dims set for these cartons to begin with?
You're off into a separate topic that should be moved to a new ticket. Also all of the Japanese stuff should be deleted and moved elsewhere.
Perhaps, but my question is related to the workaround of the original issue. The original issue from Jan 22, 2021 was around Provided SellerCartonIds are not valid
. So, the workaround that you posted on Feb 4, 2021 was:
I got this to work after using a FEED. The undocumented thing that it wants is a comma-separated string of whatever you used in
for the POST_FBA_INBOUND_CARTON_CONTENTS.
But, upon using this workaround for getLabels
, how are we to supply the weights and dims of each carton by carton ID? Or, is this not possible? Or, are you saying this is indeed an issue and it is a separate bug?
This ticket has become so cluttered with off-topic "help me" posts that there's no hope of Amazon ever taking it seriously.
I found a solution to get the download link for the shipments prepared using seller central web interface. When I requested the shipments from
GET /fba/inbound/v0/shipments
endpoint, there is a field"LabelPrepType": "SELLER_LABEL"
.[... snip ...]
These parameters are for the
GET /fba/inbound/v0/shipments/{shipmentId}/labels
endpointI know "SELLER_LABEL" is not in the documentation but at this point, we all know this documentation is not well prepared 😄
I can't believe that you are not getting more thumbups. Man, YOU ARE A GENIUS! You have effectively prevented me from tearing my hair out and going bald!
By the way, I didn't make it clear. I did upload a carton content XML feed, and use the Carton ID in my XML feed to call getLabels, but whenever I use "UNIQUE", it came back with that infamous Provided SellerCartonIds are not valid error. I've tried using "1", ${ShipmentID}U000001
. and every other tricks that I could find but none of them worked. And, I only have ONE package in a shipment, not 1000.
I found a solution to get the download link for the shipments prepared using seller central web interface. When I requested the shipments from
GET /fba/inbound/v0/shipments
endpoint, there is a field"LabelPrepType": "SELLER_LABEL"
. [... snip ...] These parameters are for theGET /fba/inbound/v0/shipments/{shipmentId}/labels
endpoint I know "SELLER_LABEL" is not in the documentation but at this point, we all know this documentation is not well prepared 😄I can't believe that you are not getting more thumbups. Man, YOU ARE A GENIUS! You have effectively prevented me from tearing my hair out and going bald!
By the way, I didn't make it clear. I did upload a carton content XML feed, and use the Carton ID in my XML feed to call getLabels, but whenever I use "UNIQUE", it came back with that infamous Provided SellerCartonIds are not valid error. I've tried using "1",
${ShipmentID}U000001
. and every other tricks that I could find but none of them worked. And, I only have ONE package in a shipment, not 1000.
This method saved my life.
Hi there all,
I have problem here too. I can create shipment and get box label. I have 2 questions please help me with this. 1- Why do my labels show MixSkus wven i have only one Asin? 2 - How can i print items (asin) label? I couldnt find any information about it.
Thanks, Best regards
I have no previous experience with Amazon MWS so maybe I'm not understanding the whole process flow. Now I'm trying to get labels for shipments I manually created over the Seller Central UI. Shipments I created are successfully fetched (Operation: getShipments) and now I have issue when getting the labels.
Here is my error response from API:
If I print labels from UI FBAxxxxxxxxxU000001 label is printed in pdf - also found out about naming here
In general, I don't know where to find parameter of package labels
PackageLabelsToPrint
from GetLabelDocs also I'm not sure if this parameter is same ascartonIdList
parameter?Here are data if you don't provide
PackageLabelsToPrint
(in docs not required! ) query param in request: Headers and url:I spent a LOT of time on this already and it gets a bit annoying!
Thanks!