Vantage Apparel
Integrate your application with Vantage Apparel's PromoStandards Order Status, Shipment Notification, and Customer Lookup SOAP APIs
🚀 Quickstart
Connect to PromoStandards with Tenklo using your Vantage Apparel-issued PromoStandards ID and password.
In Tenklo (free signup), go to Integrations -> Configure New Integration -> Vantage Apparel.
Go to Connections -> Add Test Connection -> Authorize, then enter your PromoStandards ID and password (see the connect guide below). Later, you'll let your users do the same directly from your app.
Follow our Auth implementation guide to integrate Tenklo in your app.
To obtain your own production credentials, follow the connect guide linked below.
📚 PromoStandards guides
- How do I link my account? Finding your PromoStandards ID and password
Official docs: PromoStandards Order Status 2.0.0 specification
API gotchas
- There is no auth endpoint. PromoStandards authenticates every SOAP call by embedding
idandpasswordfields directly inside the request body — never as an HTTP header, never via OAuth or a session token. Tenklo's generic proxy (header/body templating) can't inject credentials into an arbitrary SOAP envelope, so you can't just callnango.proxy()with a body template and expect credentials to be filled in automatically. - Build the SOAP call yourself in a custom action/sync. Fetch the connection's raw credentials with
nango.getConnection(), then hand-construct the SOAP envelope for the operation you need (GetOrderStatusRequest,GetAccountsByEmailRequest, etc.), embedding theid/passwordfields yourself, and send it vianango.proxy()with the matchingSOAPActionheader andContent-Type: text/xml; charset=utf-8. - The same PromoStandards ID/password authenticates Order Status, Shipment Notification, and Customer Lookup for Vantage Apparel — one connection covers all three services.
SOAPActionis case-sensitive:getOrderStatusfor Order Status,getAccountsByEmailfor Customer Lookup (other casings likeGetAccountsByEmailRequestare rejected with an HTTP500, not a clean SOAP fault). queryTypeon Order Status is a fixed enum, not a free-text field:poSearch,soSearch,lastUpdate,allOpen,allOpenIssues. An unrecognized value returns aServiceMessagewithcode 200("queryType not found") rather than an auth error — check the code, not just the HTTP status, since this API always returns HTTP200regardless of business outcome.- A "no results" response is not an authentication failure. On Order Status,
code 220("No Orders were found for the requested criteria.") means your credentials worked but nothing matched; on Customer Lookup,code 130("No Accounts found") means the same. Only an explicit auth-failure code (15on Order Status,105on Customer Lookup) means theid/passwordpair itself was rejected. Tenklo's credential check for this integration applies exactly this distinction.
Example: calling a SOAP endpoint from an action
This action calls Customer Lookup's getAccountsByEmail operation. It fetches the connection's raw id/password, embeds them in the SOAP envelope, and sends it via nango.proxy() with the matching SOAPAction header:
import { createAction } from 'nango';
import * as z from 'zod';
function escapeXml(value: string): string {
return value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
}
export default createAction({
description: "Look up a Vantage Apparel customer account by email via PromoStandards' getAccountsByEmail operation",
version: '1.0.0',
input: z.object({
email: z.string()
}),
output: z.object({
raw: z.string()
}),
exec: async (nango, input) => {
const { credentials } = await nango.getConnection();
const { username, password } = credentials as { username: string; password: string };
const body = `<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="https://brandedpromoapparel.com/Schema/CustomerLookupService/">
<soapenv:Body>
<ns:GetAccountsByEmailRequest>
<ns:wsVersion>1.0.0</ns:wsVersion>
<ns:id>${escapeXml(username)}</ns:id>
<ns:password>${escapeXml(password)}</ns:password>
<ns:keyword>${escapeXml(input.email)}</ns:keyword>
</ns:GetAccountsByEmailRequest>
</soapenv:Body>
</soapenv:Envelope>`;
const response = await nango.proxy<string>({
method: 'POST',
endpoint: '/CustomerLookupService.svc',
headers: {
'content-type': 'text/xml; charset=utf-8',
soapaction: '"getAccountsByEmail"'
},
data: body
});
return { raw: response.data };
}
});The same pattern applies to Order Status (GetOrderStatusRequest, soapaction: '"getOrderStatus"', endpoint /OrderStatusService.svc) and Shipment Notification — swap the request element, SOAPAction, and endpoint for the operation you need.
🧩 Pre-built syncs and actions
Explore Nango-provided actions in your dashboard. Extend and customize them to fit your needs.
No pre-built syncs or actions available yet.