Pular para o conteúdo

API Apple Wallet PassKit

A API PassKit Designer permite que você crie, atualize, baixe e gerencie passes do Apple Wallet programaticamente. Ela suporta as mesmas operações que o construtor de passes no Painel de Controle realiza. Use-a para emitir cartões de fidelidade, cupons, ingressos para eventos, cartões de embarque e cartões de loja, e para enviar atualizações ao vivo para passes já instalados nos dispositivos de seus usuários.

https://apple-passkit.svc-nue.pushwoosh.com

Todos os endpoints são servidos por HTTPS. As solicitações e respostas usam application/json, a menos que seja indicado o contrário.

Autenticação

Anchor link to

Cada solicitação deve incluir um cabeçalho Authorization com seu token de acesso à API da Pushwoosh:

Authorization: Token <api-token>

A conta proprietária do token deve ser a proprietária do aplicativo referenciado por applicationCode. Uma solicitação para um aplicativo que pertence a outra conta retorna 403 Forbidden.

Convenções

Anchor link to
  • Nomenclatura de campos: Os campos JSON usam lowerCamelCase (por exemplo, passTypeIdentifier, serialNumber, backgroundColor).
  • Campos não preenchidos: as respostas incluem todos os campos, mesmo quando vazios ou com valor zero.
  • Dados binários: campos bytes como pkpassData e data de imagem são strings codificadas em Base64 em JSON.
  • Números de série: o serialNumber é sempre atribuído pelo servidor quando um passe é criado. Qualquer valor que você enviar na criação é ignorado; ele identifica o passe para todas as operações posteriores.

Respostas de erro

Anchor link to

A API mapeia códigos de status internos para códigos de status HTTP:

Status HTTPSignificado
400 Bad RequestArgumento inválido — um campo obrigatório está ausente ou malformado.
401 UnauthorizedCabeçalho Authorization ausente ou inválido.
403 ForbiddenO aplicativo não pertence à conta do chamador.
404 Not FoundO passe, modelo ou aplicativo não foi encontrado.
503 Service UnavailableO serviço está em sua capacidade máxima ou temporariamente indisponível.
MétodoCaminhoDescrição
POST/api/pass/validateValidar uma configuração de passe
POST/api/pass/createCriar um novo .pkpass
POST/api/pass/update/{serialNumber}Atualizar um passe existente e notificar os dispositivos
GET/api/passesListar todos os passes de um aplicativo
GET/api/pass/{applicationCode}/{serialNumber}Obter um único passe
GET/api/pass/{applicationCode}/{serialNumber}/downloadBaixar o .pkpass de um passe existente
DELETE/api/pass/{applicationCode}/{serialNumber}Excluir um passe
GET/api/pass/{serialNumber}/registrationsListar dispositivos registrados para um passe
GET/api/configObter a configuração PassKit do aplicativo
GET/api/templatesListar modelos de passe disponíveis
GET/api/templates/{filename}Obter um único modelo

Criar um passe

Anchor link to

Gera, assina e armazena um novo passe, e então retorna seu número de série atribuído pelo servidor.

POST /api/pass/create

Corpo da solicitação

