콘텐츠로 건너뛰기

Apple Wallet PassKit API

PassKit Designer API를 사용하면 프로그래밍 방식으로 Apple Wallet 패스를 생성, 업데이트, 다운로드 및 관리할 수 있습니다. Control Panel의 패스 빌더가 수행하는 것과 동일한 작업을 지원합니다. 이를 사용하여 로열티 카드, 쿠폰, 이벤트 티켓, 탑승권, 스토어 카드를 발급하고, 사용자의 기기에 이미 설치된 패스에 실시간 업데이트를 푸시할 수 있습니다.

기본 URL

Anchor link to
https://apple-passkit.svc-nue.pushwoosh.com

모든 엔드포인트는 HTTPS를 통해 제공됩니다. 요청과 응답은 별도로 명시되지 않는 한 application/json을 사용합니다.

모든 요청에는 Pushwoosh API 액세스 토큰이 포함된 Authorization 헤더가 있어야 합니다:

Authorization: Token <api-token>

토큰을 소유한 계정은 applicationCode로 참조되는 애플리케이션을 소유해야 합니다. 다른 계정에 속한 애플리케이션에 대한 요청은 403 Forbidden을 반환합니다.

  • 필드 이름 지정: JSON 필드는 lowerCamelCase를 사용합니다 (예: passTypeIdentifier, serialNumber, backgroundColor).
  • 채워지지 않은 필드: 응답에는 비어 있거나 0 값인 경우에도 모든 필드가 포함됩니다.
  • 바이너리 데이터: pkpassData 및 이미지 data와 같은 bytes 필드는 JSON에서 Base64로 인코딩된 문자열입니다.
  • 시리얼 번호: serialNumber는 패스가 생성될 때 항상 서버에서 할당됩니다. 생성 시 보내는 모든 값은 무시되며, 이후 모든 작업에서 패스를 식별합니다.

오류 응답

Anchor link to

API는 내부 상태 코드를 HTTP 상태 코드로 매핑합니다:

HTTP 상태의미
400 Bad Request잘못된 인수—필수 필드가 누락되었거나 형식이 잘못되었습니다.
401 UnauthorizedAuthorization 헤더가 누락되었거나 유효하지 않습니다.
403 Forbidden애플리케이션이 호출자의 계정에 속하지 않습니다.
404 Not Found패스, 템플릿 또는 애플리케이션을 찾을 수 없습니다.
503 Service Unavailable서비스 용량이 초과되었거나 일시적으로 사용할 수 없습니다.

엔드포인트

Anchor link to
메서드경로설명
POST/api/pass/validate패스 구성 유효성 검사
POST/api/pass/create.pkpass 생성
POST/api/pass/update/{serialNumber}기존 패스 업데이트 및 기기 알림
GET/api/passes애플리케이션의 모든 패스 목록 조회
GET/api/pass/{applicationCode}/{serialNumber}단일 패스 가져오기
GET/api/pass/{applicationCode}/{serialNumber}/download기존 패스의 .pkpass 다운로드
DELETE/api/pass/{applicationCode}/{serialNumber}패스 삭제
GET/api/pass/{serialNumber}/registrations패스에 등록된 기기 목록 조회
GET/api/config애플리케이션의 PassKit 구성 가져오기
GET/api/templates사용 가능한 패스 템플릿 목록 조회
GET/api/templates/{filename}단일 템플릿 가져오기

패스 생성

Anchor link to

새 패스를 생성, 서명 및 저장한 다음 서버에서 할당한 시리얼 번호를 반환합니다.

POST /api/pass/create

요청 본문

