Access the Firebase Management API with managed OAuth authentication. Manage Firebase projects and apps (Web, Android, iOS) with full CRUD operations.
# List Firebase projects
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/firebase/v1beta1/projects')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
https://api.maton.ai/firebase/{native-api-path}
Maton proxies requests to firebase.googleapis.com and automatically injects your OAuth token.
All requests require the Maton API key in the Authorization header:
Authorization: Bearer $MATON_API_KEY
Environment Variable: Set your API key as MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Manage your Firebase OAuth connections at https://api.maton.ai.
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections?app=firebase&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'firebase'}).encode()
req = urllib.request.Request('https://api.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"connection": {
"connection_id": "{connection_id}",
"status": "ACTIVE",
"creation_time": "2025-12-08T07:20:53.488460Z",
"last_updated_time": "2026-01-31T20:03:32.593153Z",
"url": "https://connect.maton.ai/?session_token=...",
"app": "firebase",
"metadata": {}
}
}
Open the returned url in a browser to complete OAuth authorization.
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
If you have multiple Firebase connections, specify which one to use with the Maton-Connection header:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/firebase/v1beta1/projects')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '{connection_id}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
If you have multiple connections, always include this header to ensure requests go to the intended account.
List all Firebase projects accessible to the authenticated user.
GET /firebase/v1beta1/projects
Response:
{
"results": [
{
"projectId": "my-firebase-project",
"projectNumber": "123456789",
"displayName": "My Firebase Project",
"name": "projects/my-firebase-project",
"resources": {
"hostingSite": "my-firebase-project"
},
"state": "ACTIVE",
"etag": "1_bc06d94f-cf77-4689-be01-576702b23f6a"
}
]
}
GET /firebase/v1beta1/projects/{projectId}
PATCH /firebase/v1beta1/projects/{projectId}?updateMask=displayName
Content-Type: application/json
{
"displayName": "Updated Project Name"
}
List Google Cloud projects that can have Firebase added.
GET /firebase/v1beta1/availableProjects
Add Firebase services to an existing Google Cloud project.
POST /firebase/v1beta1/projects/{projectId}:addFirebase
Content-Type: application/json
{}
This returns a long-running operation. Check the operation status with:
GET /firebase/v1beta1/operations/{operationId}
GET /firebase/v1beta1/projects/{projectId}/adminSdkConfig
GET /firebase/v1beta1/projects/{projectId}/webApps
GET /firebase/v1beta1/projects/{projectId}/webApps/{appId}
POST /firebase/v1beta1/projects/{projectId}/webApps
Content-Type: application/json
{
"displayName": "My Web App"
}
PATCH /firebase/v1beta1/projects/{projectId}/webApps/{appId}?updateMask=displayName
Content-Type: application/json
{
"displayName": "Updated Web App Name"
}
GET /firebase/v1beta1/projects/{projectId}/webApps/{appId}/config
Response:
{
"projectId": "my-firebase-project",
"appId": "1:123456789:web:abc123",
"apiKey": "AIzaSy...",
"authDomain": "my-firebase-project.firebaseapp.com",
"storageBucket": "my-firebase-project.firebasestorage.app",
"messagingSenderId": "123456789",
"measurementId": "G-XXXXXXXXXX",
"projectNumber": "123456789"
}
POST /firebase/v1beta1/projects/{projectId}/webApps/{appId}:remove
Content-Type: application/json
{
"immediate": true
}
POST /firebase/v1beta1/projects/{projectId}/webApps/{appId}:undelete
Content-Type: application/json
{}
GET /firebase/v1beta1/projects/{projectId}/androidApps
GET /firebase/v1beta1/projects/{projectId}/androidApps/{appId}
POST /firebase/v1beta1/projects/{projectId}/androidApps
Content-Type: application/json
{
"displayName": "My Android App",
"packageName": "com.example.myapp"
}
PATCH /firebase/v1beta1/projects/{projectId}/androidApps/{appId}?updateMask=displayName
Content-Type: application/json
{
"displayName": "Updated Android App Name"
}
Returns the google-services.json configuration.
GET /firebase/v1beta1/projects/{projectId}/androidApps/{appId}/config
POST /firebase/v1beta1/projects/{projectId}/androidApps/{appId}:remove
Content-Type: application/json
{
"immediate": true
}
GET /firebase/v1beta1/projects/{projectId}/androidApps/{appId}/sha
POST /firebase/v1beta1/projects/{projectId}/androidApps/{appId}/sha
Content-Type: application/json
{
"shaHash": "1234567890ABCDEF1234567890ABCDEF12345678",
"certType": "SHA_1"
}
DELETE /firebase/v1beta1/projects/{projectId}/androidApps/{appId}/sha/{shaId}
GET /firebase/v1beta1/projects/{projectId}/iosApps
GET /firebase/v1beta1/projects/{projectId}/iosApps/{appId}
POST /firebase/v1beta1/projects/{projectId}/iosApps
Content-Type: application/json
{
"displayName": "My iOS App",
"bundleId": "com.example.myapp"
}
PATCH /firebase/v1beta1/projects/{projectId}/iosApps/{appId}?updateMask=displayName
Content-Type: application/json
{
"displayName": "Updated iOS App Name"
}
Returns the GoogleService-Info.plist configuration.
GET /firebase/v1beta1/projects/{projectId}/iosApps/{appId}/config
POST /firebase/v1beta1/projects/{projectId}/iosApps/{appId}:remove
Content-Type: application/json
{
"immediate": true
}
GET /firebase/v1beta1/projects/{projectId}/analyticsDetails
POST /firebase/v1beta1/projects/{projectId}:addGoogleAnalytics
Content-Type: application/json
{
"analyticsAccountId": "123456789"
}
POST /firebase/v1beta1/projects/{projectId}:removeAnalytics
Content-Type: application/json
{
"analyticsPropertyId": "properties/123456789"
}
GET /firebase/v1beta1/projects/{projectId}/availableLocations
Use pageSize and pageToken for pagination:
GET /firebase/v1beta1/projects?pageSize=10&pageToken={nextPageToken}
Response includes nextPageToken when more results exist:
{
"results": [...],
"nextPageToken": "..."
}
const response = await fetch(
'https://api.maton.ai/firebase/v1beta1/projects',
{
headers: {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
}
}
);
const data = await response.json();
import os
import requests
response = requests.get(
'https://api.maton.ai/firebase/v1beta1/projects',
headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}
)
data = response.json()
import os
import requests
response = requests.post(
'https://api.maton.ai/firebase/v1beta1/projects/my-project/webApps',
headers={
'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}',
'Content-Type': 'application/json'
},
json={'displayName': 'My New Web App'}
)
data = response.json()
1:PROJECT_NUMBER:PLATFORM:HASHupdateMask query parameter specifying which fields to update (e.g., ?updateMask=displayName)/firebase/v1beta1/operations/{operationId}curl -g when URLs contain brackets to disable glob parsingjq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments| Status | Meaning |
|---|---|
| -------- | --------- |
| 400 | Missing Firebase connection |
| 401 | Invalid or missing Maton API key |
| 403 | Insufficient permissions for the requested operation |
| 404 | Project or app not found |
| 429 | Rate limited |
| 4xx/5xx | Passthrough error from Firebase API |
共 2 个版本