Anchor link to
ParâmetroTipoObrigatórioDescrição
passobjetoSimO objeto de passe que descreve o passe.
imagesarray de objetosNãoImagens do passe (ícone, logo, etc.). icon e logo são necessários para um passe válido.
userIdstringSimO User ID da Pushwoosh para o qual o passe é emitido.
applicationCodestringSimO código do aplicativo Pushwoosh.
Exemplo de solicitação
Anchor link to
{
"applicationCode": "XXXXX-XXXXX",
"userId": "user-123",
"pass": {
"description": "Acme loyalty card",
"logoText": "Acme",
"backgroundColor": "rgb(60, 65, 76)",
"foregroundColor": "rgb(255, 255, 255)",
"labelColor": "rgb(255, 255, 255)",
"storeCard": {
"primaryFields": [
{ "key": "balance", "label": "BALANCE", "value": "1200 pts" }
],
"secondaryFields": [
{ "key": "member", "label": "MEMBER", "value": "Jane Doe" }
]
},
"barcodes": [
{
"format": "PKBarcodeFormatQR",
"message": "1234567890",
"messageEncoding": "iso-8859-1"
}
]
},
"images": [
{ "imageType": "icon", "data": "<base64>", "contentType": "image/png" },
{ "imageType": "logo", "data": "<base64>", "contentType": "image/png" }
]
}
CampoTipoDescrição
serialNumberstringIdentidade única atribuída pelo servidor do passe criado. Use-a para buscar o passe (Obter um passe) ou baixar o .pkpass (Baixar um passe).
messagestringMensagem de resultado.
Exemplo de resposta
Anchor link to
{
"serialNumber": "a1b2c3d4-1234-5678-9abc-def012345678",
"message": "Pass created successfully"
}

Validar um passe

Anchor link to

Verifica uma configuração de passe em relação às especificações da Apple sem criar um arquivo. Útil antes de chamar a criação.

POST /api/pass/validate

Corpo da solicitação

Anchor link to
ParâmetroTipoObrigatórioDescrição
passobjetoSimO objeto de passe a ser validado.
CampoTipoDescrição
validbooleanSe o passe passa na validação.
errorsarray de stringsProblemas bloqueadores que devem ser corrigidos.
warningsarray de stringsAvisos não bloqueadores.

Atualizar um passe

Anchor link to

Regenera o passe com novo conteúdo, o assina novamente, incrementa sua tag de atualização e envia uma notificação push silenciosa para cada dispositivo que registrou o passe. O iOS então busca e instala a versão atualizada em segundo plano.

POST /api/pass/update/{serialNumber}

Parâmetros de caminho

Anchor link to
ParâmetroTipoDescrição
serialNumberstringO número de série retornado quando o passe foi criado.

Corpo da solicitação

Anchor link to
ParâmetroTipoObrigatórioDescrição
updatesobjetoSimO objeto de passe completo com o novo conteúdo.
applicationCodestringSimO código do aplicativo Pushwoosh.

O serialNumber (do caminho) e o token de autenticação do passe são preservados pelo servidor, independentemente do que você enviar.

CampoTipoDescrição
successbooleanSe a atualização foi bem-sucedida.
updateTagintegerNova tag de atualização (um timestamp Unix).
messagestringMensagem de resultado.

Listar passes

Anchor link to

Retorna uma lista paginada e ordenada dos passes armazenados para um aplicativo.

GET /api/passes?applicationCode=XXXXX-XXXXX&page=0&perPage=20

Parâmetros de consulta

Anchor link to
ParâmetroTipoObrigatórioDescrição
applicationCodestringSimO código do aplicativo Pushwoosh.
orderBystringNãoCampo de ordenação: UPDATED (padrão) ou CREATED.
orderDirectionstringNãoDireção da ordenação: DESC (padrão, mais recentes primeiro) ou ASC.
pageintegerNãoÍndice da página baseado em zero. O padrão é 0.
perPageintegerNãoTamanho da página. 0 ou omitido usa o padrão do servidor.
CampoTipoDescrição
passesarray de objetosA página atual de registros de passe.
pageintegerO índice da página retornada.
perPageintegerO tamanho da página usado para esta resposta.
totalintegerNúmero total de passes para o aplicativo em todas as páginas.
Exemplo de resposta
Anchor link to
{
"passes": [ /* pass records */ ],
"page": 0,
"perPage": 20,
"total": 137
}

Obter um passe

Anchor link to

Retorna um único passe armazenado, incluindo seu objeto de passe completo.

GET /api/pass/{applicationCode}/{serialNumber}

Parâmetros de caminho

Anchor link to
ParâmetroTipoDescrição
applicationCodestringO código do aplicativo Pushwoosh.
serialNumberstringO número de série do passe.

Retorna { "pass": { ... } }, um único registro de passe.

