@lap v0.3
# Machine-readable API spec. Each @endpoint block is one API call.
@api Profile System - PII data architecture
@base https://apiexamples.vtexcommercestable.com.br
@version 1.0
@auth ApiKey X-VTEX-API-AppKey in header | ApiKey X-VTEX-API-AppToken in header | ApiKey VtexIdclientAutCookie in header
@common_fields {Content-Type: str, Accept: str}
@endpoints 31
@hint download_for_search
@toc api(31)

@endpoint POST /api/storage/profile-system/profiles
@required {firstName: str, lastName: str, email: str, document: str, documentType: str}
@optional {ttl: int, birthDate: str, {customField}: str}
@returns(201) {id: str, meta: map{version: str, author: str, creationDate: str, lastUpdate: str}, document: map{firstName: str, lastName: str, email: str, birthDate: str, document: str, documentType: str, {customField}: str}}

@endpoint GET /api/storage/profile-system/profiles/{profileId}
@required {profileId: str}
@optional {alternativeKey: str(email/document)}
@returns(200)

@endpoint PATCH /api/storage/profile-system/profiles/{profileId}
@required {profileId: str, firstName: str, lastName: str, email: str, document: str, documentType: str}
@optional {alternativeKey: str(email/document), ttl: int, birthDate: str, {customField}: str}
@returns(200) {id: str, document: map{firstName: str, lastName: str, email: str, birthDate: str, document: str, documentType: str, {customField}: str}, meta: map{version: str, author: str, creationDate: str, lastUpdate: str}}

@endpoint DELETE /api/storage/profile-system/profiles/{profileId}
@required {profileId: str}
@returns(204)

@endpoint GET /api/storage/profile-system/profiles/{profileId}/unmask
@required {profileId: str, reason: str}
@optional {alternativeKey: str(email/document)}
@returns(200)

@endpoint GET /api/storage/profile-system/profiles/{profileId}/versions/{profileVersionId}
@required {profileId: str, profileVersionId: str}
@returns(200)

@endpoint GET /api/storage/profile-system/profiles/{profileId}/versions/{profileVersionId}/unmask
@required {profileId: str, profileVersionId: str, reason: str}
@returns(200)

@endpoint POST /api/storage/profile-system/profiles/{profileId}/addresses
@required {profileId: str, postalCode: str, countryName: str, administrativeAreaLevel1: str, locality: str, localityAreaLevel1: str, route: str, streetNumber: str}
@optional {alternativeKey: str(email/document), countryCode: str, contactId: str}
@returns(201) {id: str, document: map{postalCode: str, countryName: str, countryCode: str, administrativeAreaLevel1: str, locality: str, localityAreaLevel1: str, route: str, streetNumber: str, profileId: str, contactId: str}, meta: map{version: str, author: str, creationDate: str, lastUpdateDate: str}}

@endpoint GET /api/storage/profile-system/profiles/{profileId}/addresses
@required {profileId: str}
@optional {alternativeKey: str(email/document)}
@returns(200)

@endpoint GET /api/storage/profile-system/profiles/{profileId}/addresses/unmask
@required {profileId: str}
@optional {alternativeKey: str(email/document)}
@returns(200)

@endpoint GET /api/storage/profile-system/profiles/{profileId}/addresses/{addressId}
@required {profileId: str, addressId: str}
@optional {alternativeKey: str(email/document)}
@returns(200) {id: str, document: map{postalCode: str, countryName: str, countryCode: str, administrativeAreaLevel1: str, locality: str, localityAreaLevel1: str, route: str, streetNumber: str, profileId: str, contactId: str}, meta: map{version: str, author: str, creationDate: str, lastUpdateDate: str}}

@endpoint PATCH /api/storage/profile-system/profiles/{profileId}/addresses/{addressId}
@required {profileId: str, addressId: str, postalCode: str, countryName: str, administrativeAreaLevel1: str, locality: str, localityAreaLevel1: str, route: str, streetNumber: str}
@optional {alternativeKey: str(email/document), countryCode: str, contactId: str}
@returns(200) {id: str, document: map{postalCode: str, countryName: str, countryCode: str, administrativeAreaLevel1: str, locality: str, localityAreaLevel1: str, route: str, streetNumber: str, profileId: str, contactId: str}, meta: map{version: str, author: str, creationDate: str, lastUpdateDate: str}}

@endpoint DELETE /api/storage/profile-system/profiles/{profileId}/addresses/{addressId}
@required {profileId: str, addressId: str}
@optional {alternativeKey: str(email/document)}
@returns(204)

@endpoint GET /api/storage/profile-system/profiles/{profileId}/addresses/{addressId}/unmask
@required {profileId: str, addressId: str, reason: str}
@optional {alternativeKey: str(email/document)}
@returns(200) {id: str, document: map{postalCode: str, countryName: str, countryCode: str, administrativeAreaLevel1: str, locality: str, localityAreaLevel1: str, route: str, streetNumber: str, profileId: str, contactId: str}, meta: map{version: str, author: str, creationDate: str, lastUpdateDate: str}}

