PHPackages                             niranjannsahoo/odkcentralapi - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. niranjannsahoo/odkcentralapi

ActiveLibrary[API Development](/categories/api)

niranjannsahoo/odkcentralapi
============================

odk central api use in laravel project

1.0.0(1y ago)13MITPHP

Since Dec 10Pushed 9mo ago1 watchersCompare

[ Source](https://github.com/niranjannsahoo/odkcentralapi)[ Packagist](https://packagist.org/packages/niranjannsahoo/odkcentralapi)[ RSS](/packages/niranjannsahoo-odkcentralapi/feed)WikiDiscussions main Synced today

READMEChangelogDependenciesVersions (2)Used By (0)

ODKCENTRAL API
==============

[](#odkcentral-api)

**This is a community project and not an official Laravel one**

ODK CENTRAL-API is a simple wrapper around the ODK Central API that makes working with its endpoints a breeze! To get more informations about the API see [https://odkcentral.docs.apiary.io/](https://odkcentral.docs.apiary.io/#)

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require niranjannsahoo/odkcentralapi
```

Configuration
-------------

[](#configuration)

Publish the config of the package.

```
php artisan vendor:publish --provider="Niranjannsahoo\Odkcentralapi\Providers\OdkCentralApiServiceProvider" --tag=config
```

The following config will be published to config/odkcentralapi.php.

```
return [

    /*
    |--------------------------------------------------------------------------
    | ODK Central API url
    |--------------------------------------------------------------------------
    |
    | Here you may specify the default url for the API calls.
    | Example : https://private-anon-cecdde38ec-odkcentral.apiary-mock.com/v1
    |
    */

    'api_url' => env('ODK_API_URL'),

    /*
    |--------------------------------------------------------------------------
    | ODK Central Authentification
    |--------------------------------------------------------------------------
    |
    | An administrator user of your ODK Central app.
    |
    */

    'user_email' => env('ODK_USER_EMAIL'),

    'user_password' => env('ODK_USER_PASSWORD'),

];
```

Set the `ODK_API_URL`, `ODK_USER_EMAIL` and `ODK_USER_PASSWORD` of your [ODK Central App](https://docs.getodk.org/getting-started/) in your `.env` file.

```
ODK_API_URL="https://your_host.com/v1"
ODK_USER_EMAIL=your_email
ODK_USER_PASSWORD=your_password

```

Don't forget to run `php artisan config:clear`

If you change your crendentials later you will also have to run `php artisan cache:clear`. The authentification token is cached for 3600 seconds.

Usage direct one api call
-------------------------

[](#usage-direct-one-api-call)

```
namespace App\Http\Controllers;

use Niranjannsahoo\Odkcentralapi\OdkCentralApi;

class SomeController
{
    public function testOdk()
    {
      $odk = new OdkCentralApi;
      $data=['parameters'=>['projectId'=>2,'name'=>'members']];
      $project = $odk->request('get','projects/{projectId}',$data);
      dd($project);
    }
}
```

Usage with methods :

```
namespace App\Http\Controllers;

use Niranjannsahoo\Odkcentralapi\OdkCentralApi;

class SomeController
{
    public function returnFormFields($projectId, $xmlFormId)
    {
      $fields = OdkCentral::projects($projectId)->forms($xmlFormId)->fields()->get();
      dd($fields);
    }
}
```

### [Users](https://odkcentral.docs.apiary.io/#reference/accounts-and-users/users)

[](#users)

```
Features
✅ User Management

// List all users
$users = $this->odk->user()->listUsers();

// Create a new user
$data = ['params' => ['email' => 'demo@example.org', 'password' => '********']];
$users = $this->odk->user()->create($data);

// Get user details
$data = ['parameters' => ['actorId' => 106]];
$user = $this->odk->user()->details($data);

// Delete a user
$data = ['parameters' => ['actorId' => 106]];
$result = $this->odk->user()->delete($data);

// Modify user
$data = ['parameters'=>['actorId'=>106],'params'=>['email'=>'new@example.org','displayName'=>'New Name']];
$user = $this->odk->user()->modify($data);

// Get current user
$current = $this->odk->user()->current(true);

// Change password
$data=['parameters'=>['actorId'=>106],'params'=>['old'=>'oldPass','new'=>'newPass']];
$result = $this->odk->user()->password($data);

// Initiate password reset
$data=['params'=>['email'=>'demo@example.org'],'query'=>['invalidate'=>true]];
$result = $this->odk->user()->initiate($data);

✅ App Users

// List app users in a project
$data=['parameters'=>['projectId'=>3]];
$users = $this->odk->user()->appuser()->listAppUsers($data);

// Create app user
$data=['parameters'=>['projectId'=>3],'params'=>['displayName'=>'demoappuser']];
$user = $this->odk->user()->appuser()->createAppUser($data);

// Delete app user
$data=['parameters'=>['projectId'=>3,'id'=>1]];
$result = $this->odk->user()->appuser()->deleteAppUser($data);

✅ Roles & Assignments

// List roles
$roles = $this->odk->user()->role()->listRoles();

// Role details
$data=['parameters'=>['id'=>2]];
$role = $this->odk->user()->role()->getRoleDetails($data);

// List all assignments
$assignments = $this->odk->user()->assignment()->listAssignments([],true);

// Assignments by role
$data=['parameters'=>['roleId'=>2]];
$list = $this->odk->user()->assignment()->assignmentsByRole($data);

// Assign role
$data=['parameters'=>['roleId'=>2,'actorId'=>14]];
$result = $this->odk->user()->assignment()->assignRole($data);

// Unassign role
$data=['parameters'=>['roleId'=>2,'actorId'=>14]];
$result = $this->odk->user()->assignment()->unassignRole($data);

✅ Projects

// List projects
$data=['params'=>['forms'=>'true','datasets'=>'true']];
$projects = $this->odk->project()->listProjects($data,true);

// Create project
$data=['params'=>['name'=>'Test Project']];
$project = $this->odk->project()->createProject($data);

// Project details
$data=['parameters'=>['id'=>22],'headers'=>['X-Extended-Metadata'=>'true']];
$project = $this->odk->project()->getProjectDetails($data);

// Update project
$data=['parameters'=>['id'=>22],'params'=>['name'=>'New Project','description'=>'Desc']];
$result = $this->odk->project()->updateProject($data);

// Update with forms + assignments
$data=['parameters'=>['id'=>22],'params'=>['name'=>'New Project Name','forms'=>[/*...*/]]];
$result = $this->odk->project()->updateProjectDetails($data);

// Delete project
$data=['parameters'=>['id'=>22]];
$result = $this->odk->project()->deleteProject($data);

// Enable encryption
$data=['parameters'=>['id'=>22],'params'=>['passphrase'=>'secret','hint'=>'my key']];
$result = $this->odk->project()->enableEncryption($data);

// List project assignments
$data=['parameters'=>['projectId'=>3]];
$assignments = $this->odk->project()->assignment()->listAssignments($data);

// Assign actor to form
$data=['parameters'=>['projectId'=>3,'xmlFormId'=>'formId','actorId'=>14]];
$result = $this->odk->project()->assignment()->assignActor($data);

✅ Forms

// List forms
$data=['parameters'=>['projectId'=>2],'params'=>['deleted'=>'true']];
$forms = $this->odk->form()->listForms($data,true);

// Upload new form
$data=['parameters'=>['projectId'=>2],'query'=>['ignoreWarnings'=>'false','publish'=>'false']];
$file = public_path('form.xlsx');
$form = $this->odk->form()->createForm($data, $file);

// Form details
$data=['parameters'=>['projectId'=>2,'xmlFormId'=>'household']];
$form = $this->odk->form()->details($data);

✅ OData

// Form OData service
$data=['parameters'=>['projectId'=>3,'xmlFormId'=>'fieldvisit_wassan']];
$service = $this->odk->odata()->formservice($data);

// Form submissions
$data=['parameters'=>['projectId'=>3,'xmlFormId'=>'fieldvisit_wassan','table'=>'Submissions'],'params'=>['$top'=>2]];
$data = $this->odk->odata()->formdata($data);

// Form metadata
$data=['parameters'=>['projectId'=>3,'xmlFormId'=>'fieldvisit_wassan']];
$meta = $this->odk->odata()->formmetadata($data);

// Download submission file
$data=['parameters'=>['projectId'=>3,'xmlFormId'=>'form','instanceId'=>'uuid:123','filename'=>'photo.jpg']];
$file = $this->odk->odata()->download($data);

// Dataset service
$data=['parameters'=>['projectId'=>3,'datasetName'=>'blocks']];
$ds = $this->odk->odata()->datasetservice($data);

// Dataset metadata
$data=['parameters'=>['projectId'=>3,'datasetName'=>'blocks']];
$meta = $this->odk->odata()->datasetmetadata($data);

// Dataset data
$data=['parameters'=>['projectId'=>3,'datasetName'=>'blocks'],'params'=>['$top'=>2]];
$data = $this->odk->odata()->datasetdata($data);

// Draft service
$data=['parameters'=>['projectId'=>2,'xmlFormId'=>'fieldvisit']];
$draft = $this->odk->odata()->draftservice($data);

// Draft metadata
$data=['parameters'=>['projectId'=>2,'xmlFormId'=>'fieldvisit']];
$draft = $this->odk->odata()->draftmetadata($data);

// Draft submissions
$data=['parameters'=>['projectId'=>2,'xmlFormId'=>'fieldvisit','table'=>'Submissions'],'params'=>['$top'=>2]];
$draft = $this->odk->odata()->draftdata($data);

### Testing

```bash
composer test
```

### Changelog

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

Credits
-------

[](#credits)

- [Niranjan Sahoo](https://github.com/niranjannsahoo)
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

Laravel Package Boilerplate
---------------------------

[](#laravel-package-boilerplate)

This package was generated using the [Laravel Package Boilerplate](https://laravelpackageboilerplate.com).

###  Health Score

26

—

LowBetter than 41% of packages

Maintenance48

Moderate activity, may be stable

Popularity5

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity39

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

571d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/18324138?v=4)[Niranjan Sahoo](/maintainers/niranjannsahoo)[@niranjannsahoo](https://github.com/niranjannsahoo)

---

Top Contributors

[![niranjannsahoo](https://avatars.githubusercontent.com/u/18324138?v=4)](https://github.com/niranjannsahoo "niranjannsahoo (8 commits)")

### Embed Badge

![Health badge](/badges/niranjannsahoo-odkcentralapi/health.svg)

```
[![Health](https://phpackages.com/badges/niranjannsahoo-odkcentralapi/health.svg)](https://phpackages.com/packages/niranjannsahoo-odkcentralapi)
```

###  Alternatives

[exsyst/swagger

A php library to manipulate Swagger specifications

35916.4M7](/packages/exsyst-swagger)[hubspot/api-client

Hubspot API client

24016.2M20](/packages/hubspot-api-client)[pocketmine/bedrock-protocol

An implementation of the Minecraft: Bedrock Edition protocol in PHP

172445.0k15](/packages/pocketmine-bedrock-protocol)[botman/driver-telegram

Telegram driver for BotMan

93459.5k6](/packages/botman-driver-telegram)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
