Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.fluveo.com/llms.txt

Use this file to discover all available pages before exploring further.

This guide walks you through creating and configuring a marketplace app from scratch.

Step 1: Register your app

Create an app with POST /v1/apps. At minimum, provide a name. You can fill in the remaining fields before submitting for review.
curl -X POST https://api.leanrails.com/v1/apps \
  -u "sk_test_xxx:" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Inventory Sync Pro",
    "description": "Automatically syncs inventory levels between your warehouse and Fluveo store.",
    "short_description": "Real-time inventory synchronization",
    "homepage_url": "https://inventorysync.example.com",
    "privacy_policy_url": "https://inventorysync.example.com/privacy",
    "support_url": "https://inventorysync.example.com/support",
    "distribution_type": "public",
    "category": "inventory",
    "requested_scopes": [
      "read_products",
      "read_inventory",
      "write_inventory"
    ],
    "redirect_uris": [
      "https://inventorysync.example.com/oauth/callback"
    ],
    "webhook_url": "https://inventorysync.example.com/webhooks",
    "webhook_events": [
      "inventory_level.updated",
      "product.created",
      "product.updated"
    ]
  }'
Response:
{
  "id": "app_1abc2def3ghi",
  "object": "app",
  "developer_id": "merch_xyz",
  "name": "Inventory Sync Pro",
  "slug": "inventory-sync-pro-a1b2c3",
  "description": "Automatically syncs inventory levels between your warehouse and Fluveo store.",
  "short_description": "Real-time inventory synchronization",
  "distribution_type": "public",
  "status": "draft",
  "requested_scopes": ["read_products", "read_inventory", "write_inventory"],
  "redirect_uris": ["https://inventorysync.example.com/oauth/callback"],
  "webhook_url": "https://inventorysync.example.com/webhooks",
  "webhook_secret": "whsec_app_abc123...",
  "version": "0.0.0",
  "install_count": 0,
  "livemode": false,
  "created": 1710000000,
  "updated": 1710000000
}
The webhook_secret is only returned when the app is created. Store it securely — you will need it to verify webhook deliveries to your app.

Step 2: Update your app

You can update any field on a draft app with POST /v1/apps/:id:
curl -X POST https://api.leanrails.com/v1/apps/app_1abc2def3ghi \
  -u "sk_test_xxx:" \
  -H "Content-Type: application/json" \
  -d '{
    "icon_url": "https://inventorysync.example.com/icon.png",
    "version": "1.0.0"
  }'

Step 3: Generate OAuth credentials

Generate a client_id and client_secret for your app. These are used in the OAuth authorization code flow.
curl -X POST https://api.leanrails.com/v1/apps/app_1abc2def3ghi/credentials \
  -u "sk_test_xxx:"
Response:
{
  "object": "oauth_client",
  "id": "oauthcli_1abc2def3ghi",
  "app_id": "app_1abc2def3ghi",
  "client_id": "ca_live_abc123def456",
  "client_secret": "cs_live_secret_full_value_shown_once",
  "client_secret_prefix": "cs_live_sec...",
  "created": 1710000100
}
The client_secret is shown exactly once in this response. Store it in a secure secrets manager. If lost, generate a new set of credentials.
You can list your existing credentials (without the full secret) at any time:
curl https://api.leanrails.com/v1/apps/app_1abc2def3ghi/credentials \
  -u "sk_test_xxx:"

Step 4: List your apps

Retrieve all apps you have created:
curl "https://api.leanrails.com/v1/apps?limit=10" \
  -u "sk_test_xxx:"

Step 5: Retrieve app details

curl https://api.leanrails.com/v1/apps/app_1abc2def3ghi \
  -u "sk_test_xxx:"

Step 6: Submit for review

Once your app has all required fields, submit it for marketplace review:
curl -X POST https://api.leanrails.com/v1/apps/app_1abc2def3ghi/submit_for_review \
  -u "sk_test_xxx:"
The app status changes from draft to in_review. See App Review Guidelines for what reviewers check.
You can only submit apps in draft or rejected status. If your app was rejected, fix the issues and resubmit.

Required fields for review

The following fields must be set before submission:
FieldRequired for
nameAll apps
descriptionAll apps
redirect_uris (at least one)All apps
requested_scopes (at least one)All apps
privacy_policy_urlPublic apps only

Deleting a draft app

You can delete an app only while it is in draft status:
curl -X DELETE https://api.leanrails.com/v1/apps/app_1abc2def3ghi \
  -u "sk_test_xxx:"
{
  "id": "app_1abc2def3ghi",
  "object": "app",
  "deleted": true
}

Next steps