{"openapi":"3.1.0","info":{"title":"NinjaBuy Links API","version":"1.0.0"},"servers":[{"url":"https://www.ninjabuy.com"}],"security":[{"ninjaBuyOAuth":["openid"]},{"ninjaBuyApiKey":[]}],"components":{"securitySchemes":{"ninjaBuyApiKey":{"type":"http","scheme":"bearer","description":"Personal API key (nb_ prefix). Valid until revoked in Account → Get paid → API keys, or until the lifetime picked when it was created ends."},"ninjaBuyOAuth":{"type":"oauth2","description":"The same NinjaBuy OAuth access token as MCP. Authorization code flow requires PKCE S256; headless callers send the access token as Authorization: Bearer <token>.","flows":{"authorizationCode":{"authorizationUrl":"https://www.ninjabuy.com/api/auth/mcp/authorize","tokenUrl":"https://www.ninjabuy.com/api/auth/mcp/token","scopes":{"openid":"Sign in to NinjaBuy","offline_access":"Refresh the access token"}}}}}},"paths":{"/api/v1/search":{"get":{"operationId":"searchProducts","summary":"Search the storefront or resolve a pasted link without writing history","parameters":[{"name":"q","in":"query","required":true,"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"string","minLength":2,"maxLength":2048}},{"name":"page","in":"query","required":false,"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","default":"0","type":"string","pattern":"^\\d{1,6}$"},"description":"Zero-based page number"},{"name":"provider","in":"query","required":false,"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","default":"taobao","type":"string","enum":["taobao","a1688"]}}],"responses":{"200":{"description":"Typed storefront search outcome; price.amount is decimal CNY","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"request_id":{"type":"string"},"kind":{"type":"string","const":"products"},"items":{"type":"array","items":{"type":"object","properties":{"handle":{"type":"string"},"url":{"type":"string"},"title":{"type":"string"},"price":{"type":"object","properties":{"amount":{"type":"string"},"currency":{"type":"string","const":"CNY"}},"required":["amount","currency"],"additionalProperties":false},"image":{"type":["string","null"]},"marketplace":{"type":"string","enum":["taobao","a1688"]}},"required":["handle","url","title","price","image","marketplace"],"additionalProperties":false}},"page":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pageSize":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"totalCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maximumPageCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"unread":{"anyOf":[{"type":"object","properties":{"host":{"type":"string"}},"required":["host"],"additionalProperties":false},{"type":"null"}]}},"required":["request_id","kind","items","page","pageSize","totalCount","maximumPageCount","unread"],"additionalProperties":false},{"type":"object","properties":{"request_id":{"type":"string"},"kind":{"type":"string","const":"product"},"handle":{"type":"string"},"url":{"type":"string"}},"required":["request_id","kind","handle","url"],"additionalProperties":false},{"type":"object","properties":{"request_id":{"type":"string"},"kind":{"type":"string","const":"vendor"},"vendor":{"type":"string"}},"required":["request_id","kind","vendor"],"additionalProperties":false},{"type":"object","properties":{"request_id":{"type":"string"},"kind":{"type":"string","const":"sheet"},"sheetId":{"type":"string"},"gid":{"type":["string","null"]}},"required":["request_id","kind","sheetId","gid"],"additionalProperties":false},{"type":"object","properties":{"request_id":{"type":"string"},"kind":{"type":"string","const":"unsupported"},"link":{"type":"object","properties":{"marketplace":{"type":"string","enum":["1688","taobao","tmall","weidian"]},"id":{"type":"string"}},"required":["marketplace","id"],"additionalProperties":false}},"required":["request_id","kind","link"],"additionalProperties":false}]}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"RateLimit-Policy":{"description":"Keyword searches only; resolved pastes spend no search slot","schema":{"type":"string","example":"\"search\";q=30;w=60"}},"RateLimit":{"schema":{"type":"string","example":"\"search\";r=29;t=60"}}}},"400":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"401":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Bearer challenge with the same resource_metadata discovery URL as MCP","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"404":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"405":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Allow":{"schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"409":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying or polling","schema":{"type":"integer","minimum":1}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"413":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"415":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"422":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"429":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying or polling","schema":{"type":"integer","minimum":1}},"RateLimit-Policy":{"schema":{"type":"string","example":"\"search\";q=30;w=60"}},"RateLimit":{"schema":{"type":"string","example":"\"search\";r=0;t=60"}}}},"500":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"503":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying or polling","schema":{"type":"integer","minimum":1}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}}}}},"/api/v1/links":{"post":{"operationId":"createLinks","summary":"Create links crediting the signed-in NinjaBuy account","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Per-account key. Within 24 hours an identical validated request replays its original status, body and headers without charging the rate window. A different payload or route returns 422; an in-flight request returns 409.","schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[ -~]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"links":{"minItems":1,"maxItems":2000,"type":"array","items":{"type":"string","minLength":1,"maxLength":4096},"description":"Links to convert: product links, short links, a Weidian shop, or NinjaBuy pages (a full URL or a bare path such as /vendors/<handle>, /spreadsheets/d/<sheet id>, /search?q=…). Up to 100 are answered at once; 101 to 2000 run as a batch job."},"async":{"description":"When true, starts a batch job even for 100 links or fewer and returns job metadata instead of inline results.","type":"boolean"},"campaign":{"description":"Optional name for this batch, 3 to 64 lowercase letters, digits or hyphens (for example cr-w1-spring-sheet). The same target under a different campaign gets a different link; visits through it carry the campaign as utm_campaign.","type":"string","pattern":"^[a-z0-9][a-z0-9-]{2,63}$"},"label":{"description":"Optional name for these links on the user's list, 1 to 40 characters (for example \"bio link\"). The same target under a different label gets a different link.","type":"string"}},"required":["links"],"additionalProperties":false}}}},"responses":{"200":{"description":"All results in input order","headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF structured field describing the shared MCP and REST quota","schema":{"type":"string","example":"\"create-links\";q=30;w=60"}},"RateLimit":{"description":"IETF structured field: remaining calls and seconds until a slot frees","schema":{"type":"string","example":"\"create-links\";r=29;t=60"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string"},"status":{"type":"string","enum":["ok","unsupported","unreadable","sheet"],"description":"ok: converted. unsupported: a link NinjaBuy understands but cannot link (another marketplace, a private NinjaBuy page). unreadable: nothing could be read from it. sheet: a Google Sheet, which this tool does not convert yet."},"target":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"product"},"handle":{"type":"string"}},"required":["kind","handle"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"generic"}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"vendor"},"handle":{"type":"string"}},"required":["kind","handle"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"sheet"},"sheetId":{"type":"string"},"gid":{"type":"string"}},"required":["kind","sheetId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"search"},"query":{"type":"string"},"provider":{"type":"string"}},"required":["kind","query"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"page"},"path":{"type":"string"}},"required":["kind","path"],"additionalProperties":false}],"description":"What the link opens: a product, the home page (generic), a seller (vendor), a finds sheet, a search, or another storefront page."},"url":{"description":"The NinjaBuy link, when status is ok.","type":"string"},"code":{"type":"string"},"note":{"description":"Why it was not converted.","type":"string"}},"required":["input","status"],"additionalProperties":false}},"warnings":{"type":"array","items":{"type":"string"}},"request_id":{"type":"string"}},"required":["results","warnings","request_id"],"additionalProperties":false}}}},"202":{"description":"Batch queued; follow Location after Retry-After seconds","headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF structured field describing the shared MCP and REST quota","schema":{"type":"string","example":"\"create-links\";q=30;w=60"}},"RateLimit":{"description":"IETF structured field: remaining calls and seconds until a slot frees","schema":{"type":"string","example":"\"create-links\";r=29;t=60"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}},"Retry-After":{"description":"Seconds to wait before retrying or polling","schema":{"type":"integer","minimum":1}},"Location":{"description":"Relative URL of the new batch job","schema":{"type":"string","format":"uri-reference"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"job":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","const":"link_mints"},"status":{"type":"string","const":"queued"},"total":{"type":"number"},"poll_after_seconds":{"type":"number"}},"required":["id","kind","status","total","poll_after_seconds"],"additionalProperties":false},"warnings":{"type":"array","items":{"type":"string"}},"request_id":{"type":"string"}},"required":["job","warnings","request_id"],"additionalProperties":false}}}},"400":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"401":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Bearer challenge with the same resource_metadata discovery URL as MCP","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"404":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"405":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Allow":{"schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"409":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying or polling","schema":{"type":"integer","minimum":1}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"413":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"415":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"422":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"429":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF structured field describing the shared MCP and REST quota","schema":{"type":"string","example":"\"create-links\";q=30;w=60"}},"RateLimit":{"description":"IETF structured field: remaining calls and seconds until a slot frees","schema":{"type":"string","example":"\"create-links\";r=29;t=60"}},"Retry-After":{"description":"Seconds to wait before retrying or polling","schema":{"type":"integer","minimum":1}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"500":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"503":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying or polling","schema":{"type":"integer","minimum":1}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}}}}},"/api/v1/uploads":{"post":{"operationId":"createUpload","summary":"Reserve a customer-owned XLSX or CSV upload and presigned R2 PUT URL","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Per-account key. Within 24 hours an identical validated request replays its original status, body and headers without charging the rate window. A different payload or route returns 422; an in-flight request returns 409.","schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[ -~]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":255},"bytes":{"type":"integer","minimum":1,"maximum":20971520}},"required":["filename","bytes"],"additionalProperties":false}}}},"responses":{"201":{"description":"PUT the workbook bytes to url, then POST upload_id to /api/v1/sheets","headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF structured field describing the shared MCP and REST quota","schema":{"type":"string","example":"\"create-links\";q=30;w=60"}},"RateLimit":{"description":"IETF structured field: remaining calls and seconds until a slot frees","schema":{"type":"string","example":"\"create-links\";r=29;t=60"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"upload_id":{"type":"string"},"url":{"type":"string"},"expires_at":{"type":"number"},"max_bytes":{"type":"number"},"request_id":{"type":"string"}},"required":["upload_id","url","expires_at","max_bytes","request_id"],"additionalProperties":false}}}},"400":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"401":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Bearer challenge with the same resource_metadata discovery URL as MCP","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"404":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"405":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Allow":{"schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"409":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying or polling","schema":{"type":"integer","minimum":1}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"413":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"415":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"422":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"429":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF structured field describing the shared MCP and REST quota","schema":{"type":"string","example":"\"create-links\";q=30;w=60"}},"RateLimit":{"description":"IETF structured field: remaining calls and seconds until a slot frees","schema":{"type":"string","example":"\"create-links\";r=29;t=60"}},"Retry-After":{"description":"Seconds to wait before retrying or polling","schema":{"type":"integer","minimum":1}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"500":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"503":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying or polling","schema":{"type":"integer","minimum":1}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}}}}},"/api/v1/sheets":{"post":{"operationId":"convertWorkbook","summary":"Convert a Google Sheet, XLSX or CSV through the shared sheet grid","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Per-account key. Within 24 hours an identical validated request replays its original status, body and headers without charging the rate window. A different payload or route returns 422; an in-flight request returns 409.","schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[ -~]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"campaign":{"description":"Optional name for this batch, 3 to 64 lowercase letters, digits or hyphens (for example cr-w1-spring-sheet). The same target under a different campaign gets a different link; visits through it carry the campaign as utm_campaign.","type":"string","pattern":"^[a-z0-9][a-z0-9-]{2,63}$"},"label":{"description":"Optional name for these links on the user's list, 1 to 40 characters (for example \"bio link\"). The same target under a different label gets a different link.","type":"string"},"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"campaign":{"description":"Optional name for this batch, 3 to 64 lowercase letters, digits or hyphens (for example cr-w1-spring-sheet). The same target under a different campaign gets a different link; visits through it carry the campaign as utm_campaign.","type":"string","pattern":"^[a-z0-9][a-z0-9-]{2,63}$"},"label":{"description":"Optional name for these links on the user's list, 1 to 40 characters (for example \"bio link\"). The same target under a different label gets a different link.","type":"string"},"upload_id":{"type":"string","minLength":1,"maxLength":255}},"required":["upload_id"],"additionalProperties":false}]}}}},"responses":{"202":{"description":"Follow Location until done; result carries counts and a signed download_url","headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF structured field describing the shared MCP and REST quota","schema":{"type":"string","example":"\"create-links\";q=30;w=60"}},"RateLimit":{"description":"IETF structured field: remaining calls and seconds until a slot frees","schema":{"type":"string","example":"\"create-links\";r=29;t=60"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}},"Retry-After":{"description":"Seconds to wait before retrying or polling","schema":{"type":"integer","minimum":1}},"Location":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"job":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","const":"sheet_conversion"},"status":{"type":"string","const":"queued"},"poll_after_seconds":{"type":"number"}},"required":["id","kind","status","poll_after_seconds"],"additionalProperties":false},"request_id":{"type":"string"}},"required":["job","request_id"],"additionalProperties":false}}}},"400":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"401":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Bearer challenge with the same resource_metadata discovery URL as MCP","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"404":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"405":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Allow":{"schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"409":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying or polling","schema":{"type":"integer","minimum":1}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"413":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"415":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"422":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"429":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF structured field describing the shared MCP and REST quota","schema":{"type":"string","example":"\"create-links\";q=30;w=60"}},"RateLimit":{"description":"IETF structured field: remaining calls and seconds until a slot frees","schema":{"type":"string","example":"\"create-links\";r=29;t=60"}},"Retry-After":{"description":"Seconds to wait before retrying or polling","schema":{"type":"integer","minimum":1}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"500":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"503":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying or polling","schema":{"type":"integer","minimum":1}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}}}}},"/api/v1/jobs/{id}":{"get":{"operationId":"getJob","summary":"Read one of the signed-in account's jobs","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"cursor","in":"query","schema":{"type":"string","pattern":"^[0-9]{1,6}$","default":"0"}}],"responses":{"200":{"description":"Job and up to 50 results; retain cursor while running","headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying or polling","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"job":{"type":"object","properties":{"id":{"type":"string","description":"The job's identifier."},"kind":{"type":"string","enum":["sheet_read","resolution_run","picture_copy","link_mints","sheet_conversion"],"description":"link_mints: a batch of links. sheet_read: a Google Sheet read for its finds page. picture_copy: that sheet's pictures being kept on NinjaBuy."},"status":{"type":"string","enum":["queued","running","done","failed"]},"progress":{"description":"How far it has got, when the job counts.","type":"object","properties":{"done":{"type":"number"},"total":{"type":"number"}},"required":["done","total"],"additionalProperties":false},"startedAt":{"type":"number","description":"Milliseconds since the epoch."},"finishedAt":{"type":"number"},"result":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"sheet_read"},"sheetId":{"type":"string"},"path":{"type":"string","description":"The finds page path on NinjaBuy."},"title":{"type":["string","null"]}},"required":["kind","sheetId","path","title"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"picture_copy"},"sheetId":{"type":"string"},"gid":{"type":"string"},"copied":{"type":"number"},"total":{"type":"number"}},"required":["kind","sheetId","gid","copied","total"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"sheet_conversion"},"counts":{"type":"object","properties":{"links_found":{"type":"number"},"converted":{"type":"number"},"left_by_host":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}},"unresolved":{"type":"number"},"unresolved_examples":{"type":"array","items":{"type":"string"}},"coverage_gap":{"type":"number"}},"required":["links_found","converted","left_by_host","unresolved","unresolved_examples","coverage_gap"],"additionalProperties":false},"download_url":{"type":"string"},"download_notes":{"description":"What the XLSX cannot hold of the sheet, one line each.","type":"array","items":{"type":"string"}},"copy_url":{"description":"A view-only Google Sheets copy with the links replaced; anyone with the link can make their own copy.","type":"string"},"copy_notes":{"description":"What a reader of that copy should know (for example, =IMAGE() pictures need one Allow access click).","type":"array","items":{"type":"string"}},"copy_counts":{"description":"The copy's own link counts; counts describes download_url when there is one.","type":"object","properties":{"links_found":{"type":"number"},"converted":{"type":"number"},"left_by_host":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}},"unresolved":{"type":"number"},"unresolved_examples":{"type":"array","items":{"type":"string"}},"coverage_gap":{"type":"number"}},"required":["links_found","converted","left_by_host","unresolved","unresolved_examples","coverage_gap"],"additionalProperties":false}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"link_mints"},"total":{"type":"number"},"converted":{"type":"number"},"failed":{"type":"number","description":"Answered, but not converted: each result says why."},"campaign":{"type":"string"},"label":{"type":"string"}},"required":["kind","total","converted","failed"],"additionalProperties":false}]},"error":{"type":"string"},"poll_after_seconds":{"description":"Suggested polling interval in seconds, present while the job is queued or running.","type":"number"}},"required":["id","kind","status","startedAt"],"additionalProperties":false},"results":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string"},"status":{"type":"string","enum":["ok","unsupported","unreadable","sheet"],"description":"ok: converted. unsupported: a link NinjaBuy understands but cannot link (another marketplace, a private NinjaBuy page). unreadable: nothing could be read from it. sheet: a Google Sheet, which this tool does not convert yet."},"target":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"product"},"handle":{"type":"string"}},"required":["kind","handle"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"generic"}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"vendor"},"handle":{"type":"string"}},"required":["kind","handle"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"sheet"},"sheetId":{"type":"string"},"gid":{"type":"string"}},"required":["kind","sheetId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"search"},"query":{"type":"string"},"provider":{"type":"string"}},"required":["kind","query"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"page"},"path":{"type":"string"}},"required":["kind","path"],"additionalProperties":false}],"description":"What the link opens: a product, the home page (generic), a seller (vendor), a finds sheet, a search, or another storefront page."},"url":{"description":"The NinjaBuy link, when status is ok.","type":"string"},"code":{"type":"string"},"note":{"description":"Why it was not converted.","type":"string"}},"required":["input","status"],"additionalProperties":false}},"cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"request_id":{"type":"string"}},"required":["job","results","cursor","has_more","request_id"],"additionalProperties":false}}}},"400":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"401":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Bearer challenge with the same resource_metadata discovery URL as MCP","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"404":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"405":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Allow":{"schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"409":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying or polling","schema":{"type":"integer","minimum":1}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"413":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"415":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"422":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"429":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF structured field describing the shared MCP and REST quota","schema":{"type":"string","example":"\"create-links\";q=30;w=60"}},"RateLimit":{"description":"IETF structured field: remaining calls and seconds until a slot frees","schema":{"type":"string","example":"\"create-links\";r=29;t=60"}},"Retry-After":{"description":"Seconds to wait before retrying or polling","schema":{"type":"integer","minimum":1}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"500":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"503":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying or polling","schema":{"type":"integer","minimum":1}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}}}}},"/api/v1/openapi.json":{"get":{"operationId":"getOpenApi","summary":"Read this API's OpenAPI 3.1 description","security":[],"responses":{"200":{"description":"OpenAPI 3.1 document","headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"405":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Allow":{"schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"500":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}},"503":{"description":"RFC 9457 problem; 400 errors include JSON pointers (empty for the body itself)","content":{"application/problem+json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"type":{"type":"string","enum":["https://www.ninjabuy.com/api/v1/problems/bad-idempotency-key","https://www.ninjabuy.com/api/v1/problems/idempotency-key-reused","https://www.ninjabuy.com/api/v1/problems/idempotency-key-in-progress","https://www.ninjabuy.com/api/v1/problems/invalid-workbook","https://www.ninjabuy.com/api/v1/problems/upload-expired","https://www.ninjabuy.com/api/v1/problems/upload-too-large","https://www.ninjabuy.com/api/v1/problems/bad-json","https://www.ninjabuy.com/api/v1/problems/bad-body","https://www.ninjabuy.com/api/v1/problems/unauthorized","https://www.ninjabuy.com/api/v1/problems/not-found","https://www.ninjabuy.com/api/v1/problems/method-not-allowed","https://www.ninjabuy.com/api/v1/problems/unsupported-media-type","https://www.ninjabuy.com/api/v1/problems/rate-limited","https://www.ninjabuy.com/api/v1/problems/search-rate-limited","https://www.ninjabuy.com/api/v1/problems/service-unavailable","https://www.ninjabuy.com/api/v1/problems/internal-error"]},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"request_id":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"pointer":{"type":"string"},"detail":{"type":"string"}},"required":["pointer","detail"],"additionalProperties":false}}},"required":["type","title","status","detail","request_id"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"description":"Request correlation id, also request_id in success and problem bodies; replays retain the original id","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying or polling","schema":{"type":"integer","minimum":1}},"Idempotent-Replayed":{"description":"true when replaying the original answer","schema":{"type":"boolean"}}}}}}}}}