Baixar um passe

Anchor link to

Retorna o arquivo .pkpass armazenado de um passe existente.

GET /api/pass/{applicationCode}/{serialNumber}/download

CampoTipoDescrição
pkpassDatastring (Base64)O arquivo .pkpass.
filenamestringNome de arquivo sugerido.

Excluir um passe

Anchor link to

Remove um registro de passe e seu arquivo .pkpass armazenado.

DELETE /api/pass/{applicationCode}/{serialNumber}

CampoTipoDescrição
successbooleanSe o passe foi excluído.
messagestringMensagem de resultado.

Obter registros de passe

Anchor link to

Lista os dispositivos que adicionaram o passe e estão registrados para atualizações.

GET /api/pass/{serialNumber}/registrations?applicationCode=XXXXX-XXXXX

Retorna { "registrations": [ ... ] }, onde cada item tem:

CampoTipoDescrição
deviceLibraryIdentifierstringIdentificador da biblioteca de dispositivos da Apple.
pushTokenstringO token de push do passe para o dispositivo.

Obter configuração

Anchor link to

Retorna a configuração PassKit resolvida para um aplicativo a partir de seu certificado.

GET /api/config?applicationCode=XXXXX-XXXXX

CampoTipoDescrição
teamIdentifierstringID da Equipe Apple do certificado.
passTypeIdentifierstringID do Tipo de Passe do certificado.
organizationNamestringNome da organização do certificado.
hasCertificatebooleanSe um certificado está configurado.
webServiceUrlstringURL base do serviço web do passe. Os clientes constroem um link de instalação anexando /v1/passes/{passType}/{serial}?token={authToken}.

Liste os modelos de passe disponíveis ou busque um como um objeto de passe que você pode usar como ponto de partida.

GET /api/templates — retorna { "templates": [ { "filename", "name", "description", "style" } ] }.

GET /api/templates/{filename} — retorna { "template": { ...pass object... } }.

Compartilhar um passe como um código QR

Anchor link to

Para permitir que os usuários adicionem um passe escaneando um código QR (ou tocando em um link), codifique a URL de instalação do passe em um código QR. A URL é construída a partir de valores que você já recebe da API:

{webServiceUrl}/v1/passes/{passTypeIdentifier}/{serialNumber}?token={authenticationToken}
Parte da URLOnde obter
webServiceUrlGET /api/configwebServiceUrl
passTypeIdentifierregistro de passepass.passTypeIdentifier (de listar/obter)
serialNumberregistro de passeserialNumber
authenticationTokenregistro de passepass.authenticationToken

Exemplo:

https://apple-passkit.svc-nue.pushwoosh.com/v1/passes/pass.com.acme.loyalty/a1b2c3d4-1234-5678-9abc-def012345678?token=AbC123XyZ

Renderize esta URL como um código QR com qualquer biblioteca de QR. Quando um usuário a escaneia, seu dispositivo abre o link, baixa o .pkpass mais recente e o Wallet solicita que ele o adicione — o que também registra o dispositivo para atualizações.

Referência de objetos

Anchor link to

Objeto de passe

Anchor link to
CampoTipoDescrição
formatVersionintegerVersão do formato do passe. O padrão é 1.
passTypeIdentifierstringID do Tipo de Passe da Apple (pass.com.yourcompany.passtype). O padrão vem do certificado.
serialNumberstringAtribuído pelo servidor na criação; identifica o passe.
teamIdentifierstringID da Equipe Apple. O padrão vem do certificado.
organizationNamestringOrganização exibida no passe. O padrão vem do certificado.
descriptionstringDescrição legível por humanos (exigida pela Apple).
boardingPass / coupon / eventTicket / storeCard / genericobjetoO estilo do passe. Exatamente um deve ser definido. Consulte grupos de campos.
backgroundColorstringCor de fundo, rgb(r, g, b).
foregroundColorstringCor do primeiro plano (texto), rgb(r, g, b).
labelColorstringCor do rótulo do campo, rgb(r, g, b).
logoTextstringTexto exibido ao lado do logo.
suppressStripShinebooleanDesativa o efeito de brilho na imagem da faixa.
barcodesarrayCódigos de barras exibidos no passe.
locationsarrayLocalizações que tornam o passe relevante.
beaconsarrayBeacons que tornam o passe relevante.
relevantDatestringData ISO 8601 quando o passe se torna relevante.
maxDistanceintegerDistância máxima (metros) para relevância de localização.
expirationDatestringData de expiração ISO 8601.
voidedbooleanMarca o passe como nulo.
groupingIdentifierstringAgrupa passes relacionados (ingressos de eventos/cartões de embarque).
userInfoobjeto (mapa)Dados de aplicativo de chave/valor arbitrários.