@endpoint GET /api/storage/profile-system/profiles/{profileId}/addresses/{addressId}/versions/{addressVersionId}
@required {profileId: str, addressId: str, addressVersionId: str, reason: str}
@optional {alternativeKey: str(email/document)}
@returns(200) {id: str, document: map{postalCode: str, countryName: str, countryCode: str, administrativeAreaLevel1: str, locality: str, localityAreaLevel1: str, route: str, streetNumber: str, profileId: str, contactId: str}, meta: map{version: str, author: str, creationDate: str, lastUpdateDate: str}}

@endpoint GET /api/storage/profile-system/profiles/{profileId}/addresses/{addressId}/versions/{addressVersionId}/unmask
@required {profileId: str, addressId: str, addressVersionId: str, reason: str}
@optional {alternativeKey: str(email/document)}
@returns(200) {id: str, document: map{postalCode: str, countryName: str, countryCode: str, administrativeAreaLevel1: str, locality: str, localityAreaLevel1: str, route: str, streetNumber: str, profileId: str, contactId: str}, meta: map{version: str, author: str, creationDate: str, lastUpdateDate: str}}

@endpoint POST /api/storage/profile-system/prospects
@optional {availableAddresses: [map{disposable: bool, userId: str, addressName: str, addressType: str, postalCode: str, city: str, country: str, street: str, number: str, complement: str, geoCoordinate: [str]}], paymentData: map{availableAccounts: [map], availableTokens: [str], transactions: [map], giftCards: [str], giftCardMessages: [str], numberOfPaymentErrors: num, numberOfDeniedTransactions: num, lastDeniedTransaction: str}, contacts: [map{contactId: str, email: str, firstName: str, lastName: str, phone: str, document: str}], invoiceSubject: map{invoiceSubjectId: str, email: str, firstName: str, lastName: str, phone: str}, email: str, firstName: str, lastName: str, document: str, cellPhone: str, isPJ: bool, customerCode: str}
@returns(201) {id: str, document: map{availableAddresses: [map], paymentData: map{availableAccounts: [map], availableTokens: [str], transactions: [map]?, giftCards: [str], giftCardMessages: [str], numberOfPaymentErrors: num, numberOfDeniedTransactions: num, lastDeniedTransaction: str?}, contacts: [map], invoiceSubject: map{invoiceSubjectId: str, email: str, firstName: str, lastName: str, phone: str}, email: str, firstName: str, lastName: str, document: str, cellPhone: str, isPJ: bool, customerCode: str}, meta: map{version: str, author: str, creationDate: str, lastUpdateDate: str, expirationDate: str?}}

@endpoint GET /api/storage/profile-system/prospects
@returns(200)

@endpoint GET /api/storage/profile-system/prospects/unmask
@returns(200)

@endpoint GET /api/storage/profile-system/prospects/{prospectId}
@required {prospectId: str}
@returns(200) {id: str, document: map{availableAddresses: [map], paymentData: map{availableAccounts: [map], availableTokens: [str], transactions: [map]?, giftCards: [str], giftCardMessages: [str], numberOfPaymentErrors: num, numberOfDeniedTransactions: num, lastDeniedTransaction: str?}, contacts: [map], invoiceSubject: map{invoiceSubjectId: str, email: str, firstName: str, lastName: str, phone: str}, email: str, firstName: str, lastName: str, document: str, cellPhone: str, isPJ: bool, customerCode: str}, meta: map{version: str, author: str, creationDate: str, lastUpdateDate: str, expirationDate: str?}}

@endpoint PATCH /api/storage/profile-system/prospects/{prospectId}
@required {prospectId: str}
@optional {availableAddresses: [map{disposable: bool, userId: str, addressName: str, addressType: str, postalCode: str, city: str, country: str, street: str, number: str, complement: str, geoCoordinate: [str]}], paymentData: map{availableAccounts: [map], availableTokens: [str], transactions: [map], giftCards: [str], giftCardMessages: [str], numberOfPaymentErrors: num, numberOfDeniedTransactions: num, lastDeniedTransaction: str}, contacts: [map{contactId: str, email: str, firstName: str, lastName: str, phone: str, document: str}], invoiceSubject: map{invoiceSubjectId: str, email: str, firstName: str, lastName: str, phone: str}, email: str, firstName: str, lastName: str, document: str, cellPhone: str, isPJ: bool, customerCode: str}
@returns(200) {id: str, document: map{availableAddresses: [map], paymentData: map{availableAccounts: [map], availableTokens: [str], transactions: [map]?, giftCards: [str], giftCardMessages: [str], numberOfPaymentErrors: num, numberOfDeniedTransactions: num, lastDeniedTransaction: str?}, contacts: [map], invoiceSubject: map{invoiceSubjectId: str, email: str, firstName: str, lastName: str, phone: str}, email: str, firstName: str, lastName: str, document: str, cellPhone: str, isPJ: bool, customerCode: str}, meta: map{version: str, author: str, creationDate: str, lastUpdateDate: str, expirationDate: str?}}

