amz-tools / amazon-sp-api Goto Github PK
View Code? Open in Web Editor NEWAmazon Selling Partner API Client
License: MIT License
Amazon Selling Partner API Client
License: MIT License
CustomError: Client authentication failed at SellingPartner.refreshAccessToken (E:\Web Development Repos\sp-api\node_modules\amazon-sp-api\lib\SellingPartner.js:378:13) at processTicksAndRejections (internal/process/task_queues.js:93:5) at async SellingPartner._validateAccessTokenAndRoleCredentials (E:\Web Development Repos\sp-api\node_modules\amazon-sp-api\lib\SellingPartner.js:242:9) at async SellingPartner.callAPI (E:\Web Development Repos\sp-api\node_modules\amazon-sp-api\lib\SellingPartner.js:453:5) at async E:\Web Development Repos\sp-api\index.js:12:17 { code: 'invalid_client', type: 'error' }
We're receiving this regardless of operation called. I'm guessing this means that there's an issue with one of our environmental variables, but I've double checked everything.
Just to clarify:
SELLING_PARTNER_APP_CLIENT_ID= this is the LWA client id?
SELLING_PARTNER_APP_CLIENT_SECRET= this is the LWA client secret?
AWS_ACCESS_KEY_ID= The access key ID from the IAM user?
AWS_SECRET_ACCESS_KEY= the secret access key from the IAM user?
AWS_SELLING_PARTNER_ROLE= This is the full ARN for the IAM role?
Hi!
When i try to use the upload method after the use of the "createFeedDocument" i have a problem signing the request, i',m using the information recovered from the previous call, and this for the feed:
let feed = {
content:"<?xml version=\"1.0\" ?></xml>",
contentType:'text/xml; charset=utf-8'
}
This throws the following error:
CustomError: The request signature we calculated does not match the signature you provided. Check your key and signing method.
Somebody can help me with this? i don't know why doesn't work,
Below i paste the code used for testing the functionality:
(async() => {
try {
let sellingPartner = await new SellingPartnerAPI({
region:'eu', // The region of the selling partner API endpoint ("eu", "na" or "fe")
refresh_token:process.env.REFRESH_TOKEN // The refresh token of your app user
});
console.log(sellingPartner._credentials)
let feed_upload_details = await sellingPartner.callAPI({
operation:'createFeedDocument',
body:{
contentType:'text/xml; charset=UTF-8'
}
});
console.log(feed_upload_details);
let res = await sellingPartner.upload(feed_upload_details, feed);
console.log(feed_upload_details);
console.log(feed_creation_infos);
} catch(e){
console.log(e);
}
The question is not related to library, I need a help so thought to ask it here.
it's regarding parsing date of listing publication date, so the date is in format "23/09/2021 10:34:38 MEST" i want to convert it to UTC since different marketplace can have different timezone it's hard to parse it in JS with even libraries without having proper timezone name. Thanks for your comment in advance.
I saw it has type declaration files in lib/typings, but I'm still getting Cannot find module 'amazon-sp-api' or its corresponding type declarations.ts(2307)
.
"amazon-sp-api": "^0.3.5",
I am attempting to download a "GET_MERCHANT_LISTINGS_DATA_LITE" report, using SellingPartner.download(). The download succeeds and returns a tab delimited filed when passing no options object, or when {json: false}. When passing {json: true}, the function returns only '[]'. This does not happen for all reports, for example "GET_FLAT_FILE_OPEN_LISTINGS_DATA" reports download perfectly.
I've set up a client:
const sellingPartner = new SellingPartnerAPI({
region: 'eu',
refresh_token:
'<Censored>',
credentials: {
SELLING_PARTNER_APP_CLIENT_ID: '<censored>',
SELLING_PARTNER_APP_CLIENT_SECRET: '<censored>',
AWS_ACCESS_KEY_ID: '<censored>',
AWS_SECRET_ACCESS_KEY: '<censored>',
AWS_SELLING_PARTNER_ROLE: '<censored>',
},
});
And, this works well for getMarketplaceParticipation:
const res = await sellingPartner.callAPI({
operation: 'getMarketplaceParticipations',
endpoint: 'sellers',
});
console.log(res);
Gives nice output:
{
marketplace: {
id: 'AZMDEXL2RVFNN',
countryCode: 'GB',
name: 'SI UK Prod Marketplace',
defaultCurrencyCode: 'GBP',
defaultLanguageCode: 'en_GB',
domainName: 'siprodukmarketplace.stores.amazon.co.uk'
},
participation: { isParticipating: true, hasSuspendedListings: false }
}
But, if I try to call getOrderMetrics:
const resSales = await sellingPartner.callAPI({
operation: 'getOrderMetrics',
endpoint: 'sales',
query: {
marketplaceIds: ['A38D8NSA03LJTC'],
interval: '2020-10-01T00:00:00-07:00--2020-10-01T20:00:00-07:00',
granularity: 'Hour',
},
});
console.log(resSales);
I get the equivalent of "computer says no":
CustomError: Access to requested resource is denied.
at SellingPartner.callAPI (/node_modules/amazon-sp-api/lib/SellingPartner.js:592:13)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async main () {
code: 'Unauthorized',
details: '',
type: 'error'
}
Clearly my role, etc., must be setup right, or the first call would not work, I would assume? Any idea why this second call to getOrderMetrics fails?
My teams has been experiencing issues with retrieving any data from the listFinancialEvents
operation prior to 2019-04-01. We're just getting arrays. Our account has financial data all the way to 2016.
The 2019-04-01 is about 2 years from today. Does the listFinancialEvents
have a new limit now of 2 years? or is this just a coincidence?
We also tried utilized listFinancialEventsByOrderId
with an orderId that dated back to 2016 and it also returned a response full of empty arrays.
Anyone else having this issue?
Hello,
I'm trying to testing get ordermetrics, everything's gone well till i use an array of strings for marketplaceIds parametrer.
This is the req_params:
{ operation: 'getOrderMetrics', query: { granularity: 'Total', interval: '2021-03-31T00:00:00-07:00--2021-03-31T23:59:59-07:00', marketplaceIds: [ 'A13V1IB3VIYZZH', 'A1F83G8C2ARO7P', 'A1PA6795UKMFR9', 'A1RKKUPIHCS9HS', 'APJ6JRA9NG5V4' ] }, method: 'GET', api_path: '/sales/v1/orderMetrics', restore_rate: 2 }
and this is the error:
CustomError: Invalid Input at SellingPartner.callAPI (/var/www/djs-app/node_modules/amazon-sp-api/lib/SellingPartner.js:368:13) at processTicksAndRejections (internal/process/task_queues.js:93:5) { code: 'InvalidInput', details: '', type: 'error' }
I don't understand why it works with marketplaceIds: ['APJ6JRA9NG5V4'] and not with marketplaceIds: ['A13V1IB3VIYZZH','A1F83G8C2ARO7P','A1PA6795UKMFR9','A1RKKUPIHCS9HS','APJ6JRA9NG5V4']
Any ideas?
thank you so much
Daniele
how do I invoke shipping.getShipment and merchantFulfillment.getShipment api with operation?
Do i have to use the api_path to invoke it individually.
Hello,
There are some sellers that in their reports (for example, the merchant listings report), have more than 1500000 products, which implies that they exceed the node memory.
In the previous library we used with MWS there was an option to download the reports in "stream" mode, to go through the content and incorporate it progressively. Is there any way to do it with this package?
Thank you very much!
{ error: 'Access to the resource is forbidden' }
I get the following error when calling the getOrders operation:
2020-12-26T17:03:52.835Z 5531d3c3-8473-4da8-a4b2-034f137044c5 INFO CustomError: Access to requested resource is denied.
at SellingPartner.callAPI (/var/task/node_modules/amazon-sp-api/lib/SellingPartner.js:229:13)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
at async Runtime.exports.handler (/var/task/index.js:22:15) {
code: 'Unauthorized',
details: '',
type: 'error'
}
When running the same code for my own store: I get null object back for getOrders - meaning its all working end to end.
When I try to get the getOrder for a clients store, where we got the spapi_auth correctly, and generated the refresh_token successfully, we hit the error. Unfortunately I only have one clients store to try it out.
BTW, what is also interesting is that, I did get the result early in the morning with my clients store. I did not change anything, and hence I am a little lost as to what could be throwing this error.
Can be fixed by calling the encodeURIComponent
method for parameter values. (In that case for SKUs)
API Endpoint productPricing
Operation getPricing
Query
{ query: { Skus: [<Some SKU With slash/44>], ItemType: 'Sku', MarketplaceId: <Some Marketplace Id> }
version: 'v0'
Error:
Error: Invalid Input
at SellingPartner.callAPI (/Users/Documents/projects/pricing-platform/amazon-integration-plugin/node_modules/amazon-sp-api/lib/SellingPartner.js:574:13)
I'm trying to migrate our application from MWS to SP-API hybrid.
We are using "fe" region and Japan marketplace id "A1VC38T7YXB528"
I saw issue #34 and I check the setting on seller central, I changed existing application to a hybrid type and assign IAM to get LWA client ID and Secret.
I use this endpoint
let res = await sellingPartner.callAPI({ operation:'getMarketplaceParticipations', endpoint:'sellers' }); console.log(res);
This is what I get from response.
CustomError: Access to requested resource is denied.
at SellingPartner.callAPI (C:\Users\James Lin\Workspace\amz-sp-api-demo\node_modules\amazon-sp-api\lib\SellingPartner.js:572:13)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at async C:\Users\James Lin\Workspace\amz-sp-api-demo\index.js:19:19 {
code: 'Unauthorized',
details: '',
type: 'error'
}
I check my Access Key on AWS, it shows Last Usage is "2021-06-11 10:30 PDT with sts in us-east-1", but base on the document region fareast "fe" host region should be us-west-2.
Is this the reason causing this issue? Where should I change? My understanding is that IAM doesn't have the region.
Thanks for your help.
Hello! Is there a way to add sandbox mode?, I've been working on this library for an while but I can't make it work.
I was adding a boolean sandbox variable in SellingPartner.js, which is passed to Signer.js (only for signing requests not request of credentials) and finally to the request.js , all it does is add "sandbox." string at the begining of the URL, asi in the documentation.
But I'm getting
CustomError: We encountered an internal error. Please try again.
at SellingPartner.callAPI (/var/www/nodes/oadmin/node_modules/amazon-sp-api/lib/SellingPartner.js:234:13)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
at async Object.exports.getOrdersAmazon (/var/www/nodes/oadmin/dist/router-mongo/amazon/amazon.helper.js:152:15)
at async /var/www/nodes/oadmin/dist/router-mongo/amazon/amazon.helper.js:284:28 {
code: 'InternalFailure',
type: 'error'
}
Any hints? I was planning to finish this feature and make a PR, seams like a very simple feature but so helpful.
It would be really helpful to pass in config information via another way instead of using a file or environment variables. These two options will not work for firebase functions since you can't utilize the file system nor environment variables.
Is there any plan to add TypeScript types across the package?
My team uses TypeScript and are very interested in using this package going forward. We would love to see types here to make the package easier to work with. If there are not plans to add types, would you be open to us making a PR to add some in the future?
Hi, I have seen that in the documentation there are several references to the upload() function for uploading feeds, but it is not declared in the typescript, is this correct?
Hello,
How to update the quantity of inventory products?
Hello I want to call create destination in notifications api but can't find what prameters to pass to callApi funtion. Could you help me?
I am passing all the credentials as below and calling the SP-API for getinventory summary API.SELLING_PARTNER_APP_CLIENT_ID=<YOUR_APP_CLIENT_ID>
SELLING_PARTNER_APP_CLIENT_SECRET=<YOUR_APP_CLIENT_SECRET>
AWS_ACCESS_KEY_ID=<YOUR_AWS_USER_ID>
AWS_SECRET_ACCESS_KEY=<YOUR_AWS_USER_SECRET>
AWS_SELLING_PARTNER_ROLE=<YOUR_AWS_SELLING_PARTNER_API_ROLE>
But I am getting the below error.
Custom Error: Access to requested resource is denied.
Should I use the access_key and secret that is tied to my IAM user or should I get the keys from assumeRole command (in CLI) and use that in the nodejs ?
(I do not see any issue with the client_id or refresh_token credentiaks since I am able to get the access_token when trying the API (/auth/o2/token?grant_type=refresh_token).
I am kind of stuck here. Any help please.
Hey
Do you think it would be possible to add an example of how to do oAuth using the SP API to the docs based off https://github.com/amzn/selling-partner-api-docs/blob/main/guides/developer-guide/SellingPartnerApiDeveloperGuide.md#website-workflow
Thanks!
Hi,
Any idea with this error:
CustomError: Access to requested resource is denied.
at SellingPartner.callAPI (/Users/k/node_modules/amazon-sp-api/lib/SellingPartner.js:503:13)
at processTicksAndRejections (node:internal/process/task_queues:94:5)
at async /Users/k/Y/Lister/amz-sp-api-node.js:17:15 {
code: 'Unauthorized',
details: '',
type: 'error'
}
Here are the codes we use:
const SellingPartnerAPI = require("amazon-sp-api");
(async () => {
try {
console.log(process.env);
let sellingPartner = new SellingPartnerAPI({
region: "na",
refresh_token: process.env.AMZ_SP_API_REFRESH_TOKEN,
credentials: {
SELLING_PARTNER_APP_CLIENT_ID: process.env.SELLING_PARTNER_APP_CLIENT_ID,
SELLING_PARTNER_APP_CLIENT_SECRET: process.env.SELLING_PARTNER_APP_CLIENT_SECRET,
AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY,
AWS_SELLING_PARTNER_ROLE: process.env.AWS_SELLING_PARTNER_ROLE
},
});
let res = await sellingPartner.callAPI({
operation:'getMarketplaceParticipations'
});
console.log(res);
} catch (e) {
console.log(e);
}
})();
We tried other operations too, but all of them return the same error. We can access the MWS API just fine. But, we don't have active Amazon Seller Account (is this an issue?)
I keep getting Access to requested resource is denied
when call getDestinations
operation.
I'm sure i have access because orderMatrix
and getMarketplaceParticipations
works as expected.
(async () => {
const sp = new SellingPartnerAPI({
region: 'na',
refresh_token: 'token',
});
await sp.refreshAccessToken();
await sp.refreshRoleCredentials();
const res = await sp.callAPI({ operation: 'getDestinations' });
console.log(JSON.stringify(res));
})();
// Error: Access to requested resource is denied.
I get this error: "This is an invalid input" when calling getMyFeesEstimateForASIN
sellingPartner.callAPI({
operation: 'getMyFeesEstimateForASIN',
endpoint: 'productFees',
path:{
Asin: asin,
},
});
Following the instruction https://www.npmjs.com/package/amazon-sp-api#encrypt-and-upload-feeds
There is an option to upload feed data as a string.
For example:
let feed = {
content:`<?xml version="1.0" encoding="utf-8"?>
<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
<Header>
<DocumentVersion>1.02</DocumentVersion>
<MerchantIdentifier>YOUR_MERCHANT_IDENTIFIER</MerchantIdentifier>
</Header>
<MessageType>Inventory</MessageType>
<Message>
<MessageID>1</MessageID>
<Inventory>
<SKU>YOUR_SKU</SKU>
<Quantity>10</Quantity>
</Inventory>
</Message>
</AmazonEnvelope>`,
contentType:'text/xml; charset=utf-8'
}
const feedUploadDetails = {
feedDocumentId: '3d4e42b5-1d6e-44e8-a89c-2abfca0625bb',
url: 'https://d34o8swod1owfl.cloudfront.net/Feed_101__POST_PRODUCT_DATA_.xml'
}
let res = await sellingPartner.upload(feed_upload_details, feed);
The error is thrown in the case
TypeError [ERR_INVALID_ARG_TYPE]: The "list" argument must be an instance of Array. Received type string ('<?xml version="1.0" enco...)
Looks like on the line (https://github.com/amz-tools/amazon-sp-api/blob/main/lib/SellingPartner.js#L690) we need to have
something like:
content_buffer = Buffer.concat([Buffer.from(feed_content)]);
instead of
content_buffer = Buffer.concat(feed_content);
All the resources found in here are missing a /
at the start of the api_path
- https://github.com/amz-tools/amazon-sp-api/blob/main/lib/resources/orders.js
This results in the following error:
Error: getaddrinfo ENOTFOUND sellingpartnerapi-eu.amazon.comorders
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) {
errno: 'ENOTFOUND',
code: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'sellingpartnerapi-eu.amazon.comorders'
}
Hi,
thanks for your great work. It helped a lot.
I think, for operation 'getMyFeesEstimateForASIN' there is a wrong URI.
In lib/resources/productFees.js, you wrote
But according to documentation, api_path should be:
api_path: '/products/fees/v0/items/' + req_params.path.Asin + '/feesEstimate'
Would be great to fix that, thanks.
Thanks for creating amazon-sp-api. I'm just getting started trying to use the sp-api and it has been super helpful.
I'm running into some issues getting product attributes from the catalogItem endpoint and was wondering if anyone could help point me in the right direction. Right now my API call looks like this:
await sellingPartner.callAPI({
operation: "getCatalogItem",
endpoint: "catalogItems",
query: {
marketplaceIds: ["ATVPDKIKX0DER"],
includedData: ["attributes"],
},
path: {
asin: <my_asin>,
},
options: {
version: "2020-12-01",
},
});
If I make the request on asins of certain brands we sell I get this error:
CustomError: FORBIDDEN
...
...
...
...
details: 'The includedData requested requires Brand Registry affiliation with the requested item. Remove the requested includedData item or register the brand of the item in Brand Registry with the seller.',
type: 'error'
}
Is there a way to set the sellerId? I think the issue is because we are identified as the owner of multiple brands, and it's not assuming the correct sellerId.
As the development of the Sellingpartner API is largely in progress by Amazon, there are quite a lot of changes and updates coming. We try to keep up with all new features/changes coming from Amazon, but if you find some things not working as expected or you have an idea of a feature that would be helpful and a good addition to the client you are very much welcome to open up a PR. We will try to review and include the PR inside the module as soon as possible, usually in a couple of days.
Some possible features for a PR could be i.e.:
security_token
and/or access_token
when throwing an invalid/malformed/revoked error (see Issue #57)createReport
, getReport
, getReportDocument
, download
all wrapped up in a convenient single call)Hello there!
We've been using the library for a few months and it has worked nicely for us. Right now we're facing some issues with Amazon's API that we can't find a solution for and we'd like to ask them what's going on. However, in order to do this, we need to send them the request IDs of the specific requests that we see go wrong, but we don't see them anywhere when making the requests through this library. Is there a way we can get the request IDs for our calls?
Thanks in advance.
Hallo...
I sell my product by email. so how can I inform amazon(FBM) by API ? my product is delivered.
const getOrderItemBuyer = async (orderId) => {
(async () => {
try {
let res = await sellingPartner.callAPI({
api_path: /orders/v0/orders/${orderId}/orderItems/buyerInfo
,
method: "GET",
query: {
MarketplaceId: "ATVPDKIKX0DER",
},
restricted_data_token:"my token from create RDT"
});
console.log(JSON.stringify(res));
} catch (e) {
console.log(e);
}
})();
};
My response:
CustomError: Access to requested resource is denied.
If Remove params restricted_data_token, API working, why ?
Please help me
When I use the Item Offers API (operation getItemOffers), it will give a handful of LowestPrices and BuyboxPrices, but only show maybe 5 total offers. In the NumberOfOffers array however, it says there should be 50+ offers.
Is there a different API to view more of the offers? Or any query parameters to utilize?
Hi
I am working on create Solicitation API , But it provide me Error that marketplaceIds is missing or invalid,
When I check the code of npm repository I saw the marketplaceIds is not added in API route ,
We are able to create Solicitation by postman . The Example of request URL is
https://sellingpartnerapi-eu.amazon.com/solicitations/v1/orders/{orderId}/solicitations/productReviewAndSellerFeedback?marketplaceIds={marketpalaceId}
And After adding marketpalaceId in node module of amazon-sp-api in Create Solicitation the Error Changes to
The request signature we calculated does not match the signature you provided.
But by postman we are able to create Solicitation with same AWS credentials.
Hey @amz-tools, we've been experiencing one of the known issues that is mentioned on your repo/library.
We've utilized the raw response option but we're pretty lost on how to actually handle the parsing properly.
Any idea what the best way to handle these type of errors?
Keep getting Unauthorized
error using sample requests in docs. Should these examples work?
I'm trying to work out if I'm not authenticating properly or whether the API endpoint is giving the error as I'm trying to request data that I don't have access to (as it's your data)
Using a brand new marketplace seller account / no products / data.
CustomError: Access to requested resource is denied.
at SellingPartner.callAPI (/Users/steven/Documents/boilerplate/versiontwo/node_modules/amazon-sp-api/lib/SellingPartner.js:203:13)
at processTicksAndRejections (node:internal/process/task_queues:93:5)
at /Users/steven/Documents/boilerplate/versiontwo/packages/amazon/lib/SP-api.ts:19:19 {
code: 'Unauthorized',
details: '',
type: 'error'
}
require("dotenv").config();
require("source-map-support").install();
import SellingPartnerAPI from "amazon-sp-api";
(async () => {
try {
const sellingPartner = new SellingPartnerAPI({
region: "eu",
refresh_token:
"XXX",
options: {
auto_request_tokens: true,
auto_request_throttled: true,
},
});
let res = await sellingPartner.callAPI({
operation: "createReport",
body: {
reportType: "GET_FLAT_FILE_OPEN_LISTINGS_DATA",
marketplaceIds: ["A1PA6795UKMFR9"],
},
});
console.log(res);
} catch (e) {
console.log(e);
}
})();
Hello together,
we are trying to call the Order-API with e.g. getOrderBuyerinfo, getOrderArddress or getOrder... but it will always result in the same error: "code": InvalidInput"
.
We are using the "eu" region.
Calls to the catalogAPI are working fine.
Is there a known issue or any idea whats could be the problem here?
If u need futher informations let me know.
Thank you very much.
Are there any plans to add tests to the package?
My team is a big proponent of automated testing and noticed this package does not yet have any. We're interesting in using the package going forward and think it would be beneficial to have tests here to verify the functionality as new features are added and changed. If there are not plans for this, would you be open to us making a PR down the line to add tests?
We're building an app that loops a bunch of different ASINS and makes different API calls on each one. Everything works fine if it's just running up to 300 ASINS. However, if we try to run 800+ it starts giving this error:
CustomError: Access to requested resource is forbidden
Do I need to be doing rate limiting of some sort? Or is there another possible issue here?
Thanks for creating this library for us to use!
We're currently trying to get our FBA inventory through the getInventorySummaries operation but we're finding that it only gives us a handful of items and the quantities are way off.
Is anyone experiencing this as well?
Hi! I'm trying to make a createFeedDocument operation but the signature doesn't match.
I have been looking at some closed issues (from this library and also from the SP-API), and the error is similar from This closed issue, nevertheless, both content types of my request are the same.
code
let feed = {
content:"<?xml version="1.0" encoding="utf-8"?>"
contentType:"text/xml; charset=utf-8"
};
let feed_upload_details = await sellingPartner.callAPI({
operation:"createFeedDocument",
body:{
contentType:feed.contentType
//I have tried typing directly "text/xml; charset=utf-8"
}
});
console.log(feed_upload_details);
let report = await sellingPartner.download(feed_upload_details);
log of feed_upload_details
{ encryptionDetails:
{ standard: 'AES',
initializationVector: 'rXLA88xa2w08qyciDOsAkw==',
key: 'BJchi...' },
feedDocumentId:
'amzn1.tortuga.3.2565a8da-1d07-49ad-80cf-da834d5d3ed2.T1Y139K3PX9PFI',
url:
'https://tortuga-prod-eu.s3-eu-west-1.amazonaws.com/%2FNinetyDays/amzn1.tortuga.3.2565a8da...' }
error of report(download operation)
{ Error: The request signature we calculated does not match the signature you provided. Check your key and signing method.
at SellingPartner._validateUpOrDownloadSuccess (/)
at SellingPartner.download (/)
at process._tickCallback (internal/process/next_tick.js:68:7)
code: 'SignatureDoesNotMatch',
message:
'The request signature we calculated does not match the signature you provided. Check your key and signing method.',
type: 'error' }
The URL goes to a most extensive error report (SignatureDoesNotMatch), where the most useful information is that the string to sign has this format:
AWS4-HMAC-SHA256 20210422T061142Z 20210422/eu-west-1/s3/aws4_request cd3fcaa53c9938740839d92bbdaa12275e2c4a5e481d744ff9aa74129f098291
And the Signature provided:
af97666f7c47a9198e02ebff79c042758d4d854667f8dc91c5d5123a45a00736
Another useful information from the URL:
<Canonical Request>
GET //NinetyDays/amzn1.tortuga...
...
content-type: host:tortuga-prod-eu.s3-eu-west-1.amazonaws.com content-type;host UNSIGNED-PAYLOAD
</Canonical Request>
Thank you very much!
let catalogItem = await sellingPartner.callAPI({
operation:'listCatalogItems',
endpoint:'catalogItems',
query:{
MarketplaceId:'ATVPDKIKX0DER'
},
options:{
version:'2020-12-01'
}
});
My response:
CustomError: Required parameter IdType not found.
What is IdType? Please help me.
Thank you in advance for your help.
Hello, I'm getting The security token included in the request is invalid
error and when I log the securit token I get this : security_token: 15
. What's the problem?
?
Hi @amz-tools,
Thanks for this library, it's really useful and good job!
I want to update the inventory price. I tried 4 different ways but neither worked.
Am I missing something?
I'm working in the European zone.
listingsItems.patchListingsItem
request
.callAPI({
operation: 'listingsItems.patchListingsItem',
path: { sku:[sku], sellerId:[sellerId] },
query: { marketplaceIds: [marketPlaceId], issueLocale: 'en_US' },
body: { productType: 'PRODUCT', patches: [{ op: 'replace', path: '/attributes/item-price', value: 19.99 }] },
})
response
code:'InternalFailure'
details:''
message:'We encountered an internal error. Please try again.'
type:'error'
My opinion: I think this endpoint has not been implemented yet for Europe.
JSON_LISTINGS_FEED
const feedType = 'JSON_LISTINGS_FEED';
const content = {
header: {
sellerId: aspConfig.sellerId,
version: '2.0',
issueLocale: 'en_US',
},
messages: [
{
messageId: 1,
sku: sku,
operationType: 'PATCH',
productType: 'PRODUCT',
patches: [{ op: 'replace', path: '/attributes/listing-price', value: [{ value: price }] }],
},
],
};
const contentType = 'application/json; charset=UTF-8';
const feedUploadDetails = await spService.callAPI({ operation: 'feeds.createFeedDocument', body: { contentType } });
await spService
.upload(feedUploadDetails, JSON.stringify(content), contentType)
.then(res => console.log(res))
.catch(err => console.log(err));
const inputFeedDocumentId = feedUploadDetails.feedDocumentId;
return spService
.callAPI({
operation: 'feeds.createFeed',
body: { feedType, marketplaceIds: [marketPlace.id], inputFeedDocumentId },
})
.then(res => console.log(res))
.catch(err => console.log(err));
The feed document was uploaded successfully and also the feed was created successfully, but the status of the feed is IN_PROGRESS for 12 hours.
createdTime:'2021-07-16T07:42:27+00:00'
feedId:'138122018824'
feedType:'JSON_LISTINGS_FEED'
marketplaceIds:(1) ['A1PA6795UKMFR9']
processingStartTime:'2021-07-16T07:42:35+00:00'
processingStatus:'IN_PROGRESS'
My opinion: I think this feed is related to listingsItems.patchListingsItem at the backend so may has the same problem.
feeds: POST_FLAT_FILE_INVLOADER_DATA & POST_FLAT_FILE_PRICEANDQUANTITYONLY_UPDATE_DATA
const feedType = 'POST_FLAT_FILE_INVLOADER_DATA'; // or 'POST_FLAT_FILE_PRICEANDQUANTITYONLY_UPDATE_DATA'
const content = `sku price\n${sku} ${price}`;
const contentType = 'text/tab-separated-values; charset=UTF-8';
const feedUploadDetails = await spService.callAPI({ operation: 'feeds.createFeedDocument', body: { contentType } });
await spService
.upload(feedUploadDetails, content, contentType)
.then(res => console.log(res))
.catch(err => console.log(err));
const inputFeedDocumentId = feedUploadDetails.feedDocumentId;
await spService
.callAPI({
operation: 'feeds.createFeed',
body: { feedType, marketplaceIds: [marketPlace.id], inputFeedDocumentId },
})
.then(res => console.log(res))
.catch(err => console.log(err));
feeds status:
{ createdTime:'2021-07-17T19:12:48+00:00'
feedId:'139649018825'
feedType:'POST_FLAT_FILE_INVLOADER_DATA'
marketplaceIds:(1) ['A1PA6795UKMFR9']
processingStatus:'IN_QUEUE'
}
{
createdTime:'2021-07-17T16:52:53+00:00'
feedId:'139397018825'
feedType:'POST_FLAT_FILE_PRICEANDQUANTITYONLY_UPDATE_DATA'
marketplaceIds:(1) ['A1PA6795UKMFR9']
processingStatus:'IN_QUEUE'
}
I think I'm going to lose the remaining half of my hair because of seller-partner-api and it's documentation.
Thanks for your help
Hello,
first off all, big thanks to this well made script. We every much appreciate it!
Just a short question:
Must the script be updated due the current change of the Order API section? According to Amazon, you can now get BuyerInfo and Address via the "GetOrder(s)" call, if you make the call with a RDT token.
Thank you very much and kind regards
Hi @amz-tools,
I'm trying to get product fees.
I haven't any problem with other countries (FR, IT, ES, DE) but GB does not work, I'm getting this response:
{
"FeesEstimateResult": {
"Status": "ClientError",
"FeesEstimateIdentifier": {
"MarketplaceId": "A1F83G8C2ARO7P",
"IdType": "ASIN",
"SellerId": "XXXXX",
"SellerInputIdentifier": "56f1174c-b87b-4247-8db5-3ca3798faa1d",
"IsAmazonFulfilled": true,
"IdValue": "B00SLIMMHW",
"PriceToEstimateFees": {
"ListingPrice": {
"CurrencyCode": "EUR",
"Amount": 20
},
"Shipping": {
"CurrencyCode": "EUR",
"Amount": 0
}
}
},
"Error": {
"Type": "Sender",
"Code": "InvalidParameterValue",
"Message": "There is an client-side error. Please verify your inputs.",
"Detail": []
}
}
}
The error message is not clear. All parameters (except MarketplaceId) are the same with other countries but do not work.
Do you have any idea?
Thanks !!
Hiya!
(Vue/NuxtJS)
I'm able to get an output by console logging the response, but it comes with this error:
I'm currently using the amazon-sp-api through a js file that's imported to the Vue instance through Nuxt plugins.
I'm not sure if it's because of that way im using it, and maybe Vue is doing something to it, or if i've made a silly mistake in where i put it (but i've already had some issues like with the env vars not being available before the plugin is run).
Someone successful using the POST_ORDER_FULFILLMENT_DATA
feed to update the Order Status to shipped
?
Can please someone provide an example of the Feed XML?
Also can I update more than one Order with this Feed?
Because there is also the POST_FLAT_FILE_FULFILLMENT_DATA
Feed ...
Currently I'm testing with this Feed XML
<?xml version="1.0" encoding="utf-8"?>
<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
<Header>
<DocumentVersion>1.02</DocumentVersion>
<MerchantIdentifier>XXX</MerchantIdentifier>
</Header>
<MessageType>OrderFulfillment</MessageType>
<Message>
<MessageID>1</MessageID>
<OrderFulfillment>
<AmazonOrderID>XXX-XXXXXX-XXXXXX</AmazonOrderID>
<FulfillmentDate>2021-02-28T12:34:56</FulfillmentDate>
</OrderFulfillment>
</Message>
</AmazonEnvelope>
but I'm not sure if it's correct like that ... I used the Schema and tried to reproduce the given example in the Docs.
Also, can I see any details of a Feed Report?
I'm getting:
{
processingEndTime: '2021-02-28T12:14:49+00:00',
processingStatus: 'DONE',
marketplaceIds: [ 'A1PA6795UKMFR9' ],
feedId: 'XXXXXXXX',
feedType: 'POST_ORDER_FULFILLMENT_DATA',
createdTime: '2021-02-28T12:14:25+00:00',
processingStartTime: '2021-02-28T12:14:31+00:00',
resultFeedDocumentId: 'amzn1.tortuga.3.9690c3e4-802b-4baa-8b62-XXX...'
}
but when I use the resultFeedDocumentId
for the getFeedDocument
call - I get the same response as for createFeedDocument
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.