Objeto de grupo de campos

Anchor link to

Cada estilo de passe (boardingPass, coupon, eventTicket, storeCard, generic) agrupa campos em áreas:

CampoTipoDescrição
headerFieldsarrayExibido no cabeçalho do passe (visível quando empilhado no Wallet).
primaryFieldsarrayCampos mais proeminentes.
secondaryFieldsarrayAbaixo dos campos primários.
auxiliaryFieldsarrayCampos adicionais abaixo dos secundários.
backFieldsarrayExibido no verso do passe.

boardingPass adicionalmente tem transitType (PKTransitTypeAir, PKTransitTypeTrain, PKTransitTypeBus, PKTransitTypeBoat ou PKTransitTypeGeneric).

Objeto de campo

Anchor link to
CampoTipoDescrição
keystringChave de campo única dentro do passe.
labelstringRótulo do campo.
valuestringValor do campo (texto ou número como string).
changeMessagestringMensagem exibida quando o valor muda (use %@ como o marcador de posição).
textAlignmentstringValor PKTextAlignment.
dateStyle / timeStylestringPKDateStyle para formatação de data/hora.
isRelativebooleanMostra a data relativa a agora.
numberStylestringPKNumberStyle para formatação de número.
currencyCodestringCódigo de moeda ISO 4217.
dataDetectorTypesarray de stringsDetectores de dados a serem aplicados ao valor.

Objeto de código de barras

Anchor link to
CampoTipoDescrição
formatstringPKBarcodeFormatQR, PKBarcodeFormatPDF417, PKBarcodeFormatAztec ou PKBarcodeFormatCode128.
messagestringDados codificados no código de barras.
messageEncodingstringCodificação de texto, tipicamente iso-8859-1.
altTextstringTexto exibido abaixo do código de barras.

Objeto de localização

Anchor link to
CampoTipoDescrição
latitudenumberLatitude.
longitudenumberLongitude.
altitudenumberAltitude em metros.
relevantTextstringTexto exibido na tela de bloqueio perto desta localização.

Objeto de beacon

Anchor link to
CampoTipoDescrição
proximityUuidstringUUID de proximidade iBeacon.
majorintegerValor principal.
minorintegerValor secundário.
relevantTextstringTexto exibido na tela de bloqueio perto deste beacon.

Objeto de imagem do passe

Anchor link to
CampoTipoDescrição
imageTypestringUm de icon, logo, strip, background, footer, thumbnail. icon e logo são obrigatórios.
datastring (Base64)Bytes da imagem.
contentTypestringTipo MIME, por exemplo, image/png.

Objeto de registro de passe

Anchor link to

Retornado pelos endpoints de listar/obter.

CampoTipoDescrição
serialNumberstringNúmero de série do passe.
passTypeIdentifierstringID do Tipo de Passe.
organizationNamestringNome da organização.
descriptionstringDescrição do passe.
createdAtstringTimestamp de criação (RFC 3339).
updatedAtstringTimestamp da última atualização (RFC 3339).
updateTagintegerTag de atualização atual.
passobjetoO objeto de passe completo, para edição.
userIdstringUser ID da Pushwoosh para o qual o passe foi emitido.