Anchor link to
매개변수유형필수설명
passobject패스를 설명하는 패스 객체입니다.
imagesarray of objects아니요패스 이미지 (아이콘, 로고 등). 유효한 패스를 위해서는 iconlogo가 필요합니다.
userIdstring패스가 발급되는 Pushwoosh User ID입니다.
applicationCodestringPushwoosh 애플리케이션 코드입니다.
요청 예시
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" }
]
}
필드유형설명
serialNumberstring생성된 패스의 서버 할당 고유 ID입니다. 이를 사용하여 패스를 가져오거나(패스 가져오기) .pkpass를 다운로드(패스 다운로드)할 수 있습니다.
messagestring결과 메시지입니다.
응답 예시
Anchor link to
{
"serialNumber": "a1b2c3d4-1234-5678-9abc-def012345678",
"message": "Pass created successfully"
}

패스 유효성 검사

Anchor link to

파일을 생성하지 않고 Apple의 사양에 대해 패스 구성의 유효성을 검사합니다. create를 호출하기 전에 유용합니다.

POST /api/pass/validate

요청 본문

Anchor link to
매개변수유형필수설명
passobject유효성을 검사할 패스 객체입니다.
필드유형설명
validboolean패스가 유효성 검사를 통과했는지 여부입니다.
errorsarray of strings수정해야 하는 차단 문제입니다.
warningsarray of strings차단되지 않는 권고 사항입니다.

패스 업데이트

Anchor link to

새로운 콘텐츠로 패스를 다시 생성하고, 다시 서명하고, 업데이트 태그를 증가시키고, 패스를 등록한 모든 기기에 자동 푸시 알림을 보냅니다. 그러면 iOS가 업데이트된 버전을 백그라운드에서 가져와 설치합니다.

POST /api/pass/update/{serialNumber}

경로 매개변수

Anchor link to
매개변수유형설명
serialNumberstring패스가 생성될 때 반환된 시리얼 번호입니다.

요청 본문

Anchor link to
매개변수유형필수설명
updatesobject새로운 콘텐츠가 포함된 전체 패스 객체입니다.
applicationCodestringPushwoosh 애플리케이션 코드입니다.

serialNumber(경로에서)와 패스의 인증 토큰은 사용자가 보내는 내용과 관계없이 서버에 의해 보존됩니다.

필드유형설명
successboolean업데이트 성공 여부입니다.
updateTaginteger새 업데이트 태그(Unix 타임스탬프)입니다.
messagestring결과 메시지입니다.

패스 목록 조회

Anchor link to

애플리케이션에 대해 저장된 패스의 페이지네이션되고 정렬된 목록을 반환합니다.

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

쿼리 매개변수

Anchor link to
매개변수유형필수설명
applicationCodestringPushwoosh 애플리케이션 코드입니다.
orderBystring아니요정렬 필드: UPDATED(기본값) 또는 CREATED.
orderDirectionstring아니요정렬 방향: DESC(기본값, 최신순) 또는 ASC.
pageinteger아니요0부터 시작하는 페이지 인덱스입니다. 기본값은 0입니다.
perPageinteger아니요페이지 크기입니다. 0이거나 생략하면 서버 기본값을 사용합니다.
필드유형설명
passesarray of objects패스 레코드의 현재 페이지입니다.
pageinteger반환된 페이지 인덱스입니다.
perPageinteger이 응답에 사용된 페이지 크기입니다.
totalinteger모든 페이지에 걸쳐 애플리케이션의 총 패스 수입니다.
응답 예시
Anchor link to
{
"passes": [ /* pass records */ ],
"page": 0,
"perPage": 20,
"total": 137
}

패스 가져오기

Anchor link to

전체 패스 객체를 포함하여 저장된 단일 패스를 반환합니다.

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

경로 매개변수

Anchor link to
매개변수유형설명
applicationCodestringPushwoosh 애플리케이션 코드입니다.
serialNumberstring패스 시리얼 번호입니다.

{ "pass": { ... } }, 단일 패스 레코드를 반환합니다.

패스 다운로드

Anchor link to

기존 패스의 저장된 .pkpass 파일을 반환합니다.

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

필드유형설명
pkpassDatastring (Base64).pkpass 파일입니다.
filenamestring제안된 파일 이름입니다.

패스 삭제

Anchor link to

패스 레코드와 저장된 .pkpass 파일을 제거합니다.

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

