Data Connection

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-storage

Authentication

All requests require a valid API key.

Required Header

x-replenit-auth-key: YOUR_BASE64_ACCESS_KEY

API keys are generated and managed in the Replenit platform under:

Replenit Dashboard → Settings → API Key Management

The 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. 1

    Open Google Cloud Console

  2. 2

    Navigate to the source GCS bucket

  3. 3

    Go to Permissions

  4. 4

    Click Grant Access

  5. 5

    Paste the provided service account email

  6. 6

    Assign role: Storage Object Viewer

  7. 7

    Save

Request Body Model

All POST endpoints use the following object:

TenantGoogleCloudStorageOptions

FieldTypeRequiredDescription
TenantIdGUIDYesTenant identifier
BucketNamestringYesName of the GCS bucket
HistoricalDataFolderPathsstring[]NoFolder prefixes for historical transfer
DataFolderPathsstring[]NoFolder prefixes for recurring transfer
HourlyJobStartingMinuteUTCinteger (0-59)NoMinute for hourly job
DailyJobStartingHourUTCinteger (0-23)NoHour for daily job (UTC)
DailyJobStartingMinuteUTCinteger (0-59)NoMinute for daily job (UTC)

Endpoints

POSTRegister Historical Transfer

Registers a one-time background job for historical data ingestion.

POST /register/historical-transfer

Example 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-transfer

Example 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-transfer

Example 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 /unregister

Query Parameter

ParameterTypeRequiredDescription
jobIdstringYesRecurring job identifier

Example

DELETE https://api.replen.it/ingestion/google-cloud-storage/unregister?jobId=daily-transfer/3fa85f64-5717-4562-b3fc-2c963f66afa6

Success Response

{
  "Success": true,
  "Message": "Transfer unregistered.",
  "Data": {}
}

End-to-End Flow

1

Grant Bucket Access

Tenant grants Storage Object Viewer permission to Replenit service account.

2

Prepare Dataset Files

Place datasets into configured folder paths. Example structure:

customers/
products/
orders/
customers/Historical/
orders/Historical/
3

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.

4

Register Transfer Job

Call one of:

  • /register/historical-transfer
  • /register/daily-transfer
  • /register/hourly-transfer
5

Background Processing

Replenit ingestion engine:

  1. 1Scans configured folder paths
  2. 2Validates records
  3. 3Applies upsert semantics
  4. 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.

DatasetAPI EquivalentDocumentation
CustomersPOST /customers/{tenantId}Customers API
OrdersPOST /orders/{tenantId}Orders API
ProductsPOST /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

Email Support