---
id: config-read-push-notification
title: "Read push notification"
description: "Reads the Google service account that the service uses to send push notifications. The response contains the saved JSON key with its private key in clear text. `serviceAccountCredential` is `null` when you have not configured push notifications."
sidebar_label: "Read push notification"
hide_title: true
hide_table_of_contents: true
api: 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
sidebar_class_name: "get api-method"
info_path: docs/consent-management-admin-api/igrant-io-api-documentation
custom_edit_url: null
---

> **Build this with an AI coding agent.** Install the iGrant.io Agent Skills, then ask your agent to build the integration:
>
> ```bash
> npx skills add L3-iGrant/skills
> ```


import ApiTabs from "@theme/ApiTabs";
import DiscriminatorTabs from "@theme/DiscriminatorTabs";
import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
import SecuritySchemes from "@theme/ApiExplorer/SecuritySchemes";
import MimeTabs from "@theme/MimeTabs";
import ParamsItem from "@theme/ParamsItem";
import ResponseSamples from "@theme/ResponseSamples";
import SchemaItem from "@theme/SchemaItem";
import SchemaTabs from "@theme/SchemaTabs";
import Markdown from "@theme/Markdown";
import OperationTabs from "@theme/OperationTabs";
import TabItem from "@theme/TabItem";

<h1 className={"openapi__heading"}>Read push notification</h1>

<MethodEndpoint method={"get"} path={"/v4/config/platform/push-notification"}></MethodEndpoint>



Reads the Google service account that the service uses to send push notifications. The response contains the saved JSON key with its private key in clear text. `serviceAccountCredential` is `null` when you have not configured push notifications.

<div><div><ApiTabs label={undefined} id={undefined}><TabItem label={"200"} value={"200"}><div>

The push notification settings.

</div><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={true} className={"schemaItem"}><details style={{}} className={"openapi-markdown__details"}><summary style={{}}><span className={"openapi-schema__container"}><strong className={"openapi-schema__property"}>pushNotification</strong><span className={"openapi-schema__name"}> object</span><span className={"openapi-schema__divider"}></span><span className={"openapi-schema__required"}>required</span></span></summary><div style={{"marginLeft":"1rem"}}><SchemaItem collapsible={true} className={"schemaItem"}><details style={{}} className={"openapi-markdown__details"}><summary style={{}}><span className={"openapi-schema__container"}><strong className={"openapi-schema__property"}>serviceAccountCredential</strong><span className={"openapi-schema__name"}> object</span><span className={"openapi-schema__divider"}></span><span className={"openapi-schema__nullable"}>nullable</span></span></summary><div style={{"marginLeft":"1rem"}}><div style={{"marginTop":".5rem","marginBottom":".5rem"}}>

The JSON key of a Google service account that can send Firebase Cloud Messaging push notifications: the file that you download from the Google Cloud console, with its member names as they are. The service sends the push notifications to your individuals with it.

