콘텐츠로 건너뛰기

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
매개변수유형필수설명
pass객체패스를 설명하는 패스 객체.
images객체 배열아니요패스 이미지 (아이콘, 로고 등). 유효한 패스를 위해서는 iconlogo가 필요합니다.
userId문자열패스가 발급되는 Pushwoosh User ID.
applicationCode문자열Pushwoosh 애플리케이션 코드.
요청 예시
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" }
]
}
필드유형설명
serialNumber문자열생성된 패스의 서버 할당 고유 ID. 이를 사용하여 패스를 가져오거나(패스 조회) .pkpass를 다운로드(패스 다운로드)합니다.
message문자열결과 메시지.
응답 예시
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
매개변수유형필수설명
pass객체유효성을 검사할 패스 객체.
필드유형설명
valid불리언패스가 유효성 검사를 통과했는지 여부.
errors문자열 배열수정해야 하는 차단 문제.
warnings문자열 배열차단되지 않는 권고 사항.

패스 업데이트

Anchor link to

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

POST /api/pass/update/{serialNumber}

경로 매개변수

Anchor link to
매개변수유형설명
serialNumber문자열패스가 생성될 때 반환된 일련 번호.

요청 본문

Anchor link to
매개변수유형필수설명
updates객체새로운 내용이 포함된 전체 패스 객체.
applicationCode문자열Pushwoosh 애플리케이션 코드.

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

필드유형설명
success불리언업데이트 성공 여부.
updateTag정수새 업데이트 태그 (Unix 타임스탬프).
message문자열결과 메시지.

패스 목록 조회

Anchor link to

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

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

쿼리 매개변수

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

패스 조회

Anchor link to

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

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

경로 매개변수

Anchor link to
매개변수유형설명
applicationCode문자열Pushwoosh 애플리케이션 코드.
serialNumber문자열패스 일련 번호.

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

패스 다운로드

Anchor link to

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

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

필드유형설명
pkpassData문자열 (Base64).pkpass 파일.
filename문자열제안된 파일 이름.

패스 삭제

Anchor link to

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

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

필드유형설명
success불리언패스가 삭제되었는지 여부.
message문자열결과 메시지.

패스 등록 조회

Anchor link to

패스를 추가하고 업데이트에 등록된 기기 목록을 조회합니다.

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

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

필드유형설명
deviceLibraryIdentifier문자열Apple 기기 라이브러리 식별자.
pushToken문자열기기의 패스 푸시 토큰.

구성 조회

Anchor link to

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

GET /api/config?applicationCode=XXXXX-XXXXX

필드유형설명
teamIdentifier문자열인증서의 Apple Team ID.
passTypeIdentifier문자열인증서의 Pass Type ID.
organizationName문자열인증서의 조직 이름.
hasCertificate불리언인증서가 구성되었는지 여부.
webServiceUrl문자열패스 웹 서비스의 기본 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

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

객체 참조

Anchor link to

패스 객체

Anchor link to
필드유형설명
formatVersion정수패스 형식 버전. 기본값은 1입니다.
passTypeIdentifier문자열Apple Pass Type ID (pass.com.yourcompany.passtype). 인증서에서 기본값을 가져옵니다.
serialNumber문자열생성 시 서버에서 할당되며 패스를 식별합니다.
teamIdentifier문자열Apple Team ID. 인증서에서 기본값을 가져옵니다.
organizationName문자열패스에 표시되는 조직. 인증서에서 기본값을 가져옵니다.
description문자열사람이 읽을 수 있는 설명 (Apple에서 요구).
boardingPass / coupon / eventTicket / storeCard / generic객체패스 스타일. 정확히 하나만 설정해야 합니다. 필드 그룹 객체를 참조하십시오.
backgroundColor문자열배경색, rgb(r, g, b).
foregroundColor문자열전경(텍스트)색, rgb(r, g, b).
labelColor문자열필드 레이블 색, rgb(r, g, b).
logoText문자열로고 옆에 표시되는 텍스트.
suppressStripShine불리언스트립 이미지의 광택 효과를 비활성화합니다.
barcodes배열패스에 표시되는 바코드.
locations배열패스를 관련성 있게 만드는 위치.
beacons배열패스를 관련성 있게 만드는 비콘.
relevantDate문자열패스가 관련성을 갖게 되는 ISO 8601 날짜.
maxDistance정수위치 관련성을 위한 최대 거리(미터).
expirationDate문자열ISO 8601 만료 날짜.
voided불리언패스를 무효로 표시합니다.
groupingIdentifier문자열관련 패스(이벤트 티켓/탑승권)를 그룹화합니다.
userInfo객체 (맵)임의의 키/값 앱 데이터.