필드유형설명
successboolean패스가 삭제되었는지 여부입니다.
messagestring결과 메시지입니다.

패스 등록 정보 가져오기

Anchor link to

패스를 추가하고 업데이트에 등록된 기기 목록을 보여줍니다.

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

{ "registrations": [ ... ] }를 반환하며, 각 항목에는 다음이 포함됩니다:

필드유형설명
deviceLibraryIdentifierstringApple 기기 라이브러리 식별자입니다.
pushTokenstring기기의 패스 푸시 토큰입니다.

구성 가져오기

Anchor link to

인증서에서 애플리케이션에 대해 확인된 PassKit 구성을 반환합니다.

GET /api/config?applicationCode=XXXXX-XXXXX

필드유형설명
teamIdentifierstring인증서의 Apple Team ID입니다.
passTypeIdentifierstring인증서의 Pass Type ID입니다.
organizationNamestring인증서의 조직 이름입니다.
hasCertificateboolean인증서가 구성되었는지 여부입니다.
webServiceUrlstring패스 웹 서비스의 기본 URL입니다. 클라이언트는 /v1/passes/{passType}/{serial}?token={authToken}을 추가하여 설치 링크를 만듭니다.

사용 가능한 패스 템플릿 목록을 보거나, 시작점으로 사용할 수 있는 패스 객체로 하나를 가져옵니다.

GET /api/templates{ "templates": [ { "filename", "name", "description", "style" } ] }를 반환합니다.

GET /api/templates/{filename}{ "template": { ...pass object... } }를 반환합니다.

QR 코드로 패스 공유하기

Anchor link to

사용자가 QR 코드를 스캔하거나 링크를 탭하여 패스를 추가할 수 있도록 하려면 패스 설치 URL을 QR 코드로 인코딩하세요. URL은 API에서 이미 받은 값을 사용하여 만들어집니다:

{webServiceUrl}/v1/passes/{passTypeIdentifier}/{serialNumber}?token={authenticationToken}
URL 부분가져올 위치
webServiceUrlGET /api/configwebServiceUrl
passTypeIdentifier패스 레코드pass.passTypeIdentifier (list/get에서)
serialNumber패스 레코드serialNumber
authenticationToken패스 레코드pass.authenticationToken

예시:

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

이 URL을 QR 라이브러리를 사용하여 QR 코드로 렌더링하세요. 사용자가 스캔하면 기기에서 링크가 열리고 최신 .pkpass가 다운로드되며 Wallet에서 추가하라는 메시지가 표시됩니다. 이 과정에서 기기도 업데이트에 등록됩니다.

객체 참조

Anchor link to

패스 객체

Anchor link to
필드유형설명
formatVersioninteger패스 형식 버전입니다. 기본값은 1입니다.
passTypeIdentifierstringApple Pass Type ID (pass.com.yourcompany.passtype). 인증서에서 기본값을 가져옵니다.
serialNumberstring생성 시 서버에서 할당되며, 패스를 식별합니다.
teamIdentifierstringApple Team ID. 인증서에서 기본값을 가져옵니다.
organizationNamestring패스에 표시되는 조직입니다. 인증서에서 기본값을 가져옵니다.
descriptionstring사람이 읽을 수 있는 설명(Apple에서 요구).
boardingPass / coupon / eventTicket / storeCard / genericobject패스 스타일입니다. 정확히 하나만 설정해야 합니다. 필드 그룹을 참조하세요.
backgroundColorstring배경색, rgb(r, g, b).
foregroundColorstring전경(텍스트) 색, rgb(r, g, b).
labelColorstring필드 레이블 색, rgb(r, g, b).
logoTextstring로고 옆에 표시되는 텍스트입니다.
suppressStripShineboolean스트립 이미지의 광택 효과를 비활성화합니다.
barcodesarray패스에 표시되는 바코드입니다.
locationsarray패스를 관련성 있게 만드는 위치입니다.
beaconsarray패스를 관련성 있게 만드는 비콘입니다.
relevantDatestring패스가 관련성을 갖게 되는 ISO 8601 날짜입니다.
maxDistanceinteger위치 관련성을 위한 최대 거리(미터)입니다.
expirationDatestringISO 8601 만료 날짜입니다.
voidedboolean패스를 무효로 표시합니다.
groupingIdentifierstring관련 패스(이벤트 티켓/탑승권)를 그룹화합니다.
userInfoobject (map)임의의 키/값 앱 데이터입니다.