</div><SchemaItem collapsible={false} name={"type"} required={true} schemaName={"string"} qualifierMessage={"**Possible values:** [`service_account`]"} schema={{"type":"string","description":"Must be `service_account`.","enum":["service_account"],"example":"service_account"}}></SchemaItem><SchemaItem collapsible={false} name={"project_id"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"ID of the Google Cloud project.","example":"acme-mobile-app"}}></SchemaItem><SchemaItem collapsible={false} name={"private_key_id"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"ID of the private key.","example":"<private-key-id>"}}></SchemaItem><SchemaItem collapsible={false} name={"private_key"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"The private key, a PEM RSA key (PKCS","example":"<private-key>"}}></SchemaItem><SchemaItem collapsible={false} name={"client_email"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Email address of the service account.","example":"push@acme-mobile-app.iam.gserviceaccount.com"}}></SchemaItem><SchemaItem collapsible={false} name={"client_id"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"Client ID of the service account.","example":"<client-id>"}}></SchemaItem><SchemaItem collapsible={false} name={"auth_uri"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"https://accounts.google.com/o/oauth2/auth"}}></SchemaItem><SchemaItem collapsible={false} name={"token_uri"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"https://oauth2.googleapis.com/token"}}></SchemaItem><SchemaItem collapsible={false} name={"auth_provider_x509_cert_url"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"https://www.googleapis.com/oauth2/v1/certs"}}></SchemaItem><SchemaItem collapsible={false} name={"client_x509_cert_url"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"https://www.googleapis.com/robot/v1/metadata/x509/push%40acme-mobile-app.iam.gserviceaccount.com"}}></SchemaItem><SchemaItem collapsible={false} name={"universe_domain"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"googleapis.com"}}></SchemaItem></div></details></SchemaItem></div></details></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"pushNotification\": {\n    \"serviceAccountCredential\": {\n      \"type\": \"service_account\",\n      \"project_id\": \"acme-mobile-app\",\n      \"private_key_id\": \"<private-key-id>\",\n      \"private_key\": \"<private-key>\",\n      \"client_email\": \"push@acme-mobile-app.iam.gserviceaccount.com\",\n      \"client_id\": \"<client-id>\",\n      \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\n      \"token_uri\": \"https://oauth2.googleapis.com/token\",\n      \"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",\n      \"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/push%40acme-mobile-app.iam.gserviceaccount.com\",\n      \"universe_domain\": \"googleapis.com\"\n    }\n  }\n}"} language={"json"}></ResponseSamples></TabItem><TabItem label={"Configured"} value={"Configured"}><ResponseSamples responseExample={"{\n  \"pushNotification\": {\n    \"serviceAccountCredential\": {\n      \"type\": \"service_account\",\n      \"project_id\": \"acme-mobile-app\",\n      \"private_key_id\": \"<private-key-id>\",\n      \"private_key\": \"<private-key>\",\n      \"client_email\": \"push@acme-mobile-app.iam.gserviceaccount.com\",\n      \"client_id\": \"<client-id>\",\n      \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\n      \"token_uri\": \"https://oauth2.googleapis.com/token\",\n      \"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",\n      \"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/push%40acme-mobile-app.iam.gserviceaccount.com\",\n      \"universe_domain\": \"googleapis.com\"\n    }\n  }\n}"} language={"json"}></ResponseSamples></TabItem><TabItem label={"Not configured"} value={"Not configured"}><ResponseSamples responseExample={"{\n  \"pushNotification\": {\n    \"serviceAccountCredential\": null\n  }\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"401"} value={"401"}><div>

The API key or the token is missing or not valid.

</div><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem><SchemaItem collapsible={false} name={"errorKey"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"A text code of the refusal that does not change when the text changes. Only some refusals have it, for example `organisation_suspended`, `feature_disabled` or `purpose_exists`."}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\",\n  \"errorKey\": \"string\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"403"} value={"403"}><div>

The API key or token does not allow this call. An API key without the scope of the operation gets the older body `{"Code", "Message"}`. An `X-SandboxOrgId` header that names another sandbox organisation than the one of the API key gets `{"errorCode", "errorDescription"}`. When a platform admin has turned off the feature of the operation for the organisation, the answer has `errorKey` `feature_disabled` and the member `feature` (the name of the feature).

</div><details style={{"textAlign":"left","marginBottom":"1rem"}} className={"openapi-markdown__details"} data-collaposed={true} open={false}><summary style={{}}><strong>Response Headers</strong></summary><ul style={{"marginLeft":"1rem"}}></ul></details><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><div><span className={"badge badge--info"}>anyOf</span><SchemaTabs><TabItem label={"MOD1"} value={"0-item-properties"}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem><SchemaItem collapsible={false} name={"errorKey"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"A text code of the refusal that does not change when the text changes. Only some refusals have it, for example `organisation_suspended`, `feature_disabled` or `purpose_exists`."}}></SchemaItem></TabItem><TabItem label={"Older error body"} value={"1-item-properties"}><SchemaItem collapsible={false} name={"Code"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","description":"The HTTP status.","example":403}}></SchemaItem><SchemaItem collapsible={false} name={"Message"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"What went wrong.","example":"Unauthorized access;User doesn't have enough permissions;"}}></SchemaItem></TabItem></SchemaTabs></div></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{}"} language={"json"}></ResponseSamples></TabItem><TabItem label={"Example"} value={"Example"}><ResponseSamples responseExample={"{\n  \"Code\": 403,\n  \"Message\": \"Unauthorized access;User doesn't have enough permissions;\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem><TabItem label={"500"} value={"500"}><div>

The organisation cannot be read.

</div><div><MimeTabs className={"openapi-tabs__mime"} schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs className={"openapi-tabs__schema"}><TabItem label={"Schema"} value={"Schema"}><details style={{}} className={"openapi-markdown__details response"} data-collapsed={false} open={true}><summary style={{}} className={"openapi-markdown__details-summary-response"}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"errorCode"} required={true} schemaName={"integer"} qualifierMessage={undefined} schema={{"type":"integer","example":400}}></SchemaItem><SchemaItem collapsible={false} name={"errorDescription"} required={true} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"Bad input parameter"}}></SchemaItem><SchemaItem collapsible={false} name={"errorKey"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","description":"A text code of the refusal that does not change when the text changes. Only some refusals have it, for example `organisation_suspended`, `feature_disabled` or `purpose_exists`."}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n  \"errorCode\": 400,\n  \"errorDescription\": \"Bad input parameter\",\n  \"errorKey\": \"string\"\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div></div>
      