필드 그룹 객체

Anchor link to

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

필드유형설명
headerFields배열패스 헤더에 표시됩니다 (Wallet에서 스택될 때 보임).
primaryFields배열가장 눈에 띄는 필드.
secondaryFields배열기본 필드 아래.
auxiliaryFields배열보조 필드 아래의 추가 필드.
backFields배열패스 뒷면에 표시됩니다.

boardingPass에는 추가로 transitType(PKTransitTypeAir, PKTransitTypeTrain, PKTransitTypeBus, PKTransitTypeBoat 또는 PKTransitTypeGeneric)이 있습니다.

필드 객체

Anchor link to
필드유형설명
key문자열패스 내에서 고유한 필드 키.
label문자열필드 레이블.
value문자열필드 값 (텍스트 또는 숫자를 문자열로).
changeMessage문자열값이 변경될 때 표시되는 메시지 (%@를 자리 표시자로 사용).
textAlignment문자열PKTextAlignment 값.
dateStyle / timeStyle문자열날짜/시간 서식 지정을 위한 PKDateStyle.
isRelative불리언현재를 기준으로 날짜를 표시합니다.
numberStyle문자열숫자 서식 지정을 위한 PKNumberStyle.
currencyCode문자열ISO 4217 통화 코드.
dataDetectorTypes문자열 배열값에 적용할 데이터 감지기.

바코드 객체

Anchor link to
필드유형설명
format문자열PKBarcodeFormatQR, PKBarcodeFormatPDF417, PKBarcodeFormatAztec 또는 PKBarcodeFormatCode128.
message문자열바코드에 인코딩된 데이터.
messageEncoding문자열텍스트 인코딩, 일반적으로 iso-8859-1.
altText문자열바코드 아래에 표시되는 텍스트.

위치 객체

Anchor link to
필드유형설명
latitude숫자위도.
longitude숫자경도.
altitude숫자고도(미터).
relevantText문자열이 위치 근처의 잠금 화면에 표시되는 텍스트.

비콘 객체

Anchor link to
필드유형설명
proximityUuid문자열iBeacon 근접 UUID.
major정수Major 값.
minor정수Minor 값.
relevantText문자열이 비콘 근처의 잠금 화면에 표시되는 텍스트.

패스 이미지 객체

Anchor link to
필드유형설명
imageType문자열icon, logo, strip, background, footer, thumbnail 중 하나. iconlogo는 필수입니다.
data문자열 (Base64)이미지 바이트.
contentType문자열MIME 유형, 예: image/png.

패스 레코드 객체

Anchor link to

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

필드유형설명
serialNumber문자열패스 일련 번호.
passTypeIdentifier문자열Pass Type ID.
organizationName문자열조직 이름.
description문자열패스 설명.
createdAt문자열생성 타임스탬프 (RFC 3339).
updatedAt문자열마지막 업데이트 타임스탬프 (RFC 3339).
updateTag정수현재 업데이트 태그.
pass객체편집을 위한 전체 패스 객체.
userId문자열패스가 발급된 Pushwoosh User ID.