@endpoint DELETE /api/storage/profile-system/prospects/{prospectId}
@required {prospectId: str}
@returns(204)

@endpoint GET /api/storage/profile-system/prospects/{prospectId}/unmask
@required {prospectId: str, reason: str}
@returns(200) {id: str, document: map{availableAddresses: [map], paymentData: map{availableAccounts: [map], availableTokens: [str], transactions: [map]?, giftCards: [str], giftCardMessages: [str], numberOfPaymentErrors: num, numberOfDeniedTransactions: num, lastDeniedTransaction: str?}, contacts: [map], invoiceSubject: map{invoiceSubjectId: str, email: str, firstName: str, lastName: str, phone: str}, email: str, firstName: str, lastName: str, document: str, cellPhone: str, isPJ: bool, customerCode: str}, meta: map{version: str, author: str, creationDate: str, lastUpdateDate: str, expirationDate: str?}}

@endpoint POST /api/storage/profile-system/profiles/{profileId}/purchase-info
@required {profileId: str}
@optional {alternativeKey: str(email/document), paymentData: map{availableAccounts: [map], availableTokens: [str], transactions: [map], giftCards: [str], giftCardMessages: [str], numberOfPaymentErrors: num, numberOfDeniedTransactions: num, lastDeniedTransaction: str}, clientPreferences: map{}, isToSavePersonalData: bool, lastUserPurchases: [map{creationDate: str, orderId: str, orderGroup: str, value: num}], lastPurchasesAddressId: str}
@returns(200) {id: str, document: map{paymentData: map{availableAccounts: [map], availableTokens: [str], transactions: [map]?, giftCards: [str], giftCardMessages: [str], numberOfPaymentErrors: num, numberOfDeniedTransactions: num, lastDeniedTransaction: str?}, clientPreferences: map, isToSavePersonalData: bool, lastUserPurchases: [map], lastPurchasesAddressId: str}, meta: map{version: str, author: str, creationDate: str, lastUpdateDate: str, expirationDate: str?}}

@endpoint GET /api/storage/profile-system/profiles/{profileId}/purchase-info
@required {profileId: str}
@optional {alternativeKey: str(email/document)}
@returns(200)

@endpoint PATCH /api/storage/profile-system/profiles/{profileId}/purchase-info
@required {profileId: str}
@optional {alternativeKey: str(email/document), paymentData: map{availableAccounts: [map], availableTokens: [str], transactions: [map], giftCards: [str], giftCardMessages: [str], numberOfPaymentErrors: num, numberOfDeniedTransactions: num, lastDeniedTransaction: str}, clientPreferences: map{}, isToSavePersonalData: bool, lastUserPurchases: [map{creationDate: str, orderId: str, orderGroup: str, value: num}], lastPurchasesAddressId: str}
@returns(200) {id: str, document: map{paymentData: map{availableAccounts: [map], availableTokens: [str], transactions: [map]?, giftCards: [str], giftCardMessages: [str], numberOfPaymentErrors: num, numberOfDeniedTransactions: num, lastDeniedTransaction: str?}, clientPreferences: map, isToSavePersonalData: bool, lastUserPurchases: [map], lastPurchasesAddressId: str}, meta: map{version: str, author: str, creationDate: str, lastUpdateDate: str, expirationDate: str?}}

@endpoint DELETE /api/storage/profile-system/profiles/{profileId}/purchase-info
@required {profileId: str}
@optional {alternativeKey: str(email/document)}
@returns(204)

@endpoint GET /api/storage/profile-system/profiles/{profileId}/purchase-info/unmask
@required {profileId: str, reason: str}
@returns(200)

@endpoint GET /api/storage/profile-system/schemas/profileSystem
@returns(200) {title: str, type: str, description: str, required: [str], properties: map{additionalProperties: map{type: str, sensitive: bool, pii: bool, items: map{type: str}}}, documentTTL: int, version: int, v-indexed: [str], v-unique: [str]}

@endpoint PUT /api/storage/profile-system/schemas/profileSystem/custom
@returns(201)

@endpoint GET /api/storage/profile-system/schemas/profileSystem/custom
@returns(200) {title: str, type: str, description: str, required: [str], properties: map{additionalProperties: map{type: str, sensitive: bool, pii: bool, items: map{type: str}}}, documentTTL: int, version: int, v-indexed: [str], v-unique: [str]}

@end
