{"files":{"SKILL.md":"---\nname: fulfillmentcom-apiv2\ndescription: \"Fulfillment.com APIv2 API skill. Use when working with Fulfillment.com APIv2 for users, returns, orders. Covers 15 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# Fulfillment.com APIv2\nAPI version: 2.0\n\n## Auth\nOAuth2 | ApiKey x-api-key in header\n\n## Base URL\nhttps://api.fulfillment.com/v2\n\n## Setup\n1. Set your API key in the appropriate header\n2. GET /users/me -- about me\n3. POST /orders -- create first order\n\n## Endpoints\n15 endpoints across 7 groups. See references/api-spec.lap for full details.\n\n### Users\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /users/me | About Me |\n\n### Returns\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /returns | List Returns |\n| PUT | /returns | Inform us of an RMA |\n\n### Orders\n| Method | Path | Description |\n|--------|------|-------------|\n| PUT | /orders/{id}/status | Update Order Status |\n| PUT | /orders/{id}/ship | Ship an Order |\n| GET | /orders/{id} | Order Details |\n| DELETE | /orders/{id} | Cancel an Order |\n| GET | /orders | List of Orders |\n| POST | /orders | New Order |\n| GET | /orders/simple | List of Simplified Orders |\n\n### Oauth\n| Method | Path | Description |\n|--------|------|-------------|\n| POST | /oauth/access_token | Generate an Access Token |\n\n### Inventory\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /inventory | List of Item Inventories |\n| GET | /inventory/full | List of Inventories |\n\n### Track\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /track/{trackingNumber} | Tracking |\n\n### Accounting\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /accounting | List Order Accounting |\n\n## Common Questions\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"List all me?\" -> GET /users/me\n- \"List all returns?\" -> GET /returns\n- \"Get order details?\" -> GET /orders/{id}\n- \"Delete a order?\" -> DELETE /orders/{id}\n- \"List all orders?\" -> GET /orders\n- \"Create a order?\" -> POST /orders\n- \"List all simple?\" -> GET /orders/simple\n- \"Create a access_token?\" -> POST /oauth/access_token\n- \"List all inventory?\" -> GET /inventory\n- \"List all full?\" -> GET /inventory/full\n- \"Get track details?\" -> GET /track/{trackingNumber}\n- \"List all accounting?\" -> GET /accounting\n- \"How to authenticate?\" -> See Auth section above\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Paginated endpoints accept limit/offset or cursor parameters\n- Create/update endpoints return the modified resource on success\n- Error responses include status codes and descriptions in the spec\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api Fulfillment.com APIv2\n@base https://api.fulfillment.com/v2\n@version 2.0\n@auth OAuth2 | ApiKey x-api-key in header\n@endpoints 15\n@toc users(1), returns(2), orders(7), oauth(1), inventory(2), track(1), accounting(1)\n\n@group users\n@endpoint GET /users/me\n@desc About Me\n@returns(200) {id: int, apiKey: str, contactInfo: map{id: int, apiKey: str, contactInfo: any, merchant: map{id: int}, createDate: str(date-time), updatedAt: str(date-time), updatedBy: str(date-time), status: bool, deptLeader: bool, username: str, name: str}, merchant: map{id: int}, createDate: str(date-time), updatedAt: str(date-time), updatedBy: str(date-time), status: bool, deptLeader: bool, username: str, name: str} # User\n\n@endgroup\n\n@group returns\n@endpoint GET /returns\n@desc List Returns\n@required {fromDate: str # Date-time in ISO 8601 format for selecting orders after, or at, the specified time, toDate: str # Date-time in ISO 8601 format for selecting orders before, or at, the specified time}\n@optional {page: int=1 # A multiplier of the number of items (limit parameter) to skip before returning results, limit: int=80 # The numbers of items to return}\n@returns(200) {meta: map{pagination: map{totalPages: int, currentPage: int, count: int, total: int}}, data: [map]} # Returns\n\n@endpoint PUT /returns\n@desc Inform us of an RMA\n@required {items: [map{sku!: str, quantityExpected!: int}], recipient: any, rmaNumber: str}\n@optional {merchantOrderId: str}\n@returns(201) {items: [map], recipient: map{id: int, updatedBy: any, updatedAt: str(date-time), iso: map{id: int, iso2: str, name: str}, companyName: str, country: str, postalCode: str, addressRegion: str, addressLocality: str, address2: str, address1: str, phone: str, lastName: str, firstName: str, email: str}, merchantOrderId: str, rmaNumber: str} # RMA Created\n@returns(202) RMA Updated\n@errors {404: A Component of Your Request Was Not Found, 409: RMA Already Processed}\n\n@endgroup\n\n@group orders\n@endpoint PUT /orders/{id}/status\n@desc Update Order Status\n@required {id: int(int32) # The FDC order Id, reason: str # Human-readable description, status: map{code!: str}}\n@returns(200) Order Found\n@errors {404: Order not found}\n\n@endpoint PUT /orders/{id}/ship\n@desc Ship an Order\n@required {id: int(int32) # The FDC order Id, trackingNumber: str # Tracking number of package}\n@optional {weightOverride: num(float) # Override predicted weight of package}\n@returns(200) Order Found\n@errors {404: Order not found}\n\n@endpoint GET /orders/{id}\n@desc Order Details\n@required {id: str # The FDC order Id}\n@optional {merchantId: int # Providing your `merchantId` indicates the `id` is your `merchantOrderId`. Although it is not necessary to provide this it will speed up your results when using your `merchantOrderId` however it will slow your results when using the FDC provided `id`, hydrate: [str] # Adds additional information to the response, uses a CSV format for multiple values.'}\n@returns(200) Order Found\n@errors {404: Order not found}\n\n@endpoint DELETE /orders/{id}\n@desc Cancel an Order\n@required {id: int(int32) # ID of order that needs to be canceled}\n@returns(200) Your order was successfully canceled\n@errors {404: Order not found, 405: Could not cancel your order, perhaps it already shipped}\n\n@endpoint GET /orders\n@desc List of Orders\n@required {fromDate: str # Date-time in ISO 8601 format for selecting orders after, or at, the specified time, toDate: str # Date-time in ISO 8601 format for selecting orders before, or at, the specified time}\n@optional {merchantIds: [int] # A CSV of merchant id, '123' or '1,2,3', warehouseIds: [int] # A CSV of warehouse identifiers., page: int=1 # A multiplier of the number of items (limit parameter) to skip before returning results, limit: int=80 # The numbers of items to return, hydrate: [str] # Adds additional information to the response, uses a CSV format for multiple values.'}\n@returns(200) OK\n@errors {404: No Orders Found}\n\n@endpoint POST /orders\n@desc New Order\n@required {merchantOrderId: str # Unique ID provided by the merchant, shippingMethod: str # Custom for you, it will be mapped to an actual method within the OMS UI, recipient: map{companyName: str, country!: str, postalCode: str, addressRegion!: str, addressLocality!: str, address2: str, address1!: str, phone!: str, lastName!: str, firstName!: str, email!: str}, items: [map{quantity!: int, sku!: str, declaredValue!: str(double)}]}\n@optional {merchantId: int # Necessary if you have a multitenancy account, otherwise we will associate the order with your account, warehouse: map{id: int} # We automatically select a warehouse based on inventory availability, requested carrier and delivery schedule, and carrier cost. You may however override this process. Because this is not recommended please inform your AE prior to using so they may enable this feature., integrator: str(1ShoppingCart/3dCart/AdobeBC/AmazonAU/AmazonEU/AmazonNA/BigCommerce/BrandBoom/BrightPearl/BuyGoods/Celery/ChannelAdvisor/Clickbank/CommerceHub/Custom/Demandware/Ebay/Ecwid/Etsy/FoxyCart/Goodsie/Infusionsoft/Konnektive/LimeLight/Linio/Linnworks/Magento/Netsuite/NewEgg/Nexternal/NuOrder/Opencart/OrderWave/osCommerce1/Overstock/PayPal/PrestaShop/Pricefalls/Quickbooks/Rakuten/Sears/Sellbrite/SellerCloud/Shipstation/Shopify/Skubana/SolidCommerce/SparkPay/SpreeCommerce/spsCommerce/StitchLabs/StoneEdge/TradeGecko/UltraCart/Volusion/VTEX/Walmart/WooCommerce/Yahoo) # Use of this property requires special permission and must be discussed with your account executive; values are restricted while custom values need to be accepted by your AE., notes: str}\n@returns(201) {id: int, trackingNumbers: [map], validatedConsignee: any, originalConsignee: map{id: int, updatedBy: any, updatedAt: str(date-time), iso: map{id: int, iso2: str, name: str}, companyName: str, country: str, postalCode: str, addressRegion: str, addressLocality: str, address2: str, address1: str, phone: str, lastName: str, firstName: str, email: str}, currentStatus: map{id: int, createdBy: any, status: map{id: int, isClosed: bool, actionRequiredBy: map{id: int, name: str}, stage: map{name: str, code: str}, state: map{name: str, code: str}, detail: str, reason: str, name: str, detailCode: str, code: str}, reason: str, date: str(date-time)}, warehouse: map{id: int}, merchant: map{id: int, name: str}, departDate: str(date-time), dispatchDate: str(date-time), recordedOn: str(date-time), merchantShippingMethod: str, purchaseOrderNum: str, merchantOrderId: str, parentOrder: map{id: int}} # Order Created\n@errors {400: Invalid order object, 401: You do not have permission to create orders, 403: Forbidden, 409: Conflict, 422: Validation Failure}\n\n@endpoint GET /orders/simple\n@desc List of Simplified Orders\n@required {fromDate: str # Date-time in ISO 8601 format for selecting orders after, or at, the specified time, toDate: str # Date-time in ISO 8601 format for selecting orders before, or at, the specified time}\n@optional {merchantIds: [int] # A CSV of merchant id, '123' or '1,2,3', warehouseIds: [int] # A CSV of warehouse identifiers., page: int=1 # A multiplier of the number of items (limit parameter) to skip before returning results, limit: int=80 # The numbers of items to return}\n@returns(200) {id: int, merchantOrderId: str, parentOrderId: int, warehouseId: int, firstPrintDate: str(date-time), departDate: str(date-time), deliveryDate: str(date-time), carrier: str, trackingNumbers: [str]} # OK\n@errors {404: No Orders Found}\n\n@endgroup\n\n@group oauth\n@endpoint POST /oauth/access_token\n@desc Generate an Access Token\n@returns(200) {refresh_token: str, expires_in: int, token_type: str, access_token: str} # Authorized\n@errors {401: Unauthorized}\n\n@endgroup\n\n@group inventory\n@endpoint GET /inventory\n@desc List of Item Inventories\n@optional {page: int=1 # A multiplier of the number of items (limit parameter) to skip before returning results, limit: int=80 # The numbers of items to return, externalSkuNames: [str] # A CSV of sku reference names, 'skuName1' or 'skuName1,skuName2,skuName3'}\n@returns(200) {meta: map{pagination: map{totalPages: int, currentPage: int, count: int, total: int}}, data: [map]} # Found Inventory\n@errors {400: Bad Request, 401: Unauthorized, 403: Access Denied, 404: No Inventory Found}\n\n@endpoint GET /inventory/full\n@desc List of Inventories\n@optional {externalSkuNames: [str] # A CSV of sku reference names., warehouseIds: [int] # A CSV of warehouse identifiers., page: int=1 # A multiplier of the number of items (limit parameter) to skip before returning results, limit: int=80 # The numbers of items to return}\n@returns(200) {data: [map], meta: map{pagination: map{totalPages: int, currentPage: int, count: int, total: int}}} # Found Inventory\n@errors {400: Bad Request, 401: Unauthorized, 403: Access Denied, 404: No Inventory Found}\n\n@endgroup\n\n@group track\n@endpoint GET /track/{trackingNumber}\n@desc Tracking\n@required {trackingNumber: str # Tracking number for a shipment that exists within BestOMS.}\n@returns(200) {events: [map], deliveryEvent: str(date-time), firstTransitEvent: str(date-time), service: str, carrier: str, status: map{code: str, description: str}, trackingNumber: str} # OK\n@errors {404: Not Found, 429: Too Many Requests}\n\n@endgroup\n\n@group accounting\n@endpoint GET /accounting\n@desc List Order Accounting\n@required {fromDate: str # Orders invoice date. Date-time in ISO 8601 format for selecting orders after, or at, the specified time, toDate: str # Orders invoice date. Date-time in ISO 8601 format for selecting orders before, or at, the specified time, hydrate: [str] # Adds additional information to the response, uses a CSV format for multiple values.}\n@optional {page: int=1 # A multiplier of the number of items (limit parameter) to skip before returning results, limit: int=80 # The numbers of items to return, warehouseIds: [int] # A CSV of warehouse id, '123' or '1,2,3', orderIds: [int] # A CSV of FDC order id, '123' or '1,2,3'}\n@returns(200) {meta: map{pagination: map{totalPages: int, currentPage: int, count: int, total: int}}, data: [map]} # Accounting\n\n@endgroup\n\n@end\n"}}