runapi-ai / core
RunAPI core Composer package for PHP applications
Package info
pkg:composer/runapi-ai/core
Requires
- php: >=8.2
- guzzlehttp/guzzle: ^7.10
- guzzlehttp/psr7: ^2.8
- psr/http-client: ^1.0
- psr/http-factory: ^1.1
- psr/http-message: ^1.1 || ^2.0
Requires (Dev)
- phpunit/phpunit: ^11.5
This package is auto-updated.
Last update: 2026-08-21 04:22:59 UTC
README
The RunAPI Core PHP SDK provides shared authentication, PSR HTTP transport, retry, polling, typed errors, response objects, Files, Uploads, and account primitives for RunAPI PHP packages. Application code should normally install a concrete model package such as runapi-ai/wan; install runapi-ai/core directly only when building shared PHP SDK tooling.
Install
composer require runapi-ai/core
Requirements
- PHP 8.2 or newer
- Composer
- A PSR-18 / PSR-17 / PSR-7 compatible HTTP stack
The package includes a Guzzle-based default HTTP stack and also accepts custom PSR implementations.
Request Identifiers And Safe Task Creation
Task-creation calls accept an optional opaque Idempotency-Key up to 512 characters. Generate one value per logical task and reuse it only with identical input after an unknown result. Reusing the value with different input returns 409 Conflict; do not derive it from X-Client-Request-Id.
use RunApi\Core\RequestOptions; $options = new RequestOptions(headers: [ 'X-Client-Request-Id' => 'order-123', 'Idempotency-Key' => 'opaque-logical-task-123', ]);
Persistent Files And Multipart Uploads
Every Provider Client exposes $client->files and $client->uploads. The existing $client->files->create() method still returns a temporary URL.
$file = $client->files->createFile(['file' => './knowledge.pdf']); $content = $client->files->content($file->id); $upload = $client->uploads->create([ 'bytes' => 1048576, 'filename' => 'archive.bin', 'mime_type' => 'application/octet-stream', ]); $part = $client->uploads->addPart($upload->id, './archive.part-01'); $completed = $client->uploads->complete($upload->id, [$part->id]);
Use list(), retrieve(), and deleteFile() for the remaining File lifecycle. See https://runapi.ai/docs/resources/files for limits and REST examples.
Live Pricing
Every Provider Client exposes a typed $client->pricing resource. Read the current schedule or request a reservation estimate before creating a task; schedules work without an API key, while quotes that reference an account-owned source task use the configured API key.
$schedule = $client->pricing->list(service: 'flux'); $quote = $client->pricing->quote('flux', 'text_to_image', 'flux-2-klein', ['prompt' => 'A glass observatory']);
- Live pricing API: https://runapi.ai/models
Links
- SDK docs: https://runapi.ai/docs/resources/sdks
- Model catalog: https://runapi.ai/models
- GitHub repository: https://github.com/runapi-ai/core-php
- Multi-language SDK repository: https://github.com/runapi-ai/core-sdk
License
Licensed under the Apache License, Version 2.0.