Google Cloud Storage Data Transfer API
The Google Cloud Storage (GCS) Data Transfer API allows tenants to schedule and manage background ingestion jobs that transfer structured datasets from an external GCS bucket into Replenit.
Supported Transfer Types
- One-time historical transfers – Import your historical data
- Recurring daily transfers – Automated daily syncs
- Recurring hourly transfers – Near real-time data updates
ℹ️All datasets ingested through this mechanism must follow the same schema and contract defined in the official Replenit API documentation.
Base URL
https://api.replen.it/ingestion/google-cloud-storageAuthentication
All requests require a valid API key.
Required Header
x-replenit-auth-key: YOUR_BASE64_ACCESS_KEYAPI keys are generated and managed in the Replenit platform under:
Replenit Dashboard → Settings → API Key ManagementThe Tenant ID is also visible in this section.
ℹ️If access is required, contact your platform administrator or your Replenit Customer Success Manager (CSM). See the full Authentication Guide.
Prerequisites – Google Cloud Storage Permissions
Before registering any transfer job, the tenant must grant access to the designated Replenit service account on their GCS bucket.
⚠️Without proper permissions, transfer jobs will fail with access denied errors.
Required Access
- Principal: Provided by Replenit Support
- Role: Storage Object Viewer (
roles/storage.objectViewer)
Tenant Setup Steps
- 1
Open Google Cloud Console
- 2
Navigate to the source GCS bucket
- 3
Go to Permissions
- 4
Click Grant Access
- 5
Paste the provided service account email
- 6
Assign role: Storage Object Viewer
- 7
Save
Request Body Model
All POST endpoints use the following object:
TenantGoogleCloudStorageOptions
| Field | Type | Required | Description |
|---|---|---|---|
| TenantId | GUID | Yes | Tenant identifier |
| BucketName | string | Yes | Name of the GCS bucket |
| HistoricalDataFolderPaths | string[] | No | Folder prefixes for historical transfer |
| DataFolderPaths | string[] | No | Folder prefixes for recurring transfer |
| HourlyJobStartingMinuteUTC | integer (0-59) | No | Minute for hourly job |
| DailyJobStartingHourUTC | integer (0-23) | No | Hour for daily job (UTC) |
| DailyJobStartingMinuteUTC | integer (0-59) | No | Minute for daily job (UTC) |
Endpoints
POSTRegister Historical Transfer
Registers a one-time background job for historical data ingestion.
POST /register/historical-transferExample Request
{
"TenantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"BucketName": "my_bucket_replenit",
"HistoricalDataFolderPaths": [
"customers/Historical/",
"products/Historical/",
"orders/Historical/"
]
}Success Response
{
"Success": true,
"Message": "Historical transfer registered.",
"Data": {
"JobId": "12345"
}
}POSTRegister Daily Transfer
Registers or updates a recurring daily ingestion job.
POST /register/daily-transferExample Request
{
"TenantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"BucketName": "my_bucket_replenit",
"DataFolderPaths": [
"customers/",
"products/",
"orders/"
],
"DailyJobStartingHourUTC": 2,
"DailyJobStartingMinuteUTC": 30
}Success Response
{
"Success": true,
"Message": "Daily transfer registered.",
"Data": {
"RecurringJobId": "daily-transfer/3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
}POSTRegister Hourly Transfer
Registers or updates a recurring hourly ingestion job.
POST /register/hourly-transferExample Request
{
"TenantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"BucketName": "my_bucket_replenit",
"DataFolderPaths": [
"orders/"
],
"HourlyJobStartingMinuteUTC": 15
}Success Response
{
"Success": true,
"Message": "Hourly transfer registered.",
"Data": {
"RecurringJobId": "hourly-transfer/3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
}DELETEUnregister Recurring Transfer
Removes a recurring daily or hourly job.
DELETE /unregisterQuery Parameter
| Parameter | Type | Required | Description |
|---|---|---|---|
| jobId | string | Yes | Recurring job identifier |
Example
DELETE https://api.replen.it/ingestion/google-cloud-storage/unregister?jobId=daily-transfer/3fa85f64-5717-4562-b3fc-2c963f66afa6Success Response
{
"Success": true,
"Message": "Transfer unregistered.",
"Data": {}
}End-to-End Flow
Grant Bucket Access
Tenant grants Storage Object Viewer permission to Replenit service account.
Prepare Dataset Files
Place datasets into configured folder paths. Example structure:
customers/
products/
orders/
customers/Historical/
orders/Historical/Ensure Dataset Contract Compliance
All files must match the REST API schema defined in the Complete Guide.
Specifically:
⚠️Field names, types, and validation rules must match exactly.
Register Transfer Job
Call one of:
/register/historical-transfer/register/daily-transfer/register/hourly-transfer
Background Processing
Replenit ingestion engine:
- 1Scans configured folder paths
- 2Validates records
- 3Applies upsert semantics
- 4Logs validation errors if present
Validation and error structure follow the standard API error model described in the Complete Guide.
Dataset Mapping to API Contracts
All GCS ingestion must conform to the same DTO structures as REST ingestion.
| Dataset | API Equivalent | Documentation |
|---|---|---|
| Customers | POST /customers/{tenantId} | Customers API |
| Orders | POST /orders/{tenantId} | Orders API |
| Products | POST /products/{tenantId} | Products API |
Critical Mapping Rules
- Identifier priority follows tenant configuration in
Replenit Dashboard → Settings → Tenant Settings - Order product identifiers must match ingested Products
- Data types must match API expectations
- Date fields must be ISO 8601
- Currency must follow ISO 4217
- No schema transformation is performed automatically
Operational Notes
- Historical transfers are one-time jobs
- Daily and hourly transfers are idempotent recurring schedules
- Unregistering a job does not cancel running executions
- Validation errors are reported using the same structure as REST endpoints
- Rate limits and authentication rules are identical to the standard ingestion API
ℹ️For full ingestion, validation, identifier, and error specifications, see the Complete Guide.
Need help or have questions?
Our team is ready to assist you. Reach out to us at support@replen.it
