---
title: "Get Upload Presigned URL"
method: POST
path: "/gcc/v1/ffms/external/transaction/{gid}/upload-presigned"
tags: ["MCA"]
---

# Get Upload Presigned URL

`POST /gcc/v1/ffms/external/transaction/{gid}/upload-presigned`

## Request

- Base URL: `https://gcc.prod.payglocal.in`
- URL: `https://gcc.prod.payglocal.in/gcc/v1/ffms/external/transaction/{gid}/upload-presigned`
- Auth: API key in header `x-gl-auth`
- TypeScript: <https://skmtc.dev/payglocal/apis/payglocal-api/docs/gcc/v1/ffms/external/transaction/:gid/upload-presigned/post.ts> (a function with typed inputs; its response is checked against the schema)

Generates a presigned upload URL for attaching a supporting document (e.g. invoice)
to an FFMS transaction. Upload the file to the returned URL via HTTP PUT.

## Path parameters

- `gid` string, required

## Request body

- DocumentUploadRequest
  - `amount` string, required: Transaction amount.
  - `currency` string, required: ISO 4217 currency code.
  - `invoiceType` string, required: Type of document being uploaded.
  - `paymentType` string, required: Payment type classification.
  - `merchantId` string, required: Merchant identifier. Must match the transaction.
  - `customerFullName` string: Full name of the customer (3–150 characters).
  - `shippingDetails` string: Shipping information (1–120 characters).
  - `invoiceNumber` string: Invoice reference number (1–100 characters).
  - `purposeCode` string: Purpose code for remittance reporting.
  - `fxRate` string: Foreign exchange rate applied.
  - `fileName` string, required: File name including extension (extension max 10 characters).

## Response `200`

Presigned URL generated successfully.

- object
  - `gid` string: Transaction identifier.
  - `status` string
  - `message` string
  - `timestamp` string
  - `reasonCode` string
  - `presignedUrl` string, uri: Temporary URL — upload the file immediately via HTTP PUT.
  - `fileName` string
  - `invoiceType` string
  - `paymentType` string
  - `data` object, nullable
  - `errors` object, nullable

## Other responses

- `400`: Validation error — missing or invalid fields.
- `401`: Authentication failed — invalid API key or digest.
- `403`: The onboardingId does not belong to the authenticated partner.
- `404`: The specified onboardingId does not exist.
- `409`: Document already uploaded for this transaction.
- `500`: Internal Server Error.

---

[API](https://skmtc.dev/payglocal/apis/payglocal-api.md) - [All operations](https://skmtc.dev/payglocal/apis/payglocal-api/llms.txt) - [OpenAPI document](https://skmtc.dev/payglocal/apis/payglocal-api/revisions/498446abc56d?raw)