필드 그룹 객체

Anchor link to

각 패스 스타일(boardingPass, coupon, eventTicket, storeCard, generic)은 필드를 영역으로 그룹화합니다:

필드유형설명
headerFieldsarray패스 헤더에 표시됩니다(Wallet에 쌓여 있을 때 보임).
primaryFieldsarray가장 눈에 띄는 필드입니다.
secondaryFieldsarray기본 필드 아래에 있습니다.
auxiliaryFieldsarray보조 필드 아래의 추가 필드입니다.
backFieldsarray패스 뒷면에 표시됩니다.

boardingPass는 추가로 transitType(PKTransitTypeAir, PKTransitTypeTrain, PKTransitTypeBus, PKTransitTypeBoat 또는 PKTransitTypeGeneric)을 가집니다.

필드 객체

Anchor link to
필드유형설명
keystring패스 내에서 고유한 필드 키입니다.
labelstring필드 레이블입니다.
valuestring필드 값(텍스트 또는 숫자를 문자열로).
changeMessagestring값이 변경될 때 표시되는 메시지(자리 표시자로 %@ 사용).
textAlignmentstringPKTextAlignment 값입니다.
dateStyle / timeStylestring날짜/시간 서식 지정을 위한 PKDateStyle입니다.
isRelativeboolean현재를 기준으로 날짜를 표시합니다.
numberStylestring숫자 서식 지정을 위한 PKNumberStyle입니다.
currencyCodestringISO 4217 통화 코드입니다.
dataDetectorTypesarray of strings값에 적용할 데이터 탐지기입니다.

바코드 객체

Anchor link to
필드유형설명
formatstringPKBarcodeFormatQR, PKBarcodeFormatPDF417, PKBarcodeFormatAztec 또는 PKBarcodeFormatCode128입니다.
messagestring바코드에 인코딩된 데이터입니다.
messageEncodingstring텍스트 인코딩, 일반적으로 iso-8859-1입니다.
altTextstring바코드 아래에 표시되는 텍스트입니다.

위치 객체

Anchor link to
필드유형설명
latitudenumber위도입니다.
longitudenumber경도입니다.
altitudenumber고도(미터)입니다.
relevantTextstring이 위치 근처의 잠금 화면에 표시되는 텍스트입니다.

비콘 객체

Anchor link to
필드유형설명
proximityUuidstringiBeacon 근접 UUID입니다.
majorintegerMajor 값입니다.
minorintegerMinor 값입니다.
relevantTextstring이 비콘 근처의 잠금 화면에 표시되는 텍스트입니다.

패스 이미지 객체

Anchor link to
필드유형설명
imageTypestringicon, logo, strip, background, footer, thumbnail 중 하나입니다. iconlogo는 필수입니다.
datastring (Base64)이미지 바이트입니다.
contentTypestringMIME 유형, 예: image/png.

패스 레코드 객체

Anchor link to

list/get 엔드포인트에서 반환됩니다.

필드유형설명
serialNumberstring패스 시리얼 번호입니다.
passTypeIdentifierstringPass Type ID입니다.
organizationNamestring조직 이름입니다.
descriptionstring패스 설명입니다.
createdAtstring생성 타임스탬프(RFC 3339)입니다.
updatedAtstring마지막 업데이트 타임스탬프(RFC 3339)입니다.
updateTaginteger현재 업데이트 태그입니다.
passobject편집을 위한 전체 패스 객체입니다.
userIdstring패스가 발급된 Pushwoosh User ID입니다.