cURL
curl --request PATCH \
--url https://api.passform.io/v1/pass/{templateId}/{passId}/metadata \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"metadata": {}
}'import requests
url = "https://api.passform.io/v1/pass/{templateId}/{passId}/metadata"
payload = { "metadata": {} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({metadata: {}})
};
fetch('https://api.passform.io/v1/pass/{templateId}/{passId}/metadata', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.passform.io/v1/pass/{templateId}/{passId}/metadata",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.passform.io/v1/pass/{templateId}/{passId}/metadata"
payload := strings.NewReader("{\n \"metadata\": {}\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.passform.io/v1/pass/{templateId}/{passId}/metadata")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.passform.io/v1/pass/{templateId}/{passId}/metadata")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"pass": {
"id": "WgXcQ",
"templateId": "fan-reward",
"accountId": "LDvGjp645u6Q6t9pbvog",
"code": "ASDF123",
"expiry": "2025-04-04T19:41:12.733Z",
"validFrom": "2025-04-04T19:41:12.733Z",
"voided": false,
"fields": [
{
"key": "voucher",
"label": "free drinks",
"value": "1"
}
],
"backFields": [
{
"key": "terms",
"label": "Terms and Condictions",
"value": "https://myshout.co/terms"
}
]
},
"googleUrl": "<string>",
"appleUrl": "<string>",
"webUrl": "<string>"
}{
"statusCode": 123,
"code": "<string>",
"error": "<string>",
"message": "<string>"
}{
"statusCode": 123,
"code": "<string>",
"error": "<string>",
"message": "<string>"
}{
"statusCode": 123,
"code": "<string>",
"error": "<string>",
"message": "<string>"
}passes
Patch v1pass metadata
Updates only the metadata for a pass without triggering wallet notifications
PATCH
/
v1
/
pass
/
{templateId}
/
{passId}
/
metadata
cURL
curl --request PATCH \
--url https://api.passform.io/v1/pass/{templateId}/{passId}/metadata \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"metadata": {}
}'import requests
url = "https://api.passform.io/v1/pass/{templateId}/{passId}/metadata"
payload = { "metadata": {} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({metadata: {}})
};
fetch('https://api.passform.io/v1/pass/{templateId}/{passId}/metadata', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.passform.io/v1/pass/{templateId}/{passId}/metadata",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.passform.io/v1/pass/{templateId}/{passId}/metadata"
payload := strings.NewReader("{\n \"metadata\": {}\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.passform.io/v1/pass/{templateId}/{passId}/metadata")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.passform.io/v1/pass/{templateId}/{passId}/metadata")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"pass": {
"id": "WgXcQ",
"templateId": "fan-reward",
"accountId": "LDvGjp645u6Q6t9pbvog",
"code": "ASDF123",
"expiry": "2025-04-04T19:41:12.733Z",
"validFrom": "2025-04-04T19:41:12.733Z",
"voided": false,
"fields": [
{
"key": "voucher",
"label": "free drinks",
"value": "1"
}
],
"backFields": [
{
"key": "terms",
"label": "Terms and Condictions",
"value": "https://myshout.co/terms"
}
]
},
"googleUrl": "<string>",
"appleUrl": "<string>",
"webUrl": "<string>"
}{
"statusCode": 123,
"code": "<string>",
"error": "<string>",
"message": "<string>"
}{
"statusCode": 123,
"code": "<string>",
"error": "<string>",
"message": "<string>"
}{
"statusCode": 123,
"code": "<string>",
"error": "<string>",
"message": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Body
application/json
Metadata is for your internal use. It is not exposed to users through passes. The metadata is limited to 5000 characters when serialized to JSON.
Show child attributes
Show child attributes
Response
Default Response
The current details of a pass instance
Show child attributes
Show child attributes
Example:
{
"id": "WgXcQ",
"templateId": "fan-reward",
"accountId": "LDvGjp645u6Q6t9pbvog",
"code": "ASDF123",
"expiry": "2025-04-04T19:41:12.733Z",
"validFrom": "2025-04-04T19:41:12.733Z",
"voided": false,
"fields": [
{
"key": "voucher",
"label": "free drinks",
"value": "1"
}
],
"backFields": [
{
"key": "terms",
"label": "Terms and Condictions",
"value": "https://myshout.co/terms"
}
]
}
⌘I

