cURL
curl -sS -X POST "$FLUIDE_BASE_URL/api/v1/invoices/string/resend" \
-H "Authorization: Bearer $FLUIDE_ACCESS_TOKEN" \
-H "X-Fluide-Api-Key: $FLUIDE_API_KEY" \
-H "X-Fluide-Client-Id: fluide-developer" \
-H "authorization: your_authorization" \
-H "X-Workspace-Id: $FLUIDE_WORKSPACE_ID" \
-H "X-Acting-Company-Id: $FLUIDE_COMPANY_ID"const baseUrl = process.env.FLUIDE_BASE_URL;
const response = await fetch(`${baseUrl}/api/v1/invoices/string/resend`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.FLUIDE_ACCESS_TOKEN}`,
'X-Fluide-Api-Key': process.env.FLUIDE_API_KEY,
'X-Fluide-Client-Id': 'fluide-developer',
'authorization': 'your_authorization',
'X-Workspace-Id': process.env.FLUIDE_WORKSPACE_ID,
'X-Acting-Company-Id': process.env.FLUIDE_COMPANY_ID,
},
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());import os
import requests
base_url = os.environ["FLUIDE_BASE_URL"]
headers = {
"Authorization": f"Bearer {os.environ['FLUIDE_ACCESS_TOKEN']}",
"X-Fluide-Api-Key": os.environ["FLUIDE_API_KEY"],
"X-Fluide-Client-Id": "fluide-developer",
"authorization": "your_authorization",
"X-Workspace-Id": os.environ["FLUIDE_WORKSPACE_ID"],
"X-Acting-Company-Id": os.environ["FLUIDE_COMPANY_ID"],
}
response = requests.post(
f"{base_url}/api/v1/invoices/string/resend",
headers=headers,
timeout=30,
)
response.raise_for_status()
print(response.json())import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
String baseUrl = System.getenv("FLUIDE_BASE_URL");
HttpClient client = HttpClient.newHttpClient();
HttpRequest.Builder builder = HttpRequest.newBuilder()
.uri(URI.create(baseUrl + "/api/v1/invoices/string/resend"))
.header("Authorization", "Bearer " + System.getenv("FLUIDE_ACCESS_TOKEN"))
.header("X-Fluide-Api-Key", System.getenv("FLUIDE_API_KEY"))
.header("X-Fluide-Client-Id", "fluide-developer")
.header("authorization", "your_authorization")
.header("X-Workspace-Id", System.getenv("FLUIDE_WORKSPACE_ID"))
.header("X-Acting-Company-Id", System.getenv("FLUIDE_COMPANY_ID"))
.POST(HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(builder.build(), HttpResponse.BodyHandlers.ofString());
if (response.statusCode() >= 400) throw new RuntimeException("HTTP " + response.statusCode() + ": " + response.body());
System.out.println(response.body());<?php
$baseUrl = getenv("FLUIDE_BASE_URL");
$ch = curl_init($baseUrl . "/api/v1/invoices/string/resend");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('FLUIDE_ACCESS_TOKEN'),
'X-Fluide-Api-Key: ' . getenv('FLUIDE_API_KEY'),
'X-Fluide-Client-Id: fluide-developer',
'authorization: your_authorization',
'X-Workspace-Id: ' . getenv('FLUIDE_WORKSPACE_ID'),
'X-Acting-Company-Id: ' . getenv('FLUIDE_COMPANY_ID'),
],
]);
$response = curl_exec($ch);
if ($response === false) throw new RuntimeException(curl_error($ch));
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status >= 400) throw new RuntimeException("HTTP $status: $response");
echo $response;{
"success": true,
"message": "Operation completed successfully",
"data": {}
}{
"organizationId": "<string>",
"companyId": "<string>",
"invoiceNumber": "<string>",
"customerId": "<string>",
"projectId": "<string>",
"clientId": "<string>",
"issueDate": "2023-11-07T05:31:56Z",
"dueDate": "2023-11-07T05:31:56Z",
"subtotal": 123,
"taxAmount": 123,
"total": 123,
"currency": "<string>",
"amountPaid": 123,
"balanceDue": 123,
"postedAt": "2023-11-07T05:31:56Z",
"postedBy": "<string>",
"postedJournalEntryId": "<string>",
"notes": "<string>",
"sourceDocumentIds": [
"<string>"
],
"sentByEmail": "<string>",
"lineItems": [
{
"invoiceId": "<string>",
"invoice": "<unknown>",
"lineNumber": 123,
"description": "<string>",
"quantity": 123,
"unitPrice": 123,
"discountAmount": 123,
"taxAmount": 123,
"lineTotal": 123,
"glAccountId": "<string>",
"taxCodeId": "<string>",
"id": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"deletedAt": "2023-11-07T05:31:56Z"
}
],
"allocations": [
{
"invoiceId": "<string>",
"invoice": "<unknown>",
"fluidePayTransactionId": "<string>",
"externalReference": "<string>",
"evidenceDocumentIds": [
"<string>"
],
"allocatedAmount": 123,
"currency": "<string>",
"allocatedAt": "2023-11-07T05:31:56Z",
"allocatedBy": "<string>",
"memo": "<string>",
"id": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"deletedAt": "2023-11-07T05:31:56Z"
}
],
"creditNotes": [
{
"organizationId": "<string>",
"companyId": "<string>",
"creditNoteNumber": "<string>",
"invoiceId": "<string>",
"invoice": "<unknown>",
"amount": 123,
"currency": "<string>",
"reason": "<string>",
"postedAt": "2023-11-07T05:31:56Z",
"postedBy": "<string>",
"postedJournalEntryId": "<string>",
"id": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"deletedAt": "2023-11-07T05:31:56Z"
}
],
"id": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"deletedAt": "2023-11-07T05:31:56Z"
}{
"success": false,
"message": "Validation failed",
"code": "VALIDATION_FAILED",
"statusCode": 400,
"timestamp": "2026-06-03T12:00:00.000Z",
"errors": {
"from": [
"from must be a valid date"
]
}
}{
"success": false,
"message": "Validation failed",
"code": "VALIDATION_FAILED",
"statusCode": 400,
"timestamp": "2026-06-03T12:00:00.000Z",
"errors": {
"from": [
"from must be a valid date"
]
}
}{
"success": false,
"message": "Validation failed",
"code": "VALIDATION_FAILED",
"statusCode": 400,
"timestamp": "2026-06-03T12:00:00.000Z",
"errors": {
"from": [
"from must be a valid date"
]
}
}{
"success": false,
"message": "Validation failed",
"code": "VALIDATION_FAILED",
"statusCode": 400,
"timestamp": "2026-06-03T12:00:00.000Z",
"errors": {
"from": [
"from must be a valid date"
]
}
}Invoices
Resend invoice email to customer (rotates pay link)
POST
/
api
/
v1
/
invoices
/
{id}
/
resend
cURL
curl -sS -X POST "$FLUIDE_BASE_URL/api/v1/invoices/string/resend" \
-H "Authorization: Bearer $FLUIDE_ACCESS_TOKEN" \
-H "X-Fluide-Api-Key: $FLUIDE_API_KEY" \
-H "X-Fluide-Client-Id: fluide-developer" \
-H "authorization: your_authorization" \
-H "X-Workspace-Id: $FLUIDE_WORKSPACE_ID" \
-H "X-Acting-Company-Id: $FLUIDE_COMPANY_ID"const baseUrl = process.env.FLUIDE_BASE_URL;
const response = await fetch(`${baseUrl}/api/v1/invoices/string/resend`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.FLUIDE_ACCESS_TOKEN}`,
'X-Fluide-Api-Key': process.env.FLUIDE_API_KEY,
'X-Fluide-Client-Id': 'fluide-developer',
'authorization': 'your_authorization',
'X-Workspace-Id': process.env.FLUIDE_WORKSPACE_ID,
'X-Acting-Company-Id': process.env.FLUIDE_COMPANY_ID,
},
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());import os
import requests
base_url = os.environ["FLUIDE_BASE_URL"]
headers = {
"Authorization": f"Bearer {os.environ['FLUIDE_ACCESS_TOKEN']}",
"X-Fluide-Api-Key": os.environ["FLUIDE_API_KEY"],
"X-Fluide-Client-Id": "fluide-developer",
"authorization": "your_authorization",
"X-Workspace-Id": os.environ["FLUIDE_WORKSPACE_ID"],
"X-Acting-Company-Id": os.environ["FLUIDE_COMPANY_ID"],
}
response = requests.post(
f"{base_url}/api/v1/invoices/string/resend",
headers=headers,
timeout=30,
)
response.raise_for_status()
print(response.json())import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
String baseUrl = System.getenv("FLUIDE_BASE_URL");
HttpClient client = HttpClient.newHttpClient();
HttpRequest.Builder builder = HttpRequest.newBuilder()
.uri(URI.create(baseUrl + "/api/v1/invoices/string/resend"))
.header("Authorization", "Bearer " + System.getenv("FLUIDE_ACCESS_TOKEN"))
.header("X-Fluide-Api-Key", System.getenv("FLUIDE_API_KEY"))
.header("X-Fluide-Client-Id", "fluide-developer")
.header("authorization", "your_authorization")
.header("X-Workspace-Id", System.getenv("FLUIDE_WORKSPACE_ID"))
.header("X-Acting-Company-Id", System.getenv("FLUIDE_COMPANY_ID"))
.POST(HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(builder.build(), HttpResponse.BodyHandlers.ofString());
if (response.statusCode() >= 400) throw new RuntimeException("HTTP " + response.statusCode() + ": " + response.body());
System.out.println(response.body());<?php
$baseUrl = getenv("FLUIDE_BASE_URL");
$ch = curl_init($baseUrl . "/api/v1/invoices/string/resend");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('FLUIDE_ACCESS_TOKEN'),
'X-Fluide-Api-Key: ' . getenv('FLUIDE_API_KEY'),
'X-Fluide-Client-Id: fluide-developer',
'authorization: your_authorization',
'X-Workspace-Id: ' . getenv('FLUIDE_WORKSPACE_ID'),
'X-Acting-Company-Id: ' . getenv('FLUIDE_COMPANY_ID'),
],
]);
$response = curl_exec($ch);
if ($response === false) throw new RuntimeException(curl_error($ch));
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status >= 400) throw new RuntimeException("HTTP $status: $response");
echo $response;{
"success": true,
"message": "Operation completed successfully",
"data": {}
}{
"organizationId": "<string>",
"companyId": "<string>",
"invoiceNumber": "<string>",
"customerId": "<string>",
"projectId": "<string>",
"clientId": "<string>",
"issueDate": "2023-11-07T05:31:56Z",
"dueDate": "2023-11-07T05:31:56Z",
"subtotal": 123,
"taxAmount": 123,
"total": 123,
"currency": "<string>",
"amountPaid": 123,
"balanceDue": 123,
"postedAt": "2023-11-07T05:31:56Z",
"postedBy": "<string>",
"postedJournalEntryId": "<string>",
"notes": "<string>",
"sourceDocumentIds": [
"<string>"
],
"sentByEmail": "<string>",
"lineItems": [
{
"invoiceId": "<string>",
"invoice": "<unknown>",
"lineNumber": 123,
"description": "<string>",
"quantity": 123,
"unitPrice": 123,
"discountAmount": 123,
"taxAmount": 123,
"lineTotal": 123,
"glAccountId": "<string>",
"taxCodeId": "<string>",
"id": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"deletedAt": "2023-11-07T05:31:56Z"
}
],
"allocations": [
{
"invoiceId": "<string>",
"invoice": "<unknown>",
"fluidePayTransactionId": "<string>",
"externalReference": "<string>",
"evidenceDocumentIds": [
"<string>"
],
"allocatedAmount": 123,
"currency": "<string>",
"allocatedAt": "2023-11-07T05:31:56Z",
"allocatedBy": "<string>",
"memo": "<string>",
"id": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"deletedAt": "2023-11-07T05:31:56Z"
}
],
"creditNotes": [
{
"organizationId": "<string>",
"companyId": "<string>",
"creditNoteNumber": "<string>",
"invoiceId": "<string>",
"invoice": "<unknown>",
"amount": 123,
"currency": "<string>",
"reason": "<string>",
"postedAt": "2023-11-07T05:31:56Z",
"postedBy": "<string>",
"postedJournalEntryId": "<string>",
"id": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"deletedAt": "2023-11-07T05:31:56Z"
}
],
"id": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"deletedAt": "2023-11-07T05:31:56Z"
}{
"success": false,
"message": "Validation failed",
"code": "VALIDATION_FAILED",
"statusCode": 400,
"timestamp": "2026-06-03T12:00:00.000Z",
"errors": {
"from": [
"from must be a valid date"
]
}
}{
"success": false,
"message": "Validation failed",
"code": "VALIDATION_FAILED",
"statusCode": 400,
"timestamp": "2026-06-03T12:00:00.000Z",
"errors": {
"from": [
"from must be a valid date"
]
}
}{
"success": false,
"message": "Validation failed",
"code": "VALIDATION_FAILED",
"statusCode": 400,
"timestamp": "2026-06-03T12:00:00.000Z",
"errors": {
"from": [
"from must be a valid date"
]
}
}{
"success": false,
"message": "Validation failed",
"code": "VALIDATION_FAILED",
"statusCode": 400,
"timestamp": "2026-06-03T12:00:00.000Z",
"errors": {
"from": [
"from must be a valid date"
]
}
}Authorizations
Access token JWT. Use as Authorization: Bearer . In the API playground, paste the JWT only.
Developer API key (fl_dev_...). Required on every API call with a machine access token.
First-party client audience. Must match the fluide_client_id claim on the JWT. Use fluide-developer for Connect.
Headers
Partner / ISV only: UUID of the workspace that owns the client company. Required together with X-Acting-Company-Id when scoping product APIs to a merchant. See /getting-started/multi-tenancy.
Partner / ISV only: UUID of the client company to act on. Must belong to the workspace in X-Workspace-Id.
Path Parameters
⌘I